rmnr
DocsTourSlicesBest PracticeAgentsInstall

Command Palette

Search for a command to run...

New
  • Changelog
Release notes

Changelog

What changed in each rr release — page 14 of 17. Full prose history in CHANGELOG.md.

MAY202026
FeatureBJ-waveMay 20, 2026

notion-shell polish — DnD-kit drag handle, cover image, image/embed renderers, page actions menu

Final wave on the notion-shell Notion-clone surface. (1) SortableBlockList — @dnd-kit/core + sortable + utilities render-prop wrapper for block reorder. Pointer + keyboard sensors; emits (fromIndex, toIndex) via onReorder. (2) NotionBlock gains optional dragHandle slot — caller mounts a grip button wired to SortableBlockList's dragProps; renders next to the hover "⋯" actions handle. (3) NotionPage gains optional cover prop — 200px image band above header; X button on hover triggers onCoverRemove. (4) ImageRenderer + EmbedRenderer specialised block renderers — Image: URL + caption + preview, click to edit. Embed: URL detection for YouTube/Vimeo/Loom/Figma/CodePen/Spotify with provider-specific rewrites + sandboxed iframe fallback. (5) PageActionsMenu — header dropdown for page-level actions: add cover, favorite toggle, duplicate, export, move to trash. (6) Template wired — DocView wraps blocks in SortableBlockList + passes a GripVertical drag handle button per block; NotionPage receives doc.cover + actions=<PageActionsMenu>; block-renderers maps image/embed to the new shell renderers; types.ts gains doc.block.reorder + doc.duplicate actions; notion-reducer.ts handles them. (7) Inline slash-key trigger (`/` in block → menu opens at caret) intentionally deferred — current ergonomics ride on InsertBlockButton + hover "⋯" menu which already cover the new-block + turn-into flows. Bumps notion-shell to v0.4.0. npm deps added: @dnd-kit/core, @dnd-kit/sortable, @dnd-kit/utilities.

notion-shell (NEW components)

  • components/SortableBlockList.tsx — @dnd-kit render-prop wrapper for block reorder
  • components/PageActionsMenu.tsx — header dropdown (add cover / favorite / duplicate / export / trash)
  • components/blocks/ImageRenderer.tsx — URL + caption + preview, click to edit
  • components/blocks/EmbedRenderer.tsx — YouTube/Vimeo/Loom/Figma/CodePen/Spotify auto-detect + iframe fallback

notion-shell (extended)

  • components/NotionPage.tsx — optional `cover` prop (200px image band w/ hover X button via onCoverRemove)
  • components/NotionBlock.tsx — optional `dragHandle` slot prop, mounts next to actions handle
  • types.ts — Page gains optional `cover` field
  • index.ts + slice.contract + slice.json + slice.manifest — bump v0.4.0; export 4 new components + 3 new types; @dnd-kit npm deps declared

Template touched — notion-page-clone-os

  • slices/notion-app/DocView.tsx — SortableBlockList + per-block GripVertical drag handle; PageActionsMenu in header; cover prompt + remove
  • slices/notion-app/block-renderers.tsx — image + embed renderers mapped to ImageRenderer + EmbedRenderer
  • shared/types.ts — Action gains doc.block.reorder + doc.duplicate variants
  • shared/notion-reducer.ts — reorder splice + duplicate (clone w/ fresh ids)

npm deps

  • @dnd-kit/core, @dnd-kit/sortable, @dnd-kit/utilities — sortable block list, pointer + keyboard sensors

Catalog

  • lib/content/slices.ts — notion-shell v0.4.0 description + tags (drag/cover/embed)
  • lib/content/layouts.ts — notion-page-clone-os deps + shadcnComponents already cover dnd-kit usage

Notion-clone parity status (post-BJ)

MAY202026
FeatureBI-waveMay 20, 2026

notion-shell database depth — 6 views (Table/Board/List/Gallery/Calendar/Feed) + view tabs + sort/filter/search + column header menu + 10 property cells

