ClientFlow — Client Operations Platform by Balwan BamniyaClientFlow — Client Operations Platform by Balwan Bamniya

ClientFlow — Client Operations Platform

Portfolio project
Balwan Bamniya
🚀 A production client-operations platform that takes a freelance engagement from first inquiry to signed-off delivery.

📌 At a glance

👤 Role: Solo: product design, full-stack engineering, infrastructure
🗓️ Timeline: September 2026 · 18 days, 68 commits
🟢 Status: Live in production on 3 subdomains
🧰 Stack: TypeScript · Hono · Cloudflare Workers · D1 · R2 · React 19 · Drizzle · Playwright

🎯 The problem

A freelance engagement passes through about a dozen hand-offs: inquiry, proposal, kickoff, milestone reviews, revisions and delivery. Most solo practices run it on email threads and memory. Prospects get inconsistent answers, clients can't see progress without asking, and there's no single record of what was agreed.

🛠️ What I built

📝 Start app: a no-account inquiry wizard and a secure proposal page where prospects accept or request changes
🧑‍💼 Client app: a client portal (projects, milestones, comments, files) and an owner console (lead pipeline, proposals, delivery)
⚙️ API: Hono on Cloudflare Workers with D1, private R2 storage, Resend email and Turnstile bot protection
➡️ Inquiry → Proposal → Acceptance → Kickoff → Milestone review → Delivery

⚡ Hard problems solved

🔒 All-or-nothing proposal acceptance, without transactions. Accepting a proposal creates a client, user, project, milestones and notifications in one step. D1 has no transactions, so I built a durable idempotency claim with gated batch writes. A double-click or two open tabs can never create two projects.
🚦 A race-proof milestone workflow. Planned → In progress → Ready for review → Approved / Changes requested. Every transition is checked, so concurrent edits get a clear conflict instead of a half-applied state.
📁 Private uploads that never orphan. Files stream to a private R2 bucket, access is re-checked after the upload finishes, and any failure removes both the record and the file.
🔑 Passwordless sign-in. One-time magic links, with only a hash of each token stored in the database.
🛡️ Defense in depth. Exact-origin checks on every write, plus 11 rate limits that fail closed.

📈 Results

✅ 200+ Vitest cases across API, apps and packages
🎭 16 Playwright end-to-end journeys with automated accessibility (axe) checks
📦 −23% client bundle after route-level code splitting (161.7 → 124.1 KiB gzip)
🗄️ 19 tenancy-scoped tables, 18 migrations and ~61 API endpoints across 3 Workers
🚢 CI blocks merges on lint, type checks, tests and build; deploys follow a written runbook with D1 Time Travel recovery

🔭 What's next

📬 A real queue for notification retries
🤖 Automated, gated deploys from CI
⚡ Push updates instead of 20-second polling
💬 Need a client portal, internal tool or SaaS built to this standard? Let's talk.

0 likes · 0 views · Oct 12, 2026

Client-ops platform taking freelance work from inquiry to sign-off. Cloudflare Workers, D1, R2, passwordless auth, ~61 API endpoints, 220+ tests.

Tags