Ajoute le pipeline PageSpec (validation, rendu, publication /p/{slug}),
les démos TipTap /demo, et le simulateur Carnot (modes frigo/PAC/moteur,
énergie kJ vs puissance W, unités K/°C/°F) avec correctifs d’équations KaTeX.
Co-authored-by: Cursor <cursoragent@cursor.com>
1.6 KiB
1.6 KiB
Publication — point de branchement interactive-page
Canal existant (ne pas dupliquer)
| Élément | Emplacement |
|---|---|
| API | app/api/notes/publish/route.ts — action: publish | unpublish, mode?: simple | ai | interactive-page |
| UI | components/note-editor/note-editor-toolbar.tsx (menu Globe) + InteractivePagePublishDialog |
| Page publique | app/(public)/p/[slug]/page.tsx → /p/{publicSlug} |
| Fetch | getPublishedNote(slug) dans app/actions/notes-publishing.ts |
| Templates | lib/publish/types.ts — PUBLISH_TEMPLATES = magazine | brief | essay | interactive-page |
Champs Note (Prisma)
isPublic,publicSlug,publishedAtpublishedContent— snapshot opaque (String?) : HTML aujourd’hui, JSON PageSpecV1 pourinteractive-pagepublishedTemplate— discriminant de rendupublishedSourceHash— détection stale (pas de régénération silencieuse)
Branchement interactive-page
- Étendre
PUBLISH_TEMPLATESavec'interactive-page'. - Publish : générer/valider via
lib/interactive-page/→ stockerJSON.stringify(PageSpecV1)danspublishedContent,publishedTemplate = 'interactive-page'. - Rendu public : dans
PublishedNotePage, sipublishedTemplate === 'interactive-page'→ parser →<PageView spec={…} />(SSR + hydrate démos). - Unpublish / stale : même cycle de vie que magazine/brief/essay (
publishedSourceHash→ badge « à régénérer »).
Hors scope
NotebookSite/c/[slug],NoteShare(collab privée), server actions legacypublishNoteincomplets.