CodeForge
← All projects

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.

Next.js 16React 19NextAuth · JWTPrisma · MySQLTailwind CSS v4Framer Motion

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.