Inspiration

Small business owners don't usually lose money because a customer refuses to pay. They lose it because they never got around to asking — because between running the business, they never sat down and figured out who actually owes them the most, who's been ignoring them the longest, and who to call today.

We kept thinking about the same person: a tailor with fifteen or so customers, each owing a different amount, each with a different due date, tracking all of it in a notebook or a WhatsApp thread. Chasing all fifteen the same way is exhausting. Chasing none of them is worse. The math of "who's actually urgent" is simple in theory and genuinely hard to do every single day on top of everything else.

We looked at what already exists for this problem, and there's a lot — but all of it is built for finance teams sitting on top of an ERP. Per-seat pricing, integrations, dashboards that assume someone's job is collections. None of that fits a shop owner who's never used accounting software and isn't going to start now. That gap is what we built CashFlow Recovery for.

What it does

You add what you already know about a payment — who owes it, how much, when it was due, and whatever sense you have of how that customer usually pays. That's it. No invoicing system to connect, no account to migrate.

From there, the AI does the part that's actually hard to do in your head: it looks at how overdue the payment is, how much is at risk, and that customer's history, and gives you a priority — Critical, High, or Normal — along with a plain-language reason, not just a colored dot. Then it goes one step further and tells you what to actually do about it: sometimes that's a firm reminder, sometimes it's "offer a payment plan," and it's never the same generic nudge for every customer. Last, it writes the message for you — ready to copy into WhatsApp or email — so the gap between "I know I should follow up" and "I actually did" gets a lot smaller.

How we built it

We started with the problem, not the tech. Before writing any code, we talked through what this actually looks like for someone running a small shop — a notebook, a phone, memory — and let that shape every decision from there. The biggest one: this needed to replace the owner's judgment, not just digitize their invoice list. Which is why nothing in the app shows a score without also showing the reasoning behind it.

The build itself is a Next.js (App Router) app in TypeScript, styled with Tailwind, using the Gemini API for the two places AI actually does something: scoring/prioritizing a payment, and drafting the message. Both of those calls return structured JSON, so the UI can just render the badge, the score, and the draft directly, no fragile parsing. For the demo, everything lives client-side — no backend, no database. That wasn't a shortcut we're embarrassed about; it was the right call for proving the idea fast without building infrastructure nobody's asked for yet.

Challenges we ran into

The easiest trap to fall into was building a smaller version of the enterprise tools we were trying not to build — a dashboard, some charts, a settings page. It took real discipline to keep asking "does the tailor need this?" and cutting the answer when it was no.

The harder problem was making the AI's reasoning feel earned instead of decorative. A priority badge is meaningless if the person looking at it doesn't trust it, and "this payment is overdue" isn't a reason, it's a restatement. Getting the model to explain itself using the actual numbers — the amount, the days late, the pattern — took more iteration than the scoring logic itself.

And because WhatsApp is genuinely how this segment communicates, the drafted messages couldn't sound like a corporate collections template. They had to sound like something a real person would actually send to someone they know.

Accomplishments that we're proud of

Honestly, the thing we're proudest of is that the whole loop works, start to finish, in under a minute — add a payment, watch it get scored and prioritized live, read why, get a message ready to send. It's a small thing to say but it took real restraint to get there without bloating it.

We're also proud of the reasoning itself — it explains a decision in the owner's terms, not a black box — and of how clearly we can say who this is for. Not "small businesses" in general, but specifically the ones the existing AI-AR tools were never built to reach.

What we learned

The AI part turned out to be the easy part — reasoning over a few numbers and writing a message is well within what a model like Gemini can do reliably. The actual hard part, and the part that will decide whether anyone real ever uses this, was deciding what not to build. No ERP integration. No accounting ledger. No login wall standing between someone and the demo. Every feature we didn't build made the thing easier to actually hand to the person it's for.

We also came away with something bigger than the project itself: "AI for finance" tools default to enterprise assumptions almost by habit — integrations, dashboards, per-seat pricing — and there's real, mostly untouched room in building that same intelligence for people who have none of that infrastructure and never will.

What's next for CashFlow Recovery — Who to Chase, and Why

A "mark as recovered" step, so the tool tracks actual money that came back in, not just messages sent — and can eventually show an owner their real recovery rate over time. Sending the WhatsApp message directly from the app instead of copy-paste, since that's genuinely how this audience already communicates. Drafting messages in Pidgin and other locally spoken tones, not just formal English. Getting this in front of people through trade associations, cooperatives, and mobile money or microfinance providers who already have the trust this segment listens to — not a cold-start consumer launch. A price that actually fits: a small flat monthly fee, or a success-fee model that only charges a small percentage of money actually recovered — not enterprise per-seat pricing bolted onto a tool built for someone with fifteen customers, not fifteen thousand.

Built With

Share this project:

Updates

Submission history