Skip to content
OnlyProjects
MCA · Mobile App DevelopmentFor educational purposes only
Code included

Tiffin Subscription and Route-Delivery App for a Hyderabad Tiffin Centre (Flutter)

Weekly menu, pause-with-cut-off subscriptions, route-wise delivery rounds and month-end billing for home-style meals

Mapped to your syllabusJNTUH MCA R22 · Project Work Review-III + Project Viva-Voce · Semester 4

Overview

1 min read

RuchiBox is a mobile application plus a small REST backend that runs the daily routine of a home-style tiffin centre in Hyderabad — the kind that delivers warm lunches in steel carriers to offices, coaching centres and PG hostels across two or three localities. The centre's business lives and dies on details a paper notebook cannot hold: who paused from tomorrow, who is on leave next week, which delivery boy carries which route, which steel carriers did not come back, and what every household actually paid for last month.

The app serves three roles. Customers subscribe to a meal plan (veg day pattern, monthly rate), pause or resume with a 9 PM cut-off rule, see the weekly menu, rate dishes and pay by cash or UPI reference. Delivery partners get today's ordered stop list per route, mark each delivery Delivered or Not Delivered with a reason (absent, holiday, refused), and log carrier hand-backs — the screen caches locally, so a basement lift with no signal does not stop the round. The owner manages menus, rates, routes and subscriptions, and generates month-end bills that charge only the meals actually delivered, with a dues list and a missing-carrier report.

It is built with Flutter/Dart on the front end (the framework named in JNTUH R22's mobile-application elective) and a Node.js/Express + MongoDB backend from the Full Stack Development course, with JWT role-based access throughout — a realistic, demo-ready project for the JNTUH MCA R22 project-work viva.

Relevant for
Telangana
Level
Intermediate · 16 weeks · solo
Common at
Jawaharlal Nehru Technological University Hyderabad, Anna University, Chennai, IGNOU
Updated
Nov 2026

Syllabus alignment

JNTUH · MCA R22

Project Work Review-III + Project Viva-Voce · Semester 4 · 2 credits

Subjects this project applies
  • Mobile App Development elective (Flutter)
  • Full Stack Development (Node.js/Express API)
  • DBMS (schema design applied to MongoDB collections)
  • JavaScript (Flutter/Dart and Node share the language family)
How it is evaluated

See your department's project guidelines.

Also fits: Anna University MCA Regulation 2021, Osmania University 2-year MCA 2022-23, IGNOU MCA_NEW — MCSP-232 guidelines (2025).

What's in the box

11 parts · 5 free · 2 previewed · 4 unlock for ₹2,000

Problem & synopsis

5 min read

Problem statement

A Hyderabad tiffin centre delivering 150–200 subscription meals a day runs its entire operation on a paper notebook: who is active, who paused, who skipped for a festival, which route and delivery boy covers which street, how many steel carriers are outside, and what each household owes at month end. Pauses arrive as WhatsApp messages at midnight and get missed; delivery lists are rewritten by hand each morning and last-minute changes slip through; bills are hand-tallied from tick marks and argued over; carriers silently disappear. There is a need for a mobile system with a small backend that manages subscriptions with a consistent, code-enforced cut-off rule, generates the day's route-wise delivery list automatically, records delivery outcomes with reasons, bills only meals actually delivered, tracks carrier circulation, and gives the owner a truthful month-end picture — without collecting Aadhaar or any government identity number, and without per-order marketplace commissions.

Synopsis

Abstract

This project builds a subscription-and-delivery system for a Hyderabad tiffin centre: a Flutter app for customers, delivery partners and the owner, backed by a Node.js/Express + MongoDB API. The core is the daily cycle: at the evening cut-off the system freezes tomorrow's delivery list per route from active, unpaused subscriptions; partners run their rounds and mark outcomes; month-end bills charge only delivered meals.

Introduction

Hyderabad's office-goers and students sustain a large industry of home-style tiffin centres on monthly subscription. Menus repeat weekly, subscribers pause constantly, carriers circulate in a loop that must come back, and payments settle at month end against hand-tallied counts. A centre serving 150–200 meals a day tracks all of this in a school notebook. One missed pause becomes a refund argument; one forgotten stop, a hungry customer.

Existing System and Its Limitations

  • Subscriptions and pauses are remembered in a notebook and WhatsApp messages — nothing is dated, so disputes are common.
  • Delivery lists are rewritten by hand each morning; last-minute pauses are missed.
  • Meal counts for billing are tallied from ticks; errors irritate everyone.
  • Steel carriers circulate untracked; replacements are bought until someone counts.
  • Gap: food-delivery platforms are per-order marketplaces, not subscription managers, and their commissions do not suit ₹60-a-meal economics; nothing affordable exists for a centre's own round.

Proposed System

  • Subscriptions with a lifecycle: Active → Paused (date range) → Resumed → Cancelled, with a 9 PM cut-off — a pause requested after cut-off takes effect the day after next, and that rule is applied consistently by code, not by mood.
  • A daily generation job at cut-off builds tomorrow's delivery records per route from active subscriptions and the weekly menu.
  • Route-wise rounds: the delivery partner's screen shows ordered stops with pending/delivered counts, marks Delivered or Not Delivered with a reason, and caches in sqflite with a retry queue for dead zones.
  • Billing only for delivered meals: each DailyDelivery record carries status and reason; the month-end job bills delivered meals at rates from a configurable rate table, records cash/UPI-reference payments and produces a dues list.
  • Carrier ledger: carriers out at delivery and back at hand-over; a missing-carrier report per route.
  • Menu and feedback: an editable 7-day menu cycle with per-dish ratings so the owner can retire what nobody eats.

Feasibility Study

  • Technical: Flutter gives one Dart codebase for all three roles; Express + MongoDB matches the Full Stack Development course; the generation job is an idempotent endpoint and sqflite covers the only offline screen. Everything is free and runs on a laptop for the demo.
  • Economic: No licence or per-order commission; the backend runs on the centre's existing PC and the app on phones the owner and partners already own.
  • Operational: The app mirrors the notebook screen for screen; the owner needs one training hour, and customers are enrolled by the desk with a phone number.

Objectives

  1. 01Model meal subscriptions with a lifecycle (Active, Paused, Resumed, Cancelled), pause windows and a code-enforced 9 PM cut-off rule.
  2. 02Generate tomorrow's route-wise delivery list automatically at cut-off from active subscriptions and the editable weekly menu cycle.
  3. 03Build a Flutter delivery-partner screen with an ordered stop list, delivered/not-delivered outcomes with reasons, and a sqflite cache with retry for poor-signal stretches.
  4. 04Implement month-end billing that charges only delivered meals at rates from a configurable table, with cash/UPI-reference payment recording and a dues report.
  5. 05Track steel-carrier circulation per route with a missing-carrier report.
  6. 06Aggregate per-dish feedback so the owner can adjust the weekly menu from evidence.
  7. 07Secure all three roles (customer, delivery partner, owner) with JWT authentication and server-side authorisation.
  8. 08Keep the design privacy-safe: customer records hold name, address, mobile and preferences only.

Scope

In scope

  • One tiffin centre, three localities split into routes, up to ~250 active subscriptions, one lunch service per day.
  • Three roles in one Flutter app: customer, delivery partner, owner; Express + MongoDB backend.
  • Subscription lifecycle with pause windows and cut-off; weekly menu cycle; daily delivery generation and outcome capture.
  • Month-end billing with rate table, payments ledger, dues list; carrier in/out ledger; dish feedback aggregation; CSV exports.

Out of scope (v1)

  • Online payment gateway (UPI is recorded as a reference string, not processed).
  • Live map tracking and route optimisation — routes are ordered stop lists, and Google Maps integration is future work.
  • Push notifications and WhatsApp bots (reminders are shown in-app and exported).
  • Breakfast/dinner services and multi-centre (franchise) deployment.

Methodology

The project follows an incremental SDLC with fortnightly reviews, aligned to how the JNTUH R22 project work itself is reviewed: a thin vertical slice (subscribe → generate → deliver → bill one day) exists by week 5, and each increment widens it, which matches the university's review pattern of demoing working software each time.

PhaseWeeksActivitiesDeliverable
Requirements1–2Spend two days at a tiffin centre; document the notebook, route and bill formats; SRSSynopsis + SRS
Design3–4MongoDB collections, REST contract, lifecycle/cut-off rules, wireframesDesign document
Increment 15–7Auth and roles, customer and route masters, subscription lifecycleSubscription module
Increment 28–9Menu cycle, cut-off generation job, delivery-partner screen with cacheDaily-cycle module
Increment 310–12Billing job, payments ledger, dues, carrier ledger, feedbackBilling module
Testing & hardening13–14Unit, widget and API tests; dead-zone trials; seed dataTest report
Documentation & demo15–16Final report, PPT, viva rehearsalSubmission

Testing approach: unit tests for the cut-off logic, billing arithmetic and carrier counters; widget tests for the pause and delivery screens; Mocha/Chai API tests including the pause-after-cut-off case, double generation of the same day (idempotency) and role abuse; and a scripted dead-zone trial that runs a route in airplane mode and reconciles every status after the network returns.

Architecture & tech stack

3 diagrams · 7 technologies · 2 min read

  • Flutter 3 (Dart)
  • Riverpod state management
  • sqflite (delivery-day cache)
  • Node.js + Express REST API
  • MongoDB + Mongoose
  • JWT authentication
  • flutter_test + Mocha/Chai

The system is a mobile client with a stateless REST backend and one document database, with a small offline-cache layer only where the domain demands it (the delivery round).

  1. Flutter client (three roles): Riverpod providers hold per-role state; the customer screens talk to subscription, menu and payment endpoints; the delivery screen loads the day's stops and writes outcomes to a local sqflite queue when the network is absent, flushing with retries when it returns.
  2. Application tier (Node.js/Express): JWT verification and role middleware guard every route; controllers delegate to services holding the business rules — the cut-off generator, the billing calculator, the carrier ledger. The daily generation endpoint is idempotent per date: calling it twice yields one set of delivery records.
  3. Data tier (MongoDB via Mongoose): collections for users, customers, subscriptions, pause windows, menu days, daily deliveries, payments, routes and feedback. Mongoose schema validation guards writes; the billing job reads only delivery records whose status is Delivered.
flowchart LR
  C["Customer phone"] -->|"HTTPS + JWT"| API["Express REST API"]
  D["Delivery partner phone"] --> APP["Flutter app (Riverpod)"]
  APP --> CACHE[("sqflite cache + retry queue")]
  CACHE -->|"sync when online"| API
  O["Owner console screens"] --> API
  API --> MW["JWT verify + role middleware"]
  MW --> S["Services: cut-off generator, billing, carriers"]
  S --> DB[("MongoDB via Mongoose")]
  S --> B["Month-end bill + dues CSV"]

Data model

erDiagram
  USER ||--o{ SUBSCRIPTION : owns
  ROUTE ||--o{ CUSTOMER : covers
  CUSTOMER ||--o{ SUBSCRIPTION : holds
  SUBSCRIPTION ||--o{ PAUSE_WINDOW : "is paused by"
  SUBSCRIPTION ||--o{ DAILY_DELIVERY : "receives"
  ROUTE ||--o{ DAILY_DELIVERY : "groups per day"
  USER ||--o{ PAYMENT : records
  SUBSCRIPTION ||--o{ PAYMENT : "is settled by"
  MENUDAY ||--o{ DAILY_DELIVERY : "cooks for"
  SUBSCRIPTION ||--o{ FEEDBACK : rates

  USER {
    string id PK
    string name
    string role
    string mobile
    string passwordHash
  }
  ROUTE {
    string id PK
    string name
    string stopOrder
    string partnerId FK
  }
  CUSTOMER {
    string id PK
    string name
    string mobile
    string address
    string routeId FK
    string preferences
  }
  SUBSCRIPTION {
    string id PK
    string customerId FK
    string vegPattern
    string status
    date startedOn
    decimal monthlyRate
  }
  PAUSE_WINDOW {
    string id PK
    string subscriptionId FK
    date fromDate
    date toDate
    datetime requestedAt
  }
  DAILY_DELIVERY {
    string id PK
    string subscriptionId FK
    date deliveryDate
    string status
    string reason
    int carrierOut
    int carrierBack
  }
  MENUDAY {
    string id PK
    int dayOfWeek
    string items
  }
  PAYMENT {
    string id PK
    string subscriptionId FK
    string month
    decimal amount
    string mode
    string reference
  }
  FEEDBACK {
    string id PK
    string subscriptionId FK
    date forDate
    int rating
  }

Delivery-outcome states

flowchart LR
  P["Planned"] --> OFD["Out for delivery"]
  OFD --> DL["Delivered"]
  OFD --> ND["Not delivered: absent / holiday / refused"]
  ND -->|"next day retry"| P

Customer records carry only name, address, mobile and meal preferences — no identity documents — so the centre holds nothing it cannot justify.

Modules

6 modules

  1. Module 01

    Authentication & Roles

    JWT login for the three roles with bcrypt-hashed passwords; Express middleware verifies the token and checks the role list on every route. A customer token cannot read route or carrier endpoints even with the app inspected, because authorisation lives on the server, not in navigation guards.

  2. Module 02

    Subscriptions, Pauses & the Cut-off Rule

    Customers subscribe with a veg-pattern and monthly rate; pause requests create a dated window. The cut-off service decides effectivity: a pause or resume before 21:00 applies from tomorrow; after 21:00, from the day after — the rule is one pure function, unit-tested at 20:59 and 21:01, so staff never argue it.

  3. Module 03

    Menu Cycle & Daily Generation

    The owner edits a repeating 7-day menu. At cut-off an idempotent generation job creates tomorrow's DailyDelivery records per route for every active, unpaused subscription, stamped with that day's menu. Running the job twice produces no duplicates, and last-minute manual additions by the owner are separate, flagged records.

  4. Module 04

    Delivery Round & Offline Cache

    The partner's screen shows today's ordered stops for their route with pending counts, and marks each stop Delivered or Not Delivered with a reason and carrier hand-back count. Writes go to sqflite first and flush to the API with retries, so a signal-less stretch never loses a status; the retry uses the delivery record's id, making replays harmless.

  5. Module 05

    Billing, Payments & Dues

    The month-end job sums Delivered records per subscription, multiplies by the rate from the configurable rate table, and creates a bill with a line the customer can verify day by day. Payments record cash or UPI reference against the bill; partial payments are allowed and the dues list carries forward. CSV export feeds the centre's simple bookkeeping.

  6. Module 06

    Carrier Ledger, Feedback & Reports

    Carrier counts move out at delivery and back at hand-over per route, and a report lists households holding carriers overnight plus permanently missing ones. Dish feedback aggregates per menu item, and the owner's dashboard shows active subscriptions, pause density by week, route-wise delivery success and month revenue.

Slides

12 slides · titles free · bullets, notes and the .pptx unlock

  1. Slide 1

    RuchiBox — Tiffin Subscription & Route-Delivery App

  2. Slide 2

    Context: A Tiffin Centre's Day

  3. Slide 3

    Problem Statement

  4. Slide 4

    Existing vs Proposed System

  5. Slide 5

    Objectives

  6. Slide 6

    Technology Stack and Why

  7. Slide 7

    Architecture

  8. Slide 8

    Data Model

  9. Slide 9

    The Daily Cycle (Demo)

  10. Slide 10

    Cut-off & Offline Design (Deep Dive)

  11. Slide 11

    Testing

  12. Slide 12

    Conclusion & Future Scope

Bullets, speaker notes and the .pptx · ₹2,000

The titles above are the real outline. The rest is what you present from.

Unlock for ₹2,000

Viva questions & answers

3 of 15 answered free · 12 unlock

Read each answer, close it, and say it in your own words. Your viva will ask. Now you'll know.

  1. 01Concept

    Why Flutter for this app, and why is it acceptable in the JNTUH R22 scheme?

    The centre needs one app used by three roles on cheap Android phones, and Flutter's single Dart codebase delivered all of them with one widget system and one test suite. Flutter appears in the R22 mobile-application elective stream, and the backend uses the Node.js stack from Full Stack Development, so the project is squarely inside the scheme's taught tools.

  2. 02Concept

    Why MongoDB rather than MySQL for the backend?

    The write-heavy records are small, self-contained documents — a day's delivery outcome, a pause window, a menu day — and the access pattern is always by customer, route or date, which suits MongoDB's document model and simple horizontal growth. Relational integrity matters less here because each delivery embeds its subscription reference and status, and Mongoose schema validation plus the idempotent generation job guard the invariants I care about.

  3. 03Concept

    Explain the cut-off rule and why you encoded it as a pure function.

    A pause or resume requested before 21:00 takes effect from tomorrow; after 21:00 it takes effect from the day after, because cooking quantities are decided at the cut-off. Encoding it as one pure function taking request-time and returning the effective date means the same rule drives the app's confirmation message, the generation job and the billing lines, and my unit tests pin the 20:59 and 21:01 boundaries so staff and customers always hear one answer.

+12 more questions, with answers

Try the free ones out loud first. Your examiner will not accept “it's in the PPT”.

Source code & how to run

6 steps · complete source code · unlocks with the project

Unlocks with the project · ₹2,000

6 steps · source code zip

Prerequisites, install, seed data and tests, written for demo day. Plus the complete source.

Unlock for ₹2,000

READMEFIRST

249 words · unlocks with the project

What to change before it goes anywhere near a submission. Skipping it is how the demo fails live.

Unlocks with the project · ₹2,000

249 words · ~1 min read

The checklist of things to rename, re-seed and re-think so the project reads as yours.

Unlock for ₹2,000

Instructions

377 words · unlocks with the project

How to study it, adapt it and walk your examiner through it, step by step.

Unlocks with the project · ₹2,000

377 words · ~2 min read

Report structure, formatting rules and the submission checklist your department will grade.

Unlock for ₹2,000

References

7 sources

  1. Flutter Documentation — architecture, testing and platform integration
  2. Dart Documentation — language, libraries and effective style
  3. Express — Node.js web application framework documentation
  4. MongoDB Manual — documents, indexes and update atomicity
  5. FSSAI — Food Safety and Standards Authority of India (registration and licensing of food businesses)
  6. OWASP Mobile Top 10 (2024) — mobile application security risks
  7. Ian Sommerville, Software Engineering, 10th ed., Pearson

Cite this bundle

OnlyProjects. (2026). Tiffin Subscription and Route-Delivery App for a Hyderabad Tiffin Centre (Flutter): MCA Mobile App Development project bundle [Educational resource]. https://onlyprojects.online/projects/mca-mobile-tiffin-subscription-delivery-app

Future scope

1 min read

  • Online payments (UPI intent/Razorpay) with automatic bill reconciliation and payment reminders.
  • Google Maps route view with optimised stop order and live partner location for the owner.
  • Push notifications for menu changes, pause confirmations and bill availability.
  • Breakfast and dinner services with per-slot subscription plans and a shared generation job.
  • Demand analytics — pause-density forecasting for purchasing, and per-locality growth trends for planning a new route.

Keep browsing

Same degree, same syllabus slot, different idea. Pick the one your guide will actually approve.