Kellen Poole ← All projects

Integration · OAuth · serverless

DrainCheck

See what's draining your wallet. A privacy-first app that uses read-only Gmail access to find your recurring subscriptions and total monthly spend — with a no-login demo.

Demo: sample data · real OAuth in source

The no-login demo runs on fictional sample data. The live read-only Gmail flow needs your own Google credentials — it's verified by code review, not exercised in the demo.

Started March 2026 · self-directed

The problem

Subscriptions accumulate and creep, and most people have no single view of what recurs each month. The tools that promise this often ask for broad access or upload your inbox to their servers.

How it works

  1. Read-only Google OAuth (gmail.readonly) — DrainCheck can read, never modify or send.
  2. Serverless functions search Gmail for receipts/renewals; an extraction engine classifies them across 90+ known services and infers price, frequency, card, and charge history.
  3. A dashboard groups recurring subscriptions vs. one-time purchases, by category, with monthly totals. Tokens live in encrypted, expiring cookies; no email is stored.

The story · STAR

S

Situation

Forgotten subscriptions quietly drain money, and the tools that find them often want to upload your whole inbox.

T

Task

Build a tool that surfaces recurring charges from Gmail while touching as little data as possible.

A

Action

Chose Google's read-only scope on purpose, built the OAuth flow and serverless functions, and wrote an extraction engine that classifies receipts and groups them by service to infer price, recurrence, and charge history — keeping tokens in encrypted, expiring cookies with no stored email. Then added a full demo mode so anyone can explore with fictional data and no login.

R

Result

A working, privacy-first app with a real OAuth/Gmail pipeline and a public demo. The dashboard renders categorized monthly spend; the demo (fictional data) is verified in the production build.

Try it in 20 seconds

  1. Open the demo — it loads on sample subscriptions, clearly badged "Demo data."No Google account, no inbox access.
  2. Expand a subscription card to see status, card, and charge history.
  3. Sort by price, filter by category, and open the One-Time Payments section.

Built with

ReactNetlify FunctionsGoogle / Gmail APIread-only scopeencrypted cookiesTailwind

Status & honest limitations

Working v1, deployed. Real OAuth + extraction engine implemented; a public demo mode makes it explorable with no account.

  • The real Google sign-in shows an "unverified app" consent screen until the OAuth app is verified (expected for a personal project).
  • Extraction is heuristic (dictionary + regex); unusual receipt formats may be missed.
  • The live Gmail flow needs your own Google credentials — verified by code review, not exercised in the demo.

Self-directed project, built with AI-assisted development. Demo data is fictional.