ADR·001

Subby, the AI sidekick for your subscriptions.

An app that scans your inbox, finds every subscription you're paying for, and shows you which ones to cancel. Designed, built and shipped solo.

Role
Product, design, engineering, launch. Solo.
Timeline
June 2026 · ~5 focused days over two weeks
Status
Live, invite-only beta
Stack
Next.js, Tailwind, Auth.js, Gmail API, Groq (Llama 3.3), Turso

A1Overview

Subby connects to your email (read-only), uses AI to read your billing receipts, and turns them into a clear audit: what you spend per month and year, what each subscription costs you per use, and which ones are quietly wasting money. I designed it, built it, and shipped it to a live beta on my own.

fig.1 the whole loop: connect, scan, audit.

A2The problem

Most people have no idea what they actually spend on subscriptions. People estimate around $86 a month. The real average is about $219, roughly two and a half times more than they think. 42% have forgotten about a subscription while still paying for it. The money leaks quietly: the gym from January, two apps that do the same thing, a free trial that started charging months ago.

$86

what people think they spend per month

$219

what they actually spend (C+R Research, via CNBC)

42%

have forgotten a subscription while still being charged

A3Why existing tools fail

Subscription trackers already exist. The problem is they make you enter everything by hand. People do it for a week, then stop, and the tool goes stale. The manual upkeep is the friction that kills them. So the core bet behind Subby: it has to be automatic. If it needs constant manual work, it won’t stick.

A4Design principles

Three rules guided every decision:

  • Value firstShow the audit experience before requesting access to someone's inbox. Trust is earned by demonstrating value first.
  • Trust by architectureThe privacy promises are enforced in code, not just written on a page: read-only access, nothing from the emails is stored, and one click disconnects and deletes everything.
  • EffortlessNo manual entry, ever. The AI does the work.

A5What I tried, what I kept

Subby did not arrive looking like this. A lot of the work was building versions, living with them, and throwing them out.

Wireframes first, color later. I started in black-and-white, low-fidelity wireframes to get the structure right before touching any color: the layout of the audit, the scan results with their confidence levels, the onboarding. Working in grayscale kept me honest about hierarchy and flow, instead of letting a nice color hide a weak layout.

Three black-and-white lo-fi wireframes: the start screen, the audit dashboard with a row of summary cards, and the blunt Cancel Candidates list with hard cancel buttons
fig.2 the lo-fi pass: start screen, the audit with its row of competing summary cards, and the blunt 'cancel candidates' list, hard buttons and all. Both got calmer from here.

Dark for techy, teal for friendly. The final identity is a dark theme with a teal accent, and that pairing is the whole point. The dark carries the technical, capable side. The teal warms it up and gives it the friendly sidekick feeling, so the app reads as a companion and not a cold finance dashboard. I kept it dark only.

The looks I dropped. One version was white with a green accent, but the green was a generic, off shade and the type did not match the techy sidekick personality I wanted. An earlier light design had color combinations I was never happy with. None of them felt like Subby, and ruling them out was how I found what did.

Rejected white version of Subby with a green accent: serif logo, light landing screen
fig.3 dropped: the white version with the generic green.
Earlier light Subby design with a harsh red 'worth a second look' list showing $196 per use
fig.4 dropped: the earlier light design. Note the alarm-red callout, before the nudge was softened.

The money as a shape. The spending breakdown was a donut from the very first wireframe, and it never changed. A donut shows proportion at a glance, which is exactly what people want to know. What I cut was the usage-versus-cost scatter plot sitting next to it. It looked analytical but took real effort to read, and the donut plus a plain cost-per-use number already told the story faster.

Fewer numbers, clearer story. The lo-fi split the summary across three separate cards plus a cancel-candidates rail. It showed everything at once, and it felt busy. The final folds the headline spend into one figure that flips between monthly and annual, keeps the donut, and lets the rest go. A calmer screen suits an app that is meant to feel like a quiet check-in, not a finance terminal.

Softening the nudge.The “worth a second look” callout began as a blunt “cancel candidates” list with hard cancel buttons, and it felt too aggressive. I kept the feature but softened the language and the colors so it reads as a calm suggestion instead of an alarm. A sidekick points something out, it does not shout at you.

Final Subby audit: $174 a month headline, category donut, and the softened amber 'worth a second look' list
fig.8 the audit: one headline figure, the donut, and the softened callout. Cost-per-use does the arguing.

B1How it works

