Production meal planning platform serving 84+ users with automated payment integration and dynamic backend meal generation.
Data from production admin dashboard · Updated Feb 2026
Meal planning is overwhelming. People struggle with what to cook, how to balance nutrition, and managing dietary restrictions — all while dealing with busy schedules. Existing solutions are often complicated or don't account for personal preferences.
Engineered a production web application now serving 84+ users that generates personalized weekly meal plans in minutes. The system respects dietary restrictions, medication interactions, and calorie targets to create tailored recommendations. Users can swap meals with one tap and get auto-generated grocery lists — 168 plans generated and counting.
Three-tier architecture with a decoupled frontend, RESTful API layer, and relational database. Payment processing is isolated behind its own service boundary so a Stripe failure never blocks meal plan generation. Background workers handle grocery list aggregation and email delivery.
RESTful API organized around resources. Each endpoint validates dietary constraints and medication conflicts before returning results. The swap endpoint re-runs the matching algorithm for a single slot without regenerating the full week.
| Method | Resource | Purpose |
|---|---|---|
| POST | plans / generate | Generate personalized weekly meal plan based on user profile |
| PUT | plans / swap | Swap a single meal while respecting constraints |
| GET | plans / grocery | Auto-aggregated grocery list for the current plan |
| POST | users / preferences | Save dietary restrictions, allergies, medication data |
| GET | recipes / detail | Full recipe with nutrition facts and prep steps |
| POST | payments / subscribe | Create Stripe subscription via server-side checkout |
Designed around two core relationships: users → plans and plans → recipe slots. Allergies and medication interactions are stored as separate join tables so the plan generator can run exclusion queries without scanning recipe content. Recipes carry pre-computed nutrition data to avoid aggregation at read time.
Designed for a growing user base with stateless API servers, connection pooling, and background job queues. Grocery list aggregation runs asynchronously so users don't wait for a slow reduce operation during plan generation.
Shipping a production system to 84+ real users changed how I think about engineering. Every decision — from isolating Stripe webhooks to pre-computing nutrition data — was driven by actual user behavior, not hypotheticals. Working directly with a client taught me that balancing requirements with technical constraints is where engineering maturity lives. The 17.3% completion rate is a metric I'm actively working to improve through UX refinements and smarter meal matching.