How we build
Assume nothing exists yet. Every choice below is argued on its own merits for this specific product — a real-estate transaction platform, document- and forms-heavy, with a mobile app, 5 portal types, and real legal/financial exposure — not on what happens to already be running.
| Option | Pros | Cons |
|---|---|---|
| Python (FastAPI) |
|
|
| Django (Python) |
|
|
| Node.js / TypeScript |
|
|
| Ruby / Rails |
|
|
| Go |
|
|
| Rust |
|
|
| Java / Kotlin |
|
|
Python with FastAPI. The closest real alternative is Node/TypeScript, genuinely strong for the webhook-heavy integration surface (e-sig, payments) — but Python's document/data-processing ecosystem and Pydantic's validation model fit this product's actual shape (deeply structured transaction and jurisdiction-rules data) better than the async-I/O advantage Node offers, which matters less at pilot traffic volume than it would at real scale.
| Option | Pros | Cons |
|---|---|---|
| PostgreSQL (via RDS) |
|
|
| DynamoDB |
|
|
| MySQL (via RDS) |
|
|
| Self-hosted Postgres on EC2 |
|
|
PostgreSQL, managed via RDS. Not a close call for this kind of structured, relational, compliance-adjacent data with real reporting needs — DynamoDB is the wrong shape for the system of record, and self-hosting trades a lean team's time for a savings that isn't the constraint at this stage.
| Option | Pros | Cons |
|---|---|---|
| Flutter |
|
|
| React Native |
|
|
| Native (Swift + Kotlin, separately) |
|
|
Flutter. The rendering-consistency argument is the deciding one for this specific team shape: one designer, a single mobile engineer covering all 5 portals, and a product where every persona's screens need to look identically polished on both platforms without a large QA function to catch platform drift.
| Option | Pros | Cons |
|---|---|---|
| Server-rendered (Jinja2 + HTMX + a CSS framework) |
|
|
| SPA framework (React / Vue) |
|
|
Server-rendered, with HTMX for the interactivity that's actually needed (inline updates, partial page refreshes) rather than a full SPA framework. Revisit only if Merchant Integration's marketplace browsing genuinely needs SPA-grade interactivity post-pilot — don't build for that need before it's proven to exist.
AWS. Not a default — the founder's own hands-on expertise is AWS specifically, a genuine first-principles reason to pick it (faster, better-informed infrastructure decisions from day one) rather than a generic "any cloud would do" choice. Concretely, for Phase 1:
| Compute | ECS Fargate (containers, no server fleet to patch) for the API — App Runner is a lighter-weight alternative worth a look, but Fargate gives more control over networking/VPC placement for the DB access this product needs |
|---|---|
| Database | RDS PostgreSQL, Multi-AZ in production, single-AZ in staging — see the comparison above |
| Object storage | S3 — signed e-signature documents, Transitional Document attachments/photos, marketplace vendor assets |
| CDN | CloudFront in front of S3 and static assets |
| Networking | VPC with private subnets for the database and application, a public-facing ALB for API ingress — the database is never directly internet-reachable |
| Secrets | Secrets Manager / Parameter Store — never in code or committed env files |
| Observability | CloudWatch for logs and metrics; a dedicated error tracker (see Cost) rather than relying on CloudWatch alone for application-level errors |
| IaC | Terraform or AWS CDK from week 1, owned jointly by the founder and the tech lead — environments reproducible from a repo, not hand-configured in the console |
Deliberately excluded from Phase 1: Kubernetes/EKS (real operational overhead a lean team doesn't need at this scale), multi-region deployment (one region is enough for a single-state or 2–3-state US pilot). See Cost for the actual AWS spend estimate.
Every developer has Claude coding access, in every scenario on this site. That's a real velocity multiplier on well-specified, well-scoped work, and part of why the team can stay lean (see Team) — but it's a real risk on anything that touches money or law if it's not paired with deliberate review discipline. The practice, not just the principle:
| Safe to AI-generate with light review | Always senior-authored or line-by-line human-verified |
|---|---|
|
|
The mechanism that makes this real, not aspirational: mandatory PR review — 1 senior approval standard, 2 for anything in the always-human-verified column — enforced before merge, for every change regardless of who or what authored the first draft. "AI wrote it and it looked fine" is not a merge criterion.