← Back to all projects

Silver Mirror

Mirrosa Halo

Turns Halo skin-analysis PDFs into auditable, AI-polished facial and product recommendations for a multi-location spa.

Role
Sole developer (freelance) — built the application end-to-end
Timeframe
Mar 2026 — Present
Status
Active
Team Size
1
Domain
Skincare / aesthetics recommendation and spa operations
Mirrosa Halo cover

Mirrosa Halo is a staff-facing app for a multi-location facial spa that turns raw Halo skin-analysis PDFs into polished, auditable treatment and product recommendations. As sole developer, I built it end-to-end — from the PDF parsing pipeline and recommendation engine to the integrations and admin tooling.

The core is a hybrid recommendation system: a deterministic, fully auditable rules-and-safety engine drives every recommendation, while an AI language layer only polishes the guest-facing copy — eliminating hallucinated prices or unsafe advice. It syncs 150k+ client profiles from Boulevard, pushes events to Klaviyo through a durable outbox, and lets non-technical staff retune scoring through a no-code admin panel.

Sole developer (freelance) — built the application end-to-end

  • Architected and built the full Next.js application end-to-end (frontend, backend, database, and integrations)
  • Designed the multi-phase Halo PDF parsing pipeline with OCR fallback and confidence scoring
  • Built the deterministic concern-scoring and recommendation engine, including the composable safety-filter pipeline
  • Integrated AI copy generation via OpenAI with strict JSON-schema output and template fallback
  • Implemented Boulevard (sync + webhooks) and Klaviyo integrations with a durable outbox and audit logging
  • Built the no-code admin panel for scorer tuning, service/location management, and integration monitoring
  • Implemented branded PDF handout generation and the guest Progress Gallery
  • Set up Supabase auth, the PostgreSQL schema (Drizzle ORM), and Vercel deployment with cron jobs
  • Multi-phase Halo PDF parser with OCR fallback for measurements, zones, skin type, and photos
  • Versioned, admin-configurable concern-scoring engine (0-100 scores)
  • Deterministic service/add-on/product matcher with weighted relevance and tie-breaking
  • Composable safety-filter pipeline (pregnancy, Fitzpatrick, esthetician tier, location, inclusions) with audit logging
  • AI-generated, cosmetic-only guest copy with deterministic template fallback
  • Branded two-page PDF handout generation with QR booking link
  • Guest Progress Gallery comparing skin metrics across visits
  • Boulevard client/location sync via scheduled delta jobs and real-time webhooks
  • Klaviyo profile/event sync via a durable outbox with append-only audit logs
  • No-code admin panel for scorer tuning, service/location management, and integration monitoring

Problem

Pure-AI recommendations hallucinate prices, ignore safety rules, and are not auditable.

Solution

Adopted a hybrid architecture where deterministic rules drive recommendations and AI only polishes language, with a template fallback when AI times out or fails.

Problem

Halo PDFs vary and some data is only available as images.

Solution

Built a multi-phase parser with parallelized phases, a shared token cache, OCR fallback (Tesseract), and per-phase error isolation plus confidence scoring.

Problem

A full Boulevard client sync of 150k+ profiles exceeds Vercel's request time limits.

Solution

Used a hybrid 30-minute scheduled delta sync plus real-time webhooks to keep data fresh; full sync remains a known operational constraint to relocate off Vercel.

Problem

Business owners need to change recommendation behavior without engineering.

Solution

Moved scoring weights, service mappings, and safety rules into versioned database tables exposed through a no-code admin UI.

Languages

TypeScript

Frameworks

Next.js (App Router)ReactTailwind CSSshadcn/uiRadix UI

Databases

PostgreSQL (Supabase)

Tools

Drizzle ORMDrizzle KitSupabase Auth (SSR)OpenAI SDK@react-pdf/rendererpdfjs-distmupdftesseract.js (OCR)@napi-rs/canvassharpqrcodeAWS SDK (S3)VitestESLintpnpm

Infrastructure

Deployment
Vercel
Cloud
Vercel, AWS (S3), Supabase
Other
Vercel Cron jobs (Boulevard delta sync, outbox processing)

Boulevard

Spa booking/POS client + location sync via GraphQL API and real-time webhooks

Klaviyo

Marketing profile import and event tracking for guest recommendations

Shopify

Retail product catalog sync (storefront products feed)

Supabase

Authentication and managed PostgreSQL

AWS S3

Storage of uploaded scans, photos, and generated PDFs (signed URLs)

OpenAI

AI-generated recommendation copy and summaries

Hybrid recommendation system: a deterministic rules-and-safety-filter engine produces auditable recommendations, and an AI 'language layer' generates on-brand, cosmetic (non-medical) guest copy via OpenAI's Responses API with strict JSON-schema structured output, falling back to templates on timeout or failure.

Use Cases

Recommendation copy generationBaumann skin-type summarizationProgress-gallery summaryAI mapping of products to skin concerns (handbook-grounded)

Providers

OpenAI

Models

gpt-5.4-nano, gpt-4.1-mini

  • Designed a hybrid recommendation system pairing a deterministic, fully auditable rules-and-safety engine with an AI copy layer, eliminating hallucinated prices/services while keeping guest-facing language on-brand
  • Built a resilient multi-phase Halo PDF parser combining text extraction and Tesseract OCR with per-phase error isolation and confidence scoring
  • Implemented a versioned, admin-tunable concern-scoring model so non-developers can recalibrate recommendations without code deploys
  • Engineered Boulevard integration syncing 150k+ client profiles via 30-minute delta jobs plus real-time webhooks
  • Delivered reliable Klaviyo sync using a durable outbox pattern with append-only request/response audit logging
  • Generated branded, two-page guest PDF handouts with QR booking links using react-pdf and canvas rendering