Skip to main content
Parley runs at parley.tuturuuu.com with locale-free page URLs. It uses the shared Tuturuuu Supabase session cookie across subdomains and the standard satellite shell (structure.tsx), alongside the shared @tuturuuu/meet-core runtime. Verified @tuturuuu.com accounts have access; external accounts require an enabled entry managed in Infrastructure under Platform administration → Parley. Authorization checks the current confirmed account identity. Failed lookups deny access.

Discovery and session review

The scenario library at / supports text search and category filters. The New testing session navigation item opens /sessions/new, where facilitators select a published scenario, acknowledge participation, and create a room. Open /scenarios/[scenarioId] to read the public briefing, preview role names and confirm participation before creating a session. Hidden role briefs and AI instructions never enter the discovery client payload. /sessions is the signed-in facilitator’s paginated archive. Each /sessions/[meetingId] review reuses Meet’s metered AI transcript, summary, decision and follow-up tools. Private research notes are shown separately and remain facilitator-only, even when meeting notes are shared with participants. Research notes are paginated newest first, with full-session note and decision totals; the note-type filter applies to the current page. These satellite-only routes are owned by apps/parley; the current TanStack migration manifest scans apps/web, not satellite app trees. The studio layout.tsx owns the sidebar, workspace shell and administrator navigation. Its locale and administrator flag key the cached navigation labels; session, workspace and role checks remain request-scoped. Authentication uses the centralized provider-cookie proxy with MFA verification, then fresh confirmed-email/allowlist authorization. Do not clear shared Supabase cookies or make an app-specific coordination token mandatory. Realtime room signing remains a separate server-to-server requirement.

Private content

Infrastructure administrators manage scenario briefs, private AI instructions, roles, debrief rubrics and publication state directly in Parley at /manage/scenarios. The page paginates scenarios and reports field validation errors without losing the administrator’s form values. The same authoring tools remain in Infrastructure under Platform administration → Parley, which also manages account access and reference uploads. The Parley route checks the current platform administrator role on the server before reading or saving private scenario data. Reference bytes are stored in private.parley_references, accessible only through authorized server operations. Source documents are never seeded or committed. Import real content through Infrastructure separately in each intended environment. Starting a session atomically creates a Meet room and an immutable scenario snapshot. Later edits do not change a running session’s instructions. The facilitator can save observations, decisions and debrief notes; participants do not receive these private notes or raw source documents. Discuss consent before recording or collecting research observations. Notes describe observable actions, not validated personality or truthfulness assessments. Mira uses the stored scenario instructions for shared chat and live voice. Parley’s lightweight avatar follows the local playback audio envelope. It does not analyze participant faces or microphones, and it is not phoneme-accurate viseme synthesis or a full 3D avatar.

Development and deployment

  1. Apply the additive Parley migration locally and regenerate database types. Do not reset a shared development database to test this app.
  2. Run bun --cwd apps/parley dev with the same Supabase, realtime and provider environment contracts as Meet. Browser authentication uses shared provider cookies; no Parley-specific app-session token is required. The app uses port 7834 and parley.tuturuuu.localhost.
  3. Validate the shared runtime and build Meet, Parley and Infrastructure through ttr resources run. The extraction affects all three consumers.
  4. Sync the reviewed release to production through the authorized release workflow. Verify that the production database migration job applies all Parley migrations. Meet and Parley Worker deployments wait for the database readiness marker; do not run a manual production schema push. Publish the central auth registry and Infrastructure management surface before testing.
  5. Build Parley with NEXT_PUBLIC_MEETING_APP=parley. Its web Worker and cache bucket are separate from Meet. A private MEETING_AI_PROVIDER service binding calls Meet’s named provider entrypoint; MEET_LIVE references Meet’s Durable Object namespace. The Gemini credential stays in Meet. Deploy Meet first, then Parley; CI waits for the shared runtime readiness endpoint. The common realtime signing secret is provisioned from the protected GitHub environment. Deploy with bun run deploy:cloudflare from apps/parley, which populates OpenNext’s generated R2 cache before publishing the Worker. A direct wrangler deploy skips that data and can make rendered routes hang even though middleware redirects succeed. Verify /access-denied after each deployment; checking only the root redirect does not test page rendering.
  6. Verify denied, internal-domain and allowlisted sign-in; revoke an external account and recheck access. Verify private reference upload/retrieval, scenario persistence after reload, room admission, two-participant audio, Mira response, and audio-driven avatar motion in each environment.
Existing live sockets use short-lived credentials. Revocation prevents new requests and tokens; it does not retroactively disconnect an already-open call. Close the session when immediate termination is needed. Do not describe a build or synthetic test as production or physical multi-device verification.

AI Hub and billing

Meet and Parley use the same workspace credit system. Live voice reserves credits before connecting to the provider, settles cumulative modality usage, and refunds the unused reservation. App and room identifiers accompany the reservation and final ledger entry, without scenario text or private documents. Transcription and meeting notes reserve an AI Hub run before generation. They use the purchased output-token limit, settle measured provider cost with the plan markup, and reuse the same run for settlement retries. Missing provider accounting fails closed and leaves the reservation visible for reconciliation. These runs appear in AI Hub observability; chat also reserves and settles an AI Hub run, while live deductions appear in the combined credit ledger. Chat settlement consumes its own hold, including near the quota limit; optional public search is disabled when its additional reservation would exceed the available credits. The usage and credits links open the payer’s personal workspace. Apply the research migration plus the meeting attribution and observability migrations before deploying either app’s new billing code. A Gemini key marked sensitive in Vercel cannot be exported. Parley uses the private provider binding instead of duplicating that key. Native local development may configure its own development key; do not bind local testing to the production provider. Parley disables public Google Search during scenario roleplay. The scenario configuration is separate from the participant request, so reference text never becomes an explicit public search query. Proxy authentication must resolve explicit request headers through the framework-neutral Supabase request client. Cloudflare proxy execution does not provide the same ambient next/headers cookie context as a server component. Keep refreshed cookies on the forwarded request and response, and verify login on the deployed Worker. A local Next server alone does not prove this runtime boundary. The centralized auth proxy forwards the verified provider cookie in x-middleware-request-cookie. Parley uses that value for its access check and page render. Do not replace it by replaying response cookie deletions: clearing a host-only duplicate must not erase the same-name .tuturuuu.com session. Include a shared-domain request in authentication smoke tests; a plain localhost cookie does not exercise this cleanup path. After a Worker rollback, Cloudflare can reject ordinary secret updates with error 10215 because the latest version is not active. Keep the working rollback active while preparing the corrected deployment. If existing required secrets are unchanged, deploy the corrected, validated artifact retaining those secrets, verify authentication, then retry the failed CI deployment. Never reactivate a broken version merely to unblock secret configuration. OpenNext artifacts may contain absolute build-host asset paths; deploy on the original build platform, or relocate only generated imports to the identical included assets.