Collaborative web app for sketching, refining, and deploying AWS architectures. Phase 1 is a freeform whiteboard; on 80% vote it transitions to Phase 2 β a typed node graph (left) reconstructed from the sketch by Claude vision, plus a shared chat (right) where the agent can critique and edit the graph via tool-use. A second 80% vote deploys the graph to LocalStack via AWS CDK.
The repo also exposes a standalone /debug route for the whiteboard parser. It
captures a board snapshot, sends it to the configured vision model, validates the
returned compact infra schema, compiles it into the shared graph contract, asks
for workload requirements, and produces a staged deployment plan with explicit,
minimal inferred, and approval-gated upgrade resources.
shared/β types shared between client and server.web/β Vite + React SPA, served as a static bundle.server/β Fastify + Hocuspocus + Anthropic SDK + CDK runner (Docker).nginx/β vhost boilerplate foranishalle.comandlocalstack.anishalle.com.docker-compose.ymlβ backend + nginx + LocalStack, ready for the VPS.
npm install
npm run dev:localstack # :4566 LocalStack Community
npm run dev:server # :3000 HTTP, :3001 WS
npm run dev:web # :5173 (proxies /api β :3000, /collab β :3001)Set OPENROUTER_API_KEY to use OpenRouter or GOOGLE_API_KEY to use Gemini for /debug.
Set DEBUG_VISION_PROVIDER=gemini (default) to use gemini-2.5-flash, or DEBUG_VISION_PROVIDER=openrouter for OpenRouter.
Override GEMINI_MODEL to switch Gemini variants.
When running the backend locally, set LOCALSTACK_INTERNAL_URL=http://localhost:4566 and LOCALSTACK_PUBLIC_URL=http://localhost:4566.
The repo pins LocalStack to localstack/localstack:4.14.0 because the latest tag is currently not reliable for local community usage. Override LOCALSTACK_IMAGE if you need a different stable version.
Open http://localhost:5173 for the app, or http://localhost:5173/debug for
the standalone parser bench. The debug route now includes a workload questionnaire
that drives stage selection (prototype, mvp, growth, production) and
proposes approval-gated topology upgrades before synth/deploy.
For a quick end-to-end deploy smoke test:
curl -X POST http://localhost:3000/api/debug/deploy \
-H 'content-type: application/json' \
--data '{"mode":"deploy","graph":{"nodes":[{"id":"app","type":"External","label":"app","position":{"x":120,"y":120}},{"id":"ec2","type":"EC2","label":"ec2","position":{"x":540,"y":400}}],"edges":[{"id":"edge-1","source":"app","target":"ec2"}]}}'# on the Oracle Linux VPS:
git pull
cp .env.example .env # set ANTHROPIC_API_KEY etc.
npm install
npm run build --workspace=web
cp -r web/dist/* nginx/web-html/
docker compose up -d --buildMake sure DNS for anishalle.com and localstack.anishalle.com points at the VPS
and Let's Encrypt certs exist at /etc/letsencrypt/live/<host>/.