Industrial-themed terminal elevator with a Rust backend and xterm.js. A patched portable-pty makes it run on Android where node-pty cannot.
A full-stack terminal application disguised as an industrial elevator. Each "floor" is a different tool: Git viewer, Beads Board, terminals, dashboards. The Rust backend uses Axum for HTTP/WebSocket and a patched portable-pty crate to spawn real PTY sessions, including on ARM64 Android via Termux -- something node-pty simply cannot do. It works as a PWA on both desktop and mobile.
Axum (Rust) serves the web frontend and handles WebSocket connections to tmux-backed PTY sessions. The frontend uses xterm.js for terminal rendering with a custom industrial CSS theme.
The browser communicates with Axum over WebSocket. Axum spawns PTY sessions via a patched portable-pty, connecting them to tmux for session persistence. The elevator UI is pure CSS with animated doors and industrial theming.
Browser (xterm.js + Industrial CSS) | WebSocket (bidirectional) | Axum (Rust web server) | portable-pty (PATCHED for ARM64 Android) | PTY --- tmux sessions | +-- Elevator Floors: F1 Git Viewer F2 Git Graph F3 Beads Board F4 Terminals F5 Termux Dashboard F6 Log Viewer
Axum's tower-based middleware architecture is elegant. Rust's ownership model makes concurrent WebSocket handling safe by default. The compile-time guarantees are worth the learning curve.
Android's Termux environment has unique PTY requirements that node-pty cannot handle. Forking and patching portable-pty's system calls for ARM64 Linux unlocked true mobile terminal functionality.
Theming a developer tool as a physical elevator creates memorable UX. Animated doors, floor indicators, and mechanical sounds transform a utilitarian terminal multiplexer into something with personality.
Progressive Web Apps bridge the gap between web and native. A single codebase that installs as an app on both desktop Linux and Android Termux, with offline support and native-feeling interactions.