Skip to content
Resource
DocsTourSlicesBest PracticeAgentsInstall

Command Palette

Search for a command to run...

New
  • Changelog

Changelog

Release notes

Changelog

What changed in each rr release — page 19 of 25. Full prose history in CHANGELOG.md.

MAY232026
FeatureCK-1GMay 23, 2026

AI prompts everywhere — per-slice agent.md, /agents/<slug> route, llms.txt expansion, copyable detail block

Surfaces the existing agentRecipe metadata (already on all 56 slices + 56 features + 36 layouts) in four new places so AI coding agents have a one-stop install surface. (1) Per-slice detail page now renders the recipe inside a copyable CodeBlock + Install-with-AI-agent dialog + link to the dedicated prompt page, replacing the prior plain-text paragraph. (2) /llms.txt expanded so each slice entry now includes `agent recipe:` + `prompt:` link. (3) gen-slice-agent-md.mjs writes `agent.md` inside every slice dir (53 files written); the file ships with the slice when consumers run `npx rr add <slug>`, so the install prompt is available offline + in-tree alongside the code. Generation wired into slices:check pre-push gate. (4) New /agents/<slug> dedicated route resolves against slices OR layouts; renders full prompt + copy + install button + source link. /agents/ index now lists all 44 slices + 36 layouts (was only first 4 layouts).

New

  • lib/slice-agent-prompt.ts — buildSliceAgentPrompt + buildLayoutAgentPrompt formatters
  • scripts/features/gen-slice-agent-md.mjs — generator (run + --check modes)
  • package.json scripts: gen:agent-md, gen:agent-md:check
  • slices:check chain now includes gen:agent-md:check (drift gate)
  • app/(docs)/agents/[slug]/page.tsx — dedicated prompt page per slice/layout
  • frontend/slices/<slug>/agent.md × 53 — auto-generated, ships with `npx rr add`

Updated

  • app/(docs)/slices/[slug]/details-tab.tsx — agentRecipe block becomes CodeBlock + InstallWithAgent + dedicated-page link
  • app/llms.txt/route.ts — each slice gets `agent recipe:` + `prompt:` lines
  • app/(docs)/agents/page.tsx — full index of all slices + layouts (was only first 4)
MAY232026
FeatureCK-1FMay 23, 2026

theme-presets v0.2 — one unified switcher; registry bundled inside slice

