Case Study 06 · Independent build · Consumer app
Cartwren: Grocery List & Budget
An independent consumer app I took from a problem statement to a store-ready build, acting as the product owner and directing AI coding agents to do the engineering.
The Problem
Households split grocery runs across people and chat threads. Items get bought twice or forgotten, and nobody knows how much of the budget is gone until the month is over. Bigger one-off projects, like setting up a new home, end up in spreadsheets that only one person updates. Most list apps handle the list well but treat the budget as an afterthought.
The Product
Cartwren is a private workspace for up to three people. Each household gets one live grocery list plus separate named lists for projects such as "New Home", and every list has its own budget. The budget sits at the top of the screen with the amount remaining directly beneath it. Any member can add items, edit prices or mark things bought, and the change appears for everyone in real time. Bought items move to their own tab and stay greyed out in the main list, so nothing is lost. Google sign-in means switching phones restores everything, and every member can pick light or dark mode without affecting the others.
Key Product Decisions
- The household, not the person, is the customer. One owner-paid subscription unlocks Premium for all three members, so nobody pays twice for a list they share.
- Generous where the core value is. Sharing, separate lists, budgets and price editing are all free. The only paywall is a single household-wide limit of 50 active items, counted across every list, so it's easy to explain and starting a new list doesn't reset it.
- Premium sells depth, not access: unlimited items, category budgets with spending alerts, reusable shopping templates, and spending insights with exportable reports.
- Downgrading never holds data hostage. When a subscription ends, every list, item and report stays readable. Only new Premium actions stop.
- Budget maths that can't double-count. "Bought" is a view of the same item, not a second expense, and a missing price shows "Price needed" instead of pretending the item was free.
- Clear no's. Delivery, retailer checkout, bank connections and receipt scanning were left out on purpose to keep the first release focused.
How I Built It
I wrote the business requirements, the acceptance criteria and the edge cases, such as two people adding the 50th item at the same moment or a member being removed while offline. The build then ran through my own AI-agent workflow. Each phase went through spec, build, an automated audit, my hands-on click-through on a real phone, and only then ship. Six phases took the product from a free single-phone core to shared lists, the item limit, notifications and subscriptions.
I made the product, pricing and scope calls and set up the platform pieces myself: a Supabase backend with row-level security, Google sign-in, RevenueCat for subscriptions and Google Play Billing. The agents wrote the code to the spec, and the subscription purchase flow has been verified end to end in sandbox testing.
The Takeaway
When AI agents write the code, the bottleneck moves to the product manager's side of the table: precise requirements, explicit edge cases and the discipline to say no. The quality of the spec sets the ceiling on the quality of the build. This project made that concrete, and it's how I now approach every product I work on.
Related work
Cartwren by SMS Dev Co.