Back to Projects
Food Delivery / Subscription CommerceFull-Stack Developer

MealPlan: Subscription Delivery Admin

Full-Stack Admin Portal & REST API for a Subscription Meal-Delivery Service

MealPlan: Subscription Delivery Admin

Project Overview

MealPlan is a full-stack operations platform built for a subscription-based meal-delivery service. Customers subscribe to recurring meal plans, and the business needs to manage the entire back office — from building plan catalogs and pricing, to processing orders, to scheduling deliveries by meal time and telling the kitchen exactly what to prepare each day. The platform pairs a NestJS REST API with an Angular admin portal, giving staff a single place to run the catalog, orders, delivery scheduling, customers, and operational reporting.

My Role

I owned the project end-to-end as the Full-Stack Developer. On the backend I designed the NestJS + TypeORM domain model (plans, plan-products, orders, order items, payments, delivery slots, discounts, addresses, and price history), built the REST controllers and services, and set up JWT/Passport authentication with OTP verification, AWS S3 file uploads, and email/SMS notification providers. On the frontend I architected the Angular admin portal with NgRx state management, feature modules for orders, plans, products, and users, chart-based dashboards, and PDF export.

Key Features

  • Subscription plan management: plans are grouped by category and type, composed of one or more meals, and moved through a publish/unpublish workflow before they become orderable
  • Order processing with a full financial breakdown — subtotal, tax, discount application, and grand total — plus a link to the customer, delivery address, and one or more delivery slots
  • Delivery-slot scheduling where each slot is bound to a meal time (breakfast, lunch, dinner) and a plan type, and orders map to the specific slots a customer will receive meals in
  • Daily production reporting: aggregation queries roll up all active orders for a given date into the exact meals required and group them by delivery slot, so the kitchen and dispatch teams know what to cook and when
  • Immutable price history: every plan and product price change is recorded as a new history row, so historical orders always reflect the price at the time of purchase
  • Authentication with OTP verification, JWT access tokens via Passport strategies, and password forgot/reset flows
  • NgRx-powered admin portal with dedicated store + effects per feature module, an HTTP token interceptor, chart dashboards via ngx-charts, and jsPDF report/invoice export
  • Admin-configurable code lists for lookup values, AWS S3 uploads for plan and meal imagery, and email/SMS notification providers

Challenges & Solutions

1.Pricing That Never Breaks Historical Orders

Prices for plans and products change over time, but past orders must always reflect what the customer actually paid. Rather than mutating a single price field, every price change is written as a new row in a dedicated price-history table. Orders capture their financial totals at creation time, so reporting and invoicing stay accurate no matter how many times a plan is later re-priced.

2.Turning Orders Into a Daily Kitchen Plan

Operations needed to know exactly what to cook and dispatch each day. I built aggregation queries that take all active orders for a target date and roll them up into the total meals required, grouped by delivery slot and by plan. This converts a large set of individual subscriptions into a single, actionable production and dispatch sheet.

3.Modeling Meal-Time Delivery Scheduling

Deliveries are not one-size-fits-all — a subscription can deliver across breakfast, lunch, and dinner windows. I modeled delivery slots as first-class entities bound to a meal time and plan type, with a join between orders and slots. This lets the system schedule and report on deliveries per meal time while keeping the order model clean.

4.Keeping a Data-Heavy Admin SPA Predictable

The admin portal manages large, interrelated data sets across orders, plans, products, and users. I used NgRx with a dedicated store and effects per feature module to keep state changes explicit and traceable, paired with an HTTP interceptor for token handling and OTP-gated authentication so the back office stays both responsive and secure.

Business Impact

MealPlan gives a subscription meal-delivery business one platform to run its entire back office — catalog, pricing, orders, delivery scheduling, and customers. The daily production and delivery-slot reports translate a stream of subscriptions into a concrete operational plan for the kitchen and dispatch teams, while immutable price history keeps financial records accurate over time. Building both the API and the admin portal meant the data model and the UI were designed to fit together, reducing integration friction across the stack.

Tech Stack

Angular 12TypeScriptNgRxAngular MaterialRxJSngx-chartsjsPDFNestJSTypeORMMySQLJWT / PassportAWS S3Swagger

Highlights

  • Designed and built both the backend REST API and the Angular admin portal end-to-end
  • Subscription plan catalog with plan categories, plan-to-meal composition, and a publish workflow
  • Immutable price-history tracking so plan and product price changes never rewrite past orders
  • Full order lifecycle: subtotal, tax, discounts, delivery scheduling, and payment/order status
  • Meal-time delivery-slot scheduling (breakfast / lunch / dinner time windows)
  • Daily kitchen production reports aggregating required meals per day and per delivery slot
  • OTP-based verification and JWT authentication with Passport strategies
  • NgRx store + effects for predictable state across orders, plans, products, and users

Project Info

RoleFull-Stack Developer
IndustryFood Delivery / Subscription Commerce