A local-first subscription management app that puts all your recurring charges in one place. No bank linking, no permissions — just add your subscriptions manually and stay on top of what you're paying for.
  • TypeScript 98.1%
  • CSS 1.7%
  • JavaScript 0.2%
Find a file
Frank Robinson 7d2029d489 Add scripts/ to .gitignore and untrack
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 16:10:17 -05:00
public Initial commit from Create Next App 2026-02-17 12:00:34 -05:00
screenshots Add demo data, fix alerts, update screenshots in README 2026-02-17 15:27:39 -05:00
src Add demo data, fix alerts, update screenshots in README 2026-02-17 15:27:39 -05:00
.gitignore Add scripts/ to .gitignore and untrack 2026-02-17 16:10:17 -05:00
components.json Build full subscription tracker app 2026-02-17 14:53:08 -05:00
eslint.config.mjs Initial commit from Create Next App 2026-02-17 12:00:34 -05:00
next.config.ts Build full subscription tracker app 2026-02-17 14:53:08 -05:00
package-lock.json Add demo data, fix alerts, update screenshots in README 2026-02-17 15:27:39 -05:00
package.json Add demo data, fix alerts, update screenshots in README 2026-02-17 15:27:39 -05:00
PLAN.md Build full subscription tracker app 2026-02-17 14:53:08 -05:00
postcss.config.mjs Initial commit from Create Next App 2026-02-17 12:00:34 -05:00
README.md Add demo data, fix alerts, update screenshots in README 2026-02-17 15:27:39 -05:00
specs.md Build full subscription tracker app 2026-02-17 14:53:08 -05:00
tsconfig.json Initial commit from Create Next App 2026-02-17 12:00:34 -05:00

Subscription Tracker

A local-first subscription management app that puts all your recurring charges in one place. No bank linking, no permissions — just add your subscriptions manually and stay on top of what you're paying for.

Dashboard

Features

  • Dashboard — Monthly/yearly totals, category breakdown chart, upcoming renewals, and renewal alerts
  • Subscription Management — Full CRUD with logo uploads, billing cycles (weekly through custom), intro/trial pricing, add-ons, price history tracking, and value assessments
  • Renewal Calendar — Month grid with category-colored dots, gridlines, day detail view, and big-hit month warnings when spending spikes
  • Household — Track family members with avatar uploads, see per-person costs, assign payer/owner/user roles to each subscription
  • Insights — Waste detector (low-value + high-cost subs), duplicate detection via Levenshtein distance, category overlap analysis, price increase tracking
  • Alerts — Configurable timing (1/3/7/14/30 days before renewal), escalation for expensive subscriptions, snooze and dismiss
  • Security — Optional PIN to encrypt sensitive notes (AES-GCM via Web Crypto API)
  • Data Portability — Full JSON backup/restore and CSV export/import
  • Theming — Light, dark, and system themes

Screenshots

Subscriptions Calendar
Subscriptions Calendar
Household Insights
Household Insights

Tech Stack

  • Framework: Next.js 15 (App Router, Turbopack)
  • Language: TypeScript (strict mode)
  • Styling: Tailwind CSS v4 + shadcn/ui
  • Storage: Dexie.js (IndexedDB) — all data stays in your browser
  • State: Zustand (UI state), React Hook Form + Zod (forms)
  • Charts: Recharts
  • Date Math: date-fns
  • Encryption: Web Crypto API (PBKDF2 + AES-GCM)

Getting Started

# Install dependencies
npm install

# Run dev server (port 3001, Turbopack)
npm run dev

# Production build
npm run build
npm start

Open http://localhost:3001 in your browser. Go to Settings > Load Demo Data to populate sample subscriptions.

Project Structure

src/
├── app/                    # Next.js pages
│   ├── dashboard/          # Main dashboard
│   ├── subscriptions/      # List, add, edit, detail views
│   ├── calendar/           # Renewal calendar
│   ├── household/          # Family member management
│   ├── insights/           # Waste detection & analytics
│   └── settings/           # Preferences, security, data management
├── components/
│   ├── dashboard/          # Dashboard widgets
│   ├── layout/             # Sidebar, mobile nav, header
│   ├── subscription/       # Card, detail, form components
│   └── ui/                 # shadcn/ui primitives
├── hooks/                  # Custom React hooks (CRUD, alerts, cashflow)
├── lib/                    # Business logic
│   ├── calculations.ts     # Cost normalization & formatting
│   ├── renewal-engine.ts   # Billing cycle math & cashflow projection
│   ├── alerts.ts           # Alert generation & escalation
│   ├── encryption.ts       # PIN-based note encryption
│   ├── db.ts               # Dexie database schema
│   └── export-import.ts    # JSON/CSV data portability
└── types/                  # TypeScript interfaces

Privacy

All data is stored locally in your browser's IndexedDB. Nothing is sent to any server. Sensitive notes can be encrypted with a PIN that never leaves your device.

License

MIT