01 · Selected work
DOME + Claire
AI-enabled mattress comparison with structured catalogue data, guided sleep consultation, and measurable retailer handoff — built so the path can be audited.
- Problem — Discovery was not becoming a trusted retailer handoff.
- Built — Mattress catalogue + Claire sleep consult with an auditable path.
- Result — Live V1 surface; early analytics only; not scaled revenue.
- Your role — Solo conceptualised, designed, built, and managed.
Live surface: dome.ml-nightworx.io
Live: v1 catalogue, guides, Claire consult proxy, Firestore, SendGrid, GA4, UTM clicks. Partial: v2 RAG / Stripe / x402 code is complete; deploy state and Stripe are unproven in-repo.
Marco solo conceptualised, designed, built, and manages the system.
Live surface dome.ml-nightworx.io. 17 retailer feed CSVs; the site claims 16 retailers / 171+ products. 48 guides plus agent manifests. GA4 90 days ending 15 Sep 2026: 49 active users, 93 new, 48s engagement, 643 events — early signal only. Mattress category context (~A$1.8B) is domain size, not DOME revenue.
Scaled revenue, booked ARR, or 7ARCH / ADE-F.T inside this programme — those are separate ML-Nightworx work.
The system
DOME (brand: Cubby House) is an Australian mattress-comparison platform. It ingests retailer product feeds into a normalised catalogue, renders AI-search visibility surfaces — guides, product pages, agent manifests — and tracks every outbound retailer click.
Claire is the AI Sleep Concierge on top: a conversational consult that collects a sleep profile (position, pain points, budget, household) and matches it against the catalogue. A request flows browser → Express API on Cloud Run (australia-southeast1) → server-side POST /consult proxy → Sleep Deep Firebase Cloud Function → scored matches with AUD prices → click-through via /api/track-click (302 + UTM) to the retailer, with the click logged and GA4-enriched.
Catalogue evidence: 17 retailer feed CSVs; the site claims 16 retailers / 171+ products. AEO/SEO: 48 guides, plus llms.txt, ai-plugin.json, OpenAPI (dome_mattress_au), MCP servers.json, UCP, and sitemap. Lead handoff uses UTM-stamped outbound links and a consultation reference code as a pay-per-lead primitive.
Claire’s design
v1 Claire is prompt-driven consultation, not a tool-calling agent: front-end conversational flow and slot collection; matching by the Sleep Deep function; guide content via a Gemini persona prompt. Four required slots. Guardrails include temperature 0.0, a medical disclaimer, rate limits, brand-name suppression in guides, and privacy limits on stored fields. HITL: admin guide edit; Firestore transcripts flagged audited: false pending review.
v2 (TypeScript) adds Vertex AI RAG retrieval, Gemini 2.0 Flash re-rank, heuristic-first slot extraction, and feature-flagged Stripe + x402 USDC payments. Hybrid scoring falls back to RAG order if the LLM re-rank is skipped.
- Cloud Run · Express · Node.js
- Firebase Cloud Function (Gen2 / Genkit)
- Gemini 2.0 Flash
- Cloud Firestore
- GA4
- SendGrid
- Vertex AI RAG (v2)
Design decisions worth copying
- File-based catalogue over a database — zero-ops on Cloud Run.
- Server-side consult proxy — hide the agent endpoint, rate-limit, tight CORS.
- Hybrid scoring: RAG retrieve, LLM re-rank, RAG fallback.
- Heuristic-first slot extraction.
- Temperature 0.0 plus an engineered persona for SEO copy.
- HITL guide edit before/after publish.
- Consultation reference code as a measurable lead-handoff primitive.
- Agent-native discovery treated as first-class SEO.
- Feature-flagged payments, dark-shipped.
Production honesty
Live: catalogue, guides, Claire v1 consult proxy, Firestore, SendGrid, GA4, UTM clicks, agent manifests, Gemini guide generation, and admin HITL.
Partial: DOME v2 RAG / Stripe / x402 code is complete; deploy state is not verified from the repo. Stripe is unproven in-repo.
Known limits: in-memory click log (lost on redeploy); shared admin password; v1 scorer lives outside this repo; catalogue freshness cadence is unclear.
Open items, not claims: consultation/affiliate counts on analytics.ml-nightworx.io when that feed is live; Sleep Deep function internals if that repo is shared later.