Inspiration
As students living away from our families' guidance, we soon realised that cooking and feeding ourselves is much more difficult than one might expect. Meal prep, expiring food, and kitchen disasters are just some of the many challenges students face every day. This led us to create a centralised AI chatbot and website to manage student food inventory efficiently and effectively.
What it does
Kevin can:
- Plan your week of meals from what's in your fridge, what you've bought, and what you're craving — reusing leftovers and prioritising food that's about to expire so nothing goes to waste.
- Personalise every plan to your diet/lifestyle, budget per serving, cooking experience, max cook time, and currency.
- Build your grocery list automatically (what the plan needs minus what you already have), with realistic per-package prices and a running total — and you can add or tick off your own items too.
- Track your fridge with expiry dates; add, edit, and delete items on the website or through Discord.
- Scan receipts — snap a photo of your grocery receipt in Discord and Kevin reads the items straight into your fridge with estimated expiry dates.
- Help you cook hands-free — say "Kevin" in a voice channel while cooking ("Kevin, the sauce is too salty") and he answers out of the way of the stove, so you never take your eyes off the food.
- Remind you to defrost tomorrow's meat and auto-generates next week's plan and grocery list. Everything stays in sync: a receipt scanned in Discord instantly shows up on the website, and ticking off a grocery item automatically stocks your fridge.
How we built it
We started by designing around a single backend as the source of truth: an Express + SQLite API that owns all the data and is the only piece that talks to the AI (Google Gemini). The Discord bot (discord.js) and the Next.js website are both thin clients of that API, which is why state stays perfectly consistent across them. From there we layered on features one workflow at a time — meal generation, preferences, the fridge, receipt vision, and finally hands-free voice — each as a backend endpoint any client could call.
Challenges we ran into
- Too many features, one weekend. Scoping and sequencing them so each shipped as a working, verified slice — instead of a pile of half-finished ideas — was a constant balancing act.
- A mid-build pivot from Claude to Gemini. Our API key was for Google Gemini, not the Anthropic Claude we'd scaffolded against, so we had to swap the entire AI layer partway through.
- Free-tier limits. We repeatedly hit Gemini's daily quota, which forced us to be deliberate about when and how we called the model.
- Real-time voice. Receiving and decoding live Discord voice audio, then transcribing it and gating on a wake word, was the hardest system to get working reliably.
Accomplishments that we're proud of
- A genuinely cross-platform, always-in-sync system — Discord and web share one live source of truth.
- Hands-free voice cooking help that actually affects the product: you speak, Kevin transcribes and answers, no screen needed.
- Receipt-to-fridge in one photo — turning a messy real-world receipt into structured inventory.
- Because we isolated all AI logic in one service, our Claude→Gemini pivot only touched a single file —the architecture paid off exactly when we needed it to.
What we learned
- Pivots and constraints temporarily create challenges but eventually lead to more effective systems — being forced to route all AI through one backend made every later feature (vision, voice, provider swaps) dramatically easier to add.
- Isolating external dependencies (the AI provider, the database) behind one layer is worth the upfront discipline.
- Working within tight limits (API quotas, time) pushed us toward simpler, more reliable designs.
What's next for Kevin
- Calendar & favourite meals - save meals you love and schedule them.
- Live grocery pricing via web-grounded search, replacing AI-estimated prices with real store data.
- Multi-user / multi-household support so roommates can each have their own preferences and cravings.
- Streamlined performance - faster response times and a local wake-word model to cut voice latency and cost.
- Longer-term persistence - moving from local SQLite to a hosted database.
Built With
- css
- discord
- javascript
Log in or sign up for Devpost to join the conversation.