01 The problem, and who felt it
Two problems, one wearing a trench coat. First: an early-stage company needed its core cross-platform product actually built, properly, not prototype-grade. Second, the quieter killer: every month, the cloud invoice grew faster than the user base. Managed databases, managed storage, managed everything, each individually reasonable, collectively a business model hazard.
Who felt it:
- The founders, watching burn rate get eaten by infrastructure line items that scaled with success and punished them for existing.
- The users, who just needed a fast, reliable app with auth that worked and push notifications that arrived.
- Future engineers, who would inherit whatever foundation got poured now.
02 My role
Founding Engineer means you build the thing, then you build the thing that builds the thing. I architected the core Flutter application, built the backend API, and then spearheaded the entire DevOps transition from high-cost cloud providers to automated, containerized self-hosted deployment. Private client work, so the product itself stays behind glass, the engineering is the story here.
03 Designing the product
- Riverpod for state, compile-safe dependency injection and testable state containers over the widget tree, no magic globals.
- GoRouter for navigation, declarative, deep-linkable routes because mobile users arrive from notifications, not just icons.
- Hive/SQLite offline-first storage, the app keeps working when the network doesn't; sync happens quietly in the background.
- Firebase Cloud Messaging, push done right, wired into the same notification surface across platforms.
04 Engineering it
- API layer: Bun + Hono + TypeScript with Zod validation at the edge, JWT access/refresh token rotation, rate limiting, and OpenAPI/Scalar docs generated from the source of truth.
- Data plane: on-premise MongoDB, Redis, MeiliSearch (instant search), RabbitMQ, colocated where latency lives.
- Storage: a 20TB MinIO S3-compatible object-storage cluster, the single biggest line item on the old cloud bill, brought in-house.
- KYC: Surepass PAN/Digilocker verification flows, because regulated products need identity plumbing that doesn't embarrass itself.
- Observability: OpenTelemetry collector feeding SigNoz, PostHog for product analytics, Slack webhooks for the 2 AM alerts, Resend for email.
05 Shipping it, the migration story
This is the part I'd put on a poster. Docker multi-stage builds slimmed every service to deployable artifacts. Coolify turned deployments into a button instead of a ceremony. Traefik v3 fronted everything with automatic HTTPS via Let's Encrypt, and Tailscale stitched the private network together so internal services never touch the public internet. The cutover happened while the business kept running, data migrated, DNS flipped, and the recurring storage bill dropped to bare utility costs. Same reliability, fraction of the burn.
06 What it proves
- "Founding Engineer" isn't a title, it's a scope: product, API, infrastructure, observability, compliance integrations, all owned end to end.
- Self-hosting is a legitimate cost strategy at startup scale when executed with containerization discipline, not a hipster retreat from the cloud.
- Modern tooling (Docker, Coolify, Traefik, Tailscale) collapses the ops-team-sized gap a solo engineer used to face.
- Observability isn't optional even when you're the only on-call rotation.
07 What I learned
Cloud convenience has a price tag; sometimes paying it in one-time hardware and a weekend of Ansible-grade discipline is the better deal. Also: never migrate storage on a Friday, always keep the old provider warm until DNS propagates globally, and write the rollback runbook before you need the rollback runbook.
