What is ready, what still needs review.
This page is the public readiness ledger for UYB. It keeps launch quality, safety boundaries, provider setup, and review needs visible.
The product can keep improving and public smoke can continue, but broad launch should wait until the missing gates have proof.
Only human launch proof remains.
Use this as the owner handoff before broad launch. Each lane names what to do, what proof counts, and what must stay out of notes.
Use this when runtime checks look green so broad launch still waits for live email evidence and human sign-off.
npm run readiness:check -- --vercel-values --strict --db && npm run production:email-evidenceProof after itThen complete legal, support, phone, and final sign-off trackers with safe proof only.
Remove the empty production value, add the real Resend key, then rerun strict readiness and live email evidence.
vercel env rm RESEND_API_KEY production && vercel env add RESEND_API_KEY productionreadiness:check reports Email provider key as ok and production:email-evidence sends a QA-only status emailReview privacy, terms, cookies, child/guardian consent, notification consent, retention, marketing, and safety pages.
Use the Legal review tracker on this pagelegal review receipt shows named reviewer and pass status onlyAsk a real person to repeat the accepted tester fixes on a phone without coaching.
Use the Phone retest tracker and Safe phone pass script on this pagephone review receipt shows pass or fail only and no private notesThe blocker action room may show commands, key names, owner lanes, route names, artifact paths, and pass or fail status. It must not store secret values, passwords, OAuth tokens, one-time codes, private journal answers, drafts, reveal text, invite links, another person's writing, support submissions, legal advice, or crisis details.
Run the 5D launch review.
Use this before broad sharing so UYB is not judged only by build success. Each phase asks whether the product is clear, safe, recoverable, and ready for real people.
A 10-year-old, a teen, a parent, a partner, and an adult can each understand the promise, safety boundary, and first action without extra explanation.
Action: Review the home, how it works, audience pages, guides, and sign-up path on a phone.Tester feedback, help routes, guide actions, support routing, and safety pages point users toward the right next step without asking for private writing.
Action: Use feedback and support prompts to capture confusion by screen, expected result, actual result, and device.Mobile screens avoid horizontal scroll, overlapping text, hidden save state, unclear invite status, and long hunting between top and bottom actions.
Action: Run the manual phone pass and check the dashboard, journal home, question room, reveal, Solo, Vent Space, Profile, and Help.Drafts recover after interruption, provider gates report current status, private routes stay protected, and emails never include journal writing.
Action: Run readiness, database, copy, build, and signed-in QA commands with dedicated QA accounts.Live Clerk, Resend, cron, app URL, QA accounts, legal review, support ownership, and two-person phone QA are complete.
Action: Use strict readiness, Vercel production env checks, legal review sign-off, and a real-device two-user launch pass.npm run readiness:check -- --vercel-values --strict --dbThe 5D review can store status, screen names, commands, and safe observations. It must not store private journal answers, drafts, reveal text, invite links, passwords, OAuth tokens, production secrets, or crisis details.
Launch blockers still need proof.
The product checks are green, but broad launch still waits for live email proof, legal sign-off, support ownership, and human phone retest.
Current provider checks are green, but live email evidence still needs a QA-only proof pass.
The app-side readiness contract is reporting ready.
Run npm run readiness:check -- --vercel-values --strict --db after Vercel values are set.
This guide can show key names, status, and commands. It must not show production secret values, passwords, OAuth tokens, journal answers, drafts, or reveal text.
Release decision: do not broad launch yet.
The product can keep improving and public smoke can continue, but broad launch should wait until the missing gates have proof.
- public route smoke checks
- copy quality review
- mobile visual QA on signed-out pages
- legal and consent review
- support owner assignment
- non-secret Vercel key-name audit
- broad public launch until human sign-off
- customer-facing announcement until legal and support owners sign off
Release notes can show routes, commands, owners, pass or fail status, and key names. They must not show production secrets, passwords, OAuth tokens, one-time codes, journal answers, drafts, reveal text, invite links, or customer support details.
Current proof snapshot.
Use this as the quick read before anyone asks whether UYB is ready. It separates evidence that already exists from proof that still needs a provider, counsel, or real human retest.
Forty public routes passed on the canonical production domain with no failed routes, no horizontal overflow, and the Newsletter topic fit guide visible on Newsletter, including Topic fit, Pick by what you want help with, I want better words, topic choice only, no private story, and unsubscribe stays available.
test-results/mobile-visual-qa-newsletter-topic-fit-production/manifest.jsonLaunch Readiness now includes a local pass-status tracker for the Younger user, Adult creator, Invited person, and Returning user scripts, plus a Human validation receipt.
test-results/mobile-visual-qa-real-user-validation-tracker-production/manifest.jsonTwenty-seven public routes passed named-control, landmark, heading, contrast, reduced-motion, and tap-target checks after the FAQ center update, including Frequently asked questions without private stories, FAQ review receipt, private writing stays out, no open comments, and not therapy or legal advice.
test-results/public-accessibility-evidence-faq-center-production/manifest.jsonEight protected routes passed with the QA owner at 393px on the canonical production domain after the Solo and Vent in-flow shortcut update, including Writing shortcuts, Vent shortcuts, one tap on phone, safety stays visible, no product-facing sticky phone contract, no horizontal overflow, named mobile controls, and no first-viewport obstruction.
test-results/signed-in-mobile-visual-qa-solo-vent-in-flow-production/manifest.jsonThe writing compose rail production pass proves QA cleanup, owner and guest sign-in, invite, join, the Compose rail before the answer box on both writing sides, Jump to answer box, prompt stays visible, starter is editable, draft backup visible, no one is notified, reveal, private reflection, return, second journal creation, signed-in visual QA, and final cleanup.
test-results/production-private-evidence-writing-compose-rail/manifest.jsonSeven source-backed flows passed fresh current-goal interruption evidence for journal answers, reflections, setup, profile edits, Solo, Vent, and offline reassurance.
test-results/interruption-safety-evidence-current-goal-continuation/manifest.jsonCurrent provider-free email proof verifies status-only content, unsubscribe headers, private-text exclusion, safe links, and created-journal reminder copy. Live delivery still needs Resend.
test-results/production-email-contract/manifest.jsonClean database evidence commands now strip managed SSL parameters before creating pg clients, so db:check, db:migrate, and production:email-contract run without noisy duplicate SSL warnings.
scripts/pg-client-config.mjsFour accepted tester feedback packets are mapped to product behavior and production evidence in the fresh current-goal continuation pass, while fresh human retest remains required.
test-results/tester-feedback-closure-current-goal-continuation/manifest.jsonEmail delivery still needs a non-empty production provider key and email evidence.
Privacy, terms, cookies, child consent, notification, retention, and marketing still need human sign-off.
The four accepted tester fixes still need fresh human retest notes from real phones.
PLAYWRIGHT_BASE_URL=https://understandyoubetter.com UYB_VISUAL_QA_DIR=test-results/mobile-visual-qa-newsletter-topic-fit-production npm run visual:mobilePLAYWRIGHT_BASE_URL=https://understandyoubetter.com UYB_ACCESSIBILITY_EVIDENCE_DIR=test-results/public-accessibility-evidence-faq-center-production npm run accessibility:evidenceUYB_RUN_AUTH_E2E=1 PLAYWRIGHT_BASE_URL=https://understandyoubetter.com UYB_SIGNED_IN_VISUAL_QA_DIR=test-results/signed-in-mobile-visual-qa-solo-vent-in-flow-production npm run visual:mobile:signed-in -- --vercel-productionPLAYWRIGHT_BASE_URL=https://understandyoubetter.com UYB_PRIVATE_EVIDENCE_DIR=test-results/production-private-evidence-writing-compose-rail UYB_SIGNED_IN_VISUAL_QA_DIR=test-results/signed-in-mobile-visual-qa-writing-compose-rail-private-evidence npm run production:private-evidenceUYB_INTERRUPTION_EVIDENCE_DIR=test-results/interruption-safety-evidence-current-goal-continuation npm run interruption:evidenceUYB_EMAIL_EVIDENCE_DIR=test-results/production-email-contract npm run production:email-contractnpm run db:check && npm run db:migrateUYB_TESTER_FEEDBACK_CLOSURE_DIR=test-results/tester-feedback-closure-current-goal-continuation npm run tester:closureProof snapshots can name commands, routes, artifacts, pass or fail status, and safe QA labels. They must not include journal answers, drafts, reveal text, invite links, customer emails, screenshots with private writing, passwords, OAuth tokens, production secrets, or crisis details.
Do not broad launch until these human proofs exist.
This hold summary keeps the non-code work in one place so green tests cannot be mistaken for broad launch approval.
Send the QA-only status email, prove unsubscribe, and confirm private writing stays out.
Proof: production:email-evidence passesPrivacy, terms, cookies, family consent, notification consent, retention, marketing, and safety claims need formal review.
Proof: legal tracker has approved marks plus external counsel packetAccount, privacy, safety, tester, and product-feedback routes need named owners and escalation expectations.
Proof: support owner receipt has ready marks and external inbox coverageA real younger user, adult creator, invited person, and returning user should complete the scripts without coaching.
Proof: real user, phone review, and accepted-fix retest trackers show pass status onlyHuman proof hold notes may include lane names, owner roles, route names, pass or fail status, and artifact paths. They must not include private journal answers, drafts, reveal text, invite links, screenshots with private writing, customer contact details, legal advice, crisis details, passwords, OAuth tokens, one-time codes, or production secrets.
Use this order, but keep launch on hold.
The code-facing gates may look ready, but the launch owner still needs live email proof, phone retest, owner sign-off, and final evidence in order.
- FirstProvider checks are green, not launch approval.Provider checks only
This means the configured services can move into proof. Broad launch still waits for email evidence, legal review, support ownership, and phone retest.
npm run readiness:check -- --vercel-values --strict --dbProof: Run strict readiness, live email evidence, and the human owner trackers. - SecondRun the human phone pass.Human retest
Use the accepted tester scripts and real-device tracker so a fresh person can prove the original confusion is resolved without coaching.
PLAYWRIGHT_BASE_URL=https://understandyoubetter.com npm run visual:mobileProof: Phone review receipt and Safe retest receipt show pass status only. - ThirdAssign legal and support owners.Human owners
Record reviewer or team names for legal, privacy, child consent, safety, account, and tester-report routes. Keep private writing out of notes.
Open /launch-readiness and complete the local owner trackersProof: Legal review receipt and Support owner receipt have local ready marks. - LastRefresh the launch proof packet.Only after sign-off
Run the full evidence packet after provider setup, human phone pass, support ownership, legal review, and live email proof are complete.
npm run launch:evidenceProof: Public mobile, accessibility, signed-in, private flow, interruption, email, and tester closure manifests are current.
The launch owner runway may show key names, route names, commands, pass or fail status, owner lanes, and safe artifact names. It must not store production secrets, OAuth tokens, passwords, one-time codes, private journal answers, drafts, reveal text, invite links, support submissions, or crisis details.
Production setup still needs these values.
These are operations gates, not product copy. They keep launch testing honest before UYB is broadly shared.
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEYCLERK_SECRET_KEYUse live Clerk keys for the production instance. Test keys are useful for development, but they keep the launch gate incomplete.
Run npm run readiness:check -- --vercel-values and confirm both Clerk checks say live.UYB_APP_URLSet the production app URL so email links, cron jobs, and canonical references agree on the same home.
Expected value: https://understandyoubetter.comCRON_SECRETUse a long random secret for scheduled notification routes so only the trusted cron caller can trigger sends.
Run npm run readiness:check -- --vercel-values and confirm Notification cron secret says configured.RESEND_API_KEYUYB_EMAIL_FROMConnect the email provider and a verified sender before reminder or newsletter email is treated as live.
Send a profile test update and confirm no email contains private journal writing.UYB_QA_OWNER_EMAILUYB_QA_OWNER_USER_ID or UYB_QA_OWNER_PASSWORDUYB_QA_GUEST_EMAILUYB_QA_GUEST_USER_ID or UYB_QA_GUEST_PASSWORDCreate two production QA accounts so the real two-person flow can be tested without using private customer accounts.
Run the authenticated two-user QA flow after the env values are set.Do not paste secrets into feedback, chat, screenshots, or public pages.
What this environment reports right now.
This snapshot mirrors the readiness command without showing any secret values. It separates product infrastructure that is already present from provider gates that still need setup.
- okDatabase URLconfigured
- okMobile service worker filecovered by release evidence
- okOffline fallback pagecovered by release evidence
- okService worker registrationcovered by release evidence
- okPrivate routes excluded from offline cachecovered by release evidence
- okPublic sitemap policycovered by release evidence
- okAI discovery boundarycovered by release evidence
- okPublic metadata helpercovered by release evidence
- okPublic JSON-LD componentcovered by release evidence
- okPublic mobile accessibility smokecovered by release evidence
- okReal app start CTA contractcovered by release evidence
- okLegal and trust surfacescovered by release evidence
- okPremium private experience surfacescovered by release evidence
- okPremium database schema contractcovered by release evidence
- okPremium mobile interface contractcovered by release evidence
- okSigned-in mobile visual QA contractcovered by release evidence
- okMobile install and offline app shell contractcovered by release evidence
- okCopy quality contractcovered by release evidence
- okNotification and marketing delivery contractcovered by release evidence
- okAge-aware safety and consent contractcovered by release evidence
- okSafe curated question system contractcovered by release evidence
- okInterruption-safe writing persistence contractcovered by release evidence
- okHelp, support, and recovery contractcovered by release evidence
- okClerk public keyconfigured
- okClerk secret keyconfigured
- okClerk key pairconfigured
- okCanonical app URLconfigured
- okNotification cron secretconfigured
- okEmail provider keyconfigured
- okEmail senderconfigured
- okClerk QA ownerconfigured
- okClerk QA guestconfigured
This public snapshot shows provider status and release-evidence product contracts only. The CLI readiness command remains the source-file audit and never prints secret values, account emails, API keys, or private journal content.
Provider gates are ready.
The current provider snapshot does not report missing provider gates.
Paste secret values only into Vercel or ignored local env files. Public pages, screenshots, chat, docs, and support tickets should show key names only.
Email delivery handoff is ready for final proof.
Provider setup looks ready. Send the QA-only email evidence before treating reminders or newsletters as live.
- ReplaceReplace the empty provider key
vercel env rm RESEND_API_KEY production && vercel env add RESEND_API_KEY productionUse the production Resend key from the verified UYB sender account. Paste it only into Vercel or an ignored local env file.
- SenderConfirm the verified sender
vercel env add UYB_EMAIL_FROM productionUse a verified sender on the UYB domain so reminders and newsletters come from a recognizable place.
- AuditRun strict production readiness
npm run readiness:check -- --vercel-values --strict --dbThe command should pass with Email provider key ok, sender configured, app URL configured, cron secret configured, and the database schema ready.
- ProofSend the QA-only email evidence
npm run production:email-evidenceThe proof should show a QA-only status email was sent, unsubscribe works, and no journal answer, draft, reveal, solo, or vent text entered the message.
Email handoff proof may store key names, pass or fail status, provider labels, and QA-only message evidence. It must not store Resend key values, OAuth tokens, one-time codes, passwords, private journal answers, drafts, reveal text, solo notes, vent text, invite links, support submissions, or crisis details.
Run the live email proof without exposing secrets.
The provider checks look ready. Send one QA-only status email, confirm unsubscribe behavior, and keep private journal writing out of the evidence.
- 1Run strict readiness
npm run readiness:check -- --vercel-values --strict --dbConfirm the production values are shaped correctly without printing secret values.
- 2Send QA-only email evidence
UYB_EMAIL_EVIDENCE_DIR=test-results/production-email-evidence-resend-live npm run production:email-evidenceUse a QA account and status-only message proof. Do not use a customer journal.
- 3Read the delivered message
manual inbox reviewConfirm the email says only safe status, unsubscribe works, and no answer, draft, reveal, invite link, solo note, or vent text appears.
- non-empty Resend key
- verified sender
- strict readiness green
- QA-only email evidence
- private writing excluded
- legal sign-off
- real phone retest
- support owner confirmation
- final broad launch approval
Only paste secret values into Vercel or ignored local env files. Resend closeout evidence may name key labels, commands, pass status, QA-only message status, and unsubscribe status. It must not include API keys, OAuth tokens, passwords, one-time codes, private journal answers, drafts, reveal text, solo notes, vent text, invite links, support submissions, or crisis details.
Mobile QA can start with real accounts.
The core auth, database, app URL, and QA account gates are reporting ready. Use dedicated QA accounts, then smoke the full two-person flow on a phone.
The public key and secret key must both come from the same live Clerk instance.
Evidence: readiness:check shows Clerk public key, Clerk secret key, and Clerk key pair as ok.Create owner and guest QA accounts so no customer, founder, or tester journal is used for launch checks.
Evidence: readiness:check shows Clerk QA owner and Clerk QA guest as ok.Create a journal, write both sides, open the reveal, save a reflection, and confirm Today, Updates, and Journeys agree.
Evidence: Authenticated QA flow passes on a real phone or mobile browser viewport.Run the signed-in visual QA command with the dedicated QA owner after cleanup. It checks dashboard, profile, journeys, updates, setup, solo, and vent without customer data.
Evidence: test-results/signed-in-mobile-visual-qa-solo-vent-in-flow-production/manifest.json shows the signed-in routes pass with Solo and Vent in-flow shortcuts and no horizontal overflow.Do not use private customer content for QA. Do not paste keys, account secrets, journal answers, screenshots with private writing, or OAuth credentials into public docs or chat.
Manual mobile review before broad launch.
Use this phone pass after automated checks. It focuses on the moments where a real user could lose trust, context, or writing. Capture public screenshots with the visual QA command, then do signed-in checks only with QA accounts.
PLAYWRIGHT_BASE_URL=https://understandyoubetter.com UYB_VISUAL_QA_DIR=test-results/mobile-visual-qa-newsletter-topic-fit-production npm run visual:mobilePLAYWRIGHT_BASE_URL=https://understandyoubetter.com UYB_VISUAL_QA_DIR=test-results/mobile-visual-qa-newsletter-topic-fit-production npm run visual:mobiletest-results/mobile-visual-qa-newsletter-topic-fit-production/manifest.jsonUYB_RUN_AUTH_E2E=1 PLAYWRIGHT_BASE_URL=https://understandyoubetter.com UYB_SIGNED_IN_VISUAL_QA_DIR=test-results/signed-in-mobile-visual-qa-solo-vent-in-flow-production npm run visual:mobile:signed-in -- --vercel-productiontest-results/signed-in-mobile-visual-qa-solo-vent-in-flow-production/manifest.json/, /dashboard, /pair/new, /kids, /parentsH1, primary action, safety or privacy boundary, and navigation fit without overlap on a phone viewport.
/pair/[inviteCode]/question/[sessionId], /solo, /ventDevice draft, account draft, save confidence, and final save states stay understandable after reload or return.
/pair/[inviteCode], /pair/[inviteCode]/question/[sessionId], /updatesDraft, saved, waiting, reveal, invite, and reflection states never expose private text.
/kids, /parents, /safety, /profileTrusted grown-up, no hidden monitoring, no forced confession, and real-world safety help are visible.
/, /dashboard, /question-studio, /games/word-roomsReduced-motion settings keep the interface stable, readable, and usable without animated state changes.
//start-here/how-it-works/featuresNo hero text overlap, no horizontal scroll, primary CTA visible, and the next section peeks into view.
/dashboard/journeys/updates/profileBottom navigation, Today status, profile controls, and journey filters do not collide or hide save state.
/pair/[inviteCode]/pair/[inviteCode]/question/[sessionId]/solo/ventTextarea, save state, draft recovery, reveal status, and support rail stay visible without page hunting.
/help/faq/support/privacy/cookies/safety/accessibilityBoundary copy, support routes, legal notes, and accessibility reports fit with readable contrast.
/kids/teens/parents/family-consent/adultsNo hidden monitoring language, no therapy claims, and age-aware CTAs remain clear on a phone.
/question-studio/questions/games/games/word-roomsControls keep 44px targets, reduced motion works, and question previews do not ask for private answers.
Start at /start-here, choose the safest path, open the kids or teens guide, then explain what stays private.
- Pass signal
- They can say they do not have to share private writing and they know to pause or ask a trusted adult.
- Safe notes
- Record route names, unclear words, tap trouble, and whether the trusted-adult boundary made sense.
Create a journal from /pair/new, write one private side when ready, and decide whether to share the invite.
- Pass signal
- They understand they can write first, UYB does not send the invite, and reveal waits for both people.
- Safe notes
- Record setup confusion, save confidence, invite clarity, and whether the next action was visible on phone.
Open a QA invite, join with the right side label, answer privately, and describe when the reveal opens.
- Pass signal
- They understand joining does not reveal writing and both people save before anything opens.
- Safe notes
- Record join clarity, side-label fit, waiting-state clarity, and any point where they felt watched or rushed.
Start a draft in a shared room or Private Write, reload or switch away, return, and choose the next safe action.
- Pass signal
- They can find their draft or saved state, understand what stayed private, and continue without coaching.
- Safe notes
- Record recovery clarity, scroll friction, visible save state, and whether the quick path reduced hunting.
Start at /start-here, choose the safest path, open the kids or teens guide, then explain what stays private.
They can say they do not have to share private writing and they know to pause or ask a trusted adult.Create a journal from /pair/new, write one private side when ready, and decide whether to share the invite.
They understand they can write first, UYB does not send the invite, and reveal waits for both people.Open a QA invite, join with the right side label, answer privately, and describe when the reveal opens.
They understand joining does not reveal writing and both people save before anything opens.Start a draft in a shared room or Private Write, reload or switch away, return, and choose the next safe action.
They can find their draft or saved state, understand what stayed private, and continue without coaching.This is launch evidence, not a substitute for legal review, provider setup, signed-in two-user QA, or real safety support. The real-device tracker stores device labels and pass status only. Screenshot artifacts must not include private journal answers, drafts, reveal text, invite links, account details, account secrets, production secrets, support submissions, or crisis details.
Run each script without coaching. The tester should name the next safe action and what stayed private.
- Younger user
- Adult creator
- Invited person
- Returning user
This tracker stores script labels and pass status only on this device. It does not store private notes, journal answers, draft text, invite links, account details, child identity details, production secrets, or crisis details. It does not prove legal approval, provider setup, support coverage, child consent, or broad launch readiness.
Ask the tester to use the phone naturally. They should name the next safe action, what stayed private, and how they would pause or return.
Keep real notes outside UYB launch pages. Do not store private answers, draft text, invite links, account details, screenshots with private writing, or crisis details here.
/, /start-here, /helpiPhone Safari or Android Chrome/dashboard, /profile, /journeys, /updatesiPhone Safari/solo, /vent, /pair/newAndroid Chrome/pair/[inviteCode]Two real phones/kids, /teens, /safety, /family-consentSmall phone viewport/accessibility, /support, /notificationsReduced motion and large textThis is launch evidence, not a substitute for legal review, provider setup, signed-in two-user QA, or real safety support. The real-device tracker stores device labels and pass status only. Screenshot artifacts must not include private journal answers, drafts, reveal text, invite links, account details, account secrets, production secrets, support submissions, or crisis details.
6 real-device checks still need a phone pass before broad launch. Store device names and pass status only.
- Public first view
- Signed-in return
- Private writing
- Two-person status
- Younger-user care
- Motion and access
This receipt is local coordination only. It stores device labels and pass status only. It does not prove legal approval, provider setup, email delivery, support coverage, crisis response, or broad launch readiness.
This is launch evidence, not a substitute for legal review, provider setup, signed-in two-user QA, or real safety support. The real-device tracker stores device labels and pass status only. Screenshot artifacts must not include private journal answers, drafts, reveal text, invite links, account details, account secrets, production secrets, support submissions, or crisis details.
Retest the fixes that used to confuse people.
These checks turn the original tester confusion into simple mobile tasks. A pass means the tester can explain the screen without founder help.
/dashboardTester can find the invite path, knows no answer opened, and knows the next step is a shared question.
/pair/[inviteCode]Tester understands that the invite link comes first and the question appears after the journal is ready.
/pair/[inviteCode]/question/newTester knows their writing is private, the reveal is locked, and waiting does not mean they did anything wrong.
/pair/[inviteCode]/question/[sessionId]Tester can see the restored draft or saved state and does not have to scroll around to understand the next action.
- tester found the right screen
- tester named the next action
- tester understood what stayed private
- tester could pause without pressure
- real journal answers
- draft text
- invite links
- reveal text
- names of the other person
- screenshots with private writing
This local tracker records only whether each accepted fix passed on this device. It does not store tester notes, private writing, invite links, screenshots, account details, or customer secrets.
- Shared invite
- Before question
- Write first
- Phone interruption
This receipt is local status only. It should never include private writing, reveal text, invite links, account secrets, screenshots with private text, or crisis details.
A retest note should describe product clarity only. It should not store private writing, invite links, real relationship details, screenshots with private text, or customer account secrets.
Mobile performance is part of trust.
UYB should feel quick enough that users do not wonder if their private writing disappeared. These budgets focus on clarity, stability, recovery, and provider honesty.
npm run test:e2e:public -- --project=mobile-chromiumH1, primary action, trust boundary, and nav fit on a 390px phone without overlap.
Evidence: Public mobile smoke checks the H1, no horizontal overflow, first-viewport obstruction, contrast samples, tap targets, and footer trust links.Draft recovery, save status, and textarea position stay stable after reload, call, or app switch.
Evidence: Journal and solo tests cover account drafts, device drafts, submitted cleanup, and save confidence.Reduced-motion mode forces animation, transition, and scroll behavior down to calm values.
Evidence: Public mobile smoke checks reduced-motion runtime behavior.Auth, email, and cron failures show provider status without exposing private content or secrets.
Evidence: Readiness and notification tests require redacted provider failures.Offline shell avoids private route caching, local drafts stay device-only, and network status is visible.
Evidence: Service worker, offline fallback, and network banner contracts are checked in readiness.Performance notes can include route names, timing observations, screenshots without private text, and pass or fail status. They must not include journal answers, drafts, reveal text, invite links, account secrets, production secrets, or support submissions.
Premium gap analysis.
This keeps the product honest. A feature only counts as premium when there is proof that a real user can understand it, trust it, return to it, and use it on a phone.
- Evidence
- Start Here, guided sign-up context, dashboard setup, profile care agreement, and journal creation paths are wired.
- Missing proof
- A real phone pass with one younger tester, one adult tester, and one invited partner has not been recorded.
- Next check
- Watch each tester reach their first saved answer without explaining the product.
- Evidence
- Account drafts, device drafts, journeys, updates, saved reflections, solo entries, archive or restore, live Clerk keys, and dedicated QA users are present.
- Missing proof
- Fresh production private evidence must be repeated after any auth, journal, database, or app-shell change.
- Next check
- Run the live two-user journey from create to reveal to return history with cleanup before and after.
- Evidence
- Profile avatars, themes, stickers, journal icons, pinned journals, and private guide preferences exist.
- Missing proof
- Manual visual QA needs to confirm personalization is readable, inclusive, and not visually noisy on small screens.
- Next check
- Review dashboard, profile, journal home, and journeys with three theme and avatar combinations.
- Evidence
- Paired reveals, solo space, vent space, curated questions, reflection prompts, and no public feeds are enforced.
- Missing proof
- Safety language still needs legal and child/family review before broad public launch.
- Next check
- Review safety, terms, privacy, kids, teens, parents, family consent, vent, and reveal screens together.
- Evidence
- Public guides, blog article next steps, Q&A, sitemap, robots, llms.txt, metadata, newsletter opt-in, canonical-domain visual QA, and analytics boundaries are present.
- Missing proof
- Search Console style review, final snippet review, and the external Resend provider gate still need final proof before broad launch.
- Next check
- Review generated snippets on the canonical domain, confirm no private-content leakage, and rerun readiness after the Resend key is real.
Gap notes may include route names, tester role, device type, safe observations, commands, and pass or fail status. They must not include private journal answers, draft text, invite links, account secrets, production secrets, crisis details, or private support submissions.
Personal expression review.
Personalization only counts as premium if it helps people recognize their own side without making the app loud, public, or hard to read on a phone.
UYB_RUN_AUTH_E2E=1 PLAYWRIGHT_BASE_URL=https://understandyoubetter.com npm run visual:mobile:signed-in -- --vercel-production/profileA younger reader can tell the profile is private and can still find Today without coaching.
/dashboardAn adult can scan the private identity chip, next step, and journal status without visual noise.
/journeys?journal=archivedThe combination helps recognition while keeping profile choices hidden from the other person.
/updatesBadges, proof chips, and bottom navigation stay readable on a small phone.
- route name
- device size
- combination label
- pass or fail status
- private profile details
- journal answers
- invite links
- account details
/profileA younger reader can tell the profile is private and can still find Today without coaching./dashboardAn adult can scan the private identity chip, next step, and journal status without visual noise./journeys?journal=archivedThe combination helps recognition while keeping profile choices hidden from the other person./updatesBadges, proof chips, and bottom navigation stay readable on a small phone.This review stores combination labels and pass status only on this device. It must not include private profile details, journal answers, draft text, invite links, account details, screenshots with private writing, child identity details, or production secrets.
- Younger user
- Adult user
- Shared journal
- Notification view
This receipt is local coordination only. It does not prove legal approval, child consent, broad launch readiness, live support coverage, provider setup, or a public profile review.
This review stores combination labels and pass status only on this device. It must not include private profile details, journal answers, draft text, invite links, account details, screenshots with private writing, child identity details, or production secrets.
Add the missing env values without exposing secrets.
Run each command from the linked Vercel project. Paste values only into Vercel or ignored local env files, then audit key presence before strict value-shape checks.
vercel env add UYB_APP_URL productionvercel env add NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY productionvercel env add CLERK_SECRET_KEY productionvercel env rm RESEND_API_KEY production && vercel env add RESEND_API_KEY productionvercel env add UYB_EMAIL_FROM productionvercel env add CRON_SECRET productionvercel env add UYB_QA_OWNER_EMAIL production && vercel env add UYB_QA_OWNER_USER_ID productionvercel env add UYB_QA_GUEST_EMAIL production && vercel env add UYB_QA_GUEST_USER_ID productionDo not paste production secrets into chat, feedback, screenshots, docs, git, or public support tickets.
Exact order to finish production setup.
This is the safe handoff sequence for moving from a working product build to a production-ready launch gate.
- 1Add production env values
vercel env add KEY productionAdd each missing production value in Vercel. Paste the value only into Vercel, never into chat, feedback, screenshots, or docs.
Evidence: Each required key exists in the Production environment. - 2Audit Vercel production keys
npm run readiness:check -- --vercel-valuesValidate Vercel Production values from a temporary ignored file without printing or committing secret values.
Evidence: The audit shows live Clerk keys, configured cron and app URL, and flags empty or missing provider values. - 3Run strict readiness
npm run readiness:check -- --vercel-values --strict --dbUse strict mode with pulled Vercel Production values when you need value-shape checks for live Clerk keys, Resend, app URL, cron secret, QA users, and the current database schema.
Evidence: The command exits 0, every readiness line says ok, and the database audit reports all required premium columns. - 4Collect release evidence
npm run launch:evidenceRun the release evidence pack before deploy so tester packets, copy, interruption safety, trust tests, public mobile smoke, public visual screenshots, pulled Vercel Production readiness, database schema, and build are checked together.
Evidence: The command exits 0, prints that the UYB launch evidence check passed, and writes manifests such as test-results/mobile-visual-qa/manifest.json and test-results/signed-in-mobile-visual-qa/manifest.json when the public and signed-in visual passes run. - 5Run the two-person QA flow
npm run production:private-evidenceUse dedicated production QA accounts to prove signed-in mobile surfaces, profile setup, invite, guest join, draft recovery, reveal, reflection, updates, second journal creation, and cleanup.
Evidence: The command exits 0 on the canonical domain, writes the signed-in visual manifest, and final qa:cleanup reports no QA-only journals left afterward. - 6Deploy after gates pass
vercel --prod --yesDeploy only after the provider gates and QA flow are green. Then smoke the public site on mobile and desktop.
Evidence: Vercel inspect shows Ready and the canonical domain serves the latest build.
Do not share secret values in screenshots. Show only key names and pass or fail status. Pull production env locally only into ignored files when value-shape validation is required.
Do not launch until each sign-off has proof.
This separates local checks from production provider setup, live QA, legal review, support ownership, and deployment inspection. A green build alone is not enough.
Ready to run with Vercel CLI access
Blocked until production values are configured
Verified on production with dedicated QA accounts; repeat after major auth, journal, or database changes
Needs human review
Needs owner assignment
Runs after production deploy
Sign-off notes may include owners, commands, route names, pass or fail status, and safe screenshots. They must not include production secrets, OAuth tokens, passwords, one-time codes, journal answers, drafts, reveal text, invite links, support submissions, or crisis details.
6 sign-offs still need proof before broad launch. Keep the notes to owners, commands, route names, pass or fail status, and safe screenshots.
- Release evidence
- Provider env
- Live two-user QA
- Legal and safety review
- Support ownership
- Deploy inspect
This receipt is local launch coordination only. It does not prove legal approval, provider setup, email delivery, support coverage, or broad launch readiness.
Sign-off notes may include owners, commands, route names, pass or fail status, and safe screenshots. They must not include production secrets, OAuth tokens, passwords, one-time codes, journal answers, drafts, reveal text, invite links, support submissions, or crisis details.
Legal review packet for broad launch.
Use this packet to review the public trust surfaces together instead of one page at a time. It names who should review each area, what proof is needed, and what must stay out of review notes.
PLAYWRIGHT_BASE_URL=https://understandyoubetter.com npm run legal:evidence/privacy, /termsApprove privacy promises, user responsibilities, account data controls, export and deletion language, and product limits.
- Do the pages avoid therapy, legal, medical, diagnosis, custody, and crisis claims?
- Are export, deletion, correction, and account verification expectations clear?
- Do private journal answers, drafts, reveal text, solo notes, and reflections stay protected?
/family-consent, /kids, /teens, /parentsApprove age-aware positioning, trusted-adult guidance, guardian-consent language, and no-hidden-monitoring boundaries.
- Can a younger user understand they can pause and ask a trusted adult?
- Is the product clearly not child surveillance or forced confession?
- Is broad child-directed positioning held until consent policy is approved?
/cookiesApprove essential storage, optional analytics, optional marketing storage, consent language, and the analytics allowlist.
- Are analytics and marketing off unless the user allows them?
- Does the allowlist block private writing, invite links, scores, and hidden profiling?
- Can users reset optional choices without affecting private journals?
/notifications, /newsletter, /unsubscribeApprove reminder consent, newsletter consent, unsubscribe behavior, sender identity, and the rule that emails never include private writing.
- Are journal reminders separate from newsletters and marketing?
- Do emails contain status only, with no private journal text or invite links?
- Does unsubscribe work without asking for private writing?
/safety, /support, /feedbackApprove support routing, safety escalation copy, feedback privacy filters, and the boundary that UYB is not emergency support.
- Do urgent safety moments point to real-world help before product use?
- Are support and feedback forms clear about leaving out private writing?
- Are named owners assigned for account, privacy, safety, product feedback, and tester reports?
- route names
- owner names or teams
- approval status
- public copy notes
- safe screenshot descriptions
- command output without secrets
- journal answers
- draft text
- reveal text
- solo notes
- invite links
- passwords
- one-time codes
- OAuth tokens
- production secrets
- crisis details
/privacy, /termsLegal counsel/family-consent, /kids, /teens, /parentsLegal counsel and product/cookiesPrivacy review owner/notifications, /newsletter, /unsubscribeOperations and legal counsel/safety, /support, /feedbackSafety and support ownerThis packet organizes review evidence only. It is not legal advice, does not replace counsel, and must not store private writing, account secrets, invite links, or crisis details.
5 legal review areas still need approval proof before broad launch. Store owner names and status only.
- Privacy and terms
- Family and child consent
- Cookies and analytics
- Notifications and marketing
- Safety and support
This receipt is local coordination only. It stores reviewer names and approval status only. It is not legal advice and does not prove counsel approval, provider setup, email delivery, live support coverage, child-directed launch approval, or broad launch readiness.
This packet organizes review evidence only. It is not legal advice, does not replace counsel, and must not store private writing, account secrets, invite links, or crisis details.
Privacy-safe analytics review.
Use this before optional product analytics is enabled. The goal is to learn where people get stuck without turning private writing into measurement data.
npm test -- tests/trust-pages.test.js && npm run copy:check/cookies/launch-readinessProduct analytics stays off unless the user allows it, and marketing consent stays separate.
- Cookie preferences show analytics as optional.
- Marketing storage is not bundled with product analytics.
- Users can reset optional choices without affecting private journals.
Only reviewed status, route group, device class, preference, and reliability events are allowed.
- No raw journal IDs, invite codes, profile names, emails, or free text are allowed.
- New event families are blocked until product and privacy review approve them.
- Allowed properties stay short, bounded, and useful for fixing broken flows.
Private writing and direct account secrets are excluded before any analytics provider is connected.
- Never collect journal answers, drafts, solo notes, vent text, reveal text, or reflections.
- Never collect invite links, passwords, one-time codes, OAuth tokens, production secrets, or crisis details.
- Never use analytics to score, summarize, train on, or market from private writing.
The public cookie page and launch readiness page both show the analytics boundary before broad launch.
- Run npm test -- tests/trust-pages.test.js.
- Run npm run copy:check.
- Review /cookies and /launch-readiness on a phone before enabling any analytics provider.
- route groups
- device class
- signed-in state
- flow step labels
- draft recovery status
- journal status labels
- preference state
- safe error kind
- offline recovery state
- journal answers
- draft text
- solo notes
- vent text
- reveal text
- private reflections
- invite links or codes
- names or email addresses
- focus notes
- comfort notes
- scores
- hidden profiles
Analytics stays review-only until consent, privacy review, and a provider setup are approved. It must never read, score, summarize, train on, or market from private journal content.
Run the live production smoke in this order.
Use this only after live Clerk keys, app URL, Resend, cron secret, and QA accounts are configured. It turns production launch into observable evidence instead of a guess.
- 1Public domain
PLAYWRIGHT_BASE_URL=https://understandyoubetter.com npm run test:e2e:public -- --project=mobile-chromium/, /start-here, /help, /safety, /privacy, /launch-readinessPublic routes load from the canonical domain with no horizontal scroll, visible focus, readable first viewport, and private routes excluded from discovery.
- 2Google sign-in
Open /sign-in on a phone and sign in with the dedicated QA owner account/sign-in, /dashboard, /profileClerk uses live keys, Google OAuth completes, profile loads, and no development-key warning appears in production browser logs.
- 3Two-person journal
UYB_RUN_AUTH_E2E=1 PLAYWRIGHT_BASE_URL=https://understandyoubetter.com npm run test:e2e:live -- --project=mobile-chromium --reporter=line/pair/new, /pair/[inviteCode], /pair/[inviteCode]/question/[sessionId]Passed on production after QA cleanup: Clerk ticket sign-in, profile setup, invite, join, start question, draft recovery, both sides save, reveal, private reflection, second journal creation, and final QA cleanup.
- 4Email and cron
npm run production:email-evidence/profile, /notifications, /updates, /api/notifications/sendResend, sender, app URL, and cron secret are configured. A QA-only status notification is marked sent and then deleted. Test reminder content contains status only and no journal writing.
- 5Support and account requests
Use QA account to submit product and account feedback without private writing/feedback?topic=product, /feedback?topic=account, /supportFeedback stores route, topic, safe details, and support ownership path without journal answers, draft text, reveal text, or secrets.
- 6Deployment inspect
vercel inspect <production-deployment-url>Vercel production deploymentProduction deployment reports Ready, the canonical domain points to the latest build, and no secret values are copied into notes.
Live smoke notes may include route names, commands, pass or fail status, screenshots without private text, and provider status labels. They must not include passwords, OAuth tokens, production secrets, journal answers, drafts, reveal text, invite links, support submissions, or crisis details.
Prove the live two-person flow without collecting private writing.
Use this after redeploying production. It turns founder testing into a repeatable QA packet for Google sign-in, private writing, invite join, reveal, updates, and support.
npm run launch:evidenceNeeds Vercel CLI accessConfirms tests, copy checks, public mobile smoke, public screenshot evidence, pulled Vercel Production readiness, database shape, and build still pass before the production deployment is trusted.
Evidence: Record command, exit status, commit, public mobile smoke status, and the public visual manifest path. Do not copy private screenshots or secrets into notes.npm run readiness:check -- --vercel-values --strict --dbNeeds Vercel production valuesConfirms live Clerk keys, one matching key pair, app URL, Resend, cron secret, QA accounts, and database readiness.
Evidence: Record pass or fail status and key names only. Never record provider values.Sign in as the QA owner on a phoneNeeds live ClerkCreate a journal, choose a side label, save private writing before anyone joins, and confirm the app explains sharing without blocking writing.
Evidence: Capture route names, visible status labels, and safe screenshots with fixture text only.Open the invite as the QA guest on a second browser or phoneNeeds QA guestJoin from the private invite, choose the other side, answer the same guided question, and confirm each person sees waiting and reveal states clearly.
Evidence: Record invite join, save state, waiting state, reveal state, and dashboard or journey return state.npm run production:email-evidenceNeeds Resend and cronConfirm updates and emails describe status only, respect preferences, and never include journal answers, drafts, reveal text, or vent text.
Evidence: Record sender, preference state, delivery status, and that private writing was excluded.Submit a safe tester reportNeeds support ownerFile one feedback item with screen, expected result, actual result, device, and impact so support can help without collecting private content.
Evidence: Record route, topic, severity, support owner, and safe screenshot description.- route names and timestamps
- QA account labels, not customer emails
- pass or fail status
- fixture text screenshots only
- device, browser, and viewport
- provider key names, never values
- journal answers
- drafts
- reveal text
- vent entries
- invite links
- passwords or one-time codes
- OAuth tokens
- production secrets
- crisis details
QA proof can show what happened, where it happened, and whether it passed. It must not preserve private writing, invite links, account secrets, production secrets, OAuth data, one-time codes, support submissions, or crisis details.
Fix the launch blockers in this order.
The current blocker set is mostly provider configuration. Work from least risky to most sensitive, then run strict readiness.
npm run readiness:check -- --vercel-values --strict --db- public smoke routes
- signed-out private route redirects
- production Google and Clerk sign-in QA
- two-user authenticated journal QA
- copy quality
- build and unit tests
- email reminder delivery
- scheduled notification delivery
- 1Set the canonical app URL
vercel env add UYB_APP_URL productionDo this first because email links, cron routes, metadata checks, and support links all need one production home.
Value: https://understandyoubetter.comEvidence: readiness:check shows Canonical app URL ok.UYB_APP_URL - 2Switch Clerk to live production keys
vercel env add NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY production && vercel env add CLERK_SECRET_KEY productionThis unlocks real production sign-in checks and keeps test Clerk keys out of the broad launch path.
Value: Use pk_live and sk_live from the production Clerk instance.Evidence: readiness:check shows both Clerk checks ok.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEYCLERK_SECRET_KEY - 3Connect Resend and the sender
vercel env rm RESEND_API_KEY production && vercel env add RESEND_API_KEY production && vercel env add UYB_EMAIL_FROM productionIf Vercel shows RESEND_API_KEY but readiness says missing key, replace the empty value. After that, send only status reminders, never private writing.
Value: Use a non-empty production Resend key and a verified sender on the UYB domain.Evidence: readiness:check -- --vercel-values shows Email provider key ok, production:email-evidence marks a QA-only status email sent, unsubscribe works, and no private journal text appears in email.RESEND_API_KEYUYB_EMAIL_FROM - 4Protect scheduled notification sends
vercel env add CRON_SECRET productionThis lets scheduled notification routes run without exposing a public trigger for reminder sending.
Value: Use a long random value stored only in Vercel and local ignored env files.Evidence: readiness:check shows Notification cron secret ok.CRON_SECRET - 5Create dedicated Clerk QA accounts
vercel env add UYB_QA_OWNER_EMAIL production && vercel env add UYB_QA_OWNER_USER_ID production && vercel env add UYB_QA_GUEST_EMAIL production && vercel env add UYB_QA_GUEST_USER_ID productionThis is the gate for authenticated two-person QA without using a founder, tester, or customer journal. Each QA account needs an email plus either a Clerk user ID or a password.
Value: Use two production QA accounts that never hold private customer content. Use user IDs when possible, or passwords only in Vercel if the live E2E path requires them.Evidence: The two-user QA flow creates, writes, waits, reveals, reflects, and returns successfully.UYB_QA_OWNER_EMAILUYB_QA_OWNER_USER_ID or UYB_QA_OWNER_PASSWORDUYB_QA_GUEST_EMAILUYB_QA_GUEST_USER_ID or UYB_QA_GUEST_PASSWORD
Only paste secret values into Vercel or ignored local env files. Public docs, chat, screenshots, and support tickets should show key names, not values.
What can be tested right now.
Use this matrix to separate production smoke checks from authenticated and provider-dependent checks.
/Check homepage, help, safety, questions, kids, notifications, sitemap, robots, and llms.txt without signing in.
Playwright mobile viewport. Evidence: 200 responses, no horizontal scroll, first-viewport obstruction checks, readable contrast samples, keyboard skip access, comfortable tap targets, canonical metadata, public routes only./dashboard, /updates, /pair/test/question/testConfirm private routes redirect to sign-in and preserve the return URL.
curl or Playwright. Evidence: Redirect lands on /sign-in with redirect_url intact./profileConfirm profile saving and profile-to-journal setup require the care agreement, while no birthdate or age field is collected.
Unit test and authenticated profile QA. Evidence: Profile action redirects missing agreement submissions and the visible agreement explains consent, privacy, safety, and UYB limits./pair/newCreate a journal, write as owner, join as guest, write the second side, open the reveal, and confirm history and updates agree.
UYB_RUN_AUTH_E2E=1 PLAYWRIGHT_BASE_URL=https://understandyoubetter.com npm run test:e2e:live -- --project=mobile-chromium --reporter=line. Evidence: Production QA passed with dedicated owner and guest accounts. Repeat after major auth, journal, or database changes./profile, /updatesVerify Resend, sender, app URL, cron secret, and notification preferences before treating reminders as live.
npm run readiness:check. Evidence: Readiness check passes and test emails never include private journal writing.Do not use private customer journals for QA. Use dedicated production QA accounts once they are configured.
Search and AI recommendation readiness.
This gate keeps public discovery useful without turning private writing into public content. It is for Google, AI assistants, and humans who need to understand UYB before signing in.
Sitemap, robots, and llms.txt expose help, safety, guides, blog, newsletter, and legal pages while keeping private journal routes out.
Evidence: Public mobile smoke checks robots.txt, sitemap.xml, and llms.txt for public-only boundaries.Public pages need titles, descriptions, canonical URLs, and social preview fields so search and AI assistants can classify the product accurately.
Evidence: Metadata tests cover public discovery pages and dynamic guide or blog entries.FAQ, guide, blog, question, feature, and readiness pages should expose JSON-LD only for public product education, never private journal content.
Evidence: Trust-page tests check FAQPage, ItemList, Article, BlogPosting, and WebPage usage on public routes.Public pages can be summarized, but private journal answers, drafts, solo notes, reveal text, invite links, account details, and OAuth data stay out.
Evidence: llms.txt states the private-content boundary and robots disallows private app routes.npm test -- tests/trust-pages.test.jsnpm run test:e2e:public -- --project=mobile-chromiumnpm run copy:checkSearch and AI snippet review.
Review how UYB could be summarized by search results, AI assistants, and link previews before broad launch. The goal is useful discovery without private content leakage or inflated claims.
PLAYWRIGHT_BASE_URL=https://understandyoubetter.com npm run visual:mobile//features/start-hereA private guided journal for softer one-to-one conversations, with writing-first, share-by-choice, and reveal-after-both-answer boundaries.
Do not call UYB therapy, a public feed, AI relationship advice, hidden monitoring, or a place where private answers are visible.
No therapy claim, public feed claim, private answer text, or hidden monitoring promise appears.
/safety/kids/parents/family-consentAge-aware guidance for kids, teens, parents, and adults, with pause, consent, trusted-adult help, and real-help-first safety boundaries.
Do not imply emergency support, surveillance, diagnosis, forced confession, legal approval, or hidden parent access.
Danger routes to real-world help and UYB is not framed as emergency support or surveillance.
/questions/question-studio/guides/faq/q-and-aReviewed question examples and guides that help people choose a safer first step without submitting private answers.
Do not imply live AI counseling, diagnosis, personalized therapy, private-answer analysis, or public Q&A replies.
Public examples stay reviewed, private answers stay out, and no AI-generated therapy claim appears.
/sitemap.xml/robots.txt/llms.txtPublic discovery files describe product, guide, help, safety, legal, blog, and newsletter routes only.
Do not expose private app routes, invite codes, account routes, answers, drafts, reveals, support submissions, or OAuth data.
Private app routes, invite links, account routes, answers, drafts, reveals, and support submissions stay out.
The snippet target is review guidance only. It does not prove indexing, ranking, Search Console coverage, legal approval, analytics approval, provider setup, or broad launch readiness.
//features/start-here/safety/kids/parents/family-consent/questions/question-studio/guides/faq/q-and-a/sitemap.xml/robots.txt/llms.txtThis review stores route group labels and pass status only on this device. It must not include private journal answers, draft text, reveal text, invite links, account details, OAuth data, support submissions, crisis details, screenshots with private writing, or production secrets.
- Home and features
- Safety and family
- Questions and guides
- Discovery files
This receipt is local coordination only. It does not prove search-console indexing, legal approval, support coverage, provider setup, analytics approval, or broad launch readiness.
SEO and AI discovery can explain the product, audiences, safety limits, and help content. They must not quote, infer, expose, index, or summarize private journals, drafts, solo notes, reveals, invite links, account data, or support submissions.
Before broad launch, check these by hand.
Automated tests help, but UYB still needs real-device review because people use it during emotional moments.
Create two production accounts, start a journal, write both sides, open the reveal, and confirm the dashboard, updates, and journey history all agree.
Review privacy, terms, cookies, notifications, safety, age-related language, consent language, and all non-therapy boundaries before broad rollout.
Confirm the Profile care agreement is understandable for younger users, clear enough for adults, and aligned with legal review before broad rollout.
Confirm Resend is connected in production, send a profile test update, verify reminder preference headers, verify unsubscribe, verify the cron secret, and check that email never includes private writing.
Decide who receives feedback, abuse concerns, account questions, billing questions, and launch tester reports.
Run npm run copy:check before launch changes ship, then read the touched screens on a phone for plain, human wording.
Test keyboard skip navigation, mobile tap targets, no horizontal scroll, first-viewport obstruction, readable contrast, draft recovery, and reduced guessing across the main flows.
Assign support ownership before broad launch.
UYB has the routes. Launch still needs named owners so feedback, account requests, safety concerns, privacy questions, and tester reports do not pile into one unclear inbox.
/feedback?topic=productReview for patterns before turning it into product work.
- screen name
- device
- expected action
- what felt confusing
- journal answers
- draft text
- reveal text
/feedback?topic=accountVerify identity before export, deletion, correction, sign-in, or shared-journal review.
- request type
- account email if needed
- device and browser
- passwords
- one-time codes
- private writing
/safetyPoint to real-world help first when danger, coercion, abuse, crisis, or self-harm may be involved.
- screen where concern appeared
- general safety category
- whether urgent help is needed
- crisis details in public forms
- another person's private writing
- threat transcripts
/privacyRoute privacy, terms, cookies, notification, retention, consent, export, and deletion questions carefully.
- request type
- public policy page
- account marker if needed
- journal content
- invite links
- OAuth tokens
/launch-readinessTriage as bug, UX, copy, feature, safety, parked, or decision needed before implementation.
- test date
- route
- device
- result
- safe screenshot description
- real private journal text
- customer account secrets
- production secrets
Support ownership can store route names, safe summaries, device details, and status. It must not store journal answers, drafts, reveal text, passwords, one-time codes, OAuth tokens, or production secrets.
5 support paths still need a ready owner before broad launch. Store owner names or team names only.
- Product feedback
- Account requests
- Safety concerns
- Privacy or legal
- Launch tester reports
This receipt is local coordination only. It does not prove live support coverage, legal approval, account verification, emergency response, email delivery, or broad launch readiness.
Review during the next product triage pass.
Link the accepted issue to a test, evidence note, or parked decision.Confirm the request type, then verify the account before export, deletion, correction, or sign-in action.
Record the request type, verification status, action taken, and safe account marker only.Point to the public policy page first, then collect only the request type and safe account marker if needed.
Record route, policy area, owner, decision, and whether follow-up is needed.Tell the person to use emergency, crisis, trusted adult, or local support before product troubleshooting.
Record that real-world help was shown and whether product copy or routing needs review.Classify as blocked, confused, polish, safety, account, legal, parked, or decision needed.
Record route, device, expected result, actual result, severity, owner, and proof command.- route or policy page
- request type
- device and browser
- expected result
- actual visible result
- safe account marker if needed
- owner and status
- journal answers
- draft text
- solo notes
- vent text
- reveal text
- invite links
- passwords
- one-time codes
- OAuth tokens
- crisis details
Support operations should prove the request was routed and handled. They must not become a second place to store private writing, account secrets, invite links, or crisis details.
Support ownership can store route names, safe summaries, device details, and status. It must not store journal answers, drafts, reveal text, passwords, one-time codes, OAuth tokens, or production secrets.
Safety and trust
UYB keeps the emotional boundary visible before people write, reveal, or invite someone.
- Private answers stay closed until both people save their side.
- There is no public feed, open comment thread, random matching, or hidden monitoring.
- Safety pages explain that UYB is not therapy, crisis care, legal advice, medical advice, diagnosis, or emergency support.
- Kid, teen, parent, and adult language is written for consent, clarity, and age-aware support.
- Profile saving and profile-to-journal setup require a care agreement for consent, privacy, safety, and product limits.
Core journal flow
The app supports solo thinking, paired journals, guided questions, waiting states, and reveal moments.
- People can create a private journal, write before the other person joins, and share when they are ready.
- Question selection is guided, not left to the user during emotional friction.
- Reveals include private feeling markers and reminders to read for understanding.
- Journal history, milestones, and dashboard actions show what to do next.
Mobile and accessibility
UYB is designed around small screens, large tap targets, clear status, and calmer transitions.
- Primary journal actions are visible in mobile-friendly flows with less top-to-bottom hunting.
- Draft recovery reduces the risk of losing writing after a call, reload, or device interruption.
- Public pages use semantic headings, readable contrast, responsive layouts, structured metadata, and a public accessibility statement.
- Motion and visual polish stay supportive instead of hiding the next action.
- Copy quality checks keep unnecessary em dashes out of app and library source.
Notifications and email
The product can support reminders and marketing with separate consent paths.
- In-app updates can cover journal creation, joined invites, saved answers, and ready reveals.
- Email reminders are wired for event-specific choices once the email provider key is live.
- The scheduled sender requires a cron secret and redacts provider failure details from client-visible responses.
- Reminder emails include preference headers so mail clients can point users back to notification settings.
- Newsletters and marketing use separate opt-in language and unsubscribe paths.
- Reminder content must never include private journal answers, drafts, or reflections.
Legal and launch review
The required trust surfaces exist, but formal review still matters before broad launch.
- Privacy, terms, cookie, notification, safety, help, and Q&A pages are present.
- Legal counsel should review the legal pages, age-related language, consent language, and marketing claims.
- The product should avoid therapy, medical, legal, crisis, diagnosis, or emergency-support claims.
- A final launch pass should check real accounts, production domains, email delivery, analytics consent, and support routing.
Search and AI discovery
Public pages are structured so people and recommendation systems can understand what UYB is for.
- Sitemap and robots expose public help, guide, safety, newsletter, and legal pages while keeping private journal routes out.
- Public pages use canonical URLs, Open Graph, Twitter metadata, and JSON-LD where useful.
- Copy explains the product in plain language for parents, teens, partners, and families.
- Private journal content stays out of public search and public metadata.