US-2.1. As a user who already has a Seed identity, I want to join a site from the browser so that I can participate in it without having to create a new account.
US-2.2. As a user who already has a Seed identity, I want to join a site from the app so that I can participate in it without having to create a new account.
US-2.1.
As a user who already has a Seed identity, I want to join a site from the browser so that I can participate in it without having to create a new account.
Acceptance Criteria
Entry & join trigger
A Join button is visible in the site top bar when the user is not yet a member
Tapping Join opens a modal within the site context.
The modal shows the site name (Ethosfera), explains it is built with Seed Hypermedia, and offers two options: Create identity or Already have a Hypermedia identity
A third low-commitment option is visible: "I have an identity from another site"
Tapping "Already have a Hypermedia identity" takes the user to the sign-in flow
Sign in — email
The sign-in screen is branded as Seed Hypermedia — distinct from the site UI
The headline reads "Sign in to join [site name]" — the goal stays visible
Email field is required and validates correct format before submission
Submitting a valid email advances to the passkey screen
Sign in — passkey
The passkey screen shows the email the user is signing in as
Primary action is "Sign in with passkey" using device biometrics or PIN
A fallback "Use another email" option is available
Successful passkey confirmation advances to the join confirmation screen
Join confirmation
The join confirmation screen shows the user's name and email so they can verify which identity they are joining with
Primary CTA is "Start participating" — one tap, no further steps
A "Not now — keep reading" option is available
Tapping "Start participating" joins the site and returns the user to the site as a member
Joined state
The Join button disappears from the top bar
The user's avatar appears in the top bar
The comment and participation areas become active
A confirmation alert appears: "You've joined [site name] — you can now comment and participate" and auto-dismisses after ~3 seconds
This step is not necessary, user already did the other steps to confirm sign in. Remove!
Basic Flow
User arrives at Ethosfera as a guest and sees the Join button
User taps Join — modal opens within the site
User taps "Already have a Hypermedia identity"
User enters email linked to their Seed identity
User taps Continue — advances to passkey screen
User confirms with passkey (Face ID, Touch ID, or PIN)
Join confirmation screen shows name and email
User taps "Start participating" — joined
Returns to site as member — Join button gone, avatar visible, comment area active
Confirmation alert appears and auto-dismisses
Edge Cases
⚠️ Invalid email format → inline error: "That doesn't look like a valid email. Check for typos and try again." Button disabled until fixed
⚠️ Email not linked to any Seed identity → error with option to create one instead: "No Seed identity found for this email. Want to create one?"
⚠️User enters email from a different domain/site → redirect to "I have an identity from another site" path
Passkey
⚠️ Passkey fails or is cancelled → returns to passkey screen with retry option and "Send a verification code instead" fallback
⚠️Device doesn't support passkey → verification code fallback offered automatically
⚠️User taps "Use another email" → returns to email screen, previous entry cleared
Navigation
⚠️User closes the modal mid-flow → returns to site as guest, no partial state created
⚠️User presses browser back mid-flow → returns to previous step without losing email entry
US-2.2.
As a user who already has a Seed identity who has a local identity, I want to join a site from the app so that I can participate in it without having to create a new account.
As a user who already has a Seed identity who has a remote identity, I want to join a site from the app so that I can participate in it without having to create a new account.
Do you like what you are reading? Subscribe to receive updates.
Unsubscribe anytime