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
- Apply the additive Parley migration locally and regenerate database types. Do not reset a shared development database to test this app.
- Run
bun --cwd apps/parley devwith 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 andparley.tuturuuu.localhost. - Validate the shared runtime and build Meet, Parley and Infrastructure through
ttr resources run. The extraction affects all three consumers. - 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.
- Build Parley with
NEXT_PUBLIC_MEETING_APP=parley. Its web Worker and cache bucket are separate from Meet. A privateMEETING_AI_PROVIDERservice binding calls Meet’s named provider entrypoint;MEET_LIVEreferences 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 withbun run deploy:cloudflarefromapps/parley, which populates OpenNext’s generated R2 cache before publishing the Worker. A directwrangler deployskips that data and can make rendered routes hang even though middleware redirects succeed. Verify/access-deniedafter each deployment; checking only the root redirect does not test page rendering. - 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.
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 ambientnext/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.
Shared-cookie forwarding and rollback recovery
The centralized auth proxy forwards the verified provider cookie inx-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.