Infrastructure Overview
Everything James builds runs on a small fleet of synced machines plus a VPS. The guiding principle: everything should work from everywhere it possibly could. Tokens, scripts, configs — if a capability can run on the VPS and the Studio, it runs on both. No stranded capabilities.
The Fleet
Section titled “The Fleet”| Machine | Role | Where It Lives |
|---|---|---|
| MacBook Pro | Primary laptop | With James |
| Mac Studio | Desk workstation | Home office |
| Remote Mac | Dev workstation + OpenClaw agent | Home office (headless, VNC) |
| VPS (Hostinger) | Always-on services, Supabase, n8n, webhooks | Ubuntu 24.04 |
See Machines for IPs, SSH commands, and git identity tags.
Cross-Machine Sync
Section titled “Cross-Machine Sync”Three pieces, working together:
- pullall — Pulls every repo under
~/apps/and clones any new ones from GitHub. Run at session start. - gpush — Wraps
git pushso it automatically runspost-push-sync.shand syncs other machines over SSH. - Webhook receiver on the VPS — Listens for GitHub push events on port 9877, validates the HMAC-SHA256 signature, and runs
git pullon the matching repo. Self-updating, no SSH needed from the pushing machine.
Dev Server Port Map
Section titled “Dev Server Port Map”Each repo gets a distinct port — no conflicts, no guessing. Managed by ~/apps/cc/pop-it-open.py.
| Repo | Port | Framework |
|---|---|---|
| themarketingshow | 3100 | Next.js |
| mytechsupport | 3200 | Next.js |
| cascadewindowcleaning | 3300 | Next.js |
| youtube-clipseeker | 3400 | Next.js |
| gokartpark | 3500 | Next.js |
| allthingshandy | 4321 | Astro |
| life-score | 5173 | Vite + React |
Convention: Next.js repos use the 3xxx range in 100 increments. Astro and Vite keep framework defaults.
The VPS
Section titled “The VPS”Hostinger box, Ubuntu 24.04.3 LTS, 95 GB disk. Runs:
- Supabase stack (self-hosted) — Studio, Kong, Postgres, auth, storage, realtime, all via Docker. Exposed at
db.jameshurst.com. - n8n — workflow automation at
n8n.srv1249251.hstgr.cloud. - Webhook receiver — port 9877, self-updater for all synced repos.
- AI Assistant scanner — runs on a cron, uses
claude -pon the Max plan (no API cost). - Upwork Proposal Pro — systemd service, long-lived OAuth token.
More detail in the source of truth: ~/apps/cc/infrastructure-guide.md.