All Projects
MyLumo · Marketing Platform

MyLumo Website

MyLumo Website is the production marketing platform at mylumo.in - unifying technology consulting services and MyLumo Chat SaaS product pages in one static-export Next.js 16 site. Content lives in Git as typed TypeScript modules and MDX blog posts (no CMS). A build-time SEO pipeline generates sitemap, RSS, llms.txt, JSON-LD, and legacy 301 redirect maps. GitHub Actions runs lint, Vitest, Playwright + axe accessibility, Lighthouse CI, and security scans before syncing ~889 files to S3 with tiered cache headers and invalidating CloudFront. Contact forms route leads through Pipedream webhooks; PostHog tracks funnel events; product CTAs link to chat.mylumo.in.

Problem

MyLumo needed one live marketing surface for both technology consulting and a team-chat SaaS product - without CMS sprawl, server ops, or SEO drift between staging and production. Legacy domains and blog URL patterns from a prior rebrand still needed 301 coverage at the edge.

Before and After

Before

  • Split branding and domains from prior product iteration
  • CMS or manual deploy risk for copy and SEO metadata
  • Server runtime cost for a mostly-static marketing site
  • Legacy /blog/ paths without edge redirect coverage
  • Form handling requiring always-on backend routes

After

  • Single Next.js static export for consulting + product
  • Git-based TS + MDX content reviewed in CI
  • S3 + CloudFront with tiered cache and edge redirects
  • Build-time sitemap, RSS, llms.txt, and JSON-LD
  • Client-side Pipedream webhooks + PostHog analytics

How Content Reaches mylumo.in

Git-based TypeScript and MDX content flows through a Next.js static export, a build-time SEO pipeline, and GitHub Actions deploy to S3 plus CloudFront. Forms and analytics hit external services; product CTAs route to the live chat app. Pick any block to see the flow.

Authoring

Build

SEO

CI

Delivery

Edge

Client

Integrations

What I Built

Next.js static export architecture

  • Next.js 16 App Router with output: export - ~889 pre-rendered files, zero server runtime.
  • 18 routes across /services/* consulting pages and /(product)/* SaaS marketing pages.
  • Dual CSS themes (consulting + product) sharing one design token system.
  • React 19 + TypeScript 6 with next/font for Inter, Playfair Display, and JetBrains Mono.

Git-based content without a CMS

  • Typed TypeScript content modules for services, pricing, and product copy.
  • 38 MDX blog posts with gray-matter front matter and reading-time estimates.
  • Content changes ship through the same PR review and CI gate as application code.
  • .ai/ folder documents design, SEO, and copy guidelines for consistent delivery.

Build-time SEO and legacy migration

  • NEXT_PUBLIC_SITE_URL drives canonicals, OG tags, sitemap.ts, and robots.ts at build.
  • Post-build scripts emit feed.xml, llms.txt, 301 redirect HTML, and CloudFront viewer-request function.
  • seo-audit.mjs validates the out/ tree before deploy is allowed.
  • Legacy /blog/ and slug alias redirects handled at the CloudFront edge.

CI/CD, leads, and observability

  • GitHub Actions: lint, Vitest, Knip, jscpd, madge, dependency-cruiser, build, Playwright + axe, Lighthouse CI.
  • S3 sync with tiered cache headers and CloudFront /* invalidation on every main deploy.
  • Multi-intent contact funnel (demo, waitlist, consulting, newsletter) via Pipedream webhooks with honeypot.
  • PostHog pageviews and form_submitted events; optional GA4 when configured.

Engineering Decisions

  • Static export over SSR - marketing pages are pre-renderable; CDN delivery beats server ops cost.
  • No CMS - Git review beats WYSIWYG drift for B2B copy that must stay on-brand and auditable.
  • Edge redirects over origin rewrites - legacy URL migration without runtime middleware.
  • Client-side form POST to Pipedream - static export cannot host API routes; webhook keeps ops zero.
  • Deploy gate includes Lighthouse + axe - performance and accessibility are release blockers, not afterthoughts.
  • Marketing site decoupled from chat.mylumo.in - product signup stays in the live SaaS app.

By the Numbers

Live URL

mylumo.in

Route pages

18

MDX blog posts

38

Static output files

~889

Unit tests

27 Vitest

E2E + a11y tests

11 Playwright

Deploy target

S3 + CloudFront

Reliability and Ops

  • Deploy only after quality, E2E, and Lighthouse CI jobs pass on the build artifact.
  • HTML cache max-age=0 with must-revalidate; immutable 1-year cache for hashed _next/ assets.
  • Gitleaks, Semgrep, and CodeQL security scans on push and weekly schedule.
  • Husky + lint-staged pre-commit; Dependabot for dependency hygiene.

Testing

  • Vitest across metadata, contact routing, content loaders, pricing calculator, and slug safety.
  • Playwright E2E with axe-core WCAG 2.1 AA checks on 7 key routes.
  • Lighthouse CI enforces per-page performance budgets before production deploy.

What I Did

  • 01Architected a Next.js 16 static-export site unifying consulting services and SaaS product marketing into one deployable surface at mylumo.in.
  • 02Built a Git-based content system with typed TS modules and 38 MDX blog posts - no CMS, all copy reviewed in CI.
  • 03Shipped a build-time SEO pipeline: sitemap, robots, RSS, llms.txt, JSON-LD, seo-audit, and CloudFront edge redirect functions.
  • 04Set up AWS S3 + CloudFront deployment with tiered cache headers and automated invalidation via GitHub Actions.
  • 05Implemented multi-intent contact funnel (demo, waitlist, consulting, newsletter) via Pipedream webhooks with honeypot and PostHog tracking.
  • 06Established CI quality gates: Vitest, Playwright + axe WCAG tests, Lighthouse budgets, Knip/jscpd/madge, and Gitleaks/Semgrep/CodeQL.