DEV Community

Reet Singh
Reet Singh

Posted on Fully Autonomous

Maa ka Drawer: finding my mother’s bills with Tiger Data and open multilingual search

Hacktoberfest Weekend Challenge: Build for a Friend Submission 🤝

This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend.

What I Built

A receipt can be saved and still be hard to find. You remember the washing machine, the shop, or what broke, not necessarily the filename or invoice number.

I built Maa ka Drawer for my mother: a small household receipt finder that combines open multilingual embeddings with Tiger Cloud PostgreSQL keyword and vector search. The goal is to make “find that bill” a smaller job.

I chose the problem for this prototype. I have not yet tested it with her, so I cannot claim that it has saved her time or quote feedback she has not given.

The app opens onto a drawer of illustrated cards. Hovering lifts and tilts a card; tapping or clicking opens the receipt. Search works over the saved text, and an original PDF or photo can stay attached. If the receipt does not state a warranty expiry, that field stays blank.

The running Maa ka Drawer app with six fictional household receipts

Less typing: upload or speak

A JPG, PNG or PDF upload now extracts text and suggests a recognised bill type. A synthetic electricity bill became Electricity bill → Services, retaining its INR 400 amount and original image. Tesseract.js reads English/Hindi text on the app server. PDF.js reads embedded text directly; scanned-page OCR is implemented, limited to the first three pages, but its browser retest is still pending. Photos and embedded-text PDFs passed functional checks. Blurred photos, handwriting and unfamiliar bill layouts can fail.

A receipt image recognised as an Electricity bill

Speak receipt records a short Hindi or Indian English note, or accepts an audio file. Local Whisper-small, via the ONNX conversion and Transformers.js, transcribes the audio. A conservative parser suggests the item and explicitly stated amount. A synthetic Hindi development recording produced Electricity bill · ₹400; the imperfect transcript remains visible for correction. Voice notes are labelled as notes, not original invoices. The recording is temporary; only reviewed text is saved.

Local Hindi transcription with an editable transcript and a 400 rupee bill suggestion

The voice verification record uses two Murf-generated development fixtures, not a held-out accuracy test or my mother's feedback. Transcription and cloud save/reload were verified separately. Further live-microphone and noisy-household testing remains pending. Murf Isha provides the Indian English demo narration; Murf does not transcribe user notes.

Demo

Watch or download the narrated demo video.

The video is a captioned walkthrough with Murf Isha Indian English narration assembled from screenshots captured during real interactions with the app. It shows Hindi search, receipt evidence, a no-match query, uploading a receipt photo with OCR, Hindi voice transcription, an attached PDF, archive, undo, and persistence after reload. It is not a continuous screen recording. Every demonstrated receipt is fictional.

Demo release and setup notes · Expanded scene notes

Code

Browse the complete source on GitHub.

The repository includes the app, MIT license, PRD, schema, tests, evaluation queries and results. Run it locally with Node.js 22+, npm ci, npm run build, and npm start.

How I Built It

The useful AI task here is retrieval. A Hindi query such as कपड़े धोने वाली मशीन can find an English washing-machine receipt even when the exact query words are absent.

The model is multilingual-e5-small, using Xenova’s ONNX conversion through Transformers.js. Quantized inference runs on the app server. Queries and receipt chunks become normalized, 384-dimensional vectors.

PostgreSQL stores source text, metadata, full-text search vectors and pgvector embeddings. Exact words and invoice identifiers matter, so keyword search remains part of the system. Reciprocal rank fusion combines keyword and semantic rankings. A similarity gate filters weak or ambiguous semantic matches. These scores are not probabilities.

The interface uses React and Vite; Express serves the API and built app. PDF.js renders originals inside the receipt view. Codex helped implement and test the project, and generated appliance illustrations provide visual cues. The illustrations are not photographs of my mother’s possessions.

Tiger Data is the live data layer. A dedicated free Tiger Cloud service stores receipt text and 384-dimensional embeddings in pgvector. A live verification run passed saving, exact invoice retrieval, vector search, reconnect persistence, archive exclusion and undo. The verification record includes the timestamp and pgvector version. The original gallery/PDF walkthrough and retrieval benchmark used local PGlite. The new OCR and voice-entry captures were taken with the app connected to Tiger Cloud. Cloud persistence was verified separately.

The free service presents a private Timescale certificate authority. I pinned that CA locally on first connection and kept chain and hostname checks enabled for subsequent connections. This initial trust-on-first-use step is disclosed in the README; it is not a publicly authenticated certificate chain.

What worked—and what did not

I ran a fixed evaluation over six fictional receipts and 18 queries:

Search mode Correct first result on 14 positive queries Correct no-match responses on 4 negative queries
Keyword 8/14 4/4
Vector 11/14 4/4
Hybrid 12/14 4/4

The full query set and outcomes are public. This is a small, builder-authored evaluation. A Hindi washing-machine phrase was rejected, and a Hinglish ceiling-fan query returned the purifier. Those failures limit how confidently I can hand this to someone else.

All 21 automated tests pass, covering retrieval, identifiers, validation, source-file serving, archive/undo, database persistence, actual image OCR and conservative voice-note parsing. Desktop and phone layouts were checked in the browser.

Why Does Open Innovation Matter?

The open model gives this project a retrieval component I can run, inspect, replace and test without a hosted generative API. After the weights are downloaded, local mode keeps receipt data and inference on the laptop. The verified Tiger Cloud mode stores receipt text and embeddings remotely, while model inference and original attachments stay on the app server. That mode is not fully offline.

The model does one limited job: help locate existing evidence. It does not write an answer about warranty coverage. A user can open the saved text and original document and see what the receipt actually says.

That distinction shaped the rest of the app. Text extracted from a receipt or transcribed from speech stays editable and requires review. Dates are confirmed by the user. Archiving is reversible. The prototype is for one household and has no public account system.

My next step is a real trial with my mother: ask her to find a bill, observe the words she uses, and improve retrieval against those examples. That feedback will matter more than adding another animation.

Prize Categories

Best Use of Tiger Data — real receipt text and open-model embeddings are stored in Tiger Cloud PostgreSQL with pgvector. The application combines full-text and vector rankings, and the public verification record demonstrates the live integration.

Top comments (0)