Inspiration
A lot of Nigerian small business runs on WhatsApp voice notes: "I sew two agbada for Mr Bello, 25k each, him don pay 20k, balance by Friday." Turning that into a proper invoice means typing on a phone, so it rarely happens, and the balance lives in someone's head.
What it does
A tailor, mechanic or trader records (or uploads) a voice note in Pidgin or English. Gbam returns an itemised invoice: customer, items, quantity, unit price in naira, amount paid, balance and a real due date. Every field can be edited with live totals. The invoice goes out as a WhatsApp message (wa.me link) or a PDF with the artisan's own bank details and optional payment link. No payments are processed by Gbam.
How we built it
Built from an empty folder with the Devpost Learn skill pack (challengepost/learn-ai-basics), following 1-start to 6-ship: scope.md, prd.md and spec.md first, then five tested build slices. Python 3.12 + FastAPI backend, plain HTML/CSS/JS front end using MediaRecorder, ReportLab for the PDF (bundled font for the ₦ sign). Gemini audio understanding extracts what was said into a strict JSON schema at temperature 0. All money maths lives in plain code: line totals, total, balance and overpayment are recomputed, any model total is ignored, and a spoken total that doesn't match the items raises a warning. Amounts like "25k", "1.5m" or "eighteen thousand five hundred" and dates like "Friday" or "end of the month" are parsed in code. 94 pytest tests, Ruff clean.
Challenges we ran into
The build environment could not reach the Gemini API, so the live path was tested with mocks and the demo mode uses hand-written, clearly labelled results for three synthetic sample voice notes. Live mode works with your own GEMINI_API_KEY. Nigerian money talk ("25k", "1.5m", spoken numbers) and relative due dates also needed careful parsing.
Accomplishments that we're proud of
The balance is never an AI guess: the model listens, code calculates, and mismatches are flagged for the artisan to fix before sending.
What we learned
Writing the scope, PRD and spec first kept the build small and honest: no payment integration, no accounts, just voice note to invoice to WhatsApp. Splitting "listen" (model) from "calculate" (code) made the output testable.
What's next for Gbam
Run it against real noisy voice notes from artisans, add more Nigerian languages, and keep a simple history of sent invoices on the phone.(code) made t
What's next for Gbam
Run it against real noisy voice notes from artisans, add more Nigerian languages, and keep a simple history of sent invoices on the phone.
Built With
- fastapi
- gemini
- html
- httpx
- javascript
- pydantic
- python
- reportlab
Log in or sign up for Devpost to join the conversation.