Skip to content

Reichman Budget Automation

Product Design + BuildDesigned, built, shipped

A student photographs a receipt; the university's finance office gets the exact PDF memo it requires. Refund cycles went from three weeks to days, and five tools became one.

Reichman Budget Automation — hero
Type
Product Design + Build
Role
Product, design, full-stack build
Stack
Next.js 16 · React 19 · Tailwind · Supabase · Gemini OCR · Puppeteer + pdf-lib · Railway
Year
2026
3 weeks → days
Refund cycle time
5 → 1
Tools replaced
~$5
Monthly run cost
01

The problem

Before this app: a student WhatsApps a photo of a receipt. The finance officer copies the supplier into Excel, adds a row to a Monday board, and at the end of the month re-types everything into a PDF memo template — the tzkir — that the university requires in an exact format. Refunds took three weeks on a good month. Students stopped bothering with small amounts. The club ate the cost.

The tzkir header: the university-mandated PDF the whole product is designed backwards from

The tzkir header: the university-mandated PDF the whole product is designed backwards from

02

The app

Open it. Photograph the receipt. Gemini reads supplier, amount, and date and fills the form; you confirm the category and which budget it hits, and submit. Ten seconds, from a parking lot, in Hebrew. Submissions land in one admin queue — bulk approval for everything clean, flags on outliers, and editing allowed in exactly one place so nothing drifts.

Student flow: photograph a receipt and Gemini auto-fills supplier, amount, and date

Student flow: photograph a receipt and Gemini auto-fills supplier, amount, and date

03

The month closes in one click

On the 30th, the admin hits 'generate tzkir'. The system pulls every approved submission, fills the university template, attaches the original receipts, and signs. Fourteen seconds, one file. The finance office receives the same artifact it always did — the work upstream just disappeared.

One-click monthly tzkir generation with live PDF preview

One-click monthly tzkir generation with live PDF preview

04

What I did

Product, design, and the full build — designed backwards from one constraint: every month, produce that exact PDF cleanly and on time. Beyond shipping, I built it to be inherited: full Hebrew RTL down to keyboard shortcuts, and a repo documented for a next maintainer who has never seen React — status-flow diagram, an architecture TL;DR in Hebrew, comments only where the why isn't obvious.

Admin review queue with bulk approval and flagged outliers — the only place editing is allowed

Admin review queue with bulk approval and flagged outliers — the only place editing is allowed

Decisions AI couldn't make

01

The artifact is the spec

The product isn't 'a refund app' — it's a machine that produces one university-mandated PDF. Designing everything backwards from the tzkir is what kept the scope honest and the tool adoptable by the finance office.

02

Students edit only what the model can get wrong

Gemini fills the form; the student can override supplier, amount, and date — nothing else. Fewer fields means fewer mistakes and a ten-second flow, but deciding where trust ends and confirmation begins was a product call, not a technical one.

03

One queue, one place to edit

Every edit happens in the admin queue and nowhere else. It costs some flexibility, and it's the reason the data never drifts and a non-technical maintainer can reason about the system.

What I got wrong

I treated the student flow as the product and polished it first. The real user turned out to be the finance officer — the admin queue is where trust is won or lost, and it earned its shape only after real submissions started arriving.

Built with Claude Code + Next.js/Supabase/Gemini; every product decision was mine.

Next project

TeachBack

A voice-first AI learning partner — you explain out loud, Lumi asks what you can't answer yet.