Abeó Health · Witness Layer May 8, 2026 · Status: Pre-launch checklist
Abeó Health
Pre-launch · Witness Layer

Closer to ship-ready than expected.

Pre-launch review of worlds/abeo-health/. The site builds clean, all 4 service detail pages render, the dispatch console works, brand colors are correct, mobile responsiveness is acceptable. Two real blockers, one hosting decision, and a polish list. With one focused day, this goes live.

Verdict
Ship-ready: NO
Time to ship
~1 working day
abeo.health Confidential
Bottom line

Pre-launch with two blockers.

Ship-ready: NO. Pre-launch with two blockers and a short fix list. Estimated time to ship-ready: 1 working day of focused execution.

The site builds clean, all 4 service detail pages render, the dispatch console works, brand colors are correct, and mobile responsiveness is acceptable. The blockers are: (1) hosting target undecided, (2) two video assets referenced but missing, and (3) backend integration for the contact form.

Witness checks

What was verified.

Check Result Notes
Production build (bun run build) ✅ Clean 393 modules, 317KB JS / 55KB CSS. No errors.
Homepage routes (/) ✅ Renders All 9 sections load: Navbar, Hero, Mission, WhyChooseUs, Services, Testimonials, Contact, Careers, Footer + MascotAgent.
Service detail pages (/services/{registry,ride,living,circle}) ✅ Renders All 4 pages load with hero + What's Included + How It Works + FAQ + cross-link CTA.
Dispatch center (/dispatch) ✅ Renders Both Ride and Living modes; roster + log-entry + activity stream + event log all functional. localStorage persistence verified.
Mobile responsiveness (375px viewport) ✅ Acceptable Hero wraps cleanly; service cards stack to single column. Caveat: Navbar links stack vertically rather than collapsing to hamburger — minor polish opportunity.
Brand color compliance ✅ Correct Teal #42C2BE and Orange #FF8A34 used per brand guide. Orange used sparingly (CTAs + ó accent).
Typography ✅ Correct Nunito loaded from Google Fonts. ExtraBold for headings, Medium/Regular for body.
AB5 / DRA compliance language ✅ Fixed "Independent contractor" language removed from brand-guide and Registry detail page. Replaced with "Domestic Referral Agency under California Civil Code §1812.5095."
SEO meta tags ✅ Upgraded Description, keywords, canonical, Open Graph, Twitter Card, schema.org MedicalOrganization, theme-color all added to index.html.
Favicon ✅ Correct /logo-mark.png referenced and present in public/.
Console errors on page load ✅ None No runtime errors detected.
Three blockers

Blockers before launch.

◆ Blocker 1 — Missing video assets (cosmetic, low risk)

File: src/components/Hero.jsx. Problem: Hero originally imported video-senior.mov and video-transport.mov from src/assets/. Files do not exist. Current state: Imports stubbed to empty strings. Hero buttons "Senior Care" and "Medical Transport" still render, modal still opens — but video playback will be empty until assets land. Fix: Either (a) supply the two .mov files in src/assets/, or (b) replace VideoModal with an image-only modal until videos are produced. Effort: 1 hour with assets in hand.

◆ Blocker 2 — Contact + ride-booking forms wired to Resend (READY TO ACTIVATE)

Status: Code shipped. Awaiting Resend API key + DNS records before forms go live. What's wired: ContactSection.jsx POSTs to /api/contact; BookRidePage.jsx POSTs to /api/book-ride; both endpoints implemented as Cloudflare Pages Functions in functions/api/contact.js and functions/api/book-ride.js; both functions send (a) coordinator alert email + (b) submitter confirmation email via the Resend API; mailto fallback and "call us" fallback wired in case the API is unreachable.

To activate (one-time setup, ~30 minutes)

# Step
1 Sign up at resend.com (Brittany or Jack — free tier covers 3,000 emails/month, plenty for Phase 1)
2 Add abeo.health as a sending domain in Resend dashboard → Domains
3 Add the DNS records Resend provides (SPF, DKIM, DMARC) at your DNS host. If we deploy to Cloudflare Pages, DNS lives in Cloudflare — straightforward.
4 Verify the domain in Resend (auto-verifies once DNS propagates, ~10 min)
5 Create a Resend API key in dashboard → API Keys → "Create" → name it abeo-website-prod
6 In Cloudflare Pages dashboard → Settings → Environment variables → Production, add: RESEND_API_KEY=re_xxx... · COORDINATOR_EMAIL=info@abeo.health · FROM_EMAIL=notifications@abeo.health
7 Redeploy the site. Forms now live.

Test plan (Phase 1)

  • Submit a test contact form → both coordinator + tester see emails
  • Submit a test ride booking → both coordinator + tester see emails with ride summary
  • Verify coordinator email is HTML-rendered, mobile-readable, includes the rider's phone as a tel: link

Future (Phase 2+)

  • Replace email-only flow with Convex backend that creates Booking records + dispatches via Twilio SMS to on-call coordinator
  • Add admin dashboard for coordinator to mark bookings accepted / declined / scheduled
  • Add availability check against owned-fleet calendar before accepting wheelchair bookings
◆ Blocker 3 — Hosting target undecided

