Inspiration

Nigeria's informal traders—provisions sellers, fabric merchants, food vendors—run businesses that move cash daily but keep no records. No ledger means no proof of income, which blocks them from formal credit and loans. They need a simple, honest way to record sales and expenses that works offline, in their language, on cheap Android phones. That's why we built Trader Bookkeeper.

What it does

Trader Bookkeeper is a free, offline voice-first bookkeeping app for informal market traders. Speak your day's sales and expenses in English or Pidgin—"sold 3 bags of rice at 40k each" or "I sell am 40k"—and the app records it, parses it, and saves it to a local ledger. At the end of each month, generate a loan-readiness report as a PDF: total sales, expenses, profit, average daily sales, top items, and a signature line for the trader to take to a bank or microfinance lender. Everything runs offline, on the phone. No API keys. No internet required after the first download.

How we built it

  • Speech recognition: on-device Whisper (tiny.en model, ~75 MB) via whisper.rn. Downloaded once on first use, then works offline.
  • Audio recording: @fugood/react-native-audio-pcm-stream, which captures 16 kHz mono PCM from the microphone (Android's native recorder cannot produce the WAV format Whisper needs).
  • Parser: a rule-based TypeScript parser that understands numbers in multiple formats (40k, 40 thousand, ₦15,000), Pidgin phrases (I sell am, I don sell), units (bags, pieces, cartons), and tolerates common speech-recognition errors. It splits on "and", "then", and commas, and never drops unclear clauses.
  • Database: expo-sqlite with a schema for entries (date, type, item, quantity, unit, unit price, total) and a profile (trader name, business, phone).
  • Frontend: React Native + Expo Router. Three tabs: Record (mic button, editable transcript, or type), Today (running totals and entry list), Report (month picker, PDF generator). ## Challenges we ran into
  1. Network instability in Lagos. npm install and EAS Build both hang or reset on slow connections. Workaround: retry on failure, switch to phone hotspot, change DNS to public resolvers (1.1.1.1, 8.8.8.8).
  2. Windows symlinks. VS Code and Expo create symlinks for the Skill Pack folders. Windows blocks them by default. Fix: enable Developer Mode and run VS Code as administrator.
  3. Audio format mismatch. Android's native recorder outputs formats Whisper doesn't accept (MP3, compressed). Had to use a different library (react-native-audio-pcm-stream) with native code, which required a second build.
  4. Whisper on Pidgin. Whisper.cpp's tiny model is trained mostly on English. Pidgin sentences are often transcribed with English substitutions ("I sell am" → "I Celie am"). Solution: a parser that recognizes both spellings and handles common errors.
  5. Solo pivot. The project was planned as a 2-person team but became solo mid-way due to a team member dropping out. Scope had to be cut strictly: no past-days history, no report chart, no advanced settings.
  6. Low-end phone constraints. The Infinix Smart 7 has 2–4 GB of RAM. The Whisper base model (140 MB) is too heavy; tiny (75 MB) barely fits. Every screen must avoid unnecessary re-renders and must release the model when not needed.

Accomplishments that we're proud of

  • Offline-first speech recognition. No cloud API, no API key, no cost per transaction. The trader owns the data completely.
  • Pidgin-aware parsing. The app understands both English and Pidgin market language, which is rare in consumer apps and critical for Nigeria.
  • Honest loan-readiness report. A real-world artifact a trader can take to a lender. Not a fancy dashboard; a one-page PDF with signed proof.
  • Zero-friction on-device model download. The app downloads the 75 MB Whisper model on first use (one-time, ~2 minutes on 4G), then works fully offline. No setup ritual.
  • 35+ parser tests covering real Whisper output. The parser handles garbled Whisper transcripts, misspellings, filler words, and Pidgin phrases without crashing or silently dropping data.
  • Built with the Devpost Skill Pack and GitHub Copilot. Using structured planning (scope, PRD, spec) from day one kept the build focused and debuggable, even as a solo project. ## What we learned
  1. Speech recognition is hard on low-resource phones and non-English languages. Accuracy matters less than graceful degradation—the app must never crash on bad audio, and the parser must highlight low-confidence entries so the trader can fix them.
  2. Network reliability is infrastructure, not a feature. In Nigeria, build tools hanging on download is not a bug in the app; it's a fact of life. Retry logic, exponential backoff, and offline fallbacks save hours.
  3. Planning documents are not overhead. Writing scope, PRD and spec at the start, even for a solo hackathon, caught design debt early and made cutting features less painful.
  4. Rule-based parsing beats LLM for constrained domains. A Whisper transcript is predictable (numbers, names, units), so a TypeScript parser with tests is faster, cheaper, and more reliable than a second AI model.
  5. Offline-first is a feature, not a limitation. Users trust apps more when they know their data never leaves the phone. For a trader worried about privacy and without reliable internet, it's a selling point.
  6. Low-end Android matters. 2–4 GB phones are the majority globally. Optimizing for them is not a nice-to-have; it's the market. ## What's next for Trader Bookkeeper
  7. Voice accuracy on Pidgin. Collect real recordings from traders and retrain or fine-tune Whisper for Nigerian market language, or build a small Pidgin spell-corrector to post-process transcripts.
  8. Past-days history. A scrollable list of previous days' entries so traders can review and audit their own records over weeks and months.
  9. Cloud backup (opt-in). Let traders upload their ledger to a secure cloud once a week, encrypted, so they have a backup if the phone is lost. Keep it optional and clear about what data leaves the phone.
  10. Loan application helper. Pre-fill a simple loan application form with the report data, ready to take to a microfinance institution.
  11. Multi-currency support. USD, GHS, KES for traders in other countries.
  12. Offline sync. If a trader uses the app on two phones, sync entries when both are on the same Wi-Fi.
  13. SMS reporting. Send a daily summary via SMS so traders without a smartphone can see their data.
  14. Integration with microfinance platforms. So lenders can request and verify reports directly from the app (with the trader's permission).

Built With

Share this project:

Updates

Submission history