Progresium ToDo is the backend API for Progresium, a task and project management SaaS. It's built on .NET 10 with a clean, layered architecture (Domain / Application / Infrastructure / API), CQRS via MediatR, and PostgreSQL for storage.
- Tasks & Subtasks — create, update, and organize tasks with status, priority, due dates, time ranges, attachments, custom ordering, and tags.
- Projects — group tasks into projects.
- Tags — flexible tagging system for tasks.
- Authentication — email/password registration with email verification, login, refresh tokens, logout, and password reset flows.
- Google OAuth — sign in with Google.
- Billing & Subscriptions — plans, regional pricing, subscriptions, and per-plan feature usage limits (e.g. task duration tracking).
- Background Jobs — async work (emails, subscription/usage processing, etc.) handled via Hangfire with PostgreSQL storage.
- Email Service — transactional emails (verification, password reset, contact form) via Mailtrap.
- Waitlist — endpoint for pre-launch sign-ups.
- Support / Contact — contact form endpoint with rate limiting.
- API Documentation — OpenAPI spec served through Scalar.
| Layer | Technology |
|---|---|
| Runtime | .NET 10 / ASP.NET Core |
| Architecture | Clean Architecture, CQRS (MediatR) |
| Database | PostgreSQL via EF Core (Npgsql, snake_case naming) |
| Auth | ASP.NET Core Identity, JWT Bearer, Google OAuth2 |
| Validation | FluentValidation |
| Background Jobs | Hangfire (PostgreSQL storage) |
| Mailtrap API | |
| API Docs | Scalar / Microsoft.AspNetCore.OpenApi |
| Containerization | Docker |
The solution follows Clean Architecture, split into four projects under src/:
src/
├── ProgresiumToDo.Domain # Entities, enums, domain errors, core business rules
├── ProgresiumToDo.Application # CQRS commands/queries, validators, abstractions
├── ProgresiumToDo.Infrastructure # EF Core, repositories, identity, email, Hangfire, OAuth
└── ProgresiumToDo.API # Controllers, middleware, DI wiring, Program.cs
Each feature area (Auth, Billing, Projects, Tags, Tasks, Waitlist, Support) is organized as a vertical slice within the Application layer, with its own Commands, Queries, and Repository interfaces.
- .NET 10 SDK
- PostgreSQL instance
- A Mailtrap account (for transactional email)
- A Google Cloud OAuth client (for Google sign-in)
- Docker (optional, for containerized runs)
Create a .env file at the repository root with the following variables:
CONNECTION_STRING=Host=localhost;Port=5432;Database=progresium;Username=postgres;Password=postgres
JWT_SECRET=your-jwt-signing-secret
JWT_TOKEN_LIFETIME_IN_SECONDS=3600
REFRESH_TOKEN_LIFETIME_IN_DAYS=30
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
BASE_URL=https://localhost:5001
MAILTRAP_API_KEY=your-mailtrap-api-token# Restore dependencies
dotnet restore
# Apply EF Core migrations (or let the app migrate on startup in Production)
dotnet ef database update --project src/ProgresiumToDo.Infrastructure --startup-project src/ProgresiumToDo.API
# Run the API
dotnet run --project src/ProgresiumToDo.APIdocker build -f src/ProgresiumToDo.API/Dockerfile -t progresium-todo-api .
docker run -p 8080:8080 --env-file .env progresium-todo-apiOnce running, interactive API documentation (powered by Scalar) is available at:
/scalar/v1
with the raw OpenAPI document at:
/openapi/v1.json
| Project | Responsibility |
|---|---|
ProgresiumToDo.API |
Controllers (Auth, OAuth, Users, Billings, Tasks, Projects, Tags, Support, Waitlist), exception handling, rate limiting, Program.cs |
ProgresiumToDo.Application |
CQRS handlers and validators for Auth, OAuth, Billing, Projects, Tags, Tasks, Users, Waitlist, Support |
ProgresiumToDo.Domain |
Entities (User, TaskItem, Project, Tag, Plan, Subscription, etc.), enums, domain errors |
ProgresiumToDo.Infrastructure |
ApplicationDbContext, EF Core migrations, repositories, Identity, JWT/OAuth services, Hangfire jobs, Mailtrap email service |
No license specified yet.