EEmmanuel Oladoyin
Back to all work

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.

Migrantifly preview
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

Migrantifly screenshot 1
Migrantifly screenshot 2
Migrantifly screenshot 3
Migrantifly screenshot 4
Migrantifly screenshot 5
Migrantifly screenshot 6
Migrantifly screenshot 7
Migrantifly screenshot 8
Migrantifly screenshot 9
Migrantifly screenshot 10
Migrantifly screenshot 11
Migrantifly screenshot 12
Migrantifly screenshot 13
Migrantifly screenshot 14