Notebook Studio
Notebook Studio is the canonical local prototyping surface for the paid notebook experience. It runs in a browser, uses synthetic fixtures, and composes the same first-party Report V2 engine used by the production code path. It does not require Expo, a simulator, Clerk, Convex, Supabase, a provider API key, or customer data.Studio is a design and deterministic contract tool. It does not prove native sheets, gestures, haptics, safe areas, app backgrounding, or real provider behavior. Those need separate device and staging certification.
Start Studio
From the repository root:@tiwih/* packages from their generated dist output; stale output can make a valid source change look missing at runtime or during typecheck.
Ten panels
Panel and scenario selections are stored in the URL as
studioPanel and studioScenario, so a specific proposal can be shared as a deterministic deep link.
Scenario matrix
Studio currently provides 29 scenarios.
Use the pairwise matrix instead of checking only the known-strain happy path. At minimum, every change should compare:
- one happy path;
- one unknown or ambiguous input;
- one stale or failed research state;
- one cancellation or recovery state;
- one immutable update state;
- free and paid entitlement behavior;
- a long or payload-pressure boundary.
Recommended review loop
1
State the product question
Example: “How should an unknown strain appear while research is pending?” or “What remains readable if an update fails?”
2
Choose the nearest fixture
Start with a built-in scenario. Avoid changing production data just to explore a design question.
3
Inspect every affected panel
Review the user journey, matching, research, lessons/evidence, lifecycle, and validation panels—not only the final card.
4
Compare adjacent states
Check before, during, successful, failed, canceled, and retry states. For updates, compare current, update available, generating, promoted, and history.
5
Export or deep-link the proposal
Use Studio’s bounded fixture export or copy the deep link. Never import production customer records or secrets.
6
Lock accepted behavior in code
Update the shared engine or fixture contract, add a deterministic test, and rerun the browser interaction and static build gates.
Safe fixture rules
- Use synthetic names, orders, URLs, and evidence.
- Do not paste emails, account IDs, addresses, phone numbers, receipts, tokens, provider payloads, or raw production database rows.
- Preserve explicit
nullor unavailable values; do not replace them with plausible defaults. - Keep research URLs synthetic unless the fixture is specifically testing a public-source parser.
- Treat fixture import as untrusted input; validation must pass before rendering.
Verification commands
Run these after changing Studio, the shared notebook engine, or Report V2 contracts:What Studio can and cannot certify
Troubleshooting
Port 6006 is already in use
Port 6006 is already in use
Stop the existing local Storybook process or use the already running instance. Do not start multiple Studio servers against different branches and assume they show the same code.
Studio looks correct but the app differs
Studio looks correct but the app differs
Treat that as an integration or native-certification gap. Record the scenario and run the equivalent app flow; do not weaken the shared contract to match an accidental mobile behavior.