Decide where this deploys. Recommendation: Cloudflare Pages — matches StarHub Studios infrastructure (TXP is on Cloudflare). Single Cloudflare account manages DNS, Pages, Workers (for contact form), R2 (for video assets if needed). DNS: point abeo.health apex to the Pages deployment. www → apex redirect.

Hosting options

Host Pros Cons
Cloudflare Pages Free tier, fast, integrated Workers for backend, mythOS infra parity Requires Cloudflare account configuration
Vercel Best React/Vite DX, instant previews, built-in analytics Bandwidth limits at scale
Netlify Simple form-handling out of the box, redirect rules straightforward Not on mythOS infra path
Must do before public launch

Pre-launch checklist.

Must do before public launch

  • ☐ Decide hosting target (Cloudflare Pages recommended)
  • ☐ Add wrangler.toml if Cloudflare Pages
  • ☐ Wire contact form to capture submissions (mailto / Formspree / Workers / Convex)
  • ☐ Supply or remove video assets (video-senior.mov, video-transport.mov)
  • ☐ Add 404 fallback page (/public/404.html or React Route fallback)
  • ☐ Verify https://abeo.health SSL via host
  • ☐ Set up info@abeo.health email forwarding

Must do (cont.)

  • ☐ Add robots.txt and sitemap.xml in public/
  • ☐ Run Lighthouse audit (target: 90+ Performance, 95+ Accessibility, 95+ SEO)
  • ☐ Verify Open Graph preview via opengraph.xyz
  • ☐ Test contact form submission end-to-end
  • ☐ Mobile test on real devices (iPhone Safari, Android Chrome)
  • ☐ Print-style review of marketing/investor-deck.html for PDF export

Polish items (post-launch acceptable, but address within 30 days)

Item Effort Impact
Mobile navbar → hamburger menu 2h UX
Image optimization (700KB+ hero/services backgrounds → WebP) 2h Performance
Lazy-load below-the-fold images 1h Performance
Real testimonials replace placeholder text TBD Trust
Accessibility: skip-to-content link, aria-labels on icon buttons, focus rings 3h A11y + SEO
Add /dispatch auth gate (currently public; should be coordinator-only) 4h Security
Connect dispatch to Convex backend (replace localStorage) 1d Operational
Privacy policy + Terms of Service pages TBD Legal
HIPAA disclosure / privacy notice for any health data TBD Compliance
Routing · State · Build

Architecture notes.

Routing

  • BrowserRouter from react-router-dom@6.30.3
  • Routes: /, /services/:slug, /dispatch
  • No 404 catch-all yet — adding <Route path="*" element={<NotFound />} /> recommended

State management

  • HomePage.jsx uses useLocation to read location.state from service-page CTAs (scroll target + form prefill)
  • Dispatch uses local component state + localStorage for persistence
  • No global state library (Redux / Zustand) — appropriate for current scope

Build output (dist/)

  • index.html (0.54 KB)
  • index.[hash].js (317 KB / 104 KB gzip)
  • index.[hash].css (55 KB / 9 KB gzip)
  • logo-mark.[hash].png (69 KB) · logo-full.[hash].png (65 KB)
  • mission-compassion.[hash].png (700 KB) ⚠️ · bg-services.[hash].png (556 KB) ⚠️ · bg-hero.[hash].png (691 KB) ⚠️
◆ Performance lever

Image optimization is the biggest performance lever. Three large PNG backgrounds = ~1.95MB total. Convert to WebP (~80% size reduction) for ~400KB total savings.

Marketing assets NOT in dist: the marketing/ folder (brand-guide, elevator-pitch, competitive-intel-oc, investor-deck, company-evaluation, deployment-readiness) is not included in the production build. It serves as repo-internal documentation. Investor deck can be hosted separately on a sales subdomain (e.g. pitch.abeo.health), distributed as a PDF (Chrome → Print → Save as PDF; deck has @media print styles), or sent as raw HTML for web-native viewing.

Known edge cases · Recommended sequence

Edge cases & deployment sequence.

◆ Known edge cases

Server-side routing on Cloudflare Pages: all unknown paths must redirect to /index.html for the SPA router. Add _redirects: /* /index.html 200. · /dispatch is public. Anyone can access the dispatch console and write to localStorage. For internal use only — gate with auth before any sensitive client data lands. · Phone (949) 987-4605 is the canonical contact. Verify it routes correctly before launch. · info@abeo.health is the canonical email. Verify mail forwarding is configured.

Deployment sequence (recommended)

When Step
Day 1 — Local fixes Add _redirects, supply or stub video assets, fix mobile navbar, optimize 3 background PNGs to WebP.
Day 1 — Backend Wire contact form (Formspree shortcut, or Cloudflare Workers proper).
Day 1 — Infrastructure Cloudflare Pages project + DNS + info@abeo.health mail forwarding.
Day 2 — Final QA Lighthouse audit, mobile device testing, end-to-end contact form test.
Day 2 — Soft launch Deploy to staging URL, share with Saddleback case manager pilot contacts.
Day 3+ — Public launch Apex DNS swap, social media, hospital partnership outreach.

"The site is closer to ship-ready than expected. Two real blockers, one decision, and the polish list. With one focused day, this goes live."