Selected work
Full-stack WebTypeScript · Express 5 · React 19 · MySQL 8

Signature Guestbook Remake

Real-time guestbook system with React dashboard, iPad collection app, Express API, MySQL backend, and orchestrated dev environment for the funeral services industry.

A full-stack remake of a signature collection guestbook for funeral services. The system includes a React web dashboard for agencies, an iPad app for on-site signature capture, a comprehensive Express backend with WebSocket real-time sync, MySQL storage, and a unified development orchestrator that spins up the entire stack with one command.

Role — Solo developer
  • TypeScript
  • Express 5
  • React 19
  • MySQL 8
  • WebSocket
  • Vite
  • Tailwind CSS
  • Turbo
  • Capacitor
  • Docker Compose

A complete overhaul of legacy guestbook infrastructure. The backend is an Express 5 server in TypeScript with a custom file-based routing system that auto-discovers handlers from the filesystem—static and dynamic routes, generic HTTP methods, and method-specific priority handlers all coexist. WebSocket connections carry real-time events (signature created/updated, service status changes, iPad presence updates) to connected clients, routed through a room-based pub-sub system. The database layer uses MySQL 8 with typed repositories, migrations, and adapter-based services for pluggable email, storage, payment, AI, and CRM backends.

The frontend spans three Vite apps: a dashboard for account management and service coordination, an iPad app (with Capacitor for iOS integration) for capturing signatures on-site, and a marketing site. All frontend packages share a Monorepo structure via Turbo with unified types and UI components. React Router 7 handles navigation, Tailwind CSS for styling, and a per-route permissions model enforces account-scoped and platform-level access control. The iPad app polyfills `crypto.randomUUID()` for LAN-over-HTTP contexts and can reach the backend directly via environment-based API URL configuration.

Development workflow is unified through a custom Node orchestrator (dev.mjs) that starts Docker (MySQL + phpMyAdmin), waits for health checks, spins up the backend and all three frontend dev servers in parallel, and multiplexes their colored output into a single terminal. The system supports split-mode deployment where the API and worker services run separately with WebSocket bridging via environment variables. Tests cover real-time sync, permission domains, WebSocket message handling, and signature workflows with Vitest.

What's notable
  • Custom file-based routing with method-specific priority handlers and dynamic segment matching — no decorators, no special framework syntax
  • Real-time multi-client WebSocket sync with room-based pub-sub, heartbeat health checks, and split-mode internal worker bridging
  • Three-app frontend monorepo (dashboard, iPad, marketing) sharing unified types, UI components, and API clients via Turbo workspaces
  • Pluggable service architecture (email, storage, payment, AI, CRM, voice, print adapters) swappable via environment config
  • Unified dev orchestrator that brings up Docker, backend, and three frontend dev servers with health checks and colored, multiplexed output in one terminal