notion-shell databases level up from a single-table surface to a 6-view dispatcher matching Notion's view canon. (1) ViewTabs — horizontal tab strip + add-view dropdown (Table/Board/List/Gallery/Calendar/Feed), double-click tab to remove. (2) ViewOptions — popover with sort (multi-prop, asc/desc), filter (contains/equals/empty/checked + 6 ops), search (any-prop substring). (3) ColumnHeaderMenu — per-column dropdown: rename + change type + sort asc/desc + hide + delete. (4) 6 view components — TableView (Notion-canonical), BoardView (kanban grouped by select/status), ListView (compact), GalleryView (3-up card grid), CalendarView (month grid bucketed by date prop), FeedView (chronological by updatedAt). All views share the ViewProps contract; host can override via VIEW_REGISTRY. (5) property-cells.tsx — 10 cell renderers extracted into a single switch helper: text/number/checkbox/select/status/multi_select/date/url/email/phone. NotionProperty delegates rendering to it. (6) lib/viewData.ts — pure applyView() (filter + sort + search), groupBy() (board), bucketByDate() (calendar). (7) NotionDatabase rewritten as orchestrator — owns header + ViewTabs + ViewOptions + ColumnHeaderMenu wiring; dispatches the active view via VIEW_REGISTRY. (8) Template wired — DatabaseView passes the 4 new onView* callbacks; seed.ts gains 3 default views on the Roadmap DB (All table / Board / Feed); reducer gains db.view.activate/add/remove/config split into notion-db-reducer.ts to stay under the 200-LOC cap. Bumps notion-shell to v0.3.0.

MAY202026
FeatureBH-waveMay 20, 2026

notion-shell page-editor depth — slash menu, actions menu, live inline-markdown decorator, toggle + callout renderers

notion-shell wrappers level up from barebones contentEditable to a Notion-grade editing surface. (1) <SlashMenu> — searchable block-type picker with keyboard nav (↑↓ Enter Esc), 18-spec baseline (text / h1-h3 / todo / bullet / numbered / toggle / quote / callout / code / equation / image / divider / page / database / table / embed). (2) <BlockActionsMenu> — popover with turn-into submenu + duplicate + delete, current type marker. (3) <InsertBlockButton> — "+ Add block" trigger wrapping SlashMenu in a popover with search input. (4) Live inline-markdown decorator — caret-preserving, IME-safe DOM pass that wraps **bold** _italic_ ~~strike~~ `code` $math$ [label](url) markers in semantic tags inside the contentEditable. Source-of-truth stays plain text (innerText round-trips verbatim) so the host store reads source markers, not decorated HTML. Headings hide markers visually via zero-size span. (5) NotionBlock extended — hover reveals "⋯" actions handle when onTurnInto provided; runs decorator on mount + every input (skipping composition); composition-end handler for IME. (6) Template wired — DocView's fixed +paragraph/+h2/+list buttons replaced with one InsertBlockButton; toggle + callout block-renderers added (ChevronRight expand + Lightbulb callout); notion-reducer gains doc.block.duplicate + doc.block.turnInto actions; types.ts adds matching Action variants. Slash-key trigger (`/` in block → menu opens at caret) deferred to BJ-wave alongside drag handle + cover + image/embed renderers. Bumps notion-shell to v0.2.0.

MAY202026
FeatureBG-waveMay 20, 2026

Admin Panel chassis + 3-group sidebar (Pages / Features / Admin Panel) on all 8 templates

Big foundation wave so the next batch can sync real implementations from notion-page-clone + superspace into the admin-panel blocks. Three slices land here. (1) Admin Panel chassis at _shared/admin-panel/ — FeatureBlock registry, buildAdminPanelNav helper, AdminPanelOverview grid, AdminFeatureCard placeholder, AdminFeatureStubPage shared route renderer. 6 stub blocks ship: AI Config, Analytics, User Management, Audit Log, Webhooks, Settings — each annotated with the rr slice that will power it (ai-router, event-tracking, rbac-roles, audit-log). (2) All 7 flat-nav templates migrated to grouped nav: buildAdminNav(state) returns [Overview, Pages, Features, Admin Panel] groups derived from the legacy buildAdminPrimaryNav so per-template source of truth stays in one place. saas-marketing-os Admin Panel group added too. (3) 48 admin-panel route stubs scaffolded across 8 templates (6 features × 8 templates) — each calls the shared AdminFeatureStubPage. Plus BG-D Advanced primitives chassis (workspace-switcher, secondary-sidebar, dashboard-shell-advanced — opt-in, no canary yet) and BG-E public-nav CRUD primitives (types + reducer with auto-shift orders + resolvePublicNavHref helper — per-template wiring deferred). BG-F: each template's landing page seed flagged with isLanding: true (forward-compat for landing-as-page migration). CMS vs Admin Panel architectural distinction documented in dashboard-vision.md.

