CISNET: IT certification training.
Marketing site + SEO rebuild.

Migrated a Toronto IT certification training company off legacy PHP onto Next.js 16. Full programmatic SEO. Lead pipeline. Admin portal. Three months. Solo. Ranking authority preserved through a 70+ URL redirect map.

CLIENT
IT Training · Toronto
SCOPE
Site + SEO + Pipeline + Admin Portal
DELIVERED
2025-Q4 · 3 MO
ROLE
Solo · End-to-end
01 / 05THE PROBLEM

Legacy PHP that couldn't grow.

CISNET's existing site was a hand-coded PHP build from 2014. Maintainable because one person knew where everything was. Breakable because nobody else could ship into it without an outage. Marketing wanted new certification pages. Paid campaigns into specific cohorts. Leads captured into a CRM. Engineering reality: every new page was a Friday deploy with the lights flickering.

The deeper issue was SEO momentum. The legacy site ranked for ~70 cert-related queries. Any redesign that didn't preserve those URLs risked tanking organic traffic for a quarter or more. The business depended on that organic flow for ~40% of intake.

  • Brittle stack: PHP 5.6, no test suite, manual FTP deploys
  • No lead infrastructure: contact-form-to-email only, no CRM, no admin view
  • SEO at risk: 70+ ranked legacy URLs that couldn't break
  • Marketing blocked: couldn't ship landing pages without engineering
02 / 05THE APPROACH

Next.js 16 + programmatic SEO + lead infrastructure.

Three parallel workstreams over 12 weeks. Stream 1 (weeks 1-4): stand up the Next.js 16 + Supabase + Vercel foundation. Port the marketing pages 1:1. Run the redirect map in dev. Stream 2 (weeks 4-8): programmatic SEO. Generate 200+ cert × city pages from a structured content model. Ship sitemap.xml + 7 distinct schema types. Stream 3 (weeks 8-12): lead pipeline. Facebook Lead Ads webhook with HMAC verification. Supabase storage. Admin portal. Resend transactional email. Stripe Checkout for paid courses.

Hardest call early on: how aggressive to be on the redirect strategy. I mapped every legacy URL individually rather than rely on Next.js catch-all rewrites. Slower to build. Google indexed the new URLs with full link equity inside 6 weeks. Not 6 months.

  • Foundation: Next.js 16 (app router), TypeScript strict, Supabase, Vercel
  • SEO surface: 200+ pSEO pages generated from a cert × city matrix
  • Redirects: 70+ legacy URLs mapped individually (not catch-all)
  • Schema: 7 types: Course, LocalBusiness, FAQPage, Organization, BreadcrumbList, ContactPoint, WebSite
  • Lead pipeline: FB Lead Ads → HMAC-verified webhook → Supabase → admin portal → Resend
  • Payments: Stripe Checkout + course-enrollment webhook
03 / 05THE STACK

Boring, fast, debuggable.

Default opinionated stack: Next.js + Supabase + Vercel. Could've used a CMS for the marketing pages. Editorial volume didn't warrant the operational tax. Page content lives in MDX in the repo. Engineers ship copy through PRs.

Next.js 16 TypeScript Vercel Supabase Tailwind Stripe Resend FB Lead Ads API MDX Zod React Hook Form Plausible
04 / 05THE TIMELINE

12 weeks. 3 streams. No scope creep.

Locked scope in week 0. Anything that came up after went into a "v2 list." None of it shipped during the engagement.

WK 0Kickoff + scope lock. Written spec signed. Redirect map drafted from server logs.
WK 1–4Foundation stream. Next.js 16 scaffold, marketing pages 1:1 port, Supabase schema, Vercel deploys, redirect map in dev.
WK 4–8SEO stream. Cert × city content model, 200+ pSEO page generation, 7 schema types, sitemap.xml + robots.txt, internal-link graph.
WK 8–12Pipeline stream. FB Lead Ads webhook + HMAC verification, admin portal, Resend transactional email, Stripe checkout, payment webhooks.
WK 12Cutover + monitoring. Production deploy, DNS swap, redirect map active, Plausible + Search Console + Sentry wired up. 14-day support window.
05 / 05THE IMPACT

What it enabled.

Headline numbers from the engagement. Technical surface only. Business KPIs are CISNET's to disclose.

PSEO PAGES
200+
Cert × city programmatic pages. Indexed within 6 weeks of cutover.
LEGACY URLS PRESERVED
70+
Individually-mapped redirects. Ranking authority preserved on every URL.
SCHEMA TYPES
7
Course, LocalBusiness, FAQPage, Organization, BreadcrumbList, ContactPoint, WebSite.
LIGHTHOUSE PERF
98+
Production performance score across every marketing route.
ADMIN PORTAL
FULL
Custom portal for leads, enrollments, content, payments. Built from scratch on Next.js + Supabase.
DELIVERED IN
3 MO
Fixed-price. Fixed-scope. Zero scope creep across 3 streams.

Beyond the numbers: marketing ships new certification pages through MDX without engineering. Lead routing is observable end-to-end. Ad campaigns target specific cohort × city combinations that previously had no landing page.

★★★★★
Async-first actually works the way he runs it. Daily Looms, written summaries, no meeting tax. The migration ran 3 months without a single live call drift.
MP
Mani POps Lead · CISNET
Note: Some business KPIs (organic traffic delta, lead-to-enrollment rates, MRR impact) live with the client. Not disclosed here. Happy to discuss what's shareable on a call.

Same surface area? Legacy stack to migrate, SEO to preserve, lead infrastructure to build. Discuss the project →