Internal Platform · Visa Processing
Role-based visa application platform
Customers submit country-specific visa applications and documents, staff process the cases assigned to them, and admins run the whole operation — one codebase, three roles, permissions enforced on every page and every API.
3
User roles — Customer / Staff / Admin
5
Destination countries — USA, Australia, UK, Schengen, Canada
7
Application statuses, from payment to completion
Overview
One codebase covers the customer submitting an application, the staff member responsible for the cases assigned to them, and the admin who needs the whole-company view — with access control enforced by role on every page and every API route, not just hidden in the UI.
Customer intake
Intake
Dynamic per-country forms
Multi-step forms driven by a central config file, so each destination country genuinely has its own question set and step count — not just relabeled fields. Autosaves every step and remembers where a customer left off. Adding a new country means editing one config file, no UI changes.
Documents
Document center with dual review
Checklist-driven uploads (passport copy, 6-month bank statement, 10-year travel history, etc.) with type/size validation, a 'reuse previous documents' shortcut across a customer's past applications, and per-file admin approval with visible notes when something needs fixing.
Operations
Ops
Case assignment & staff console
Admins assign each application to a specific staff member, who then sees only the cases assigned to them, opens full case detail, and prints case paperwork for offline handling.
Ops
Admin dashboard
Company-wide overview of application volume, revenue, customers, staff, and status breakdown; role management with a safeguard preventing an admin from editing their own permissions.
Access control
Auth
Email or phone login
NextAuth credentials provider, bcrypt-hashed passwords, JWT sessions. Every page and API checks its own session and permissions to prevent cross-account access (IDOR) on any user-facing endpoint, and redirects each role to its own area after login.
Data model
Schema
User · VisaApplication · Document
Three core Prisma/MySQL tables designed so new capability is usually a new field or enum value, not a new table — application status runs PENDING → SUBMITTED → REVIEWING → ACTION_REQUIRED → APPROVED/REJECTED → COMPLETED, each with an auto-generated reference code (e.g. PV-2026-0483).
Shipped
- ✓3-role membership system with per-page and per-API authorization and role-based redirects
- ✓Dynamic visa forms for 5 countries with autosave
- ✓Document upload + review, including cross-application document reuse
- ✓Case assignment to staff with a filtered, staff-only view
- ✓Printable case paperwork for offline processing
- ✓Admin dashboard — overview, revenue, users, roles
- ✓Mobile-responsive UI for both the staff and admin areas
Next phase
- →Real payment gateway integration (currently priced from a fixed rate table)
- →Automatic email/SMS notifications on status change
- →Full UK form flow to match the pricing already in place
- →Cloud storage for uploaded files
- →Approve/reject directly from the application list view
Ready to build something?
We take on a limited number of projects per quarter. Let's talk before the spots fill up.