MAY202026
FeatureBF-waveMay 20, 2026

Dynamic Pages sidebar — every admin-created page becomes a menu item live

Sidebar now reflects the Pages CRUD store directly. Operator hits 'New page' in /admin/pages, fills the form, saves — the new page appears as a Pages-group sub-item in the sidebar immediately. No manual nav wiring. Implementation: pure helper `buildCustomPageNavItems(pages, baseHref, opts)` derives AdminNavItem[] from state.pages (skips systemPages, sorts alphabetic by default, supports updated/created sort + draft filter). All 8 templates wire it — saas-marketing-os spreads it into the grouped Pages bucket; the 7 flat-nav templates spread it into the Pages parent's children[]. Re-render is free because shell-client already subscribes to useStore(). Sets up BF-B / BF-C (landing-as-page + public nav CRUD) by proving the data-driven nav pattern works.

Templates touched (all 8 — Pages group now data-driven)

  • saas-marketing-os — custom pages appended to Pages group (grouped nav)
  • personal-brand-os — custom pages appended to Pages parent children
  • agency-studio-os — custom pages appended to Pages parent children
  • konsultan-os — custom pages appended to Pages parent children
  • kreator-studio-os — custom pages appended to Pages parent children
MAY202026
FeatureBE-waveMay 20, 2026

Grouped admin nav (Pages / Features) + position-dropdown reorder + saas-marketing catalog fix

Four foundation pieces landing in one wave so the next batch can build on a clean chassis. (1) AdminNavGroup type — sidebar + shell accept primaryNavGroups[] alongside legacy flat primaryNav. Templates opt into grouped Pages/Features rendering one by one. (2) Position dropdown — LandingSection.order field switches from manual number input to a sibling-aware Select; reducer auto-shifts other sections on create / move / delete so two sections can never share a position. (3) Responsive overlap fix — min-w-0 on SidebarInset + main flex child prevents wide admin pages clipping under the shadcn sidebar. (4) saas-marketing-os catalog metadata corrected — adminPreviewPath + full admin file list added; description no longer claims 'no admin' (the filesystem had it all along). (5) saas-marketing-os = canary for the new grouped nav — buildAdminNav(state) returns [Overview, Pages, Features] groups; legacy buildAdminPrimaryNav kept as flatten-wrapper for backwards compat. (6) PageEntry forward-compat — isLanding?: boolean + sections?: LandingSection[] added to the type. BF-wave does the data migration (landing-as-page).

Templates touched

MAY202026
ImprovementBD-waveMay 20, 2026

Two-archetype dashboard direction — revert switcher; simple is the default

Corrective wave after BB / BC. BB-wave's DashboardSwitcher dropdown was the wrong primitive (shadcn TeamSwitcher applied to section toggle); BC-wave bolted multi-tenant workspaces onto personal-brand-os which doesn't need them. New direction: two opt-in archetypes. **Simple** (default) — single sidebar, BrandHeader, admin nav with collapsible sub-menus. **Advanced** (opt-in) — three-column layout with workspace switcher in the primary header and a secondary sidebar for active-section sub-nav. Simple is what 7 of 8 templates need; advanced is reserved for notion-page-clone-os and any future template with multi-tenant context + many non-CMS surfaces. The advanced primitives (WorkspaceSwitcher, SecondarySidebar, DashboardShellAdvanced) ship in BE-wave when notion-page-clone-os is wired as the canary.

Templates reverted to Simple archetype

  • saas-marketing-os — DashboardSwitcher removed, workspace route deleted
  • personal-brand-os — workspace surface fully reverted (state + reducer + views + seed); storageKey pbos:state:v6 → v7-simple
  • agency-studio-os — DashboardSwitcher removed, workspace route deleted
  • konsultan-os — DashboardSwitcher removed, workspace route deleted
MAY192026
FeatureBC-waveMay 19, 2026

personal-brand-os workspace surface — Workspace CRUD + Notes + Tasks (live)

BB-wave delivered the DashboardSwitcher chassis. BC-wave proves it end-to-end on one template: personal-brand-os now has a fully working Workspace surface. Multi-tenant workspaces (Personal / Side Project / …) with CRUD + active switching. Per-workspace Notes (full editor, search) and Tasks (inline checklist with overdue badge + open/done/all filter). All persisted via the existing localStorage store + BroadcastChannel cross-tab sync. Sidebar nav swaps between admin and workspace primary nav based on pathname; switcher header shows the active workspace icon + name. Old `/dashboard/workspace` placeholder replaced by a real dashboard with stat cards and recent-notes list. The other 7 OS templates keep the placeholder; their workspace surfaces lift the same pattern in subsequent waves.

