Inspiration

Walk into almost any kedai runcit or kopitiam in Malaysia and you'll find a "buku 555": a small notebook where the owner writes down who took what on credit. "Ah Seng, 2 Bag of Chips RM10." It runs on trust, but pages get lost, names get smudged, and nobody likes asking a regular customer for money. Owners quietly lose hundreds of ringgit a month to tabs that are simply forgotten. We wanted to keep the notebook (it works, and owners trust it) and fix the part that doesn't: getting paid.

What it does

555 Buku turns a photo of a handwritten IOU page into money collected:

  • Scan: snap a page of the notebook. AI reads each line's name, item, amount and date, flags crossed-out lines, repayments and anything it isn't sure about, and the owner checks every line before anything is saved.
  • Collect: one tap sends each customer a PayPal invoice. Each customer also gets their own page showing what they owe, with a button to pay through PayPal. When PayPal says it's paid, the debt ticks itself off.
  • Remind: the owner sets the rules once (when to start, how often, when to stop, and never during Friday prayers). Reminders show on a calendar, can be dragged to another day, and go out as PayPal reminder emails or a one-tap WhatsApp message in the owner's chosen tone.
  • Nudge: an AI assistant that answers "who should I chase this week?" and drafts a polite reminder for a customer.
  • Ledger and Insights: an AG Grid ledger of who owes what, overdue first, and an AG Studio dashboard of totals and trends.
  • Works on a phone or a laptop, in nine languages (English, Malay, Chinese, Tamil and more).

How we built it

  • PayPal: the PayPal Invoicing API (v2, sandbox) creates and sends invoices, checks their status and sends reminder emails. PayPal webhooks (invoice paid, cancelled, refunded) update a Postgres database, so a payment shows up even while the app is closed. Owners can also sign in with Log in with PayPal.
  • Reading the notebook: Google Gemini (gemini-3.5-flash) reads the photo through the Vercel AI SDK and returns structured rows. Photos are kept in private Vercel Blob storage. The app then checks the model's work: dates are read day/month the Malaysian way, a missing year becomes the most recent such day, and anything unreadable is flagged for the owner instead of guessed.
  • The ledger and insights: AG Grid for the ledger, AG Studio for the dashboard, including a custom "who owes you" widget and an AI panel run by Nudge.
  • Reminders: a scheduled job runs every hour and sends due reminders at the owner's chosen time. Bryntum Scheduler and Calendar show the plan, with drag to move.
  • Nudge: Gemini through the AI SDK, with tools that read the ledger and draft messages; it never sends anything itself.
  • Stack: Next.js 16 and React 19 in TypeScript on Vercel, Neon Postgres, nearly 1,000 unit tests.
  • How we worked: a team of three sharing one GitHub repo, small pull requests reviewed before merging, and Claude Code as a pair programmer with a shared rulebook.

Challenges we ran into

  • Handwriting is messy, and so are dates. The model sometimes read "9/11" as September instead of 9 November, or guessed last year. We now take the date written at the start of a line ourselves and flag anything that isn't a real day.
  • Money needs to be exactly right. Retrying a failed batch must never send a customer two invoices, and a refund or cancellation has to undo a "paid" tick. We built per-invoice results, safe retry and webhook handling with tests for each case.
  • Keeping the owner in control. AI reads and drafts, but nothing is saved, sent or charged until the owner approves it.
  • Local details matter. Ringgit invoices only work between Malaysian PayPal accounts, and reminders should never land during Friday prayers.

Accomplishments that we're proud of

  • The whole journey works end to end in the PayPal sandbox: photo of a notebook, checked lines, PayPal invoices sent, the customer pays, and the debt ticks off by itself.
  • An app a corner-shop owner can use on their phone, in their own language, without changing how they already work.

What we learned

  • PayPal's invoicing does a lot of the heavy lifting (emails, a payer page, reminders), which let us focus on the owner's experience.
  • AI is great at reading and drafting, but it needs checks around it, especially for money and dates.
  • Small, reviewed pull requests kept three people (and an AI pair programmer) from stepping on each other.

What's next for 555 Buku

  • A monthly summary for owners ("RM2,340 collected, 3 regulars always late") that could also support a small-business loan application.
  • Reminders over WhatsApp and Telegram sent automatically, where customers already are.
  • A "talking till": the hawker says the order out loud and the customer pays by PayPal.
  • Testing with real shop owners in our neighbourhood.

Built With

Share this project:

Updates

Submission history