Platform architecture
The Infoage Cloud Platform (ICP) is a single deployable application that powers every SaaS product built by The Infoage Solutions.
Four-application vision
| Application | Purpose | Technology |
|---|---|---|
| ICP.Website | Marketing, docs, onboarding | Astro + TypeScript |
| ICP.Admin | Internal admin portal | React 19 + Vite |
| ICP.API | Single platform API | ASP.NET Core 8 |
| ICP.Worker | Background processing | .NET 8 Worker Service |
ICP.API modules
ICP.API is organized into modules but deployed as one application:
| Module | Responsibility |
|---|---|
| Identity | Users, roles, permissions, JWT auth |
| Platform Settings | Central configuration (gateway, email, WhatsApp, backup, etc.) |
| Customer Onboarding | Registration, domain verification, provisioning |
| Subscription & Billing | Razorpay integration, invoices, webhooks |
| Domain & SSL | DNS verification, Let’s Encrypt, Caddy integration |
| Gateway | Caddy config generation, execution, health |
| Notification | Email + WhatsApp queues, templates, delivery |
| Backup & Restore | MongoDB backups, restore, retention |
| Monitoring | Operations dashboard, health checks |
| Audit | Comprehensive audit logging |
Data layer
- Database: MongoDB (single database
icp_platform) - Collections: One per entity (customers, products, subscriptions, domains, etc.)
- Indexes: Optimized for query patterns
- Transactions: Multi-document where needed
Infrastructure
| Component | Technology |
|---|---|
| API Runtime | ASP.NET Core 8 on Linux/Windows |
| Worker | .NET 8 BackgroundService |
| Reverse Proxy | Caddy (auto HTTPS, config from platform) |
| Database | MongoDB 6+ |
| Message Queue | In-process (worker polls) |
| Secrets | Platform Settings (encrypted at rest) |
Security
- Authentication: JWT access + refresh tokens
- Authorization: Role-based (SuperAdmin, PlatformAdmin, Operations, Developer, Support)
- Audit: Every mutating action logged
- Transport: HTTPS everywhere (Caddy auto-SSL)
- Rate limiting: Per-endpoint configurable
Scaling
- Horizontal: Multiple API instances behind load balancer
- Worker: Single instance (leader election for jobs)
- Database: MongoDB replica set
- Caddy: Single instance per server (config reload on change)
Deployment
- Single binary for API + Worker
- Configuration: Platform Settings (database-driven)
- Migrations: Automatic on startup
- Health checks:
/healthendpoint for orchestration