Day in the Build: CRO Polish, BIOS Pipeline, and the Middleware Bug That Nearly Froze Our Payouts
A full build day: /start page CRO with 14-product comparison table, a visual BIOS pipeline replacing dead text, Phase 5 debug library, and a middleware fix that unblocked Stripe verification with 3 days to spare.
What Happens When You Polish
Today wasn't a feature day. It was a polish day — the kind of day where you audit pages, fix small things, and suddenly discover a middleware bug that could have frozen your Stripe payouts in 72 hours.
Six deliverables. One near-crisis. Here's the full build log.
1. /start Page CRO Overhaul
The /start page is the gateway for all 6 archetypes — the 6 types of operators who work with eComX. It needed to do three things better: price anchor, prove value, and create urgency.
Price Hints on Archetype Cards
Every archetype card now shows a price range before the user clicks through. No bait-and-switch. The Visionary sees "From $7,500." The Optimizer sees "From $1,497." Transparency is CRO.
14-Product Comparison Table
The comparison table expanded from a handful of products to the full catalog — all 12 Stripe products plus 2 free tools (Engram and Axiom). Each row shows what it costs, what it replaces, and the alternative cost.
What It Costs. What It Replaces.
14 products. Every price transparent. Every alternative documented.
Social Proof Anchoring
Between the archetype cards and the comparison table: "620% ROI improvement. See the Celtic Knot case study →" One stat. One link. Bridges interest to evidence.
Quiz Escape Hatch
Below the archetype grid: "Not sure which path? Take the quiz →" For users who don't self-select into an archetype. Reduces bounce by offering a lower-commitment action.
Founding Client Urgency
Below the comparison table: "Founding client pricing — 3 managed slots available." Scarcity messaging tied to real inventory.
2. BIOS Pipeline Visual
The /bios page had a "See BIOS in Action" section that showed four platform tabs (Claude, ChatGPT, Gemini, Cursor) — but clicking them did nothing. The before/after text panels were dense and static.
Replaced the entire section with a 5-step interactive visual pipeline:
- Environment — Clone, install, configure local workspace
- CLIs — Scaffold platform-specific command-line interfaces
- Data Warehouse — All brand data flows into Supabase
- 33 Specs + SYS Docs — BIOS specifications and system documentation generated
- Agent Emergence — AI agents emerge from the BIOS and data warehouse
Each step has a custom SVG icon, a numbered badge, and a description that animates in on click. Desktop renders horizontally with dashed connector arrows. Mobile stacks vertically.
Also fixed the platform list: Cursor → Grok. The note now reads: "Compatible with Claude · ChatGPT · Gemini · Grok."
3. The Pricing Fix Nobody Would Have Caught
The BIOS pricing section had a tier called "DIY Axiom" at $297–497. Three problems:
- Wrong name — should be "DIY BIOS" (Axiom is a different product)
- Wrong price — should be flat $497 to match the Stripe product
- Wrong link — pointed to
/axiominstead of/bios
Fixed the tier card and found 3 more references in FAQ copy across both /bios and /start pages. All corrected. The kind of inconsistency that erodes trust if a sharp-eyed visitor notices.
4. Promo Bar Mobile Fix
The promo bar text was line-breaking on mobile, creating an awkward orphan. Added white-space: nowrap, reduced font to 11px under 480px, and added text-overflow: ellipsis as a fallback. Single line on all devices now.
5. Phase 5 Debug Tab — The Complete Build Library
The /debug build library had Phase 5 greyed out with a lock icon — even though all 7 plans were executed and committed. Built a comprehensive Phase5Tab with 9 sections:
- Context — 10 implementation decisions
- Research — 6 findings, 6 gotchas, dependency list
- Gaps — 7 identified (1 critical, 4 moderate, 2 test) — all resolved
- Plans — 7 plans with commit hashes and component tags
- Requirements — 27/27 complete
- UAT — 15 passed, 0 failed, 2 skipped (need live Stripe/DB state)
- Test Suite — 12 runnable tests that verify Phase 5 deliverables live
- Test Matrix — 44 test cases across 7 categories (accordion UI)
- Evidence — live log from test runs
The build library is the complete audit trail. Every decision, every gap found, every test run — traceable from context through verification.
6. The Middleware Bug
The biggest save of the day came from a Stripe compliance check.
Stripe notified us that our business website verification was due in 3 days. If unresolved, payouts would be paused on March 9. When I tried to submit ecom-x.com, Stripe's crawler reported: "This URL couldn't be reached."
The site loads fine in a browser. Stripe's bot couldn't reach it.
The Root Cause
Our Next.js middleware was calling supabase.auth.getUser() on every single request — including public marketing pages. This function makes an external API call to Supabase's auth server to validate the session token:
Request hits eComX → Middleware → External call to Supabase Auth → Wait → Response
For a human browsing the site, the extra 100-300ms is invisible. For Stripe's verification crawler, with strict timeout limits, that external round-trip was enough to cause a timeout.
The Fix
Public marketing pages don't need session refresh. Only /dashboard, /api, and /auth routes do. The middleware now checks the path first:
const AUTH_ROUTES = ["/dashboard", "/api", "/auth"];
export async function middleware(request: NextRequest) {
const needsAuth = AUTH_ROUTES.some(p =>
request.nextUrl.pathname.startsWith(p)
);
if (!needsAuth) return NextResponse.next();
return await updateSession(request);
}
Public pages now return instantly. Crawlers get fast responses. Stripe's verification should pass on the next check.
The Lesson
This is why polish days matter. Without the Stripe compliance deadline forcing us to test the site from an external crawler's perspective, this middleware overhead would have gone unnoticed — silently adding latency to every page load for every visitor.
By the Numbers
| Metric | Value |
|---|---|
| Commits | 6 |
| Files changed | ~15 |
| Products in comparison table | 14 (12 Stripe + 2 free) |
| BIOS pipeline steps | 5 interactive |
| Phase 5 debug requirements | 27/27 |
| UAT tests passing | 15/19 (2 need live credentials) |
| Test matrix items | 44 |
| Stripe deadline remaining | 3 days |
| Middleware latency removed | ~100-300ms per public page |
What's Next
The Stripe verification needs to pass on the redeployed site. The remaining page audit continues — every page gets the same CRO treatment /start received today. And Phase 6 (tracking, attribution, launch) is on deck.
But today's lesson is clear: polish isn't cosmetic. It's structural. A misnamed pricing tier erodes trust. A slow middleware hides behind fast browsers. A greyed-out debug tab hides completed work. Polish is how you find the things that matter before your users — or your payment processor — find them first.
Want to apply this to your brand?