Forward SoftwareDevelopment & technical consulting

Case study/Platform migration

Moving NZMAI off Bubble onto a stack it owns

NZMAI gives New Zealand mortgage advisers lender information, documents and calculators in one place. I led the work to move it off Bubble.io: I built the technical foundation from scratch and moved a large part of the platform across.

This was a Mission Ready work placement. I was the technical lead, and for the second half of the project, the only developer.

Lead developer · Full-stack

The rebuilt NZMAI resource directory: a search bar with category and tag filters above cards for NZ lenders

The problem

NZMAI's platform was built on Bubble.io, a no-code tool. It worked, but it had become expensive to run and hard to change. The site looked like a Bubble template rather than a professional service, and the features NZMAI wanted next, like payments and an AI assistant, were either impossible or too costly on the platform.

It's a subscription service for advisers, so access had to be right. Only the right people should see lender details, documents and tools.

What I did

  1. 01

    Chose the stack and set it up

    Next.js for the site, Supabase for the database and sign-in, Vercel for hosting. Every change is checked automatically and goes live in minutes, and each new feature had a preview link NZMAI could review before release.

  2. 02

    Designed the database

    Replaced Bubble's built-in database with a relational one for users, lender listings, documents, videos and calculators, and set up all 71 directory listings ready for their content.

  3. 03

    Controlled who sees what

    Sign-up, login and password recovery, with each user's role checked on the server. Row-level security in the database adds a second lock, so a mistake in the app still can't expose another user's data.

  4. 04

    Moved the calculators across

    Rebuilt all 13 calculator tools in the new codebase, behind the same role-based access.

  5. 05

    Gave it NZMAI's own look

    Redesigned the landing page, navigation and resource directory, with search and filters, so the site looks like NZMAI rather than a template. Built mobile-first, with accessible, high-contrast design.

  6. 06

    Scoped it and documented it

    Prioritised the first release so the foundation came first and payments and AI came later, and documented the setup so the next developer can pick it up without starting again.

Stack

Next.js and TypeScript
Fast, search-friendly pages, with types that catch mistakes before users do.
Supabase (PostgreSQL)
A relational database with sign-in and row-level security built in.
Tailwind CSS and shadcn/ui
A consistent, custom look without a template.
Vercel
Automatic checks, preview links and deploys on every change.

Outcome

NZMAI has a custom foundation it owns, with a large part of the platform already moved across: sign-in and role-based access, the database, the resource directory and all 13 calculators.

The rest of the migration, including the full directory content, admin editing, payments and the AI assistant, builds on that foundation instead of starting again.

Running costs: an estimate

A Bubble plan rents the platform. You still build the app yourself, or pay someone to, within the plan's limits on workload units (Bubble's measure of server usage) and editors. This is what each Bubble plan costs at list price, against the stack I set up.

PlanBubbleNext.js on Vercel + Supabase
StarterUS$59/month · 175K workload units · 1 editorAbout US$45/month
GrowthUS$209/month · 250K workload units · 2 editorsAbout US$45/month
TeamUS$549/month · 500K workload units · 5 editorsAbout US$45/month, plus US$20 per extra developer

This is an estimate from public list prices in US dollars, checked 4 October 2026, not NZMAI's actual costs. Bubble prices are for web and mobile plans billed annually. The custom stack is Vercel Pro (US$20 per developer seat) plus Supabase Pro (from US$25). Usage beyond a plan's allowance costs extra on both. At Starter the gap is small; it widens as the plan grows.