Bleed

next.js, typescript, supabase, groq, tanstack query, tailwind

A subscription tracker that eliminates manual entry entirely - forward a receipt or send a plain-English note, and it logs the price, currency, and renewal date automatically.

view project

Challenge

Replace manual subscription bookkeeping - the exact effort that causes people to forget what they are paying for in the first place - with a zero-entry system that stays financially accurate across currencies, billing cycles, and month-end edge cases indefinitely.

Approach

Built an email-native ingestion pipeline: a Svix-verified inbound webhook resolves the sender to a specific user, then an LLM extraction layer (Groq) parses the message into one or more structured, Zod-validated subscriptions - including emails describing several distinct charges at once. Renewal dates are computed from a fixed billing anchor rather than chained off the prior cycle, avoiding calendar drift across month-end dates. Multi-tenant isolation is enforced at the database level via Postgres Row-Level Security, and reminders fire through a dual-channel (email + push) cron pipeline with user-controlled timing per subscription.

Outcome

Delivered a working end-to-end loop: a user forwards a receipt, it is parsed, validated, and logged within seconds, and a reminder fires automatically before every future renewal with zero re-entry required. Anything the model cannot confidently parse is routed to a review queue instead of silently discarded, and multi-currency totals are never blended into one misleading number.

Highlights

  • LLM-based email extraction with runtime schema validation and multi-subscription support per message
  • Drift-free renewal engine using anchor-date billing cycle math, not incremental date chaining
  • Row-Level Security enforced per-user data isolation with signed webhook verification on ingestion
  • Dual-channel reminders (email + push) with per-subscription timing and currency-aware totals
NextBiteflow