Skip to content

About

Self-healing dashboard for a fleet of local dev apps: auto-provisions Caddy proxies + macOS LaunchAgents, health-checks, and walks a restart-escalation to keep them up.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

Local Apps

Self-healing dashboard for a fleet of local dev apps.

Register an app once. Local Apps assigns it a port, writes its Caddy reverse proxy and macOS LaunchAgent, health-checks it every 30 seconds, restarts it when it crashes, and exposes it by name over LAN and Tailscale. One page instead of a wall of npm run dev tabs. Apps you are not using stay parked at zero cost until you start them; the monitor itself is 1 Node process with 2 runtime dependencies.

Local Apps dashboard

License: MIT Node.js Dependencies SQLite

Features

  • One page - live status over SSE, with LAN, Tailscale, and production links, plus a QR code for your phone.
  • Zero-config onboarding - POST /api/apps with an id; port, <id>.localhost proxy, and LaunchAgent are provisioned for you.
  • Self-healing - a down app walks 5 levels: kickstart, port-kill and reload, log-driven fixes, an optional local AI agent, and a circuit breaker that parks a flapping app instead of looping.
  • Multi-machine - a hub runs the bots; agent machines only report status.
  • Fails closed off-box - loopback is trusted; any other caller is denied mutations and log reads unless it sends x-local-apps-token.

Quick start

Node 22 or newer (.nvmrc is set; nvm use picks it up).

git clone https://github.com/bunlongheng/local-apps.git
cd local-apps
npm install
npm run dev

Open http://localhost:9875. With no apps.config.json it seeds 2 demo apps. Register your own:

curl -X POST http://localhost:9875/api/apps \
  -H "Content-Type: application/json" \
  -d '{"id":"hello-app","localPath":"/path/to/hello-app"}'

Caddy proxies and LaunchAgents are macOS features (Homebrew Caddy). Elsewhere the dashboard and API run in monitoring mode.

How it works

Local Apps architecture

Who opens it, the hub process, the host, the apps it supervises, and the L1 to L5 healing ladder. Click through for the interactive version.

One Node 22 process on node:http, no framework, no build step. server.js serves the vanilla-JS dashboard in public/ and owns the API, backed by SQLite. When an app goes down:

Level After Action
L1 detect launchctl kickstart
L2 90s kill the port, full reload
L3 180s read the log, npm install, clear stale build cache, restart
L4 300s optional: hand it to a local Claude Code CLI agent
L5 3 flaps in 2 min circuit breaker: park it OFF, re-arm when healthy

Hub extras

On the hub role only, 5 routes serve the owner's own workflow rather than the product: /api/tab-colors, /api/consistency, /api/app-profiles, /api/icon-sync, /api/capabilities. They read optional local files and repos; on an agent machine they are not registered.


bunlongheng.com LinkedIn Instagram Email


Built by Bunlong  ·  more apps

About

Self-healing dashboard for a fleet of local dev apps: auto-provisions Caddy proxies + macOS LaunchAgents, health-checks, and walks a restart-escalation to keep them up.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages