ProductClientsDevice Studio
Studio View JSON
Studio View JSON is a draft contract direction for mobile dynamic UI. The
Purpose
Studio View JSON is a draft contract direction for mobile dynamic UI. The mobile app should render trusted Prox-defined blocks from data. It should not execute arbitrary user-uploaded JavaScript, React bundles, or native plugins.
This document is a schema-level product and architecture draft. It is not a TypeScript implementation and it does not create a runtime.
Core Boundary
| Boundary | Rule |
|---|---|
| View schema vs app code | A view schema describes layout and blocks. App code remains in approved web or package runtimes. |
| Data vs execution | User-generated dynamic UI is represented as data, not executable code. |
| Template vs runtime | Gallery templates can suggest schemas; runtime execution remains host-mediated. |
| Mobile vs desktop web | Desktop web can become more flexible later; native mobile must stay stricter. |
| Actions vs native APIs | Blocks request host-mediated actions and permissions. They do not call native APIs directly. |
Concept Types
| Concept | Meaning |
|---|---|
StudioViewDocument | Top-level document for a mobile-renderable Studio view. |
StudioBlock | A trusted block declaration rendered by the host. |
ActionBlock | A block that requests a host-mediated action. |
PermissionRequest | A declared scope required before an action can run. |
MobileRendererContract | The renderer capability profile supported by Mobile Launchpad, PWA, or native companion. |
Candidate Block Types
| Block type | Use case |
|---|---|
metric-card | Compact KPI, subscription, cost, queue, or progress signal. |
list | Recent items, tasks, files, links, alerts, or connector events. |
table-preview | Small table slice with safe row count and column metadata. |
chart-preview | Static or lightweight chart summary, not a heavy analytics runtime. |
form | Small structured input with validation metadata. |
action | Host-mediated button with explicit permission requirements. |
ai-summary | AI-generated or AI-ready summary with prompt reference and provenance. |
connector-status | Provider connection health, sync state, and scope summary. |
media-preview | Image, file, link, or video preview with source metadata. |
approval-card | Approve, reject, or request changes for AI-generated suggestions. |
Example Draft
{
"type": "studio.view",
"version": "0.1",
"layout": "mobile-card-feed",
"source": {
"studioId": "founder-suite",
"viewId": "daily-founder-brief"
},
"blocks": [
{
"type": "metric-card",
"title": "Monthly subscriptions",
"value": "EUR 42.99",
"tone": "neutral"
},
{
"type": "ai-summary",
"title": "Today's founder brief",
"promptRef": "founder.daily_brief"
},
{
"type": "action",
"label": "Ask AI to summarize",
"actionId": "ask-ai-summary",
"requiresPermission": "ai.write_suggestion"
}
]
}Renderer Requirements
The mobile renderer should:
- validate document type and version;
- reject unknown unsafe blocks by default;
- render missing optional fields gracefully;
- show provenance for AI, connector, and imported data blocks;
- describe required permissions before actions run;
- treat external writes, publish, deploy, payments, sharing, destructive edits, and native API access as high-impact actions;
- record audit metadata once the backend exists;
- provide continue-on-desktop links for complex editing.
Security Rules
- Do not allow arbitrary remote JavaScript execution in mobile.
- Do not allow user-uploaded React components in mobile native surfaces.
- Do not expose native camera, files, contacts, share, push, or background APIs directly to blocks.
- Do not allow block schemas to smuggle HTML script execution.
- Do not treat Gallery templates as runtime trust.
- Do not assume a desktop app permission is safe on mobile native.
Open Questions
- Which package should eventually own shared schema types?
- Which blocks are core, official, experimental, or gallery-only?
- How should Studio View JSON reference Sources and Connectors without leaking sensitive data into mobile previews?
- How should offline capture drafts merge into a server-backed Studio later?
- How should AI-generated view schemas be reviewed before becoming active?