Skip to content

Latest commit

 

History

35 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Subify OS

Own your subscriptions. Own your data. Zero freemium.

Self-hosted subscription & personal finance tracker — open source, no SaaS lock-in, no paywalls, no feature gates.

Track Netflix, Spotify, cloud seats, gym memberships and every recurring charge on your own server. Multi-currency with live FX, AI savings tips with your API key, email reminders with your SMTP, and a full admin/setup path for families and small teams.

Docker .NET Next.js PostgreSQL MIT

No Stripe · No RevenueCat · No “upgrade to Pro” · No cloud telemetry by default
Bring your own AI key. Bring your own SMTP. Keep the database at home.


Screenshots

Captured from a running local instance of this repo (Next.js + API + PostgreSQL) — not design mockups.

Landing & auth

Subify OS landing page

Login

App

Dashboard Subscriptions
Dashboard Subscriptions
Reports AI tips
Reports AI
Profile Admin · Health / Ops
Profile Admin ops

Admin users


Why Subify OS?

Most subscription apps want your data and a monthly fee. Subify OS is the opposite:

Principle What it means
Self-hosted first One docker compose up — API, web, Postgres.
Your keys, your rules AI (OpenAI-compatible) and SMTP are BYOK. No vendor lock-in.
No freemium theater Unlimited subscriptions on your instance. Limits are yours, not ours.
Privacy by architecture Data lives in your PostgreSQL. No product analytics requirement.
Built like a product, shipped like ops Setup wizard, Super Admin, invites, backup scripts, health endpoints.

A possible future managed Cloud product is planned separately and must not reintroduce paywalls into this self-host core. See the docs index (maintainer notes).


Features

Core money

  • Subscriptions — create, update, archive/reactivate, shared-with split (UserShare)
  • Dashboard — monthly/yearly totals, budget vs spend, upcoming renewals, activity
  • Reports — monthly spend, category breakdown, currency distribution, dual FX display
  • Multi-currency — main currency + original amount; FX snapshots (Open ER API); stale-rate UX
  • Price history — “zam / indirim” signal when price or currency changes
  • What-if budget — client-side scenario (exclude / switch to yearly)
  • ICS export — push renewals into a calendar file
  • CSV import — bulk add with dry-run preview

Intelligence & mail

  • AI savings tips — BYOK LLM (OpenAI-compatible); tip actions (open / archive / yearly)
  • Report commentary — AI narrative on period spend (when AI is configured)
  • Email — templates (reset, invite, renewal, report summary); Super Admin SMTP; test send
  • Renewal reminders — background job + Super Admin manual run

Ops & multi-user

  • First-run setup wizard — Super Admin → instance → optional users / SMTP / AI
  • Invites — admin invites family or team members
  • Admin — users, system settings, email templates, provider catalog import
  • Ops tab — FX live sync, backup commands, instance health (SMTP/AI ready)
  • i18n — Turkish & English UI strings

Tech stack

┌─────────────┐     JWT      ┌──────────────────┐     EF Core      ┌────────────┐
│  Next.js    │ ──────────▶  │  ASP.NET Core    │ ───────────────▶ │ PostgreSQL │
│  App Router │  ◀────────── │  Minimal APIs    │                  │            │
│  Tailwind   │   JSON API   │  MediatR CQRS    │   auto-migrate   └────────────┘
└─────────────┘              └────────┬─────────┘
                                      │
                    ┌─────────────────┼─────────────────┐
                    ▼                 ▼                 ▼
              FX provider        SMTP (BYOK)      LLM API (BYOK)
              background job     template engine   analyze / commentary
Layer Choice Why
API ASP.NET Core · .NET 10 Clean Architecture, CQRS (MediatR), FluentValidation, Identity
Web Next.js (App Router) · TypeScript · Tailwind Fast UI, i18n-ready, self-hostable
DB PostgreSQL Boring, solid, Docker-friendly
Jobs Hosted BackgroundService FX sync, renewal mail — no Redis required for v1
Docs (dev) Scalar OpenAPI /scalar/v1 when Development
Mobile Flutter Roadmap after web+API

Architecture highlights

  • Domain-driven entities (subscription math, soft-archive, category XOR rules)
  • Application layer handlers + Result types + domain error codes
  • Infrastructure: EF Core, SMTP sender, FX client, AI client, email templates
  • Security: JWT + refresh, CORS lockdown in production, secret masking in logs/settings, setup gate middleware

Quick start

Full stack (recommended)

git clone https://github.com/<you>/SubifyProject.git
cd SubifyProject/docker
cp .env.example .env
# set strong POSTGRES_PASSWORD and JWT_SECRET_KEY
docker compose up -d --build
Service URL
Web http://localhost:3000
API http://localhost:5240
Health http://localhost:5240/health
Ready http://localhost:5240/health/ready

