Immigration CMS — case management for applications
Context
An immigration operations system: managing applications, applicant records, required documentation, and case progression.
A case is a state machine with legal deadlines
Immigration work is not transactional. A case runs for months, moves through defined stages, requires specific documents at specific points, and is governed by dates that cannot slip — filing windows, expiry dates, response deadlines. Missing one doesn't produce an error message; it produces a rejected application and a person whose status is affected.
So the design treats case stage as explicit state rather than a status label, with document requirements attached to the stage that needs them. What's outstanding at any moment should be answerable from the record itself, not reconstructed by a caseworker reading a history.
Document handling
Immigration cases are document-heavy, and the documents are originals — passports, certificates, official correspondence. Which documents exist, which are still missing, and which belong to which stage is the core of the record, not an attachment feature bolted to the side of it.
Stack
React.js · .NET Core APIs · C# · MS SQL Server