Immigration client portal
Migrantifly
A client portal and marketing site for a New Zealand immigration advisory firm, covering consultations, visa applications, documents, payments and messaging.

- 13
- Data models
- 70+
- API endpoints
- 34
- Pages
Overview
Migrantifly takes an immigration advisory firm's process online. Prospective clients book and pay for a consultation, set up an account, and then follow their visa application through each stage, uploading documents and talking to their adviser along the way.
I built the Next.js website and portal and the Express API behind it, including the admin and adviser tools the firm uses to run applications.
What I built
Consultation booking
Public booking with slot holds and payment, then a secure link to set up a client account.
Application tracking
Visa applications move through defined stages, from consultation to decision, with progress shown to the client.
Document collection
Clients upload required documents; advisers review each one as approved, rejected or under review.
Messaging and reminders
Real-time messages per application, notifications, and deadline reminders by email and SMS.
Payments and invoices
Deposits, final and additional payments and refunds through Stripe, with PDF invoices.
Admin and adviser tools
Manage applications, consultations, documents, users, services, payments and the blog.
Engineering notes
- Three roles (client, adviser, admin) enforced by middleware, with an audit log of changes.
- Consultation slots are held with a database TTL index; a scheduled job releases unpaid slots.
- Stripe webhooks verify signatures against the raw request body.
- Real-time updates over WebSockets, with rooms per application.
- Documents stored in Cloudinary and served through private download links; API documented with Swagger.
Screenshots