Template touched

  • personal-brand-os — Workspace dashboard + Notes (CRUD with editor) + Tasks (inline checklist) + Workspaces (CRUD over the workspace entities themselves)

Data model (personal-brand/shared)

MAY192026
FeatureBB-waveMay 19, 2026

DashboardSwitcher — shadcn sidebar-07 team-switcher adapted for /dashboard/{admin,workspace}

Top of every template sidebar now hosts an improved adaptation of the shadcn sidebar-07 TeamSwitcher pattern. Click → dropdown reveals Admin Panel + Workspace sections with icon, label, one-line description, active checkmark, and ⌘1/⌘2 keyboard shortcuts. Footer link jumps to /templates so operators can hop to another template without leaving the dashboard. Inspired by notion-page-clone WorkspaceSwitcher (role-gated items, composable trigger) and superspace EnhancedWorkspaceSwitcher (hierarchical context, descriptions). The dashboard/admin and dashboard/workspace surfaces now share a single dashboard/layout.tsx — the switcher and store provider live one level up so the chassis stays consistent across both surfaces. Workspace placeholder updated to point at the new ⌘1/⌘2 shortcuts.

Templates touched (DashboardSwitcher mounted; layout lifted)

  • saas-marketing-os — switcher in sidebar header; workspace inherits shell
  • personal-brand-os — switcher in sidebar header; workspace inherits shell
  • agency-studio-os — switcher in sidebar header; workspace inherits shell
  • konsultan-os — switcher in sidebar header; workspace inherits shell
MAY192026
FeatureBA-waveMay 19, 2026

notion-shell slice + Notion Page Clone OS = real Notion-clone template (not marketing landing)

Before: /preview/notion-page-clone-os/public showed a marketing landing page jualan notion-blocks slice. After: it IS a Notion clone — left sidebar with tree-nav (page CRUD inline), main panel with page editor (rich blocks via notion-blocks primitive registry) or database table (per-cell + property CRUD). Built by lifting the six props-driven Notion wrappers from nosion's shared/components/notion (NotionPage / NotionHeader / NotionSidebar / NotionBlock / NotionDatabase / NotionProperty) to a new rr slice `notion-shell`. Zero-peer-dep design — icon-picker dropped in favor of `renderIcon` + `renderIconPicker` props so host wires any icon library (we wire @/features/icon-picker at the template layer). NotionBlock dispatches via a `blockRenderers` prop — the template registers equation/code/divider from notion-blocks, falls back to contentEditable for text-shape blocks. Template store extended with `docs` + `databases` slices alongside existing pages/snippets/landingSections; storageKey bumped v2-landing → v3-docs. Reducer split into `notion-reducer.ts` to stay under the 200-LOC cap.

Slices touched

  • notion-shell — NEW: six portable Notion wrappers + types subset
NewerPage 14 / 17Older
  • Page editor: slash menu ✓ · actions menu (turn-into/duplicate/delete) ✓ · inline-markdown decorator ✓ · drag-handle reorder ✓ · cover image ✓ · page actions ✓
  • Database: 6 views (Table/Board/List/Gallery/Calendar/Feed) ✓ · sort/filter/search ✓ · column header menu ✓ · 10 property cells ✓
  • Block renderers: equation ✓ · code ✓ · divider ✓ · toggle ✓ · callout ✓ · image ✓ · embed ✓
  • Deferred (next): inline `/` slash-key trigger in caret-position popover, drag-fill selection grid, comments/mentions/snapshots (covered by separate slices in nosion — lift if needed)

notion-shell (NEW components)

  • components/ViewTabs.tsx — horizontal tab strip + add-view dropdown
  • components/ViewOptions.tsx — sort + filter + search popover
  • components/ColumnHeaderMenu.tsx — per-column dropdown (rename/type/sort/hide/delete)
  • components/property-cells.tsx — 10 per-type cell renderers
  • components/views/{Table,Board,List,Gallery,Calendar,Feed}View.tsx — 6 view components
  • components/views/index.ts — VIEW_REGISTRY default map + barrel
  • components/views/types.ts — shared ViewProps contract

