ADRADR-0032 · Builder est l'editeur Onlook; Preview reste la vitrine

ADR-0032 — Builder est l'editeur Onlook; Preview reste la vitrine

ADR 0031 a mis le mot Onlook sur le Builder, puis a monte le chrome Design autour de l'iframe storefront. Ce n'est pas Onlook. Onlook est un editeur: canvas, frames, moteur, sandbox. La vitrine en lecture seule est deja…

Statut

Accepté · 2026-09-22

Remplace : ADR-0031

Piliers : ai-platform

Contexte

ADR 0031 a mis le mot Onlook sur le Builder, puis a monte le chrome Design autour de l'iframe storefront. Ce n'est pas Onlook. Onlook est un editeur: canvas, frames, moteur, sandbox. La vitrine en lecture seule est deja la Preview.

Décision

SurfaceRole
PreviewVoir le storefront (iframe, lecture). Seule stage storefront.
BuilderL'editeur Onlook, fork du repo onlook-dev/onlook. Pas l'iframe.
ShopifyLes patterns (section, template, schema) que le moteur apprendra a ecrire. Apres que l'editeur tourne.
FormatsOutil d'ecriture, plus le Builder.
WorktreeIDE fichiers theme.
WorkflowAutomations.
StudioImage / video.

Le moteur reste le leur (EditorEngine). La persistance et la session sont les notres (Prisma, Neon, session). Leur Supabase, Stripe, PostHog et Freestyle ne sont pas portes.

Alternatives écartées

OptionPourquoi non
DesignChrome sur l'iframe (0031)Ce n'est pas leur canvas ni leur moteur
Frame = URL de previewLa Preview ne vit pas dans le canvas
Maquette landing OnlookStatique, aucun moteur

Conséquences

  • mode === "builder" ne partage plus isStorefrontStage
  • Le stage Builder est OnlookBuilder, import dynamique, ssr: false
  • Le source vendored vit dans src/features/ai/onlook/upstream, hors du graphe de compilation Next, jusqu'a l'adaptateur
  • ADR 0031 est remplacé

Comment c'est appliqué

  • store-browser.tsx: isStorefrontStage = isPreviewMode
  • mode-views.tsx: case "builder" monte OnlookBuilder
  • Garde: src/test/builder-is-onlook-canvas.test.ts