Babul architecture
A web app for design version control. Staging is a demo on free plans: Vercel, Neon and Cloudflare R2, with no worker. Production is not deployed; it will be one small server for the web app and a Chromium worker. AI and payments are planned but not in the code.
last verified 2026-10-30
Known cost a month
₹0
Staging only, all on free plans. The domain, production and any bill actually read are missing.
Production, when it comes
₹0–600 / mo
The wiki's plan: Oracle free tier, else OVHcloud Mumbai at about ₹586. No quote or receipt read.
First limit we will hit
Neon 0.5 GB
Staging database. It also sleeps when idle. R2 has room (10 GB) but no spending cap.
How it fits together
Pick something a user does to see its path and what it costs.
$0 on staging
needs a worker; production host cost not read
- The web app adds a Job row in Postgres.
- The worker takes it (FOR UPDATE SKIP LOCKED) and opens the customer's site in Chromium, only through its egress proxy.
- The proxy refuses private addresses and connects to the address it checked.
- Pages, screenshots and assets go to R2; rows go to Postgres.
- A page past 2 minutes is skipped. A crash retries up to 3 times, then the capture fails.
Cost
Every number says where it came from.
| Service | Pays for | Today | Grows with | Basis |
|---|---|---|---|---|
| Customer's own site | Read by capture and Verify. Never written. | $0 | Pages walked (25 a capture in the free month, 500 on Team) | Statedwiki/entities/plans.md |
| Web app | Next.js 16: every screen, tRPC, /api/v1, /mcp, sign-in | $0 on Vercel Hobby (staging) | Production moves to a small server; its price is not read | Statedops/runbooks/staging.md |
| Capture worker | Chromium: capture, hand-walk, Verify, stale-job sweep, purge. 2 captures and 2 hand-walks at a time. | $0 (owner's machine); no worker on staging | Captures and Verify runs; production host not chosen | Statedops/runbooks/staging.md; apps/worker/src/env.ts defaults |
| Neon Postgres | $0 on Free (0.5 GB, sleeps when idle) | Rows, one per property edit and commit | Statedops/runbooks/staging.md | |
| Cloudflare R2 | Captured pages, screenshots, icons, exports. Private bucket. | $0 within 10 GB, 1M writes, 10M reads a month | Captured pages and screenshots; one staging refresh writes a few hundred files | Statedops/runbooks/staging.md |
| Claude (Anthropic) | AI edits and image to HTML. Not built. | Not read | AI actions | Not known |
| Polar | Merchant of record for Team seats. Not built. | Not read | Team revenue (fee about 5% + ₹44 a charge, per the wiki) | Not known |
| GitHub Actions and Vercel CLI | Deploy staging on every push to main | $0 (org's free minutes) | Pushes | Statedops/runbooks/staging.md |
What breaks when something fails
| If this fails | The user sees | Their data | Basis |
|---|---|---|---|
| Customer's own site | The capture fails with the reason. A role whose sign-in is refused is left out and the others still run. | Pages already saved are kept. Stop keeps what was saved. | Statedwiki/concepts/capture-reads-the-product.md |
| Web app | Nothing opens. The CLI and MCP stop too. | Safe in Postgres and R2. | AssumedAll state lives in Neon and R2; no outage run recorded |
| Capture worker | Captures and Verify wait in the queue. On staging nothing new can be captured at all. | Jobs stay in Postgres. A crashed job is retried (max 3 tries, 30 s apart); one silent for 120 s is swept, then fails with 'The capture could not finish. Try again.' | In codeapps/worker/src/queue/job-state.ts; packages/db/prisma/schema.prisma maxAttempts |
| Neon Postgres | The app does not work. After a sleep the first page is slow. | On the free plan the restore window is short. Restore has never been tested. | Statedops/runbooks/backup-and-restore.md |
| If Resend refuses, the send throws an error. What the user then sees was not read. | None held there | In codeapps/web/src/server/email/get-transport.ts | |
| GitHub Actions and Vercel CLI | Nothing. Staging stops updating. | Safe | Stated |
Where the data goes
| Accounts, companies, products, drafts, commits | Neon Postgres (US) |
| Captured pages, screenshots, assets | Cloudflare R2 (US). A private bucket. |
What we do not know yet
- Hosting is being migrated (owner, 2026-10-30): staging is on free plans (Vercel Hobby, Neon), and task T065 moves production to one small server, Oracle Cloud Always Free in India, else OVHcloud Mumbai at about ₹586 a month. Costs here are before the move.
- The real monthly bill: no bill, receipt or usage page was read for Vercel, Neon, R2 or the domain babul.dev. The ₹0 for staging comes from the runbook saying every plan is free.
- No usage counts exist: .context/raw is empty and .context/metrics holds only work-flow counts. Database size, R2 size, captures a month and worker run time are not recorded.
- Production is not deployed and its host is not chosen (T023). ₹586 for OVHcloud is a wiki figure, not a quote.
- wiki/concepts/architecture-overview.md says AI is called by the worker, and legal/subprocessors.md lists Anthropic as in use. The code holds no call to Anthropic, only the env schema. plans.md says AI is not built.
- wiki/concepts/architecture-overview.md says the staging worker runs on the owner's machine; ops/runbooks/staging.md says there is no worker on staging. Only the refresh script runs one, on that machine.
- stack.md names Resend for email and rejects Amazon SES; legal/subprocessors.md lists SES as chosen. Staging sends no real email either way.
- Restore has never been tested (backup-and-restore.md table is empty). The Neon free restore window is short, R2 has no backup, and there are no monitoring or incident records.
- R2 has no spending cap. The only guard is a budget alert that emails the owner at $1.
- Vercel Hobby is for non-commercial use. It is fine for a demo and not for the first customer.
- schema.prisma says a daily cron inserts weekly captures; no cron was found in the web app or worker code.