System Architecture
Risk Legion is a cloud-native, production-ready platform built with modern DevOps practices, containerization, and real-time capabilities.Architecture Layers
1. Frontend Layer
Technology: React 18 + TypeScript + Vite The frontend is a single-page application (SPA) deployed on Vercel Edge Network:- Build Tool: Vite 5.4.19 (lightning-fast HMR)
- State Management: TanStack Query v5 for server state
- Routing: React Router v6 with SPA rewrites
- UI Framework: shadcn/ui (Radix UI primitives) + Tailwind CSS
- Data Tables: AG Grid 35.0.0 (enterprise-grade tables)
- Charts: Recharts 2.15.4
- Forms: React Hook Form + Zod validation
- Real-time: SSE (Server-Sent Events) client
- Platform: Vercel (with automatic deployments)
- Rewrites configured for SPA routing
- Preview deployments for pull requests
2. API Layer
FastAPI Backend
Technology: Python 3.11 + FastAPI + Uvicorn Production-grade RESTful API with real-time capabilities:- Framework: FastAPI 0.104.1 (async-first)
- ASGI Server: Uvicorn with 4 workers in production
- Validation: Pydantic 2.5.0 (type-safe models)
- Real-time: Server-Sent Events (SSE) + WebSocket support
- Documentation: Auto-generated OpenAPI 3.0 Swagger UI
- Middleware: CORS, rate limiting, authentication, audit logging
- Package Manager: uv (ultra-fast Rust-based package installer)
-
Server-Sent Events (SSE):
-
WebSocket:
Redis
Technology: Redis 7-alpine In-memory data store for performance optimization:- Use Cases: Rate limiting, session caching, pub/sub messaging
- Configuration:
- Persistence enabled (
appendonly yes) - Memory limit: 256MB with LRU eviction
- Port: 6379
- Persistence enabled (
- Rate Limiting: 100 requests/minute per user/IP (via slowapi)
- Graceful Fallback: In-memory storage if Redis unavailable
3. Data Layer
PostgreSQL Database
Technology: Supabase PostgreSQL (v15+) Database design principles:- Normalized Schema: Third normal form (3NF)
- UUID Primary Keys: For distributed systems
- Soft Deletes: Audit trail preservation
- Timestamps: created_at, updated_at on all tables
- Triggers: Automatic timestamp updates
enterprises: Multi-tenant organization dataprofiles: User profile informationenterprise_users: User-enterprise-role mappingbusiness_risk_assessments: BRA master recordsrisks: Individual risk recordskey_controls: Control library (80+ pre-built controls)sub_controls: Control instances with ToD/ToE assessmentsrisk_appetite: Risk tolerance configurationaction_plans: Risk mitigation actionsaudit_logs: Complete audit trail
Row-Level Security (RLS)
All tables enforce multi-tenancy isolation:- Tenant Isolation: Users can only access their enterprise data
- Role-Based Filtering: Different permissions per role
- Audit Trail: All changes are logged
Supabase Auth
Technology: GoTrue (Supabase Auth) Authentication features:- JWT Tokens: Signed with HS256
- Session Management: Refresh token rotation
- Email Confirmation: Optional email verification
- Password Reset: Secure reset flow
CI/CD & DevOps
Docker Containerization
Multi-stage Dockerfile:GitHub Actions CI/CD Pipeline
File:.github/workflows/backend-deploy.yml
Complete 4-job pipeline:
Job 1: Setup
- Converts image names to lowercase for GHCR compatibility
Job 2: Test (Quality Assurance)
- Linting: ruff (Rust-based, super-fast)
- Type Checking: mypy in strict mode
- Unit Tests: pytest with coverage
- Integration Tests: Full API testing
- Coverage Report: Uploaded to Codecov
- Artifacts: HTML coverage reports, test results XML
Job 3: Build & Push to GHCR
- Container Registry: GitHub Container Registry (ghcr.io)
- Authentication: GITHUB_TOKEN (automatic)
- Image Naming:
ghcr.io/{owner}/risk-legion-api - Tagging Strategy:
- Branch names (main, staging)
- Pull request numbers
- Semantic versioning
- Commit SHA with branch prefix
- Build Platform: linux/amd64 (EC2 compatible)
- Caching: GitHub Actions cache for build layers
- Security Scanning: Trivy vulnerability scanner
- Scans for CRITICAL and HIGH vulnerabilities
- Uploads results to GitHub Code Scanning (SARIF format)
Job 4: Deploy to EC2
- Conditional: Only runs on main/staging branches
- AWS Integration:
- Configures AWS credentials
- Region: eu-north-1 (configurable)
- Environment Logic:
- Staging: Port 8001, staging-api.risklegion.com, tag: staging
- Production: Port 8000, api.risklegion.com, tag: main
- Deployment Steps:
- Auto-install Docker on EC2 if missing
- Create/reuse Redis container with health checks
- Pull latest image from GHCR
- Create environment file with secrets
- Deploy container with volume mounts:
/opt/risk-legion/{env}/logs:/app/logs/opt/risk-legion/{env}/data:/app/data
- Configure nginx reverse proxy
- Set up systemd service (production only)
- Prune old images (keep last 3)
- Health Checks: 10 retries, 5-second intervals
Deployment Architecture
Data Flow
BRA Creation Flow
Real-time Dashboard Updates (SSE)
Security Architecture
Authentication Flow
Authorization Layers
- Network Level: CORS configuration (allowed origins)
- Rate Limiting: Redis-backed (100 req/min per user/IP)
- API Level: JWT verification middleware
- Route Level: Role-based decorators
- Database Level: RLS policies (automatic)
- Business Logic: Service-level permission checks
Security Features
- HTTPS Enforcement: Automatic via Vercel & nginx
- CORS Protection: Whitelist-based origins
- Rate Limiting: Prevents API abuse
- Input Validation: Pydantic models
- SQL Injection Protection: Parameterized queries
- XSS Protection: React escapes all user input
- CSRF Protection: JWT-based (stateless)
- Secret Management: GitHub Secrets, AWS Secrets Manager
- Vulnerability Scanning: Trivy in CI/CD
- Error Tracking: Sentry integration
Performance Optimization
Frontend Optimizations
- Code Splitting: Route-based lazy loading
- Query Caching: TanStack Query with stale-while-revalidate
- Optimistic Updates: Immediate UI feedback
- Debouncing: Search and filter operations
- Memoization: React.memo for expensive components
- CDN: Vercel Edge Network (global distribution)
Backend Optimizations
- Async/Await: FastAPI’s async-first approach
- Connection Pooling: Supabase connection pool
- Database Indexing: Strategic indexes on foreign keys
- Query Optimization: Efficient JOIN operations
- Redis Caching: Frequently accessed data
- Batch Operations: Bulk inserts/updates
Database Optimizations
- Materialized Views: Pre-computed aggregations
- Partial Indexes: For filtered queries
- JSONB Columns: Flexible schema data
- Foreign Key Indexes: Automatic on all FKs
- Prepared Statements: Query plan caching
Monitoring & Observability
Application Monitoring
- Frontend:
- Error boundaries
- Sentry integration (optional)
- Vercel Analytics
- Backend:
- Structured logging (structlog)
- Prometheus metrics
- Sentry error tracking
- Health check endpoint (
/health)
- Infrastructure:
- Docker container logs
- AWS CloudWatch (optional)
- Nginx access logs
Health Checks
- API Health:
GET /health(30s interval in Docker) - Redis: redis-cli ping (health check in compose)
- Database: Connection pool monitoring
- Frontend: Uptime monitoring via Vercel
Audit Trail
All critical operations logged inaudit_logs table:
- User actions (CREATE, UPDATE, DELETE)
- IP address and user agent
- Timestamp and correlation ID
- Entity type and entity ID
- Action details (JSON payload)
Technology Stack Summary
Frontend
- React 18.3.1 + TypeScript 5.8.3
- Vite 5.4.19 (build tool)
- TanStack Query 5.83.0 (data fetching)
- shadcn/ui + Tailwind CSS
- AG Grid 35.0.0 (tables)
- Recharts 2.15.4 (charts)
- Vercel (deployment)
Backend
- FastAPI 0.104.1 + Python 3.11
- Uvicorn 0.24.0 (4 workers)
- Pydantic 2.5.0 (validation)
- Redis 7-alpine (caching, rate limiting)
- uv (package management)
- Docker + Docker Compose
Database & Auth
- Supabase PostgreSQL v15+
- Supabase Auth (GoTrue)
- Row-Level Security (RLS)
CI/CD & DevOps
- GitHub Actions (4-job pipeline)
- GitHub Container Registry (GHCR)
- Docker (multi-stage builds)
- AWS EC2 (eu-north-1)
- Nginx (reverse proxy)
- Systemd (service management)
- Trivy (vulnerability scanning)
Monitoring & Quality
- ruff (linting - Rust-based)
- mypy (type checking)
- pytest (testing framework)
- Codecov (coverage reports)
- Sentry (error tracking)
- Prometheus (metrics)
Development Tools
Makefile Commands
Scripts
Create Test User (scripts/create_test_user.py):
scripts/get_token.py):
Scalability Considerations
Horizontal Scaling
- Frontend: CDN distribution (Vercel Edge)
- API: Stateless design allows multiple EC2 instances behind load balancer
- Redis: Redis Cluster for distributed caching
- Database: Supabase supports read replicas
Vertical Scaling
- EC2: Increase instance size (t3.micro → t3.medium → t3.large)
- Database: Supabase instance upgrades
- Redis: Increase memory allocation
Multi-Tenancy
Risk Legion uses shared database with tenant isolation:- Single database for all enterprises
- RLS enforces data separation
enterprise_idon all tenant-specific tables- Super admin has cross-tenant visibility
Future Enhancements
Planned Features
- Advanced Caching: Redis cache layer for frequently accessed data
- Document Management: S3-based file uploads
- Advanced Analytics: BI dashboards with data warehouse
- API Webhooks: Event-driven integrations
- Mobile Apps: React Native applications
- AI Integration: Risk prediction models
Technical Improvements
- Kubernetes: Container orchestration for auto-scaling
- GraphQL API: Alternative to REST
- Message Queue: Bull/Redis for async job processing
- Elasticsearch: Full-text search capabilities
- Distributed Tracing: OpenTelemetry integration