NexAI AdvisorsThe Two-Door Consultancy Site
My own site, rebuilt in September 2026 around two doors: a production-ready review for founders with an AI-built app, and phone, chat and back-office agents for business owners. Every price on the site comes from one data file, and a render audit gates each release on contrast, overflow and accessibility.
Built with Next.js 14, React 18, TypeScript, Tailwind CSS, next/font, Playwright, axe-core, Jest, Netlify, Calendly.
4.5:1
Every text and ground pair is measured at or above AA contrast by the render audit, not eyeballed
One price source
Every dollar figure on the site and in the chat agent comes from a single data file
4 widths
Horizontal overflow measured at 375, 768, 1280 and 1440 pixels before each release



What it is
The site is a Next.js 14 App Router build in strict TypeScript, deployed to Netlify from the main branch. Every public route uses one design system, documented in the repo and expressed as a single stylesheet of tokens: a bone ground, one amber call-to-action fill, a verify green for stamps and links, and three typefaces (Schibsted Grotesk for display, Instrument Sans for body, JetBrains Mono for labels and prices). The home page keeps the offer in a fixed sidebar, states the promise in one headline, and shows an illustrative readiness review of a fictional app built with Lovable and Supabase, scored and itemised the way a real review would be. Below it sit the two doors, the ladder of five offers, how an engagement runs, what I have shipped, and why one engineer. The chat launcher on every page runs on Max, the agent platform I built, and reads the same offer ladder the pages show.
The problem
The previous site sold a list of packages, with prices repeated across pages, and a chatbot that still quoted a retired figure. The redesign had to say one thing - I review what AI built and make it production-ready - keep every number in one place, and hold itself to the accessibility and performance standard I ask clients to meet.
What I built
All price bands, the guarantee, payment terms and FAQ moved into one data file that every page and the chat agent read, so a price can only change in one place. A render audit script drives Playwright and axe-core over every route derived from the app directory: it measures each text and ground pair against 4.5:1, measures horizontal overflow at 375, 768, 1280 and 1440 pixels, and fails on any unnamed button or select. A gate script runs lint, typecheck, build, the Jest suite, that audit, a guard against retired colour tokens, and a public-secrets check, and prints each exit code on its own line. Only transform and opacity animate, reduced-motion renders final states, and the headline is server-rendered. Every retired route redirects to a real page.
What happened
Live at nexaiadvisors.com. The home page went up on 2026-09-02 and every other route was converted the next day, all in one vocabulary. The gate is the definition of done for a release, and the chat agent answers with the same ladder the pages show.
What it changed
- One promise on the landing page instead of a package list
- Prices can only change in one place, so the site and the chat agent never disagree
- The site meets the same contrast and accessibility bar I hold client work to
Who it fits
- Founders with an app built in Lovable, Bolt, Replit, v0 or Cursor who need it reviewed before launch
- Business owners who want the phone answered and the back office automated
- Anyone deciding whether to hand over a plan or have it taken to production
- One token stylesheet for every route, with Tailwind kept for layout helpers only
- Render audit over every route: contrast pairs, overflow at four widths, axe button and select names
- A release gate that runs lint, typecheck, build, tests, the audit, a retired-token guard and a secrets check, printing each exit code
- Offer ladder, guarantee, payment terms and FAQ held in one data file read by pages and the chat agent
- Animation limited to transform and opacity, with reduced-motion rendering final states
Want something like this built?
Bring the idea or the app. Step 1 is a free 15-minute fit call. Step 2 is a paid discovery session, $500, that ends in a written plan. Step 3 is a fixed quote for the build, or you take the plan and build it yourself.