notion-shell (NEW lib)

  • lib/viewData.ts — applyView (filter + sort + search) + groupBy + bucketByDate

notion-shell (rewritten)

  • components/NotionDatabase.tsx — orchestrator: header + ViewTabs + ViewOptions + active view dispatch via VIEW_REGISTRY; 4 new onView* callbacks (activate/add/remove/configChange) + onPropertyUpdate
  • components/NotionProperty.tsx — delegates value rendering to renderPropertyCell (10 types)
  • index.ts + slice.contract + slice.json + slice.manifest — bump v0.3.0; export 9 new components + 7 new utils + 5 new types

Template touched — notion-page-clone-os

  • slices/notion-app/DatabaseView.tsx — wire onViewActivate/Add/Remove/ConfigChange + onPropertyUpdate
  • shared/seed.ts — Roadmap DB ships 3 default views (All/Board/Feed)
  • shared/types.ts — Action gains db.view.activate/add/remove/config variants
  • shared/notion-reducer.ts — refactored; db.* cases moved to notion-db-reducer.ts to stay under 200-LOC cap
  • shared/notion-db-reducer.ts — NEW; all db.* reducer cases (property/row/view CRUD)

Catalog

  • lib/content/slices.ts — notion-shell v0.3.0 (6 views + 10 cells + view tabs/options/column menu)

notion-shell (NEW components)

  • components/SlashMenu.tsx — searchable block-type picker w/ keyboard nav
  • components/BlockActionsMenu.tsx — turn-into / duplicate / delete popover
  • components/InsertBlockButton.tsx — `+` trigger w/ SlashMenu + search input

notion-shell (NEW lib)

  • lib/blockSpecs.ts — 18-spec BLOCK_SPECS registry + specFor() lookup
  • lib/inlineMd.ts — pure tokenizer (Slack model: **bold** _it_ ~~s~~ `code` $math$ links)
  • lib/inline-decorator/caret.ts — getCaretOffset / setCaretAtOffset (DOM-walk, BR-aware)
  • lib/inline-decorator/decorate.ts — decorateLineToFragment (pure DOM construction)
  • lib/inlineDecorator.ts — decorateInPlace facade (caret save → mutate → restore)

notion-shell (extended)

  • components/NotionBlock.tsx — decorator pass on mount + input, IME-safe, hover "⋯" actions handle
  • index.ts + slice.contract + slice.json + slice.manifest — bump v0.2.0, export 3 new components + 8 new utils + 2 new types

Template touched — notion-page-clone-os

  • slices/notion-app/DocView.tsx — InsertBlockButton replaces fixed +block bar; NotionBlock wired with onTurnInto + onDuplicate
  • slices/notion-app/block-renderers.tsx — toggle + callout specialised renderers added
  • shared/types.ts + shared/notion-reducer.ts — doc.block.duplicate + doc.block.turnInto actions

Catalog

  • lib/content/slices.ts — notion-shell v0.2.0 description + tags + recipe (slash-menu / decorator / wysiwyg)
  • lib/content/layouts.ts — notion-page-clone-os files list adds shared/notion-reducer.ts

Up next (BI + BJ)

Templates touched (3-group sidebar + 48 admin-panel routes)

  • saas-marketing-os — Admin Panel group added; 6 stub routes scaffolded
  • personal-brand-os — migrated to grouped nav; Admin Panel group + 6 stubs
  • agency-studio-os — migrated to grouped nav; Admin Panel group + 6 stubs
  • konsultan-os — migrated to grouped nav; Admin Panel group + 6 stubs
  • kreator-studio-os — migrated to grouped nav; Admin Panel group + 6 stubs
  • riset-kit — migrated to grouped nav; Admin Panel group + 6 stubs
  • wirausaha-os — migrated to grouped nav; Admin Panel group + 6 stubs
  • notion-page-clone-os — migrated to grouped nav; Admin Panel group + 6 stubs

Admin Panel chassis (_shared/admin-panel/)

  • feature-blocks.ts NEW — FeatureBlock type + ADMIN_PANEL_BLOCKS registry (6 blocks) + buildAdminPanelNav helper
  • AdminFeatureCard.tsx NEW — placeholder card with icon + description + 'powered by <slice>' hint
  • AdminPanelOverview.tsx NEW — grid of feature-block cards at /dashboard/admin/admin-panel
  • AdminFeatureStubPage.tsx NEW — shared route renderer (every per-template stub calls it)

