Vibe landing v1: flow

Single-file React build (index.html), hash-routed. Open it at /prototypes/vibe-landing/v1/ (with or without trailing slash).

Routing strategy

Routes

URL Screen State read from the URL Exit links
#/ Home none modalities, practitioners, events, Let's AI, sign in, info/legal pages
#/lets-ai Let's AI chat none nav, hub (signed in)
#/search/modalities …/practitioners …/events Discover tab (path); q text, loc, pd (practitioner place, delivery), et, el, ed, em (event type, place, delivery, modalities), cat, md, bn (modality category, delivery, benefit), filters=open cards to detail pages
#/modality/<name> Modality detail tab = expect or history practitioners, events, related modalities
#/practitioner/<slug> Practitioner profile tab = education events, sign in / register, Let's AI
#/event/<id> Event detail tab = location, attendees, conversations, posts, settings (when available) host profile, modality
#/legal/privacy #/legal/terms Legal path home
#/info/about faq contact seekers practitioners employers gws Info pages path calls to action
#/signin Sign in (email, then code) next (a same-app route to return to) home
#/join Seeker registration, 7 steps step = verify photo intro areas connect review sign in, home
#/practitioner-setup Practitioner registration, 8 steps step = verify about address credentials education services review home
#/practitioner-invite Practitioner invitation request none home
#/hub then #/hub/<section> Wellness hub (signed in) section: today feed journal ai practitioners events communities conversations wallet; optional third segment: community id (communities/c1) or conversation id (conversations/co-c1) account, explore, sign out
#/account Account settings (signed in) none hub
anything else Page not found the bad hash is kept in the address bar home, modalities

Signed-out visits to #/hub… and #/account are replaced with #/signin?next=%2Fhub…; after sign-in the sign-in entry is replaced by the requested route.

Dialogs (?modal=<slug>): sign-up gate on Follow/Book (join-let-s-vibe), invite-practitioner, compose post, add credential/degree, create event, personalise, vibration confirmation. The first-visit wellness-guidance notice is a consent gate: it has no URL, Esc triggers "Leave".

Prose flow

Visitors land on Home, browse modalities, practitioners and events (cards open detail pages), read info pages, or chat with Let's AI. Following or booking prompts a sign-up dialog. Sign in (email, then code) opens the hub (or the route in next). The hub holds today's vibration, feed, journal, Let's AI, followed practitioners, events, communities and conversations. Registration (#/join, #/practitioner-setup) is a stepper whose steps are URLs.

Faked vs real

Thing Status
Practitioners, events, modalities, communities, messages, wallet benefit Faked: bundled sample data
Sign-in, one-time code (314159), registration, invitations, RSVPs, follows, posts Faked: nothing is sent or stored on a server
Demo session Real, but only in sessionStorage for the tab
Let's AI replies Real network call to the Anthropic Messages API from the browser; without a key it fails and a canned reply is shown
Photos Remote Unsplash images over brand gradients (not needed for function; blocked images leave gradients)
Routing, history, titles, focus Real

Known limits