This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle
What I Built
Prep Sheet is a prep-planning prototype for independent cafes, bakeries, and food counters. It helps answer a practical morning question: how much should the kitchen prepare for each menu item?
Food businesses have to balance two costly outcomes: preparing too much can mean waste, while preparing too little can mean turning customers away after a sell-out. Prep Sheet takes menu prices and costs plus recent daily sales, then turns those records into an item-by-item prep recommendation.
The Telegram bot lets an owner enter a menu and daily sales in a private chat. Entries are validated and previewed before the owner confirms them. The app stores confirmed records locally in SQLite, separated by Telegram chat ID. /prep produces a next-day brief from the last seven recorded sales rows per item and treats a recorded stock-out as evidence that demand may have been higher than sales.
The potential customer is a small cafe owner or bakery operator who currently relies on memory or a spreadsheet to decide what to prepare. A paid version could be useful as an affordable daily planning tool, but I have not yet tested willingness to pay with cafe owners.
Demo
Video Demo:
cd prep-sheet
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -e ".[tabpfn]"
python -m prepsheet demo --forecast-provider tabpfn
The demo replays a synthetic 120-day cafe ledger. Add TABPFN_TOKEN to a private .env and install the optional TabPFN extra to try the hosted TabPFN path. The output reports whether TabPFN succeeded or a local fallback was used. API calls may use account quota.
To try the Telegram flow locally, configure TELEGRAM_BOT_TOKEN and an allowlisted private chat ID in .env, then run python -m prepsheet telegram. The bot is a local long-polling process and must stay running.
Code
Prep Sheet
Prep Sheet is a small-cafe prep planner for a bakery or counter in India. Its synthetic-data demo ingests sales notes, corrects for sell-outs, forecasts demand, converts that into prep quantities, and writes a short practical brief. Its local Telegram bot can collect a cafe's menu and daily sales, then produce a basic prep plan from those saved records.
What this project does
- Parses owner notes such as "sold 14 croissants, 9 cold coffees, puffs gone by 4pm, binned 6 muffins" into structured rows.
- Corrects obvious sell-out bias by treating recorded sales as a lower bound when a stock-out happened.
- Builds a simple per-item demand feature table from synthetic cafe data.
- Forecasts demand with a local heuristic by default, or the official Prior Labs TabPFN client when explicitly selected.
- Converts demand into a prep quantity using a simple newsvendor-style ratio.
- Generates a short morning brief with a local template…
The repository includes the Python source, setup instructions, a synthetic demo, and tests.
How I Built It
Prep Sheet is a Python 3.11 project. The demo generates cafe sales and context features, estimates demand after accounting for sell-outs, converts forecasts to prep quantities, and formats a morning brief.
For the model experiment, I integrated Prior Labs' TabPFN through its official tabpfn-client interface. When explicitly selected and configured, TabPFNRegressor is trained on the demo's generated tabular features and synthetic true_demand labels. The run reports provider status and falls back to a local heuristic if the hosted call cannot produce a result.
The Telegram workflow is a separate real-input path: it validates menu and sales entries, previews them for confirmation, saves them to a per-chat SQLite database, and calculates prep from recent recorded sales. That Telegram forecast currently uses a local recent-average calculation, not TabPFN. The TabPFN experiment currently runs on synthetic demo data; it has not been validated on a cafe's real sales history.
Two other providers are available as explicitly opt-in Telegram workflows. train-tinker fine-tunes a LoRA adapter using the project's small synthetic sales-note examples; after configuring the returned model path, /sales-note sends a free-form note to Tinker and turns its structured extraction into a review draft. The owner must inspect and confirm the rows before they are saved. I verified the hosted path with a one-step fine-tune and a synthetic extraction note, but have not evaluated quality on real cafe notes; the resulting checkpoint is experimental, not a production-ready sales parser. /voice sends the current prep text to ElevenLabs Text to Speech and returns an audio file. I verified speech generation with a synthetic prep sentence. Both paths are optional hosted calls and may use provider quota.
Gemini is optional and is used only to phrase a structured prep brief. It is not the forecasting model and is not an open-weight model. When enabled for Telegram /prep, the structured summary is sent to Gemini; otherwise the app uses a local template.
Why Does Open Innovation Matter?
TabPFN gives this project an alternative to building and maintaining a conventional tabular model from scratch. Its client fits behind a provider boundary, so the demo can explicitly select TabPFN, report when it was used, and retain a local fallback when it is unavailable. The source code, data flow, inputs, and fallback behavior are inspectable and can be changed by another developer.
This is not an offline or zero-cost claim: the current TabPFN integration calls a hosted service, needs a token and internet access, and may consume account quota. The demo sends synthetic features rather than a cafe owner's actual Telegram sales to TabPFN. The actual cafe-data workflow stays in local SQLite unless an owner explicitly uses /sales-note (sending that note to Tinker), /voice (sending the prep text to ElevenLabs), or enables Gemini briefing (sending the structured prep summary to Gemini).
The next meaningful step is to evaluate a model on enough real, permissioned cafe history and connect it to /prep only if it improves on the simple local baseline.
My Agent Session
This is an expanded chronological reconstruction of the project decisions and implementation work; earlier turns were summarized, so it is not a verbatim raw transcript.
Prize Categories
- Best Use of TabPFN — TabPFN is used for the synthetic historical-demand forecasting experiment described above. The Telegram real-sales forecast does not yet use TabPFN.
-
Best Use of ElevenLabs — The optional
/voicecommand converts the prep brief into speech and sends the generated audio to the Telegram chat. -
Best Use of Tinker — Tinker fine-tunes a LoRA adapter for structured sales-note extraction, exposed through the opt-in
/sales-noteworkflow with a review-before-save step. The hosted path was smoke-tested on synthetic data, but I have not yet measured a clear performance, latency, or cost improvement over the rule-based extractor baseline; that comparison is still needed to fully meet this category's judging criterion.
submitted by:
Top comments (0)