Role & responsibilities
Backend lead on a two-engineer team: the initial architecture and most of the code, 60 of the 63 API controllers, 364 HTTP endpoints across 6 audience surfaces, 74 domain entities mapped 1:1 to 74 PostgreSQL tables, 20 of the 24 EF Core migrations, and review of 57 of its 61 pull requests.
Identity, access and tenancy: phone-only registration with OTP, JWT with workspace-scoped permission claims and refresh-token rotation with reuse detection, the per-student device limit, 6 named rate-limit policies, a permission-first RBAC of 60 keys and 8 system roles on 286 controller actions, and a fail-closed EF Core global filter on every workspace-scoped entity.
The money and exam flows: subscription-code batches and race-safe redemption in one transaction with the commission frozen onto each sale, the settlement lifecycle (draft, approved, paid) with append-only adjustments and receipts, server-clock exam attempts with autosave, auto-grading and an expiry sweep (exam sections and grading concurrency co-built with his teammate), and 23 notification event types drained to FCM by background jobs.
Provider adapters, jobs and tests: the Cloudflare Stream, S3, FCM HTTP v1 and SMS adapters with a dev double behind each port (PDF watermarking by his teammate), the 17-job Hangfire platform with a job-runs ledger and dead-letter handling, the PostgreSQL-backed integration-test harness, most of the 1,520 xUnit test methods, CI and the Dockerfile.
Beyond the backend: the founding design pack the team built from (SRS, architecture, conventions, runbook); the React 19 dashboard's scaffold, typed API layer (37 service objects, 270 methods), permission-first routing and platform console, with the visual system, data tables and assessment builder by his teammate; and push notifications, announcements and video-player fixes in the Flutter app his teammate leads.