10 parallel research agents (R1-R10) investigated whether MCP can save scenes as saveable entities that the user later opens in the editor — rather than injecting via a dev-only window.__pascalScene hook. Key findings: - Editor is already backend-agnostic via onLoad/onSave callbacks (R2,R7) - Current persistence is localStorage-only, single key (R1) - Zero dynamic routes and no backend code yet — env declared (R4,R5) - File import exists as "Load Build" but lacks Zod validation (R6) - MCP-written scenes load cleanly into the editor today (R6, Casa del Sol test already proved this) - Best path: filesystem-handoff this week, Supabase in weeks 2-4, Supabase Realtime for live mode in Q2. Skip Yjs for now. (R8) - 4-5 weeks to private beta, 10-14 to GA (R9) - 10 high-value ideas ranked; "photo -> scene" is the unblocker (R10) SYNTHESIS.md pulls all 10 reports together with the recommended implementation plan. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
20 KiB
R10 — Ideas, Edges, and Unlocks
Agent: Research Agent R10 Date: 2026-04-18 Scope: brainstorm, not specification
Grounded in the @pascal-app/mcp package. MCP today exposes 21 tools, 4 resources, 3 prompts, runs headless in Node, mutates a Zustand (+ Zundo) scene graph, and can round-trip JSON. The editor is Next.js + R3F + WebGPU, persists to IndexedDB, has three Zustand stores (useScene, useViewer, useEditor), and has no user-account backend today beyond a health API route. GLB export is stubbed; catalog resolves asset:// URLs only in the browser. That surface area is the substrate I brainstorm against.
Legend: S ≤ 2 dev-days, M 1–2 weeks, L 3+ weeks / cross-cutting.
1. Workflows unlocked
1.1 Prompt → Pascal one-shot studio
Value: a landing page textarea ("design me a 90 m² south-facing apartment in Barcelona") that spawns a scene and drops the user into the editor with orbit camera pre-aimed. Lowest-friction wedge for consumer acquisition.
Effort: M (needs hosted MCP + auth + an agent loop that calls from_brief).
Risk: expectations calibration — generated scenes will look schematic without finishes.
1.2 Photo → Pascal via analyze_floorplan_image
Value: the tool exists but currently only the MCP host calls it. Exposing a drag-and-drop upload in the editor (viewer-overlay) that posts to MCP and returns a ready-made scene turns Pascal into a floorplan digitiser. Realtors and renovators will pay for this alone.
Effort: M (client upload, MCP host with sampling, progress UI).
Risk: the vision model is approximate; users will expect dimensional exactness and blame Pascal for mis-reads.
1.3 Listing URL → Pascal (Zillow / Idealista / Rightmove)
Value: paste a listing URL, a scraper extracts the floor plan image + listed area, analyze_floorplan_image produces the scene, then "remodel" prompts run on top. Enormous cold-start value — the user arrives with a house they already care about.
Effort: L (scraping layer, anti-bot, per-site parsers, legal).
Risk: ToS / legal on scraping; drives a category of "renovation-before-offer" anxiety that may alienate listings.
1.4 Multi-variant generation
Value: "give me 5 kitchen variations" → 5 forked scenes saved as siblings, tiled in a comparison view. Pattern-matches Midjourney's grid. Encourages exploration, sells more generations.
Effort: M (needs scene forking + a comparison UI; the forkSceneGraph helper exists already in core/clone-scene-graph).
Risk: without a scored objective ("cheapest", "most storage"), users get lost choosing; need ranking.
1.5 Regulatory/accessibility lints
Value: "ensure this scene complies with Spanish Código Técnico de la Edificación accessibility." MCP walks zones/doors/stairs, flags minimum door widths, corridor widths, ramp slopes, stair rise/run. Sells to architects and BIM shops.
Effort: L (per-jurisdiction rule packs; check_collisions is a proof the traversal works).
Risk: false confidence — a lint pass is not a stamped permit; liability exposure.
1.6 Live co-design ("AI architect next to me") Value: editor sidebar chat pane; user edits walls, AI proposes adjustments ("you lost the light well — shall I add a skylight?") via MCP on a debounced scene diff. Screen-share-ready demo. Effort: L (streaming agent, scene-diff prompts, throttling). Risk: agents nagging mid-edit is the fastest route to churn; needs carefully tuned interventions.
1.7 Voice-driven redlines on a phone
Value: open a scene on mobile (preview-button path exists), talk into the mic ("turn the office into a nursery, softer colours"), MCP applies patches, renderer reflows on reload. Wins the "showing mum the renovation" moment.
Effort: M (Whisper → text → from_brief/iterate_on_feedback, mobile-friendly result).
Risk: WebGPU on low-end Android will fail; need a fallback still renderer.
1.8 Cost + BOM synthesis Value: after scene generation, MCP walks catalog items and zones → exports a parts-list CSV with Spanish supplier SKUs and regional labour rates. Converts the toy into a quoteable artefact. Effort: M (catalog → pricing mapping, jurisdictional labour constants). Risk: pricing drifts; must be explicit about "indicative".
1.9 Time-lapse tours
Value: MCP emits a keyframed camera flythrough script (camera node already exists in BaseNode.camera). One click → shareable MP4. Drives social acquisition.
Effort: M (stitch recorder in the viewer; apply_patch can set cameras).
Risk: WebGPU video capture is finicky across Safari.
2. Novel primitives
2.1 Scene branches & forks (Pascal-Git) Value: "save as branch" on every MCP mutation; user can compare, merge, or revert branches visually. The current temporal middleware gives us a linear undo stack; exposing a DAG unlocks nondestructive exploration and is a natural home for multi-variant results. Effort: L (schema for branches, UI, storage beyond IndexedDB). Risk: merge semantics for geometry are unsolved — walls and openings resist 3-way merge.
2.2 Scene templates catalog
Value: a resource pascal://templates/* — studio apartment, ADU, Japanese machiya, Barcelona eixample flat. from_brief prompts seed from the nearest template, drastically improving first-shot quality.
Effort: S–M (author ~20 templates, register as MCP resources).
Risk: templates can anchor the generator; need variety + randomisation.
2.3 Component library / "sub-scenes"
Value: save a kitchen layout as a reusable component that carries its own sub-graph. MCP tool instantiate_component drops it onto a level with a transform. Mirrors Figma components.
Effort: M (schema addition for component refs or instance-of nodes; invalidation when parent changes).
Risk: local-vs-shared component propagation; ownership of community components.
2.4 Scene diff view
Value: built on top of export_json + a structured differ — show "AI added 3 walls, removed 2 doors, reshaped zone X". Makes AI suggestions reviewable like a PR.
Effort: M (diff algo, UI, inline accept/reject per patch).
Risk: diff UIs require high polish to feel trustworthy.
2.5 explain_scene tool
Value: a new MCP tool (or prompt) returning a natural-language summary: "A 92 m² duplex with the kitchen facing west; accessibility score 6/10; conspicuously no closet space." Turns scenes into legible artefacts for non-3D users.
Effort: S (wrapping scene-summary resource with an LLM prompt).
Risk: hallucinated detail; must be grounded strictly in find_nodes data.
2.6 Semantic scene search
Value: "find every wall in the scene longer than 4 m that faces south" → find_nodes is spec'd narrowly (type/parent/zone/level); extend with predicates + embedding search over metadata.
Effort: M (predicate DSL or JSON-logic filter, optional embeddings).
Risk: query DSLs get complex fast; keep it constrained.
2.7 Real-world anchor nodes
Value: a SiteOrigin node carrying lat/lon/heading/altitude so MCP can reason about sun path, climate, zoning. Enables solar analysis and jurisdictional rules.
Effort: S schema, L downstream (solar calc, sun path widget).
Risk: accidentally leaking address when scenes are shared.
2.8 Commentable scene nodes
Value: add a comment or annotation edge to any node: "client wants this moved 20 cm". Makes Pascal a review surface for human + AI collaboration. Dovetails with 2.4.
Effort: S (new schema node; UI pin).
Risk: scope creep into full comments system.
3. Edge cases
3.1 Concurrent MCP writers
Two agents holding the same SceneBridge both call apply_patch on the same node. Zundo coalesces at the store level; there is no lock. Result: lost updates, order-dependent chaos.
Mitigation: per-bridge operation mutex, or optimistic version stamps inside UpdatePatch.
3.2 Invalid scene crashes editor
MCP writes a DoorNode with parentId pointing to a slab. validate_scene catches it, but a misuse of apply_patch with a forged parent slips through. Editor hooks assume doors under walls and blow up.
Mitigation: the editor should hydrate through the same Zod validator, not trust the JSON. Add an "editor-safe boot" path that falls back to a recovery scene.
3.3 10k-node performance cliff
The Zustand store keeps a flat nodes dict; most tools iterate linearly. check_collisions is O(n²) on item bounds. Agents might produce hundreds of chairs in an office.
Mitigation: budget + warn inside apply_patch, or cap nodes per type with a clear error.
3.4 Circular parent-child refs
validate_scene covers Zod shape; a patch chain can still create a cycle (A.parent=B, B.parent=A). Traversal hangs.
Mitigation: cycle detection pass in apply_patch dry-run before commit.
3.5 Camera points at nothing
AI creates a 5 cm tall decorative bowl on the second floor and the last-placed-camera convention zooms there. First impression: black screen.
Mitigation: always auto-frame to root bounding box on MCP-opened scenes; store a pascal://scene/current/recommendedCamera resource.
3.6 Broken external assets
ItemNode can reference asset:// URLs; in Node, the core asset loaders are browser-only and return nothing. A scene saved in the browser with asset URIs, then opened headless, displays placeholders; a scene passed back to the browser still references dead IDs.
Mitigation: MCP must round-trip asset URIs opaquely (never create new asset:// IDs), and the editor should show a "missing asset" fallback.
3.7 User edits after MCP — merge or clobber?
The current bridge is stateful with a linear undo stack. If an agent re-runs from_brief on a user-modified scene, it rewrites from scratch. Either we implement 3-way merge (2.1) or we lock the scene and make MCP operate on a branch.
Mitigation: default to fork-on-regenerate; never overwrite user edits.
3.8 PII in shared scenes
A floor plan with lat/lon (2.7) or matching a real home is a privacy liability. Exporting export_json strips nothing. Agents uploading scenes to a shared LLM vendor leaks data.
Mitigation: a strip_pii utility that blanks address/gps/photos; explicit consent dialog before MCP sends images to remote hosts.
3.9 Offline + cloud scenes If we add cloud persistence (§5), MCP runs against a server-only scene when user is offline. Writes queue; reconciliation becomes a merge problem (3.7). IndexedDB persistence covers local, not cross-device. Mitigation: conflict-free writes via CRDT-style patch log keyed by node ID.
3.10 Sampling unavailable
analyze_floorplan_image gracefully errors when the host lacks sampling. Users who paid for this feature on a non-Claude host get a brick.
Mitigation: publish a supported-host matrix; provide a first-party web host for users without one.
3.11 GLB export stub
export_glb throws not_implemented. An AR-preview (§4.6) or a glTF-requiring downstream (Unity, Blender) falls off a cliff. This is the single largest productisation gap.
Mitigation: stand up a headless renderer worker (puppeteer + WebGPU) or build a geometry exporter independent of three-mesh-bvh.
3.12 Prompt injection via scene metadata
BaseNode.metadata is arbitrary JSON. A hostile scene file seeds strings into describe_node output, which an LLM later reads. Classic indirect prompt injection.
Mitigation: sanitise/escape metadata when emitting into model-visible surfaces; strip control tokens.
3.13 Temporal stack explosion Zundo caps history but MCP could batch thousands of operations per "patch" — one undo reverts huge changes invisibly. Users panic when Cmd-Z throws away the whole room. Mitigation: each MCP mutation shows a visible "AI step" badge; undo granularity documented.
3.14 Units mismatch MCP tools say meters; catalog items may carry cm internally. Silent drift of 100x. Mitigation: enforce units at the schema boundary; add a unit-assertion test in CI.
4. Integrations
4.1 Figma → Pascal Value: a Figma plugin lets designers hand a 2D mood board to an MCP scene. The palette, materials, and key dimensions flow in. Wins the handoff from 2D to 3D. Effort: M. Risk: Figma plugin review; limited 3D fidelity.
4.2 Revit / SketchUp / IFC import Value: architects live in these tools; Pascal becomes the "redline + present" layer. IFC in particular is the lingua franca of BIM. Effort: L (IFC parser; map to Pascal nodes). Risk: schema mismatch; Pascal is lighter-weight than full BIM.
4.3 USD / glTF / IFC export Value: outward compatibility = easier adoption. USD for Pixar/Nvidia Omniverse pipelines, glTF for web, IFC for construction. Unlocks 4.2 reciprocally. Effort: M–L per format. Risk: 3.11 — geometry derivation still lives in the browser renderer; export-by-transpile is needed.
4.4 MCP tool marketplace
Value: third parties publish style MCPs ("Japandi kitchen", "Brutalist staircase", "Zaha-Hadid-ish"). They compose as sub-tools callable from from_brief. Pascal becomes a platform.
Effort: L (registry, sandboxing, review).
Risk: quality dilution; security (3.12).
4.5 Planning-permission APIs (UK Planning Portal, Spain Sede Electrónica) Value: generated scene → pre-filled planning application PDF. Brutal time-saver. Differentiator vs Canva-for-architecture competitors. Effort: L. Risk: compliance; rules differ per council.
4.6 AR preview — Apple RoomPlan / ARKit / ARCore Value: phone scans the room with RoomPlan → MCP ingests the plist → user redesigns in Pascal → AR overlays result onto the real room. Tactile "buy this sofa here" moment. Effort: L (iOS/Android apps; glTF export 3.11 prerequisite). Risk: needs native apps Pascal doesn't have.
4.7 E-commerce catalog bridges (IKEA, Wayfair, Kave Home)
Value: map ItemNode.catalogItemId to retailer SKUs. "Checkout this room" button. Affiliate revenue.
Effort: M (catalog mapping, retailer API quirks).
Risk: SKU churn; regional availability.
4.8 Google Earth / OSM site context Value: lat/lon (2.7) + MapBox → Pascal renders the adjacent buildings, street, sun path. Scene gains real-world context. Critical for facade design. Effort: L. Risk: licensing maps data.
5. Monetization
5.1 Pay per generation
Value: $0.50–$2 per from_brief call. Low commitment, matches OpenAI/Midjourney consumer norms.
Effort: S (Stripe + credits; MCP host tracks).
Risk: commoditised unless paired with templates (2.2) or regulatory value (1.5).
5.2 Pro subscription (unlimited AI + cloud saves) Value: $15/mo predictable ARR. Effort: M. Risk: balance cost; fair-use caps for heavy users.
5.3 Template / component marketplace Value: creators sell templates (2.2) and components (2.3). Pascal takes 20%. Effort: M (payments, tax, takedowns). Risk: content moderation; cold-start supply.
5.4 Enterprise BIM seat Value: firms pay per seat; access to IFC import, compliance packs, branded export. $50–200/seat/mo. Effort: L. Risk: SOC2, procurement cycles.
5.5 Lead-gen for contractors Value: after a scene is generated, Pascal matches to local contractors with quote requests. Contractors pay per lead. Effort: M. Risk: lemons-market; must vet contractors.
5.6 Branded MCP for retailers Value: IKEA white-labels Pascal's MCP under "IKEA Studio". Licensing fee. Pascal stays the engine, retailer owns the UI. Effort: M (API + licensing). Risk: channel conflict; retailers might eat Pascal.
6. Ecosystem beyond current scope
6.1 Pascal MCP becomes a standard for spatial editors
Value: the tool verbs (create_wall, place_item, cut_opening) generalise. Onshape, SketchUp, Rhino could adopt a "spatial MCP" profile. Pascal authors the spec.
Effort: L (ecosystem work, not code).
Risk: platforms resist standards that commoditise their moats.
6.2 Open-source Pascal Scene Format
Value: USD is overkill for interior/architectural scenes; glTF lacks building semantics. A Pascal-flavoured JSON schema (already Zod-native) becomes the "Markdown of interiors". Could ship as @pascal-app/scene-format.
Effort: M to carve out; L to evangelise.
Risk: yet-another-format fatigue; ties ecosystem to Pascal's semantic choices.
6.3 Educational channel — "Design school in Pascal" Value: a publisher (or Pascal) ships a curriculum — "design a studio flat", "analyse daylight". Classrooms teach design thinking with an MCP agent as tutor. Effort: M (curriculum; content). Risk: sales-motion mismatch with a B2C/B2B tool.
6.4 Scene replay / provenance logs Value: every MCP patch is signed, stored, and replayable. A regulator or client can audit the design history. Opens procurement doors. Effort: M (append-only log; signing keys). Risk: GDPR implications of retention.
6.5 Physical fabrication downstream Value: furniture/cabinet generation → CAM-ready DXF → CNC shop. Unlocks "AI designed and built my kitchen" as a narrative. Effort: L. Risk: tolerances; liability.
6.6 Agent-to-agent Pascal Value: a procurement agent talks to a designer agent talks to a contractor agent — Pascal scenes are the shared artefact. Pushes Pascal as infrastructure for the agent web. Effort: L (policy, auth between agents). Risk: sounds crazy today; will be obvious by 2027.
7. Crazy-but-maybe ideas
7.1 "Sceneprint" — give Pascal a photo of you standing in your room; it infers which room, auto-positions the camera, and starts redesign from there. Sells to TikTok.
7.2 "Phantom move-in" — MCP grafts your furniture (measured from another Pascal scene) into a listing. Realtors hand buyers a pre-staged version of the home they're considering.
7.3 Insurance-linked scenes — an insurance app ingests your Pascal scene to price contents cover faster and more accurately. Scene = digital twin = underwriting data.
7.4 Agent-on-call — you email pascal@your.domain with a photo; MCP replies with a scene URL. No app, no login, pure asynchronous co-design. Drives discovery far beyond the editor.
7.5 "Haunted" scenes — designer publishes a scene; buyers walk through in AR; on replacement of an item, MCP whispers "the designer disagrees — here's why". Opinionated design, monetised.
7.6 Voice-coded CAD for blind users — purely spoken design, Pascal describes the scene back via explain_scene (2.5). Genuine accessibility win and possibly grant-fundable.
7.7 Multi-player Pascal — Yjs/CRDT layer on the scene graph, MCP agents as first-class collaborators alongside humans. Google Docs for interiors.
Top 10 ideas ranked by (value × feasibility)
- 1.2 Photo → Pascal (floor plan upload) — MCP already has
analyze_floorplan_image; only the UI entry point and host plumbing are missing. Highest value-for-effort unlock in the repo right now. - 2.2 Scene templates catalog — S–M effort, dramatically improves
from_briefoutput quality, and doubles as marketplace seed inventory (5.3). - 3.5 Auto-framing camera on MCP-opened scenes — a tiny fix for the single most embarrassing failure mode ("black screen"). S effort, huge UX.
- 1.1 Prompt → Pascal one-shot studio — the canonical "MCP creates scene" workflow. Build it as the hosted front door, not a side feature.
- 1.4 Multi-variant generation —
forkSceneGraphalready exists; a comparison grid lights up exploration and creates upsell moments (pay-per-variant). - 2.4 Scene diff view — makes every AI action reviewable and is a prerequisite for 1.6 and 3.7 merge flows.
- 1.8 Cost + BOM synthesis — converts toy scenes into quoteable artefacts; directly monetisable via retailer affiliates (4.7).
- 2.1 Scene branches & forks — larger, but it dissolves the "overwrite vs merge" edge (3.7) and is the structural foundation for multi-variant and AI co-design.
- 3.11 GLB / glTF export via headless renderer — unlocks AR (4.6), USD/IFC bridges (4.3), and removes the most cited "limitation" in the README.
- 1.5 Regulatory/accessibility lints (pilot: one jurisdiction) — pick Spain or the UK, ship one rule pack; opens the B2B architect segment where budgets live.
Honourable mention: 1.6 Live co-design — the single most defensible long-term product vision, but it depends on 2.1, 2.4, and a streaming agent layer the repo doesn't have yet. Build the pieces, then assemble.