On first boot the API applies EF migrations and seeds roles, categories, resources, and system settings.

Then open the web app and complete the setup wizard (Super Admin + instance defaults). Optional: SMTP and AI keys in Super Admin → System settings.

More: docker/README.md · docs/OPS.md (backup/restore scripts included).

Dev mode (API & web on host, DB in Docker)

# Terminal 1 — Postgres
cd docker && docker compose -f docker-compose.db.yaml up -d

# Terminal 2 — API
cd api/Subify.Api && dotnet run --launch-profile http
# → http://localhost:5240  ·  Scalar: /scalar/v1

# Terminal 3 — Web
cd web && cp .env.example .env.local && npm install && npm run dev
# → http://localhost:3000  ·  NEXT_PUBLIC_API_URL=http://localhost:5240/api

Backup in 10 seconds

./docker/scripts/backup-postgres.sh
# → ./backups/subify-YYYYMMDD-HHMMSS.dump

Repository layout

SubifyProject/
├── api/                      # Clean Architecture backend
│   ├── Subify.Api/           # Endpoints, auth, middleware, Docker
│   ├── Subify.Application/   # CQRS handlers, validators, DTOs
│   ├── Subify.Domain/        # Entities, domain services, errors
│   ├── Subify.Infrastructure/# EF, FX, email, AI, background jobs
│   └── *.Tests/              # Unit & handler tests
├── web/                      # Next.js app (dashboard, admin, setup, AI…)
├── mobile/                   # Flutter (later)
├── docker/                   # Compose, Caddy/nginx samples, backup scripts
├── data/                     # Sample provider catalog JSON
├── docs/                     # Architecture (EN), OPS, screenshots + maintainer notes
├── LICENSE                   # MIT
└── README.md

Documentation

Doc Purpose
docs/README.md Full index (public EN + maintainer notes)
docs/ARCHITECTURE.md Clean Architecture, auth, jobs, layers
docs/OPS.md Install, backup, upgrade, troubleshooting
docker/README.md Compose, env, healthchecks
docs/API_CONTRACTS.md API payload notes
docs/screenshots/ Live UI captures

Long-form product backlog and design memory live under docs/ for maintainers; they are not required reading to run or evaluate the stack. Start with Architecture if you only have five minutes.


Configuration (high level)

Concern Where
DB / JWT / CORS docker/.env or appsettings
Instance, SMTP, AI Super Admin → System settings (UI) after setup
FX sync interval ExchangeRates__* / appsettings (Enabled, SyncInterval)
Background jobs BackgroundJobs__Enabled
Web API base URL NEXT_PUBLIC_API_URL (rebuild web image if changed in Docker)

Secrets never return in plain text from admin settings (masked placeholders).


Security & ops (honest defaults)

  • JWT access + refresh rotation model
  • Production CORS: empty allow-list = deny (set your real origin)
  • Setup incomplete → gated API (except setup/auth/health)
  • Sensitive Serilog destructuring (password / token / apiKey)
  • Non-root container users where applicable
  • Health + readiness probes for orchestration

Report issues responsibly. For production, put TLS in front (docker/Caddyfile / nginx example).


Roadmap (short)

  • Setup wizard, auth, subscriptions, reports, FX dual display
  • AI analyze + email stack (BYOK)
  • Admin ops, provider import, backup docs
  • Polish & tests (ongoing)
  • Flutter client against the same API
  • Optional tags / deeper community catalog

Maintainer checklist and product notes: docs index.


Contributing

  1. No freemium / paywalls in OS — this is a self-host product; payment features belong to a separate Cloud track if ever built.
  2. Prefer small PRs with tests for Application/Domain behavior.
  3. Keep i18n keys for new UI (TR + EN).
  4. Don’t commit real secrets; use .env.example only.
  5. Public docs (README, Architecture) stay English; deep product memory may remain in Turkish under docs/.

Issues and discussions welcome — especially self-host war stories and provider catalog contributions (data/provider-catalog.sample.json).


License

MIT — use it, fork it, self-host it, sell support if you want. The software stays free.


Star if this is how software should work

If you believe subscription tracking shouldn’t require a second subscription, give the repo a ⭐ — it helps others find a private, self-hosted alternative.

docker compose up -d --build   # and never pay rent for your own bills again

Built with .NET, Next.js, and a stubborn preference for owning your stack.

About

Self-hosted subscription & personal finance tracker. No freemium. BYOK AI & SMTP. .NET + Next.js + PostgreSQL.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages