build

How I built my boyfriend a PA for RM5 a month

He runs his whole videography business alone, and his reminder system was me. So I built him one app for reminders, money, invoices, tax and finding clients. Here’s exactly how it works, and how to build your own.

by Chloe · 5 November 2026 · 12 min read

The short version

What
A phone app that handles the admin of a one-person business: reminders, money in and out, invoices, payment chasing, tax, a morning briefing and new leads.
For
Freelancers and tiny teams who run their business out of WhatsApp chats and memory.
Runs on
A web app saved to the Home Screen, Claude AI, iPhone Shortcuts and Google’s free APIs.
Costs
About RM5 a month for the AI. Hosting is free, or US$20 a month for reminders every 5 minutes.

The problem

My boyfriend is a videographer. He’s also the editor, the finance department and the sales team. He doesn’t run a company, he is the company.

His business used to live in fourteen WhatsApp chats, the Notes app, an invoice spreadsheet called invoices_FINAL_v3.xlsx, a receipt somewhere in his car, and his brain, which was full.

And his reminder system was me. “Babe, remind me to pay TNB.” “Babe, did Kopi Lab pay yet?” “Babe, where’s that receipt?”

So instead of being the reminder system, I built one.

What it does

Nine things, all in one app on his phone. Every screenshot here is the real app with made-up data.

Today screen showing money this month, the next task and calendar events

1. Reminders and today

The home screen shows what’s next, money this month and his Google Calendar. He taps done and the next thing moves up. Every to-do (work, home, groceries) is sorted by when it’s due, and he gets a push notification before each one.

To check list with a bank notification matched to an unpaid invoice

2. Money in, logged by itself

When money hits his bank, an iPhone Shortcut forwards the bank’s notification to the app. AI reads it and works out the amount, who it’s from and the category. If RM1,800 comes in and there’s an unpaid RM1,800 invoice, it suggests marking that invoice paid. One tap.

Spending screen with categories and a six-month chart

3. Spending, receipts and bills

Where the money went this month by category, compared with the last six months. Every bill and subscription with its due day. Snap a receipt and AI reads the shop, date and total, then saves the photo to Google Drive.

Invoice form filled in from a pasted WhatsApp chat

4. Invoices from a WhatsApp chat

He pastes the chat where the client confirmed the job (“ok confirm 4 reels 2.4k plus 1 extra revision rm300”). AI fills in the client, the line items, the price and the payment terms. The app makes the PDF and he sends it.

Invoices list showing late invoices and monthly retainers

5. Chasing payments

Every invoice shows if it’s a draft, sent, late or paid. Late ones turn orange with how many days late. Monthly retainers draft themselves on the set day. “Nudge on WhatsApp” opens WhatsApp with the message already written. He still presses send.

Tax screen adding up income and costs for the year

6. Tax, already added up

15% of every payment goes into a tax pot, so the money is there in April. Income and costs are added up for the year by type, and it flags costs that are missing a receipt. Export a CSV for your accountant.

Morning briefing written by AI

7. A morning briefing

Every morning at 8:30, AI reads his calendar and his money and writes a short briefing: what’s on, who owes him, what’s due. He can also just ask it things like “how much did I spend on Grab this month?”

AI crew chat with an agent drafting an invoice

8. An AI crew

Instead of one chatbot, there are a few “crew members” with jobs. @finn handles money, @rolla handles shoots. He types “@finn make the Rumah Studio invoice” and Finn drafts it. They can add tasks too, each with an undo button.

Leads found on Threads with a draft reply button

9. New clients from Threads

Twice a day it searches Threads for people asking for a videographer. AI scores whether they’re actually hiring or just chatting, and the good ones come with a reply already drafted.

What it runs on

No app store and no big platform. It’s a website that behaves like an app.

Piece What it does Cost
Next.js web app (PWA) The app itself. Added to the iPhone Home Screen, it opens full screen like a normal app. Free
Vercel Hosting, plus a job that runs every 5 minutes to send reminders. Free / US$20
Neon Postgres The database. Free plan
Claude Haiku (Anthropic) Reads notifications, receipts and chats; writes the briefing; runs the crew. ~RM5 / month
iPhone Shortcuts Forwards bank notifications and does quick money logging. Free
Google Calendar, Drive, Gmail Shows events, stores receipts, sends invoices. Free
Threads API Searches posts for leads. Free
pdf-lib Builds the invoice PDF. Free
About that US$20 Vercel’s free Hobby plan only runs scheduled jobs once a day, and it’s meant for non-commercial projects. Reminders every 5 minutes need the Pro plan at US$20 a month. If you only need a daily reminder, the free plan works. The AI really is about RM5 a month.

How the bank alerts log themselves

This is the part people ask about most, so here’s the full flow.

Bank app notification→iPhone Shortcut automation→your app’s web address→Claude reads it→“To check” list