When you connect Gmail, Subby (read-only) pulls your billing and receipt emails, sends the text to an AI model that extracts each subscription (name, price, frequency), stores only those results, and renders the audit: totals, cost-per-use, category breakdown, and cancel candidates. Built with Next.js, the Gmail API for read-only access, Groq running Llama 3.3 for the extraction, and Turso for the database.

Your inboxGmail APIread-onlyAI extractionGroq, Llama 3.3results onlyDatabaseTursoThe auditdashboardemail text is read, never storedname, price, frequency. Encrypted tokens.
fig.5 the pipeline. The trust promises live in the arrows: read-only in, results only out.

B2Key decisions

A demo is not validation. Early on I built a polished interactive demo. It looked great, but a demo on fake data only proves the pitch is appealing, not that anyone wants the product.

The AI was the easy part. The model that reads an email and pulls out a subscription is a cheap, commodity API call now. The AI was never the real challenge.

The real product is trust. The hard problem is getting someone to let an app read their inbox. So I borrowed the playbook fintech apps use: show value first, explain exactly what happens in plain language, ask for the minimum (read-only), and make leaving instant.

My own principle caught me.One of my rules was “trust by architecture,” privacy enforced in code and not just promised on a page. Before opening the beta wider, I ran a security pass on my own work and found the opposite of that promise: the app was storing the Google keys to people’s inboxes as plain, readable text. It worked perfectly, which is exactly what made it dangerous. I encrypted the tokens so they are useless without a separate secret, added rate limits, locked down the headers, validated every input, and hardened the AI step against emails written to trick it. The lesson stuck: code that builds is not the same as code that is safe, and shipping is not the finish line.

Designed for the AI being wrong sometimes.A free newsletter or a “your settings changed” update can look a lot like a paid subscription. Instead of pretending the extraction is perfect, I had the model attach a confidence level to every result and separate the obvious paid subscriptions from the maybes. Showing the uncertainty honestly turned out to be more useful than hiding it.

Subby AI Insights panel offering the subscription audit, next to the populated dashboard
fig.6 the AI stays a sidekick: an audit you ask for, not one that interrupts.

Shipped for $0.Free AI inference, free database, free hosting, and Google’s testing mode. Money is no longer the barrier to building a real product.

B3The result

The audit makes the invisible visible: a clear monthly and annual total, where the money goes by category, and a “worth a second look” list that flags subscriptions costing more than they are worth.

The idea I am proudest of: cost per use. Most subscription tools show you what something costs per month. Subby shows what it costs every time you actually use it. A streaming app you open twice a month is not really fifteen dollars, it is seven fifty a watch. Turning an abstract monthly charge into a number you can feel is what makes someone finally cancel. The price was never the problem. The price per use is what changes the decision.

Subby subscriptions table with a cost-per-use column: Audible at $14.95 per use, The New York Times at $68 per use, flagged in orange
fig.7 the column that changes minds: $179 a year reads fine, $14.95 per listen does not.

B4What the beta taught me

Rather than guess whether people want this, I put it in front of real users. Around five people tried it, and the most useful results were not numbers, they were what the experience exposed.

Trust is the wall, exactly as predicted. The hesitation was never about the design or the audit itself. It was about handing inbox access to an app built by someone they had never heard of. A known brand gets the benefit of the doubt here. An individual does not. That confirmed the core bet: the hard part of this product is not the AI, it is earning permission.

Email is an incomplete signal, and I chose it that way. The scan does not catch every subscription, and that is partly a deliberate tradeoff. I kept it narrow and non-invasive on purpose because the whole point was to be trustworthy. So I traded some completeness for privacy and trust, and at this stage I would make that trade again.

It only works with Gmail. The read-only access is built on the Gmail API, so anyone on Outlook or Yahoo cannot use it yet. That quietly rules out a large share of people, and it is the first thing I would expand past the beta.

Put together, these point at the same place. The real design problem is not making the audit clearer, it is the tension between being thorough and being trusted. As an unknown builder, I leaned toward trusted.

B5Reflection

You can ship a real, full product solo now, design, code, AI and all, faster and cheaper than I expected. The hardest problems in an “AI product” usually are not the AI. They are trust, onboarding, and getting someone to take the first step. The beta proved it: people stalled at the inbox permission, not the interface.

Code that builds is not the same as code that is safe. Catching the plaintext token problem before launch taught me that shipping is not the finish line. Making it solid is part of done.

It is early and there are no big usage numbers yet. The most valuable thing so far has been learning where the real problem lives, which is trust, not technology. That is the next chapter.