Voice Sales Logger
small ai to solve big problems, one step at a time.
There is a stretch of 9th Street in South Philadelphia you have probably seen, even if you have never been. It is the Italian Market, the one Rocky runs through. It has been operating outdoors since 1873, the oldest continuously running market of its kind in the country. Vendors own their stalls for generations and the market never closes. Rain, snow, heat, all of it.
One of those vendors is Tran. She came to Philadelphia after the Vietnam War and has run her produce stand for 40 years. Her employees serve customers in Spanish and English. She runs the whole business in Vietnamese.
Watch a single sale and the gap is obvious. A customer hands over a basket. Tran adds up the prices in her head, punches them into a calculator, bags the items, and hands them back. Then the sale is gone. No record, no data, no way to know what sold best last Tuesday.
That gap is bigger than convenience. Cash leaves no paper trail, and no paper trail means no proof of revenue. No loan, no grant, no SBA application. A 40-year business is effectively invisible to a bank.
So the question I started with was simple: what if logging a sale was completely hands-free, in the language she actually speaks, fast enough that it never slows her down?
You speak the order once. The app does the rest.
A vendor says the order out loud in Vietnamese, Spanish, or English. The app transcribes it on-device, parses the items, maps them to catalog prices, and shows a total. The vendor reviews it and taps Confirm. Only then is it logged.
🇻🇳 "năm trái táo, ba quả cà chua, hai củ hà nh tây" → five apples, three tomatoes, two onions → $5.60
Nothing is recorded without her confirming it first. Over time that adds up to the thing she has never had: timestamped, itemized transactions. A financial history.
Demo: https://youtu.be/MCdxrAyBASU
The whole pipeline runs on 2.1 billion parameters with zero external APIs. That was a deliberate choice, not a constraint I tolerated.
Nemotron ASR (nvidia, 0.6B) handles speech. A market stall is a hostile place for cloud APIs. Connectivity is unreliable, latency kills the flow, and sending a small vendor's revenue data to a third party is a bad default. On-device transcription means it just works, at the stall, every time.
Qwen 2.5 (1.5B) does the parse and translate step. It takes messy spoken language across three languages and turns it into structured items mapped to a price catalog. A 1.5B model is plenty for this narrow job, and keeping it small keeps the whole thing on-device alongside the ASR model.
SQLite stores every transaction for now. It is a single file with no server to stand up, which kept the scope small while I got the core pipeline working. The ledger does need to live on a server eventually, and that is the next real step, but for the hackathon a local database was the right amount of complexity.
A custom Svelte frontend (via gr.Server) drives the Record → Confirm → Done flow. The confirm step is the most important part of the UX, so the interface needed to be purpose-built rather than a default layout.
Modal runs the dev inference in GPU containers so I could iterate without wiring up local hardware.
Total: 2.1B parameters, 3 languages, around 5 seconds per order, 0 external APIs. Well under the hackathon's 4B Tiny Titan line and far under the 32B cap.
The small-model thesis is not a handicap here. It is the entire reason the thing is usable. Private, offline, cheap, and fast is what a real market stall needs.
Built for Tran. Built small. Built to last.
Ethan Markwalter · Philadelphia, PA
small ai to solve big problems, one step at a time.