Advanced primitives chassis (BG-D — opt-in, no canary yet)

  • _shared/types/common.ts — WorkspaceContext + SecondaryNavItem types
  • _shared/ui/workspace-switcher.tsx NEW — opt-in workspace-CONTEXT picker (multi-tenant). Lifted from notion-page-clone pattern. ⌘N keyboard hints not included this wave
  • _shared/ui/secondary-sidebar.tsx NEW — narrow contextual sub-nav + SecondarySidebarLayout wrapper (three-column composition)
  • _shared/ui/dashboard-shell-advanced.tsx NEW — composes admin-sidebar + workspaceSwitcher headerSlot + secondary-sidebar slot in main
  • _shared/ui/admin-sidebar.tsx — headerSlot prop added so DashboardShellAdvanced can swap BrandHeader for WorkspaceSwitcher

Public-nav CRUD chassis (BG-E — primitives only, per-template wiring deferred)

  • _shared/public-nav/types.ts NEW — PublicNavItem (label + pageRef OR href + order + enabled), PublicNavSlice, PublicNavAction
  • _shared/public-nav/reducer.ts NEW — publicNavReducer with auto-shift orders + resolvePublicNavHref helper (binds pageRef → page slug)

Forward-compat (BG-F)

  • 7 templates' pages-seed.ts — landing page (slug: "") flagged with isLanding: true. Sets up BH landing-as-page migration without changing runtime behavior

Docs

  • docs/architecture/dashboard-vision.md — Three sidebar groups (Pages / Features / Admin Panel) documented; CMS vs Admin Panel best practice (siblings, not nested) explained

