The problem
Wakamiapp needed more than isolated endpoints. The product required a backend foundation that could support user accounts, product workflows, data consistency, secure access, and future feature growth without forcing a rewrite after launch.
Approach
I treated the backend as the product operating layer: clear domain boundaries, predictable API contracts, normalized data ownership, validation at the edges, and deployment choices that kept the system maintainable for ongoing iteration.
The backend was built as the product operating layer, not just a collection of endpoints. That meant designing the core objects, user actions, protected workflows, and persistence rules before implementation details spread across the codebase.
I used workflow-oriented API boundaries so the frontend could ask the backend to perform meaningful product actions. This keeps validation, side effects, and data consistency in one place instead of making the client responsible for stitching business logic together.
Because I owned the backend end-to-end, handoff mattered from the beginning. Naming, structure, deployment behavior, and documentation were part of the engineering work, not chores left for the end.
Result: The application received a complete backend foundation with production APIs, cleaner product workflows, and a structure that could evolve as the product grew.
Architecture decisions
- Designed the backend around product workflows instead of exposing raw database tables through the API.
- Defined domain boundaries for user state, workflow state, shared configuration, and protected product actions.
- Kept authentication and authorization checks in backend-owned paths so future frontend surfaces could not accidentally bypass them.
- Built the data model to support launch while leaving room for reporting, new workflows, and future permission changes.
- Added deployment and service structure that made the backend understandable for ongoing product iteration.
Before and after
Risks avoided
- Raw database tables leaking into the frontend API contract.
- Authentication existing without deeper authorization around product actions.
- Early feature speed creating a backend that could not support new workflows cleanly.
- Future engineers having to reverse-engineer why the system was shaped the way it was.
Cloudflare and AWS
- Kept the backend portable enough that Cloudflare and AWS choices could be made by request shape, data location, and operational cost.
- Designed API boundaries that can support edge routing, webhook handling, or regional services without changing the product contract.
- Focused on production service foundations first, then left room for queues, caching, and edge acceleration when traffic proves the need.