Inspiration
Every hosteller knows the routine: you go home for the weekend, skip the mess for three days, and you're entitled to a refund — but by the time month-end comes around, you've forgotten exactly which meals you missed, the mess warden wants proof, and the whole thing feels like more hassle than it's worth. So most students just... don't claim it. Money quietly stays on the table every single month, across every hostel, because there's no easy way to track it.
I wanted something I could open in two seconds, tap once, and trust completely — without needing to log in, without needing wifi (hostel networks are notoriously unreliable), and without handing my data to anyone.
What it does
Mess Refund Tracker is an offline-first PWA that turns "I think I skipped lunch on Tuesday" into a precise, claimable refund.
- One-tap logging — tap any date on the calendar, mark which meals you skipped, done.
- Configurable refund rules — pick a preset (Standard / Flat Rate / Light Refund) or set your own hostel's exact per-meal rates.
- Live forecast — a running projection of what you're on pace to be owed by month-end, so you're never surprised at the end of the cycle.
- Monthly-cycle history — because refunds reset every month, the app thinks in months too, not a meaningless all-time pile.
- Export tools — generate a clean, formal "Rebate Claim Report" (print/PDF-ready) or a shareable receipt image to hand the mess warden directly.
- Backup & restore — export your data as JSON anytime, so switching phones or browsers never means losing your history.
- Zero everything else — no login, no backend, no database, no network calls after the page loads. Your data lives only on your device.
How I built it
Vanilla HTML, CSS, and JavaScript — deliberately no framework. The entire app runs client-side with localStorage as the only persistence layer, styled with Tailwind via CDN for speed, and rendered receipts client-side using the Canvas API for the PNG export. There's no build step: clone it, open index.html, and it works.
I built it in Antigravity IDE, working through tightly scoped iterations — first the core logging and refund-calculation logic, then a visual pass (a dark, glassmorphic theme with a slow-drifting CSS gradient background), then three "make it a real product, not a spreadsheet" features: the live forecast, JSON backup/restore, and the image-receipt export.
Challenges I ran into
The biggest one was discipline, not code: it's easy to keep adding features when the AI tooling makes each one feel cheap to build. The real challenge was deciding what to cut — no accounts, no sync, no backend — because every one of those would have broken the "works instantly, works offline, works for anyone" promise that's the actual point of the app. Keeping localStorage as the single source of truth, with refund amounts always recalculated live from current settings (rather than cached at log-time), also took a careful pass to get right — otherwise changing your rates mid-month would silently corrupt past totals.
What I learned
Constraints are a design tool, not just a limitation. Ruling out a backend from the start forced every feature — forecasting, backups, exports — to be solved client-side, and the result is an app that's faster, more private, and more honestly "done" than if I'd reached for a database by default.
What's next
A shareable, anonymized "average refund recovered" stat across users (still privacy-first, opt-in only), and a lightweight way to split tracking across roommates who share a mess bill.
Built With
- antigravity
- canvas-api
- css3
- html5
- javascript
- localstorage
- novus.ai
- tailwind-css
Log in or sign up for Devpost to join the conversation.