Most people have no idea how much they're spending on subscriptions every month. Subsight fixes that β it's a self-hosted, open-source subscription tracker with an AI-powered dashboard that gives you real-time visibility into every recurring charge. Unlike Truebill or Rocket Money, you own your data, it's free forever, and you can self-host it in minutes.
- π Real-time Dashboard β KPI metrics, monthly spend, active subscriptions, and upcoming renewals at a glance
- π§ AI Auto-Fill β Type a service name and Groq AI fills in the provider, category, price, and billing cycle automatically
- π Simulation Mode β Toggle subscriptions on/off to preview how cancellations affect your monthly budget before committing
- π Advanced Analytics β Monthly spending bar charts, category donut breakdown, and annual totals with trend indicators
- π€ Multi-Format Export β Export your full subscription list to JSON, CSV, or a formatted PDF report
- π Renewal Alerts β Email reminders sent 1, 3, 7, or 14 days before a subscription renews via SMTP
- π― Spending Goals β Set monthly or annual budget targets per category and track progress
- π·οΈ Custom Categories β Create your own categories with custom colors and icons beyond the built-in set
- π Duplicate Detection β Smart Levenshtein-based detection warns you before adding a subscription you already track
- π± Multi-Currency Support β Track subscriptions in USD, EUR, GBP, JPY, CAD, and AUD with automatic conversion
- π Supabase Auth + RLS β Secure authentication with Google OAuth and row-level security so your data stays yours
- π Dark & Light Theme β Fully themed UI that persists across sessions
| Category | Technology |
|---|---|
| Framework | Next.js 15 (App Router + Turbopack) |
| Language | TypeScript 5 |
| Styling | Tailwind CSS v3 + shadcn/ui (Radix UI) |
| Backend | Supabase (Auth + PostgreSQL + RLS) |
| AI | Groq AI (fast + quality models) |
| Charts | Recharts |
| Forms | React Hook Form + Zod |
| PDF Export | jsPDF + html2canvas |
| Nodemailer (SMTP) | |
| Payments | Stripe (Pro plan billing) |
| Testing | Vitest + Playwright |
| Deployment | Vercel |
- Node.js 18+
- pnpm (
npm install -g pnpm) - Supabase account β supabase.com
- Groq API key β console.groq.com (free, for AI features)
# 1. Clone the repo
git clone https://github.com/MuhammadTanveerAbbas/Subsight-Tracker.git
cd Subsight-Tracker
# 2. Install dependencies
pnpm install
# 3. Set up environment variables
cp .env.example .env.local
# Fill in your values (see Environment Variables section below)
# 4. Run the development server
pnpm dev
# 5. Open in browser
http://localhost:3000Create a .env.local file in the root directory:
# Supabase (required)
NEXT_PUBLIC_SUPABASE_URL=your_supabase_project_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_role_key
# App URL (required for Stripe + emails)
NEXT_PUBLIC_APP_URL=https://your-app.vercel.app
# Groq AI (Pro AI features)
GROQ_API_KEY=your_groq_api_key_here
# Google OAuth (Supabase Auth)
NEXT_PUBLIC_GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
# Stripe (Pro billing)
STRIPE_SECRET_KEY=your_stripe_secret_key
STRIPE_PRICE_ID=your_stripe_price_id
STRIPE_WEBHOOK_SECRET=your_stripe_webhook_secret
# SMTP (Pro email reminders)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASS=your-app-password
SMTP_FROM=noreply@subsight.com
# Cron security (Vercel Cron -> /api/reminders/send)
CRON_SECRET=generate-a-random-secret-hereGet your keys:
- Supabase: https://supabase.com
- Groq: https://console.groq.com
- Stripe: https://stripe.com
Subsight-Tracker/
βββ public/ # Static assets (icons, manifest, sw.js)
βββ src/
β βββ app/
β β βββ (app)/ # Authenticated app routes (dashboard)
β β βββ (auth)/ # Auth UI routes (sign-in, sign-up, forgot-password)
β β βββ (marketing)/ # Public marketing routes (landing, pricing, privacy, terms)
β β βββ api/ # API routes (AI autofill, AI summary, Stripe, reminders)
β β βββ auth/ # Supabase auth callback + reset-password
β βββ components/
β β βββ auth/ # Google sign-in button
β β βββ marketing/ # Nav + footer for marketing pages
β β βββ ui/ # shadcn/ui component library
β βββ contexts/ # Auth, loading, and subscription React contexts
β βββ hooks/ # Custom hooks (use-mobile, use-toast)
β βββ lib/ # Core utilities and service clients
β β βββ supabase/ # Supabase client + server helpers
β β βββ groq-service.ts # AI auto-fill + spending summary
β β βββ email-service.ts # SMTP renewal reminder emails
β β βββ export.ts # JSON / CSV / PDF export
β β βββ currency.ts # Multi-currency conversion
β β βββ duplicates.ts # Duplicate subscription detection
β β βββ renewal-calculator.ts # Next renewal date logic
β β βββ stripe.ts # Stripe billing helpers
β β βββ types.ts # Shared TypeScript types
β β βββ validation.ts # Zod schemas
β βββ types/ # Supabase database types
β βββ middleware.ts # Auth middleware (route protection)
βββ e2e/ # Playwright end-to-end tests
βββ .env.example # Environment variables template
βββ package.json
βββ README.md
| Command | Description |
|---|---|
pnpm dev |
Start development server with Turbopack |
pnpm build |
Type-check then build for production |
pnpm start |
Start production server |
pnpm lint |
Run Next.js ESLint |
pnpm typecheck |
Run TypeScript type checking |
pnpm test |
Run Vitest unit tests (watch mode) |
pnpm test:unit |
Run Vitest unit tests once |
pnpm test:e2e |
Run Playwright end-to-end tests |
pnpm test:coverage |
Run tests with coverage report |
This project is deployed on Vercel.
- Click the button above
- Connect your GitHub account
- Add all environment variables in the Vercel dashboard
- Deploy
- Real-time subscription dashboard
- AI auto-fill via Groq
- Simulation mode
- Multi-format export (JSON, CSV, PDF)
- Renewal email alerts
- Spending goals
- Custom categories
- Duplicate detection
- Multi-currency support
- Stripe Pro billing
- Mobile app (React Native)
- Bank auto-detection via Plaid
- Team / shared workspace support
- Browser extension for auto-capture
Contributions are welcome! Feel free to:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Distributed under the MIT License. See LICENSE for more information.