Consolidates the theme-preset surface in three directions. (1) Two switcher components → one: TweakcnSwitcher + ThemePicker merged into a single ThemePresetSwitcher (Palette-icon Popover with sticky light/dark/system mode tabs + sticky preset-count row with Default reset + scrollable grouped color list with hover-preview + click-commit). Pattern lifted from CareerPack production switcher. (2) ThemePresetProvider context added — wraps state so deeply-nested consumers read `useThemePreset()` instead of mounting the switcher directly. Bootstrap on first client mount, single registry load, exposes setPreset/preview/restore/isReady. (3) Catalog cleanup — dropped phantom `theme-preset-switcher` entry (pointed at template-base/frontend/shared/theme which doesn't exist on disk; was a legacy stub from rahmanef.com source map). User-requested extra: the ~240KB tweakcn registry now ships INSIDE the slice as registry-data.json and loads lazily via dynamic import — code-splits into its own chunk, no consumer public/ setup, no network roundtrip. HIDDEN_PRESETS filter drops gimmicky themes (Doom 64, Cyberpunk, Neo Brutalism, Bubblegum, Candyland, Pastel Dreams). Indonesian group labels (Profesional / Bold / Hangat / Artistik / Gelap / Lainnya). Slice count: 45 → 44 (net -1 after dropping phantom).

New files

  • components/ThemePresetSwitcher.tsx — single unified switcher (~190 LOC)
  • components/ThemePresetProvider.tsx — context + useThemePreset() hook + DEFAULT_PRESET_NAME
  • lib/tweakcn/registry-data.json — bundled tweakcn registry (~240KB, lazy-loaded)
  • slice.json + slice.contract.ts — slice now has full metadata trio

Removed

  • components/ThemePicker.tsx (4-grid picker, replaced)
  • components/TweakcnSwitcher.tsx (replaced by ThemePresetSwitcher)
  • components/tweakcn/{ModeRow,PresetList}.tsx (inlined into switcher)
  • useThemePreset.ts (old hook, replaced by context-backed one in Provider)
  • presets.ts + presets/ (old THEME_PRESETS path, never used externally)
  • app/preview/slices/theme-preset-switcher/* (phantom slice preview)

Updated

  • lib/tweakcn/registry.ts — dynamic import of registry-data.json (was fetch /r/registry.json)
  • lib/tweakcn/groups.ts — added HIDDEN_PRESETS + Indonesian group labels
  • lib/tweakcn/types.ts — dropped REGISTRY_URL constant (no longer needed)
  • index.ts barrel — new exports (drop ThemePicker, TweakcnSwitcher)
  • app/preview/slices/theme-presets/page.tsx — uses new ThemePresetSwitcher

Catalog

  • theme-presets v0.1.0 → v0.2.0
  • DROPPED theme-preset-switcher (phantom, never on disk)
  • Slice count: 45 → 44
MAY222026
FeatureCK-1EMay 22, 2026

database-io merged slice — CSV + JSON + dynamic template in one dropdown; catalog gains family sub-grouping

Two consolidations. (1) database-csv + database-json hard-merged into a single `database-io` slice. One DatabaseIOActions dropdown ships six items: Export CSV / Export JSON / Import CSV / Import JSON / Download CSV template / Download JSON template. Templates are generated dynamically from the live db.properties — header row (CSV) or wire-format v1 schema (JSON) reflects the current column set, with one placeholder row hinting at the expected format per property type (date → `2026-01-01`, multi_select → `Option1; Option2`, computed → `(computed — ignored on import)`). Single onImport callback still serves both formats because result shape stayed identical. Both legacy slugs hard-removed; consumers wanting CSV-only or JSON-only now install database-io and ignore the items they don't need (zero overhead — same shadcn deps). Slice count: 46 → 45. (2) /slices catalog UI gains second-level family sub-grouping. Within each category tab (or the All tab's category sections), slices that share a family slug-prefix (notion-*, ai-*, database-*, theme-*) or a manual override (payment, landing, admin, content) cluster under a labeled sub-header. Singletons fall back to the flat row — no `family of 1` labels.

New slice files

  • frontend/slices/database-io/{slice.json, slice.manifest.json, slice.contract.ts, index.ts, types.ts}
  • components/DatabaseIOActions.tsx — single combined dropdown (6 items + 2 dialogs)
  • components/CsvImportDialog.tsx + csv-mapping.tsx — column mapper (lifted from database-csv)
  • components/JsonImportDialog.tsx — file picker + preview (lifted from database-json)
  • lib/csv.ts — exportDatabaseToCsv + parseCsv + downloadCsv + valueFromString (lifted)
  • lib/serialize.ts — exportDatabase + parseExport + diffSchema + buildImportResult + downloadJson (lifted)
  • lib/template.ts — NEW buildCsvTemplate + buildJsonTemplate (per-type placeholder hints)

Removed (hard delete)

  • frontend/slices/database-csv/* (replaced by database-io)
  • frontend/slices/database-json/* (replaced by database-io)
  • app/preview/slices/database-csv/page.tsx (replaced by /preview/slices/database-io)
  • app/preview/slices/database-json/page.tsx (replaced by /preview/slices/database-io)

Catalog UI — family sub-grouping

  • components/site/catalog/catalog-tabs-parts.tsx — new CatalogGroupedGrid + FamilyOf type
  • components/site/catalog/catalog-tabs.tsx — accepts optional familyOf + familyLabel props
  • app/(docs)/slices/family-map.ts — FAMILY_OVERRIDES + FAMILY_LABEL + familyOfSlug()
  • app/(docs)/slices/page.tsx — passes familyOf to CatalogTabs
  • Singleton families fall back to flat row (no `family of 1` headers)

Catalog

  • NEW database-io 0.1.0 — peer of notion-database ^0.3
  • REMOVED database-csv 0.1.0
  • REMOVED database-json 0.1.0
  • Slice count: 46 → 45 (net -1 after merge)
MAY212026
FeatureCK-JMay 21, 2026

database-json standalone slice — JSON import + export, twin of database-csv

Lifted JSON wire format companion from upstream notion-page-clone. Mirrors database-csv API surface so a single host onImport handler can serve both formats — same {newProperties, rows} result shape. Wire format v1 carries database schema (name + icon + properties + views) + rows (title + icon + rowProps). On import: parses + diffs incoming property list against existing db.properties (case-insensitive name + exact type match); matched props keep existing ids, mismatched listed as `newProperties`; row values remapped through the id table. NEW slice frontend/slices/database-json/ at version 0.1.0, peer of notion-database ^0.4. Dropped vs upstream: lib/ai.ts + AIAssistDialog (needs AI router separately), cover + blocks + sub-items + templates wire fields (not in rr Page/Database minimal shape), DataMenu (consumer composes CsvActions + JsonActions themselves). Slice count 45 → 46. Preview /preview/slices/database-json: 3-row demo + working Export downloads .json + Import file picker + collapsible wire-format JSON viewer at bottom.

New slice files

  • frontend/slices/database-json/{slice.json, slice.manifest.json, slice.contract.ts, index.ts, types.ts}
  • components/JsonActions.tsx — Export + Import dropdown trigger
  • components/JsonImportDialog.tsx — file picker + preview + submit
  • lib/serialize.ts — exportDatabase + parseExport + diffSchema + buildImportResult + downloadJson

API

  • JsonActions: { db, rows, onImport, className? }
  • JsonImportDialog: { db, open, onOpenChange, onImport }
  • onImport: ({ newProperties, rows, importedDb }) => Promise<void> | void
  • Result shape MIRRORS CsvImportResult — single host handler works for both
  • Lower-level: exportDatabase / parseExport / diffSchema / buildImportResult exported standalone

Catalog

  • NEW database-json 0.1.0 — peer of notion-database ^0.4
  • Slice count: 45 → 46. JSON import/export 0% → 100%.
  • Database adaptation: ~80% → ~82%

Deferred (post upstream mega-bundle)

  • AI-assisted row generation (AIAssistDialog + lib/ai.ts — separate AI router peer)
  • Cover + blocks + sub-items + templates wire fields (need cross-block + cross-DB context)
MAY212026
FeatureCK-1CMay 21, 2026

notion-database completes 11/11 views — FormView lifted

Final view (FormView) lifted from upstream. Was deferred from CK-1B because of PropertyFormInput + FormSettings + addRow-with-values complexity. Resolved by REUSING the existing renderPropertyCell helper (already covers all 16 property types) instead of lifting a separate input widget — form-context just adds a label wrapper. PropertyFormInput is NOT lifted as a peer; renderPropertyCell is the single source. New files: FormView.tsx (155 LOC — title input + per-property labels + Submit button + success state), form-settings.tsx (102 LOC — show / required checkboxes per formable property + form title + description + success message editor), form-helpers.ts (32 LOC — isFormableProperty / emptyDraft / isEmptyValue / READ_ONLY_PROPERTY_TYPES). ViewProps extended with onRowCreate?: (draft: {title, rowProps}) => Promise<void>|void. NotionDatabase forwards it through. DatabaseViewConfig extended with formTitle? + formDescription? (existing formRequiredProps / formShownProps / formSuccessMessage already added in CK-1A). VIEW_REGISTRY now has all 11 entries — db.views.type === 'form' resolves to FormView. Coverage: views 10/11 → 11/11 (100%). Adaptation ~76% → ~80%. notion-database 0.3.0 → 0.4.0. Preview /preview/slices/notion-database: 8 view tabs (added Form view), preview now uses React state so Form submit actually appends a row to the table — round-trip demonstrable.

New files

  • components/views/FormView.tsx — main form (155 LOC)
  • components/views/form-settings.tsx — settings panel (102 LOC)
  • components/views/form-helpers.ts — predicates + draft factory (32 LOC)

API

  • ViewProps.onRowCreate — new optional callback
  • NotionDatabaseProps.onRowCreate — forwarded to view
  • DatabaseViewConfig.formTitle + formDescription — new optional fields
  • FormView reuses renderPropertyCell for per-property inputs — no separate widget

Coverage

  • Views: 10/11 → 11/11 (100%)
  • Property types: 16/17 (94%, unchanged)
  • Filter/Sort UI: 100% (unchanged)
  • CSV import/export: 100% (database-csv slice, CK-4)
  • notion-database 0.3.0 → 0.4.0
  • Database adaptation: ~76% → ~80%

Deferred (post upstream mega-bundle)

  • relation + rollup property types — need cross-DB context
  • JSON import — same pattern as CSV but lower demand
MAY212026
FeatureCK-4May 21, 2026

database-csv standalone slice — import + export for notion-database

Continuation of CK-wave (database completion). Lifted pre-staged database-csv from template-base/notion/slices/database-csv/ as new standalone slice frontend/slices/database-csv/. Simplified contract vs upstream: ONE onImport callback (was 5 useStore methods) — receives {newProperties, rows} and lets host translate to its own adapter calls. CsvActions = dropdown trigger w/ Export (Blob URL download) + Import. CsvImportDialog = file picker → auto-map columns (case-insensitive name match against db.properties) → user re-pick mapping (existing prop / Title / skip / + New of 12 supported types) → submit. Supports auto-seeding select/multi_select/status options from CSV value names. Computed types (formula / created_time / last_edited_time / unique_id) recognised as readonly — never written from CSV. Dropped vs upstream: relation cross-DB lookups (no pages reference exposed), created_by / last_edited_by / rollup branches (not in rr PropertyType). New peer slice in catalog: database-csv 0.1.0 with notion-database ^0.3 peer dep. Preview /preview/slices/database-csv demo: 3-row DB w/ working in-memory Export + Import (refresh clears state). Slice count 44 → 45.

New slice files

  • frontend/slices/database-csv/{slice.json, slice.manifest.json, slice.contract.ts, index.ts}
  • components/CsvActions.tsx — dropdown trigger (Export + Import items)
  • components/CsvImportDialog.tsx — file picker + mapping submit
  • components/csv-mapping.tsx — extracted column-mapping table (≤200 LOC budget)
  • lib/csv.ts — parseCsv + valueFromString + exportDatabaseToCsv + downloadCsv

API surface

  • Single `onImport({newProperties, rows})` callback — host owns persistence
  • CsvNewProperty: { type, name, options? } (options auto-seeded for select-family)
  • CsvRowDraft: { title, rowProps }
  • All exports also available as utility fns for custom toolbars

Catalog

  • NEW database-csv 0.1.0 — peer of notion-database ^0.3
  • Slice count: 44 → 45. CSV import/export coverage: 0% → 100%.
  • Database adaptation: ~72% → ~76%

Deferred

  • JSON import (similar pattern, lower demand — defer to mega-bundle)
  • Relation column type via CSV (needs cross-DB scope — same blocker)
  • CK-1C FormView — still pending
MAY212026
FeatureCK-3May 21, 2026

notion-database +6 property cells (files / person / formula / created_time / last_edited_time / unique_id)

Continuation of CK-wave. PropertyType union extended from 10 → 16 types. Lifted the pre-staged property cells from template-base/notion/slices/databases/ into frontend/slices/notion-database/components/cells/, plus the formula evaluation engine into lib/formula.ts (simplified — drops relation / rollup branches since those need cross-DB context that the standalone slice doesn't expose). Each cell is a self-contained component (≤105 LOC) with prop-driven mutations. NEW CELLS: (1) FilesCell — popover w/ chip list + paste-URL input, no upload UX (host plugs `files` slice adapter at a higher level). (2) PersonCell — initials avatar chips + comma-separated text picker (no user directory lookup vs upstream). (3) FormulaCell — readonly evaluated expression display + popover editor with live preview; expression syntax via {{title}}/{{prop_name}}/now/today + fn(arg, ...) (concat/upper/lower/length/if/and/or/not/empty/contains/replace/round/floor/ceil/abs/min/max) + `=expr` arithmetic. (4) CreatedTimeCell — readonly row.createdAt formatted. (5) LastEditedTimeCell — readonly row.updatedAt. (6) UniqueIdCell — auto-derived from row index + optional prefix (e.g. TASK-001). Existing multi_select + select/status cases extracted to MultiSelectCell + SelectCell to keep property-cells.tsx ≤200 LOC. CellArgs extended with optional row + db + onPropertyChange so the heavier cells can read metadata + write back formula expressions. NotionDatabase.renderCell wires all three through. Property type coverage: 10/17 (59%) → 16/17 (94%; only relation/rollup remain deferred). Adaptation ~65% → ~72%. Version 0.2.0 → 0.3.0. Preview demo extended with 6 new columns (Owners, Files, Summary formula, ID, Created, Edited).

New cells

  • FilesCell — popover list + paste-URL (no upload UX)
  • PersonCell — initials chips + comma text picker (no directory)
  • FormulaCell — evaluated display + popover editor w/ live preview
  • CreatedTimeCell — readonly row.createdAt
  • LastEditedTimeCell — readonly row.updatedAt
  • UniqueIdCell — derived from row index + optional prefix

Refactor

  • components/cells/ subfolder created
  • MultiSelectCell + SelectCell extracted from property-cells.tsx
  • renderPropertyCell now takes row + db + onPropertyChange (optional)
  • lib/formula.ts lifted (simplified, no relation/rollup branches)
  • All new files ≤200 LOC; property-cells.tsx trimmed to 185 LOC

Types (notion-shell)

  • PropertyType: 10 → 16 (+ person, files, formula, created_time, last_edited_time, unique_id)
  • Property: + formulaExpression? + uniqueIdPrefix?
  • Database: + uniqueIdCounter?

Catalog

  • notion-database 0.2.0 → 0.3.0 — title says '10 views · 16 cells', tags include files/person/formula/timestamp/unique-id
  • Property type coverage: 10/17 → 16/17 (94%); database adaptation ~65% → ~72%

Deferred

  • relation + rollup — need cross-DB context (lift via upstream notion mega-bundle)
  • CK-1C FormView — still pending
  • CK-4 database-csv — still pending
MAY212026
FeatureCK-waveMay 21, 2026

notion-database completion — 10/11 views + FilterBuilder + SortBuilder lifted

User report: 'mari fokus menyelesaikan database'. Calculated current notion-database adaptation at ~35% (6 views / 11 + zero filter or sort UI + 10/17 property types). Goal: get database close to upstream parity in standalone slice form (the upstream open-silong mega-bundle is still ~3wk away per docs/rr-sync/2026-05-21-notion-mega-lift-plan.md Phase 5). EXECUTED in 3 commits: (1) CK-1A (commit a7532da) — lifted ChartView (recharts bar/line/area/pie/donut + inline picker for kind / X axis / aggregate / Y value + chartPalette/Decimals/TopN view-config fields) and DashboardView (KPI strip + group breakdowns by select/status + recent updates feed). 7 new files including chart-data.ts (pure aggregation helpers) and dashboard-parts.tsx (GroupBreakdown + Stat split out for ≤200 LOC). DatabaseViewConfig extended with 16 chart fields + dashboard fields. ChartKind + ChartAggregate types exported from notion-shell. (2) CK-1B (commit e742c10) — lifted MapView (SVG world projection w/ row pins read from lat/lng number-properties; optional select/status property maps to pin color — no leaflet, pure SVG) and TimelineView (Gantt-style horizontal timeline w/ drag-to-shift + drag-to-resize bars via pointer events; ChevronLeft/Right pan; auto-detects first date property). 5 new files including map-svg.tsx, timeline-bar.tsx, timeline-helpers.ts (TimelineView split because upstream was 354 LOC), lib/keyboard.ts (focusSiblingBySelector helper). Views now 10/11 (91%) — only FormView deferred (heavy PropertyFormInput + FormSettings + addRow-with-values plumbing). (3) CK-2 (commit 7b81d41) — lifted FilterBuilder + SortBuilder as standalone components (shadcn Select-based UI). ViewOptions refactored to delegate to them inside Sort / Filter popovers — replaces previous inline native-<select> builders. Exported from notion-database barrel for toolbar embedding. (FINAL CK) — notion-database version 0.1.0 → 0.2.0. Catalog title + description + tags updated. recharts@^2.13.0 added to npm deps. shadcn deps add Select. Adaptation moves 35% → ~65%. CK-3 (property type cells for file/person/timestamps), CK-4 (database-csv standalone), CK-1C (FormView) deferred to future waves.

Views lifted

  • ChartView — recharts bar/line/area/pie/donut + inline kind/X/agg/Y pickers
  • DashboardView — KPI strip + select-grouped breakdowns + recent updates feed
  • MapView — SVG world projection + lat/lng pins, optional color property
  • TimelineView — Gantt drag-to-shift / drag-to-resize bars
  • Views 6/11 → 10/11 (91%). FormView deferred to CK-1C.

Filter + Sort UI

  • FilterBuilder + SortBuilder — props-driven, shadcn Select-based
  • ViewOptions refactored — delegates to the new builders in its popovers
  • Coverage: filter/sort UI 0% → 100%

Type extensions (notion-shell types.ts)

  • DbView union: 6 → 11 (table/board/list/gallery/calendar/feed/chart/dashboard/form/map/timeline)
  • ChartKind + ChartAggregate types added
  • DatabaseViewConfig: 25 new optional view-specific fields (chart*, map*, form*, dashboard*, feed*, timeline*, hiddenPropIds)
  • ViewProps: onViewConfigChange + onOpenRow added (optional callbacks)

Catalog

  • notion-database 0.1.0 → 0.2.0 — title + description + tagline + tags updated, recharts npm dep added
  • Database adaptation: ~35% → ~65%

Deferred

  • CK-1C — FormView (PropertyFormInput + FormSettings + addRow-with-values plumbing)
  • CK-3 — property type cells (file/person/created_time/last_edited_time)
  • CK-4 — database-csv as standalone peer slice
  • Per docs/rr-sync/2026-05-21-notion-mega-lift-plan.md, upstream open-silong Phase 5 (~3wk) will land the full adapter-driven `notion/` mega-bundle that subsumes these gaps.
MAY212026
ChoreCJ-waveMay 21, 2026

catalog cleanup — drop dead `pages` skeleton + redundant `notion-blocks` aggregator

User report: 'aku rasa banyak sampah, mari bersihkan module yang menurutmu tidak terlalu penting, atau bisa di gabung'. Cross-referenced docs/rr-sync/2026-05-21-notion-mega-lift-plan.md (upstream open-silong's incoming `notion/` mega-bundle, Phase 5 ~3wk out) — that plan will subsume the 4 notion atoms (equation, code-block, notifications, database-cell-selection) + notion-shell + notion-database behind one adapter. NOT consolidating those now — premature merge before the adapter contract lands = refactor twice. INSTEAD: tightened scope to two no-brainer cuts + one disambiguation. (1) DELETED frontend/slices/pages/ — dead `defineFeature` skeleton, routes:[], zero live imports (the `pages` ids in templates' nav-config are sidebar group keys, NOT slice refs). (2) DROPPED `notion-blocks` catalog entry — pure aggregator that re-exported the 4 atoms; atoms remain individually accessible in catalog. Slice dir + barrel KEPT so notion-page-clone template's `import { EquationBlock, CodeBlock } from "@/features/notion-blocks"` keeps resolving. (3) DELETED app/preview/slices/notion-blocks/page.tsx. (4) UPDATED notion-page-clone template nav link `/slices/notion-blocks` → `/slices/notion-shell` (avoids catalog detail 404). (5) RETITLED `theme-presets` catalog entry → 'tweakcn Theme Loader (30+ presets)' for unambiguous distinction from `theme-preset-switcher` (Convex-backed OKLch — different slice entirely). NO file moves on theme-presets (would cascade through CLAUDE.md + 5 docs + cookbook for marginal gain). Catalog: 45 → 44 slices. Backend slices spot-checked — rate-limit/subscribers/testimonials/services/socials all already `previewPath: undefined`, no janitor work needed.

Deleted

  • frontend/slices/pages/ — dead skeleton, only ref was in this changelog's history
  • app/preview/slices/notion-blocks/ — preview route paired with catalog drop

Catalog

  • DROPPED notion-blocks — aggregator redundant, atoms individually listed
  • RETITLED theme-presets → tweakcn Theme Loader for clarity vs theme-preset-switcher
  • Catalog count: 45 → 44 slices

Template touch-ups

  • notion-page-clone/shared/nav-config.ts — link now points to notion-shell slice page (notion-blocks catalog no longer exists)

Deferred to upstream mega-bundle

  • notion atom consolidation (equation/code-block/notifications/database-cell-selection) — wait for docs/rr-sync/2026-05-21-notion-mega-lift-plan.md Phase 5 from open-silong (~3wk). Their adapter contract is the single converge point; pre-staging here would refactor twice.
MAY212026
ImprovementCI-waveMay 21, 2026

split notion-database out of notion-shell — database is now an optional module

User report after deep-comparing rr's notion-shell with the full notion-page-clone upstream: 'copy semua dari notion clone kecuali database sebagai opsional, karena bisa saja butuh database inline, bisa saja tidak, notion database akan menjadi features module sendiri tapi di gabung di website template'. EXECUTED: extracted the database surface from notion-shell into a NEW dedicated `notion-database` slice. Consumers can now install notion-shell ALONE for pages + sidebar + block editor without the database weight, OR add notion-database when they want embedded DBs. Both compose in the notion-page-clone-os website template (DocView imports from notion-shell, DatabaseView imports from notion-database). FILES MOVED from notion-shell → notion-database: components/{NotionDatabase, NotionProperty, ViewOptions, ViewTabs, ColumnHeaderMenu, property-cells}, components/views/* (TableView/BoardView/ListView/GalleryView/CalendarView/FeedView + types + registry), lib/viewData.ts. DOMAIN TYPES (Database, Property, PropertyValue, DbView, DatabaseViewConfig, DatabaseFilter, DatabaseSort, SelectOption, NumberFormat, PropertyType) STAY IN notion-shell — they're the single source of truth (Page.rowOfDatabaseId + rowProps reference them) — notion-database re-exports them as a convenience. Avoids circular shell↔database imports. PEER DECLARED: notion-database lists notion-shell as a peer (^0.4); npx rr add notion-database cascades the shell. SCHEMA CHANGES: notion-shell slice.json + slice.contract.ts + slice.manifest.json updated (no longer claims database components). NEW slice files for notion-database. CATALOG: new notion-database entry with notion-like tag set + tagline + agentRecipe + previewPath. /preview/slices/notion-database route built — minimal real DB demo with 3 views (Table / Board grouping by status / List), 6 property types (text/status/select/multi_select/date/checkbox), 5 seed rows. Audit chain green: 45 slices (was 44), all ≤200 LOC.

Files moved (notion-shell → notion-database)

  • components/NotionDatabase.tsx + NotionProperty.tsx + ViewOptions.tsx + ViewTabs.tsx + ColumnHeaderMenu.tsx + property-cells.tsx
  • components/views/ — TableView / BoardView / ListView / GalleryView / CalendarView / FeedView + types + index registry
  • lib/viewData.ts (applyView + groupBy + bucketByDate)

Domain types — stay in notion-shell (single source)

  • Database, Property, PropertyValue, DbView, DatabaseViewConfig, DatabaseFilter, DatabaseSort, SelectOption, NumberFormat, PropertyType
  • Page references these via rowOfDatabaseId + rowProps — moving them to notion-database would create circular shell↔database imports
  • notion-database/types.ts re-exports them as a convenience for downstream consumers

Catalog

  • NEW notion-database — optional embeddable DB surface
  • notion-shell description + tagline updated — split is documented
  • Slice count: 44 → 45. Audit green.

Consumer wiring

  • DatabaseView.tsx (notion-page-clone-os template) — import path moved from notion-shell → notion-database
  • preview/slices/notion-shell/page.tsx — NotionDatabase imported from notion-database instead of notion-shell
  • /preview/slices/notion-database — NEW route, 5 seed rows × 6 property types × 3 views (Table/Board-by-status/List)

Followup (deferred)

  • CJ-wave (next) — lift more from upstream into notion-shell: editor depth (ColumnLayoutGroup, MentionTypeahead, SelectionToolbar, ColumnBlockEditor, RowPropertiesPanel), sidebar depth (WorkspaceSwitcher, NavUser, DragGhost, PagesPanel, SortablePageRow), provided they're pure-UI and not convex-coupled
  • CK-wave (later) — lift more database views from upstream into notion-database: ChartView, DashboardView, FormView, MapView, TimelineView (currently rr has 6 of 11)
NewerPage 19 / 25Older