Up next (BH-wave)

  • Sync notion-page-clone + superspace slices into admin-panel blocks (replace stubs with real implementations — AI Config from ai-router, Analytics from event-tracking, Users from rbac-roles, Audit from audit-log)
  • Wire notion-page-clone-os as DashboardShellAdvanced canary (workspace switcher + secondary sidebar live)
  • Per-template public-nav CRUD wiring (state.publicNav + admin /navigation editor + site-nav reads from state)
  • Landing-as-page full migration (drop state.landingSections in favor of isLanding Page.sections)
  • Extract landing-sections as installable rr slice
  • riset-kit — custom pages appended to Pages parent children
  • wirausaha-os — custom pages appended to Pages parent children
  • notion-page-clone-os — custom pages appended to Pages parent children
  • Chassis

    • _shared/pages/nav-builder.ts NEW — buildCustomPageNavItems(pages, baseHref, opts) helper. Filters systemPages, sorts alphabetic / updated / created, supports published-only filter, default lucide FileText icon

    Per-template wiring (8 nav-config.ts files)

    • Each nav-config imports buildCustomPageNavItems
    • Pages group / Pages-parent children spreads the helper's output after the static items

    Up next (BF-B onwards)

    • BF-B — Landing-as-page migration: drop state.landingSections[] in favor of the landing-flagged Page.sections[]
    • BF-C — Public nav CRUD: admin can add / rename / reorder PUBLIC_NAV items + bind each to any page (including custom)
    • BF-D — Propagate BE's grouped Pages/Features nav to the 7 flat-nav templates (audit-by-template — konsultan-os Projects + Contact belong under Pages)
    • BF-E — Build Advanced primitives (workspace-switcher / secondary-sidebar / dashboard-shell-advanced) + wire notion-page-clone-os canary
    • BF-F — Extract landing-sections as installable headless CMS slice
  • saas-marketing-os — admin entry now visible in catalog; sidebar uses Pages + Features groups
  • Chassis (_shared)

    • _shared/types/common.ts — AdminNavGroup type + PageEntry isLanding/sections forward-compat
    • _shared/ui/admin-sidebar.tsx — accepts primaryNavGroups optional; renders one <SidebarGroup> per group
    • _shared/ui/dashboard-shell.tsx — primaryNavGroups prop threaded; min-w-0 on SidebarInset + main
    • _shared/crud/types.ts — FieldDef kind "position" added
    • _shared/crud/CrudFieldInput.tsx — position renders sibling-aware Select
    • _shared/crud/CrudFormBody.tsx + CrudFormView.tsx + CrudRowDialog.tsx — ctx={ total, editing } threaded to fields
    • _shared/landing/landing-fields.ts — order field migrated to kind: 'position'
    • _shared/landing/reducer.ts — auto-shift sibling orders on LANDING_UPSERT + close gap on LANDING_DELETE
    • _shared/pages/types.ts — PageEntry.isLanding + sections added (forward-compat for BF migration)

    Catalog

    • lib/content/layouts.ts — saas-marketing-os entry: adminPreviewPath set, 22 admin files added to files[], description corrected, 'admin' tag added

    Docs

    • docs/architecture/dashboard-vision.md — BE-wave delivery summary + BF-wave plan (landing-as-page migration, public nav CRUD, propagate grouped nav to other 7 templates, build Advanced primitives, extract landing-sections as headless slice)

    Up next (BF-wave)

    • Migrate landingSections[] into the landing-flagged Page.sections[] — single source of truth
    • Public nav CRUD — admin can add/rename/reorder nav items + bind to any page including custom
    • Propagate Pages/Features grouped nav to other 7 templates (audit per template — konsultan-os's Projects + Contact should live under Pages)
    • Build Advanced primitives (workspace-switcher, secondary-sidebar, dashboard-shell-advanced) + wire notion-page-clone-os as canary
    • Extract landing-sections as installable headless CMS slice
  • kreator-studio-os — DashboardSwitcher removed, workspace route deleted
  • riset-kit — DashboardSwitcher removed, workspace route deleted
  • wirausaha-os — DashboardSwitcher removed, workspace route deleted
  • notion-page-clone-os — DashboardSwitcher removed; flagged as the BE-wave canary for the Advanced archetype
  • Removed (dead chassis)

    • _shared/ui/dashboard-switcher.tsx — wrong primitive (TeamSwitcher pattern for section toggle)
    • _shared/ui/workspace-placeholder.tsx — Simple templates don't have a workspace surface
    • _shared/dashboard/sections.ts — buildDashboardSections + activeSectionFromPathname helpers
    • _shared/types/common.ts → DashboardSection type
    • _shared/ui/dashboard-shell.tsx — dashboardSections + activeSectionId props
    • _shared/ui/admin-sidebar.tsx — DashboardSwitcher conditional in SidebarHeader
    • personal-brand/shared/{workspace-types.ts,workspace-reducer.ts} + slices/workspace/*
    • Per-template DASHBOARD_SECTIONS export + workspace route directories (8 templates)

    Kept

    • Per-template DASHBOARD_BASE / ADMIN_PANEL_BASE / WORKSPACE_BASE constants — zero cost and needed by the Advanced archetype
    • AZ-wave URL shift (/admin → /dashboard/admin) and permanent redirect
    • Simple shell + admin-sidebar + admin-nav-items (the canonical archetype)

    Docs

    • docs/architecture/dashboard-vision.md REWRITTEN — two-archetype model, decision matrix per template, BE-wave plan, source map for primitive lifts from superspace + notion-page-clone

    Up next (BE-wave)

    • Build _shared/ui/workspace-switcher.tsx (opt-in workspace-context picker, not a section toggle)
    • Build _shared/ui/secondary-sidebar.tsx (three-column layout primitive lifted from superspace FeatureThreeColumnLayout)
    • Build _shared/ui/dashboard-shell-advanced.tsx (composes the two)
    • Wire notion-page-clone-os as canary for the Advanced archetype
  • types.ts — added Workspace + Note + Task types, State fields (workspaces, activeWorkspaceId, notes, tasks), Action union extensions (workspace.create/update/delete/switch, note.upsert/delete, task.upsert/toggle/delete)
  • workspace-reducer.ts NEW — isolated workspace surface transitions; cascade-delete notes + tasks on workspace.delete; keep ≥1 workspace alive; activeWorkspaceId falls back when active is removed
  • store-reducer.ts — delegates workspace/note/task actions via isWorkspaceAction guard
  • seed.ts — 2 workspaces (Personal 🧠, Side project 🚀) + 3 notes + 4 tasks; storageKey bumped pbos:state:v5 → v6-workspaces
  • Surfaces

    • WorkspaceDashboardView — stat cards (Notes / Open tasks / Workspaces) + recent-notes list scoped to active workspace
    • NotesView + NoteEditor — list with search, inline create-then-redirect, full-page editor with dirty-state Save
    • TasksView — quick-add input, open/done/all filter, checkbox toggle, overdue badge, delete
    • WorkspaceManageView — list with inline rename (icon + name), switch, delete (cascade-aware, disabled when only one remains), create form with icon input

    Routing + nav

    • app/preview/personal-brand-os/dashboard/workspace/{page,notes/page,notes/[id]/page,tasks/page,manage/page}.tsx NEW
    • personal-brand/shared/nav-config.ts — buildWorkspaceNav(state) returns Dashboard / Notes / Tasks / Workspaces with live counts
    • personal-brand/dashboard-shell-client.tsx — section-aware primaryNav (admin vs workspace), appLabel shows active workspace icon + name, homeHref + searchPlaceholder swap by section

    Up next

    • Propagate workspace surface to remaining 7 OS templates (likely lifted as a distributable rr slice once the pattern stabilizes)
    • BD — feature harvest from superspace + notion-page-clone via /rr lift (RBAC / CRM / Analytics / CMS-menu inside Admin Panel)
    • BE — replace placeholder Tasks with notion-style block editor for richer Note bodies
  • kreator-studio-os — switcher in sidebar header; workspace inherits shell
  • riset-kit — switcher in sidebar header; workspace inherits shell
  • wirausaha-os — switcher in sidebar header; workspace inherits shell
  • notion-page-clone-os — switcher in sidebar header; workspace inherits shell
  • Infra

    • _shared/ui/dashboard-switcher.tsx NEW — SidebarMenuButton + DropdownMenu + ⌘N shortcuts + active checkmark + Switch-template footer
    • _shared/dashboard/sections.ts NEW — buildDashboardSections() + activeSectionFromPathname() helpers
    • _shared/types/common.ts — added DashboardSection type
    • _shared/ui/admin-sidebar.tsx — renders DashboardSwitcher when sections prop provided (BrandHeader fallback preserved)
    • _shared/ui/dashboard-shell.tsx — accepts dashboardSections + activeSectionId props
    • Per-template nav-config.ts — DASHBOARD_SECTIONS export (8 templates)
    • Per-template dashboard/layout.tsx NEW — lifted from admin/layout.tsx so workspace inherits StoreProvider + DashboardShell
    • Per-template dashboard/dashboard-shell-client.tsx NEW — derives activeSection from usePathname

    Up next (see docs/architecture/dashboard-vision.md)

    • BC-wave — Workspace bootstrap (notion editor at MAX, calendar, command-menu, database views) — replaces current placeholder
    • BD-wave — feature harvest from superspace + notion-page-clone via /rr lift (RBAC / CRM / Analytics / CMS-menu siblings inside Admin Panel)
  • notion-blocks — registered as block renderers inside notion-shell's NotionBlock
  • Templates touched

    • notion-page-clone-os — public surface = full Notion-clone dashboard (replaces marketing landing)

    Site

    • frontend/slices/notion-shell/ NEW — 6 wrapper components + types subset + slice metadata trio + /preview demo
    • components/templates/notion-page-clone/slices/notion-app/ NEW — Dashboard / DocView / DatabaseView + block-renderers registry + sidebar hooks
    • components/templates/notion-page-clone/shared/types.ts — added docs/databases + 14 action types (doc.*, db.*, db.row.*)
    • components/templates/notion-page-clone/shared/store.tsx — wired notion-reducer; storageKey v2-landing → v3-docs
    • components/templates/notion-page-clone/shared/notion-reducer.ts NEW — pulled out for 200-LOC cap
    • components/templates/notion-page-clone/shared/seed.ts — seeded 3 docs + 1 Roadmap database (3 rows)
    • app/preview/notion-page-clone-os/public/page.tsx — opens to dashboard@doc-welcome
    • app/preview/notion-page-clone-os/public/d/[id]/ + db/[id]/ NEW — dynamic dashboard surfaces
    • lib/content/slices.ts + layouts.ts — added notion-shell entry; template pullPaths cascade notion-shell + icon-picker; stale notion-page-clone-os dir refs renamed to notion-page-clone
  • lib/content/layouts.ts — files list adds shared/notion-db-reducer.ts
  • Up next (BJ)

    • BJ-wave — polish: DnD-kit drag handle, cover image revive, image/embed block renderers, page actions menu, slash-key trigger inline
    • BI-wave — database depth: view tabs + Board/List/Gallery/Calendar/Feed + sort/filter/search + column-header menu + multi-select/date/status/url/email/phone cells
    • BJ-wave — polish: DnD-kit drag handle, cover image revive, image/embed block renderers, page actions menu, slash-key trigger in NotionBlock