A real distributed system, not a toy CRUD app.
Onboardly is a four-layer system: decoupled frontend (Angular + Ionic), a JWT-secured REST API (Django), an event-driven business layer (Django Signals + Celery), and a normalized MySQL schema. Every layer is independently deployable, observable, and scales horizontally.
Layered architecture
End-to-end data flow
What happens between "HR creates a new hire" and "manager sees a 78% completion chart" — eight concrete steps.
Database schema
Twelve normalized MySQL tables with foreign keys, indexes on hot paths, and soft-delete where compliance requires it.
REST API surface
44 endpoints grouped by resource. All under /api/v1/, all behind JWT auth.
Security model
Access + refresh tokens via SimpleJWT, rotated every 15 min, revocable per session.
DRF permissions enforce HR / Manager / Employee scopes at view + queryset level.
S3 SSE-KMS encryption, pre-signed URLs expire in 5 min, virus-scanned on upload.
Every mutating action recorded in activity_logs with actor IP, timestamp, diff.
100 req/min anon, 1000 req/min auth. Burst tolerance via DRF Throttling.
TLS 1.3 enforced, HSTS preload, secure cookies, SameSite=Strict.
Deployment topology
- Docker Compose
- Local MySQL
- MailHog
- AWS ECS Fargate
- RDS MySQL
- CloudFront CDN
- 3× ECS tasks
- RDS Multi-AZ
- ALB + WAF