SubscripSync is a modern, full-stack subscription management platform designed to help users track recurring expenses, visualize spending habits, and stay on top of renewals — all from a sleek dark-mode dashboard.
Built with .NET 9 (Web API) and Angular 19, following Clean Architecture principles with CQRS pattern.
Premium dark-mode SaaS dashboard with glassmorphism, animated backgrounds, and real-time notifications.
- 📊 Interactive Dashboard — View all active subscriptions with category-colored cards, monthly cost summary, and next renewal dates
- 📈 Analytics — Doughnut & bar charts showing spending distribution by category with dark-themed visualizations
- 👤 Profile Management — Update personal info and preferred currency settings
- 🔔 Real-Time Notifications — SignalR-powered alerts for upcoming renewals and payment confirmations
- 🔐 JWT Authentication — Secure user registration & login with token-based auth
- 🔄 Auto-Renewal Engine — Background worker service that automatically calculates next billing dates (Weekly / Monthly / Yearly)
- 🐳 Docker Ready — One-command deployment with Docker Compose (API + Client + SQL Server)
| Component | Technology |
|---|---|
| Framework | .NET 9 Web API |
| Architecture | Clean Architecture (Domain → Application → Infrastructure → API) |
| Database | SQL Server (EF Core Code-First) |
| Patterns | CQRS (MediatR), Repository Pattern, Dependency Injection |
| Auth | JWT Bearer Tokens |
| Real-Time | SignalR |
| Docs | Swagger / OpenAPI |
| Component | Technology |
|---|---|
| Framework | Angular 19 (Standalone Components) |
| Styling | Tailwind CSS + Angular Material (Custom Dark Theme) |
| Charts | ng2-charts (Chart.js) |
| Alerts | SweetAlert2 (Dark Themed) |
| State | RxJS |
| Component | Technology |
|---|---|
| Containerization | Docker + Docker Compose |
| Web Server | Nginx (SPA Routing) |
| CI | GitHub Actions |
- Docker Desktop (recommended)
- Or: .NET 9 SDK + Node.js v20+ + SQL Server
-
Clone the repository
git clone https://github.com/KathanShah2211/SubscripSync.git cd SubscripSync -
Create environment file
# Create .env in the project root with: MSSQL_PASSWORD=YourStrong@Passw0rd JWT_SECRET=your-super-secret-key-at-least-32-characters-long -
Start everything
docker-compose up -d --build
-
Access the app
- 🌐 Frontend: http://localhost:4200
- 🔧 API / Swagger: http://localhost:5083/swagger
Note: If you see database migration errors, run
docker-compose down -vthendocker-compose up -d --buildto start fresh.
-
Backend
cd SubscripSync.API dotnet restore dotnet runAPI starts at
http://localhost:5083 -
Frontend
cd SubscripSync.Client npm install npm startClient starts at
http://localhost:4200
dotnet testUnit tests are implemented using xUnit to verify business logic (subscription renewal calculations, etc.).
SubscripSync/
├── SubscripSync.API/ # Entry point — Controllers, Program.cs
├── SubscripSync.Application/ # Business logic — CQRS Commands/Queries (MediatR)
├── SubscripSync.Domain/ # Core — Entities, Interfaces
├── SubscripSync.Infrastructure/ # Implementation — EF Core, Repositories, Auth, Workers
├── SubscripSync.Client/ # Angular 19 frontend (dark theme UI)
├── SubscripSync.Tests/ # Unit tests (xUnit)
├── .github/workflows/ # CI/CD pipeline
├── docker-compose.yml # Container orchestration
└── .env # Secrets (NOT committed — see .gitignore)
The frontend uses a custom dark-mode design system built on top of Angular Material + Tailwind CSS:
- Theme: Deep dark background (
#0c0a14) with glassmorphic cards - Font: Inter (Google Fonts)
- Accent: Purple/Indigo gradient (
#8c3fff → #6d1bf0) - Effects: Backdrop blur, hover lifts, staggered entrance animations
- Category Colors: Each subscription category has a distinct color (Entertainment → Fuchsia, Software → Blue, etc.)
- JWT secrets and database passwords are stored in
.env(excluded from version control) appsettings.jsoncontains only placeholder values — real secrets are injected via environment variables in Docker- Passwords are hashed using BCrypt
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Distributed under the MIT License. See LICENSE for more information.