Open source · MIT — Cloud in private beta

The open-source operating system for institutional dining.

MessMate turns meal RSVPs, cook quantities and wastage ledgers into software. Self-host it in your campus basement, or join the private beta of MessMate Cloud — hosted, multi-tenant and built API-first.

$ git clone https://github.com/abu-devel0per/messmate.git

  • v0.3 pre-1.0
  • 4 services / day instrumented
  • 1 active device per account, enforced

01 — The problem

Institutional kitchens cook for a number nobody wrote down.

Conventional mess halls prepare a fixed quantity regardless of who actually shows up. When the hostel empties for the weekend, the rice doesn't know.

OVERCOOK

Food waste, financial loss and disposal cost when quantity is a guess.

UNDERCOOK

Late arrivals find empty serving trays — the inverse failure of the same guess.

PAPER ROSTER

Manual attendance drifts, billing disputes grow, and shared accounts eat for free.

02 — The platform

One system of record,
from RSVP to ledger.

MessMate is an operations platform, not an attendance app. Four engines work the same shift, on the same data.

E·01

RSVP & cutoff engine

Students opt in or out of each meal before a strict cutoff, with live countdowns and push reminders when the window is closing.

PUT /api/student/today

E·02

Predictive cook quantities

RSVP headcount becomes raw ingredient weights — rice, dal, flour, curries — plus a configurable buffer margin for the kitchen.

GET /api/admin/cooking-quantities

E·03

Wastage ledger

Cooked vs. consumed vs. disposed, weighed in kilograms, with percentage and monetary loss computed automatically per meal.

POST /api/admin/wastage

E·04

Single-device sessions

Server-enforced session rotation: a new login revokes the old token at the JWT level. Account sharing dies quietly.

sid claim · session_invalidated

E·05

Live floor operations

WebSocket headcount ticks during service, roster verification queues onboard students, and campus-wide broadcasts land via FCM.

WebSocket manager · FCM dispatcher

03 — Scrollytelling

One day on MessMate

06:15

The cutoff

RSVPs freeze for breakfast. The headcount locks and the buffer is applied.

05:3022:00

  1. 05:30

    Kitchen opens

    The menu for the day is published to every student's home screen — with dietary indicators for veg, non-veg and special diets.

  2. 06:15

    Breakfast cutoff

    Opt-ins freeze. The RSVP count becomes a locked headcount, and the cooking quantity estimator converts it into kilograms with a safety buffer.

  3. 09:45

    Lunch cutoff

    Students heading off campus toggle out before the window closes. The manager's dashboard shows expected diners vs. absentees in real time.

  4. 12:30

    Service, instrumented

    Attendance is verified at the counter and a live WebSocket headcount ticks on the manager's screen — no clipboards, no shared logins.

  5. 15:00

    The weigh-in

    Prepared weight and leftover weight are logged in kilograms. The wastage ledger auto-computes waste percentage and monetary loss for the meal.

  6. 20:30

    The roll-up

    Monthly mess-fee accruals update through the billing service, and a broadcast for tomorrow's special lands in every notification shade via FCM.

04 — For developers

API-first.
Multi-tenant by design.

The React Native apps are just the reference client. Everything below them is a documented, async API you can build your own front-end against.

$ docker compose up
✔ backend      FastAPI 0.100+        :8000
✔ mongo        MongoDB · Motor async :27017

$ curl -s localhost:8000/api/student/today \
    -H "Authorization: Bearer $JWT"
{
  "meals": [
    { "name": "lunch",   "opted_in": true,  "cutoff": "09:45" },
    { "name": "dinner",  "opted_in": false, "cutoff": "18:45" }
  ],
  "headcount_live": 232,
  "session": { "device_bound": true }
}
REST surface/docs & /redoc included
  • POST/api/auth/loginJWT issue + session rotation
  • GET/api/student/todayToday's menu & opt-in state
  • PUT/api/student/todayToggle meals before cutoff
  • GET/api/admin/dashboardLive headcount & summary
  • GET/api/admin/cooking-quantitiesIngredient weights from RSVPs
  • POST/api/admin/wastageLog kg + computed loss
  • POST/api/notifications/broadcastFCM push to all students

Multi-tenant router

A resilient DB router (db_router.py) isolates every campus's data while one deployment serves them all.

Async end to end

FastAPI + Motor + WebSockets keep headcounts live under load. Interactive Swagger at /docs.

Tested & typed

Pytest backend suites, E2E user-journey scripts, TypeScript front-end. CI-friendly from day one.

05 — Two ways to run it

Self-host it free.
Or let us carry the pager.

MessMate is early-stage: the core is MIT-licensed and stable enough to pilot. The hosted cloud is in a private beta with a short waitlist.

Community

Self-hosted

₹0 / forever, MIT

  • Full stack — FastAPI, Expo apps, deploy scripts
  • Your MongoDB, your domain, your data
  • One-click Windows launcher & Docker Compose
  • Community support via GitHub issues
Read the deploy guide

docker compose up -d

Private beta

MessMate Cloud

Free during beta

  • Hosted, multi-tenant — onboarding in minutes
  • Push notifications & Razorpay wired for you
  • Managed backups, uptime and upgrades
  • Direct line to the team while we're small
Join the waitlist

no card · no lock-in · export anytime

Early-stage means honest pricing: the beta is free, and self-hosting stays free forever. We'd rather earn the upgrade than trap it.

06 — The ledger

Shipped, in the open.

  • shipped v0.1

    Foundations

    JWT auth with server-enforced single-device sessions, multi-tenant DB router, student & admin apps.

  • shipped v0.2

    The meal engine

    Per-meal RSVPs, cutoff windows, cyclical menus and the predictive cooking-quantity estimator.

  • shipped v0.3

    Accountability layer

    Wastage ledger with cost loss, Razorpay billing, FCM broadcasts and the live WebSocket headcount.

  • now beta

    MessMate Cloud

    Private-beta hosted platform. Onboarding the first campuses from the waitlist, slowly and carefully.

  • next v0.4

    On the workbench

    iOS via TestFlight, offline-first kiosk mode, and a public analytics API for campus dashboards.

07 — Questions

Asked, answered.

Yes — the whole stack. The FastAPI backend, the React Native / Expo clients, and the deploy scripts are MIT-licensed. Read it, fork it, run it, ship it.

No. Self-hosting is the primary path: a MongoDB instance and docker-compose up gets you a working deployment. The cloud exists for teams who'd rather not carry the pager.

One deployment can serve many campuses. A resilient database router isolates each tenant's data, so a college, its hostels and its PGs share infrastructure without sharing data.

Razorpay subscriptions and invoicing are built in for mess fees. Don't like Razorpay? The billing service is one module — fork it and swap the provider.

Good first issues are labeled in the repo. Backend is Python (pytest), front-end is TypeScript. Star it, open a PR, or just tell us what your mess does that ours doesn't.

Applications open · limited pilot slots

Cook for the people
who actually show up.

MessMate Cloud · private beta · self-hosted core under MIT, always.