Your bank already sends a notification for every payment. Newer iPhones let a Shortcut run automatically when a notification arrives from a specific app (this trigger needs iOS 27 or later). The Shortcut sends the notification text to your app, AI turns it into an entry, and it waits in a “To check” list for one tap.

Setting up the Shortcut:

  1. In the Shortcuts app, open Automation → + → Notification.
  2. Pick your bank app (MAE, CIMB OCTO, Touch ’n Go…). Make one automation per app.
  3. Choose Run Immediately, so it doesn’t ask each time.
  4. Add Get Contents of URL with your app’s web address. Method POST, Request Body JSON, with text = the notification content and app = the bank’s name.
  5. In the same action, add a header: Authorization = Bearer plus a secret token only your app knows.

A few details that matter:

  • The AI answers in fixed fields, not free text. It returns: is this money, is this a one-time code, in or out, amount, who, category. That makes it reliable, and if the AI is down the app falls back to a simple pattern match on “RM”.
  • One-time codes are dropped. OTP and TAC messages never get saved.
  • The Shortcut has its own token. It can add money entries and nothing else. Even if someone got it, they couldn’t open the rest of the app.
  • Nothing is final until he taps. Everything lands in “To check” first.

There’s also a second Shortcut for logging cash by hand: double-tap the back of the phone, choose in or out, type the amount and what it was for. Five seconds.

How invoices get made from a chat

Pasting a WhatsApp chat into the invoice screen
Paste the chat.
Invoice details filled in by AI
Client, lines, price and terms, filled in.

Same idea as the bank alerts: the AI doesn’t write the invoice, it fills a form. It returns the client name, each line with its amount, extra charges and the payment terms. Then normal code (no AI) builds the PDF with his business and bank details from Settings, and gives it the next invoice number.

That split is the main lesson of this whole build: let AI read the messy human stuff, and let plain code do everything that has to be exact. Totals, invoice numbers and tax are never left to AI.

How reminders and the briefing work

A job runs every 5 minutes on the server. It checks what’s due and sends a push notification. On iPhone, web apps can only send notifications once they’re added to the Home Screen (iOS 16.4 and later), so that’s step one of setup.

The 8:30am briefing is the same job: at 8:30 it collects today’s calendar, unpaid invoices and what’s due, and asks Claude to write it up in a few lines.

Why it only costs RM5 a month

  • It uses Claude Haiku, Anthropic’s smallest and cheapest model. For reading a bank notification you don’t need the smartest model.
  • It only sends short bits of text: one notification, one chat, one receipt. Never the whole database.
  • Anything that can be done without AI is done without AI.

Keeping it safe

It holds his money data, so this part isn’t optional:

  • One passcode for the app, remembered for 180 days, with a “lock this phone” button.
  • Google access is as narrow as it gets. Calendar is read-only. Drive can only see files the app made itself. Gmail can send but can’t read his inbox.
  • Nothing goes out on its own. Invoices, WhatsApp nudges and anything the crew drafts wait for his tap.

How to build your own

You don’t need to copy all nine features. Most people need two or three. Here’s the order I’d go in.

  1. Write down what you repeat every week. Not what sounds cool. The thing you keep doing by hand: chasing payments, typing invoices, finding receipts.
  2. Pick one and build only that. For most freelancers it’s invoices or logging money.
  3. Set up the basics: a Next.js app on Vercel, a free Neon database, and a passcode login. This is the skeleton everything else hangs on.
  4. Add AI only where text is messy. Get a Claude API key, and ask for fixed fields back, never free text.
  5. Add it to your Home Screen and use it for a week before adding anything else.
  6. Then add the next thing. That’s how this app grew: one “babe, remind me” at a time.

If you build with an AI coding tool (Claude Code, Cursor and similar), here’s a starting prompt you can paste and change:

Build me a mobile-first web app (Next.js, installable as a PWA) for my
one-person [your business] business. Start with ONE feature:

[e.g. "Paste a WhatsApp chat where a client confirms a job, and turn it
into an invoice: client name, line items, amounts, payment terms.
Generate a PDF with my business and bank details."]

Rules:
- Use Claude Haiku via the Anthropic API, and make it return fixed JSON
  fields (validate with zod). Never let AI do maths or invoice numbers.
- Store data in Postgres (Neon). Protect the app with one passcode.
- Nothing is sent to a client without me tapping a button.
- Keep it simple enough that I can add one feature at a time later.

What’s not done yet

Honest list:

  • The automatic bank-notification trigger needs iOS 27 or later. On older iPhones, use the manual quick-log Shortcut.
  • The crew chat history lives on one phone and doesn’t sync yet.
  • There’s one passcode for everyone, so teammates can’t have their own logins.
  • After an update, you sometimes have to close and reopen the app to see it.

Is it worth it?

He still asks me to remind him things. But now it’s things the app hasn’t thought of yet, which is how I know what to build next.