rmnr
DocsTourSlicesBest PracticeAgentsInstall

Command Palette

Search for a command to run...

New
  • Changelog
Release notes

Changelog

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

MAY212026
ImprovementCC-waveMay 21, 2026

adapter pattern propagated — all 6 admin-panel blocks now go through bindings

Follow-up to CB users-canary. The 5 remaining blocks (audit-log / ai-config / analytics / webhooks / settings) now each ship a bindings.tsx exposing a typed `<Block>Bindings` shape, a `useDefault<Block>Bindings()` hook (in-memory + SEED, the demo default), a `<Block>BindingsProvider value={...}>` context wrapper, and a `use<Block>Bindings()` consumer with default-fallback. Each BlockView refactored to consume via the hook instead of inline useState/SEED imports — all 6 views are now data-source agnostic. ZERO user-visible change (same seeded data, same optimistic mutations). FOUNDATION COMPLETE: any future Convex / REST / external-auth wire-up is a Provider override, not a view edit. PER-BLOCK bindings shape: audit-log = events + isLoading + optional logEvent; ai-config = config + moderation + isLoading + 4 mutators; analytics = kpis + series + sources + topPages + funnel + isLoading (read-only); webhooks = endpoints + deliveries + isLoading + togglePause + remove; settings = identity + integrations + apiKeys + isLoading + setIdentity + revokeKey. View JSDocs preserve the BS-canary pattern explanation + add the CC-wave adapter note. Eject (per docs/architecture/eject-spec.md Phase 2) is now a per-block file-swap operation: replace bindings.tsx with the Convex variant, leave everything else.

NEW files (5)

  • _shared/admin-panel/blocks/audit-log/bindings.tsx — AuditLogBindings (37 LOC, read-mostly)
  • _shared/admin-panel/blocks/ai-config/bindings.tsx — AiConfigBindings (57 LOC, config + moderation + mutators)
  • _shared/admin-panel/blocks/analytics/bindings.tsx — AnalyticsBindings (46 LOC, read-only)
  • _shared/admin-panel/blocks/webhooks/bindings.tsx — WebhooksBindings (61 LOC, endpoints + deliveries + mutators)
  • _shared/admin-panel/blocks/settings/bindings.tsx — SettingsBindings (53 LOC, identity + integrations + apiKeys + mutators)

Refactored

  • 5 BlockViews: drop inline useState/SEED, consume via use<Block>Bindings() hook
  • Demo behavior identical — same seed, same mutations, same state lifecycle

Foundation complete — what this unlocks

  • Real Convex per block: 1 file swap (bindings.tsx → useQuery + useMutation impl)
  • npx rr eject Phase 2: bindings.tsx is the per-block override seam, see eject-spec.md
  • Mock for tests: wrap with <BlockBindingsProvider value={mockBindings}> in stories / Vitest
  • External auth flows: wrap dispatcher once at root with multi-block Provider stack
MAY212026
ImprovementCB-waveMay 21, 2026

users-bindings adapter canary — block IO routed through useUsersBindings() hook

First adapter-pattern canary for the admin-panel blocks. Establishes the contract that lets a future Convex / REST / external auth swap happen WITHOUT touching the BlockView. NEW file: _shared/admin-panel/blocks/users/bindings.tsx exports `UsersBindings` type (users: UserRow[] + isLoading + changeRole + revoke), `useDefaultUsersBindings()` hook (in-memory useState + SEED — the demo default), `<UsersBindingsProvider value={...}>` context wrapper, and `useUsersBindings()` consumer hook that falls back to default when no Provider is in scope — so the demo iframe needs zero setup, but an ejected app or future Convex wire-up can plug in by wrapping the dispatcher with a Provider. UsersBlockView refactored to consume via the hook instead of inline useState/SEED — view is now data-source agnostic. Behavior identical for the demo (same SEED, same optimistic mutations). Pattern to replicate per block in subsequent waves (audit-log → CC, ai-config → CD, etc.) when Convex bindings come online. Foundation for npx rr eject (per docs/architecture/eject-spec.md Phase 2) and for the real-Convex canary that BS-wave's eject spec was always pointing toward.

NEW file

MAY212026
ImprovementCA-waveMay 21, 2026

/docs/architecture page refresh — current state of subdomain + dispatcher + block patterns

The /docs/architecture page was stale (described the old template-base/ structure that no longer exists in this repo, didn't mention any of the BR→BZ waves). Rewritten to reflect today's actual state: (1) wildcard subdomain routing diagram (request → proxy.ts → host-resolve → path rewrite → BlockView), (2) AdminFeatureStubPage dispatcher pattern with the actual 7-line switch + an 8×6 block × template coverage matrix showing the 48-routes-from-one-dispatcher leverage, (3) per-block file shape (types + seed + view + sub-components ≤200 LOC, with shared chrome from _shared/admin-panel/ui/), (4) hard rules updated (added LOC cap + audit chain + no-marketing-chrome-on-workspace + proxy.ts-not-middleware), (5) NEW wave-progression timeline section showing BR→CA at a glance. Portfolio-grade: a viewer can understand the system in 30 seconds. Single file, 135 LOC.

Sections

  • Subdomain routing — ASCII flow diagram (proxy.ts → AdminFeatureStubPage)
  • Admin-panel dispatcher pattern — actual code + 8×6 coverage matrix
  • Block file shape — _shared/admin-panel/ui/ + blocks/<segment>/ tree
  • Hard rules — refreshed (NO Clerk / shadcn-only / copy-first / stack lock / ≤200 LOC / audit chain / no marketing chrome / proxy.ts)
MAY212026
ImprovementBZ-waveMay 21, 2026

notion-page-clone-os — strip marketing chrome, full-bleed workspace (real Notion-like)

User request: 'tidak perlu ada header dan footer ... langsung saja workspacenya'. Template now opens directly into the Notion-clone workspace at the root URL (demo-nosion.rahmanef.com) with NO marketing header / footer / SiteShell wrapping. Behaves like the real Notion app, not a marketing site about one. CHANGES: (1) app/preview/notion-page-clone-os/public/layout.tsx — stripped SiteShell, PUBLIC_NAV, FOOTER_COLUMNS, brand object — now just Suspense + StoreProvider passthrough. Metadata preserved. (2) Dashboard.tsx h-[calc(100vh-8rem)] min-h-[640px] rounded border → h-dvh bg-background (full-bleed viewport, no rounded card). (3) DELETED dead components/templates/notion-page-clone/slices/home/ (HomePage + LandingRenderer never imported since BD-wave). (4) RESTYLED [...slug] catch-all: was meant to render custom pages INSIDE the SiteShell chrome; now renders standalone with a thin 'back to workspace' header at top + centered max-w-3xl canvas — mirrors Notion's 'publish to web' UX. Audit-bp's Pages CRUD requirement satisfied (8/8 templates have catch-all). (5) layouts.ts file manifest cleaned (HomePage.tsx ref removed). nav-config.ts kept (still consumed by the /dashboard side admin routes for ADMIN_BASE / PUBLIC_BASE / ADMIN_PANEL_BASE constants).

User-visible at demo-nosion.rahmanef.com

MAY212026
FeatureBY-waveMay 21, 2026

files slice lifted from open-silong — storage-adapter pattern reference

The `files` slice ships as the first proof of the storage-adapter pattern that unlocks the remaining open-silong blocked-pending-adapter wave (cover, workspace-io, templates, ai-agent, inbox, feedback, workspace-members, library, mobile-nav). Slice surface: <FileUploadButton>, <FileChip>, useFileUpload(), useFileUrl() — every read/write/url-resolve flows through a host-supplied FilesAdapter (upload + remove + useUrl). Bundled adapter: useLocalStorageFilesAdapter (data-URL bucket; small files only, capped by browser localStorage quota). Host wires its own via <FilesAdapterProvider adapter={...}> — open-silong drops in a Convex-backed adapter, an S3 deployment writes an S3 adapter, the rr demo uses the bundled localStorage one. The slice itself has ZERO backend coupling; the source-of-truth lives at https://github.com/rahmanef63/open-silong and syncs lift-only via scripts/sync-to-rr.mjs.

NEW files (synced from open-silong)

  • frontend/slices/files/adapter/types.ts — FilesAdapter interface
  • frontend/slices/files/adapter/context.tsx — Provider + useFilesAdapter()
  • frontend/slices/files/adapter/localStorageAdapter.ts — bundled demo adapter
MAY212026
FeatureBX-waveMay 21, 2026

admin-panel/settings real impl — sixth + final BS-pattern block (100% block coverage)

Sixth and final admin-panel block graduates from generic AdminFeatureCard stub to a real interactive view. ALL 6 ADMIN PANEL BLOCKS NOW REAL (users + audit-log + ai-config + analytics + webhooks + settings). SettingsBlockView ships with a 4-tab layout (Identity / Integrations / API keys / Danger zone). Identity tab: live editable workspace name + URL slug (auto-sanitized to a-z0-9-) + timezone Select (7 IANA zones) + language Select (4 locales) + contact email — all wired to local state. Integrations tab: 6-service grid (Slack messaging, Resend email, Stripe payments, Vercel deploy, GitHub vcs, DOKU payments) each with connected/disconnected/error status badge, category label, status detail line, Connect/Configure/Reconnect button, and docs link. API keys tab: 3 seed keys with scope badge (read / read-write / admin), masked tail, created date + last-used relative, copy button, revoke action (wired). Danger zone: 3 destructive actions (Transfer ownership / Archive workspace / Delete workspace) with descriptive subtext and destructive Button variant. Pattern identical to prior 5: _shared/admin-panel/blocks/settings/{types, seed, view, identity-form, integration-grid, api-keys-list} + final dispatch case. AdminFeatureStubPage's comment block updated to reflect 100% coverage. AdminFeatureCard retained as fallback for any future segment added to ADMIN_PANEL_BLOCKS before a real view ships.

MAY212026
FeatureBW-waveMay 21, 2026

admin-panel/webhooks real impl — fifth BS-pattern block

Fifth admin-panel block graduates from generic AdminFeatureCard stub to a real interactive view. WebhooksBlockView ships with a 3-tab layout (Endpoints / Recent deliveries / Payload format) inside a shadcn Tabs. Endpoints tab shows 4 seed endpoints (Zapier CRM, Slack #ops, internal audit mirror, staging sandbox) with per-row status badge (active / paused / failing), event chips, masked secret tail, Test button, and a DropdownMenu with Pause/Resume + Rotate secret + Delete — all wired to local state so toggle/remove work live. Failing endpoint shows retry counter. Deliveries tab is a 12-row table (when, endpoint, event, status badge, HTTP code, ms, attempt-multiplier marker, replay action) covering delivered/failed/retry/pending. Payload tab shows a sample event body + the HMAC-SHA256 signature header consumers must verify (with 5-min replay protection note). Pattern identical to prior 4 blocks: _shared/admin-panel/blocks/webhooks/{types, seed, view, endpoint-row, delivery-table} + single dispatch case. No canonical slice yet — schema here would seed a future frontend/slices/webhooks/.

NEW files

  • _shared/admin-panel/blocks/webhooks/types.ts — WebhookEventName (8) + EndpointStatus (3) + WebhookEndpoint + DeliveryStatus (4) + WebhookDelivery
MAY212026
FeatureBV-waveMay 21, 2026

admin-panel/analytics real impl — fourth BS-pattern block (recharts)

Fourth admin-panel block graduates from generic AdminFeatureCard stub to a real interactive view — first one to use charts. AnalyticsBlockView ships with 4 KPI cards (page views, sessions, conversion, bounce rate — each with signed delta-vs-prev-period and good/bad coloring), a 30-day stacked area chart (views + sessions, recharts via shadcn chart wrapper with proper CSS-variable theming), a traffic-source donut + legend (Direct / Organic search / Referral / Social / Email with deterministic visit counts), a 5-step conversion funnel showing drop-off % between steps, and a top-pages table (path / title / avg duration / bounce rate / views). Range chips (7d/30d/90d) wired but seed is single 30-day series. Pattern identical to BS+BT+BU: _shared/admin-panel/blocks/analytics/{types, seed, AnalyticsBlockView, traffic-chart, sources-donut, funnel-and-pages} + a single dispatch case. All 8 templates' /admin/admin-panel/analytics routes auto-updated. Backed by frontend/slices/event-tracking/ (today config-only — events schema + ingest endpoint deferred to a separate wave that wires real Convex writes).

NEW files

  • _shared/admin-panel/blocks/analytics/types.ts — DayPoint + TrafficSource + PageStat + FunnelStep + KpiCardData
MAY212026
FeatureBU-waveMay 21, 2026

admin-panel/ai-config real impl — third BS-pattern block

Third admin-panel block graduates to a real interactive view. AiConfigBlockView ships with 4 providers (Anthropic, OpenAI, Mistral, Google), 10 models across 3 tiers (fast / balanced / frontier) with per-model context window + input/output cost per 1M tokens, an active-model picker grouped by provider in a shadcn Select with full pricing metadata in each option, system prompt textarea (4000 char cap, live counter), temperature + max-output-tokens sliders, and a moderation rule list with 5 rules (toxicity threshold, PII redaction, off-topic refusal, competitor mention threshold, external-link allowlist) each toggleable via Switch with graded rules exposing a 0-1 Slider for threshold. Reset button restores defaults. Provider cards show status badge (connected / missing-key / rate-limited), masked key tail, and docs link. Pattern identical to BS+BT: _shared/admin-panel/blocks/ai-config/{types, seed, AiConfigBlockView, provider-card, moderation-row, knobs} + a single dispatch case in AdminFeatureStubPage. All 8 templates' /admin/admin-panel/ai-config routes auto-updated. Backed by frontend/slices/ai-router/ (barrel-only today, real impl deferred until a separate wave wires provider adapters + a Convex key vault).

NEW files

MAY202026
FeatureCK-1DMay 20, 2026

workspace-shell lifted from superspace — atomic NavContext

New full-stack slice `workspace-shell` lifted from superspace. Unified workspace + menu navigation primitive replacing the silo'd menu-store + workspace-store. NavContext = (workspaceId, menuSetId) atomic pair with resolver chain (user cache → user assignment → workspace default → none). 2-tier dropdown switcher (workspace radio + menuSet picker), ContextBadge header chip, full editor with tabs (menus / workspace tree / settings), tiered RBAC (menus.manage for admin, menus.fork for user-personal copy). Convex tables prefixed `workspaceShell_*` (7 tables: menuSets, menuItems, itemComponents, wsAssignments, userAssignments, rolePerms, navContext). Audit-log dependency is graceful (try/catch — slice still works if audit-log not installed). 7-phase rollout: P0 scaffold + trio + schema → P1 idempotent migration menus/* → workspaceShell_* (in-memory map for 4096 read-op limit) → P2 NavContextProvider + useNavContext hook + getEffectiveMenuItems with role filter → P3 WorkspaceSwitcher v2 + ContextBadge + MenuSetPicker → P4 editor tabs with CRUD mutations → P5 dual-read wiring into primary sidebar (NavContext primary, legacy fallback) → P6 30-day deprecation shims for menu-store + workspace-store (auto-removal 2026-06-19).

New slice

NewerPage 12 / 17Older
  • _shared/admin-panel/blocks/users/bindings.tsx — UsersBindings + useDefaultUsersBindings + UsersBindingsProvider + useUsersBindings (65 LOC)
  • Refactored

    • UsersBlockView.tsx — drops inline useState/SEED, consumes via useUsersBindings(); view now data-source agnostic
    • JSDoc updated: BS-canary pattern + CB-wave adapter pattern explanation

    Why this matters

    • Real Convex swap (future): wrap dispatcher with <UsersBindingsProvider value={convexBindings}> — view code untouched
    • npx rr eject (future): bindings.tsx is the file the ejected app rewrites to wire its own backend
    • BSDL trauma avoided: no sync engine, no auto-detect, no .kitab.json — just a plain Provider override
    • Audit suggestion (BY-wave): adapter pattern next — done for users canary; 5 more blocks to follow same shape
  • Wave progression — BR / BS-BX / BY / BZ / CA quick timeline
  • What this isn't

    • Not a tutorial (Notion-clone vs Notion comparison page lives elsewhere)
    • Not a deploy guide (separate /docs section)
    • Not a slice deep-dive (per-slice pages at /slices/<slug>)
    • Root / → immediate Notion workspace (sidebar + welcome doc, full viewport)
    • Sidebar CRUD (create / rename / delete / move) — unchanged
    • /d/<id> → doc view, /db/<id> → database view (both full-bleed)
    • /<custom-slug> → published custom page, standalone with back-to-workspace link
    • No marketing landing, no top-navbar, no footer columns

    Files

    • MODIFIED app/preview/notion-page-clone-os/public/layout.tsx — bare StoreProvider
    • MODIFIED components/templates/notion-page-clone/slices/notion-app/Dashboard.tsx — h-dvh
    • MODIFIED app/preview/notion-page-clone-os/public/[...slug]/catch-all-renderer.tsx — standalone framing
    • DELETED components/templates/notion-page-clone/slices/home/ (HomePage + LandingRenderer)
    • MODIFIED lib/content/layouts.ts — removed dead HomePage.tsx ref from manifest

    Not affecting

    • Other 7 templates (konsultan / personal-brand / kreator / wirausaha / agency / saas / riset) — still keep marketing SiteShell, unchanged
    • Admin side (/admin/...) — DashboardShell + sidebar unchanged
    • Audit chain: 44 slices · 679 template files · pages-CRUD requirement still satisfied via standalone-render catch-all
  • frontend/slices/files/{hooks,components,lib,types}/* — pure consumers of the adapter
  • Catalog

    • lib/content/slices.ts — new slug `files` entry with tag `notion-like` + `adapter` + `portable`
    • Pattern reference for the remaining open-silong adapter wave

    Skip-list

    • open-silong-side rr-sync.json adds `convexAdapter.tsx` to skipFiles — the Convex production adapter never ships to rr, only the localStorage demo + the host-pluggable contract.

    NEW files

    • _shared/admin-panel/blocks/settings/types.ts — WorkspaceIdentity + IntegrationStatus + Integration + ApiKey
    • _shared/admin-panel/blocks/settings/seed.ts — DEFAULT_IDENTITY + 7 TIMEZONES + 4 LANGUAGES + 6 INTEGRATIONS + 3 SEED_KEYS + tone tables
    • _shared/admin-panel/blocks/settings/SettingsBlockView.tsx — orchestrator (4-tab + DangerZone)
    • _shared/admin-panel/blocks/settings/identity-form.tsx — name + slug auto-sanitize + timezone + language + email
    • _shared/admin-panel/blocks/settings/integration-grid.tsx — 6-service status grid
    • _shared/admin-panel/blocks/settings/api-keys-list.tsx — list with revoke + masked tail + last-used relative

    Dispatcher final state

    • AdminFeatureStubPage: added `if (segment === "settings") return <SettingsBlockView />;` case
    • Comment updated: BS-canary → BX-wave (2026-05-20 → 2026-05-21) — all 6 blocks real
    • AdminFeatureCard retained as the future-segment fallback

    Final coverage

    • 6 / 6 admin-panel blocks real (users · audit-log · ai-config · analytics · webhooks · settings) — 100%.
    • All 8 templates inherit all 6 real blocks via the shared dispatcher. Single edit propagates to 48 admin-panel routes (8 templates × 6 blocks).
    • BS-pattern (per-block: types + seed + view + sub-components + single-line dispatch case + ≤200 LOC cap) proven end-to-end.

    What's next

    • Templates pivot — real Convex bindings for blocks that have a slice (users → rbac-roles, audit-log → audit-log, analytics → event-tracking, ai-config → ai-router). Webhooks + settings need new canonical slices.
    • Optional: extract a Mermaid/SVG architecture diagram for the dispatcher → block pattern, surface on /docs.
    • Optional: build `npx rr eject` per docs/architecture/eject-spec.md when commercialize trigger fires.
  • _shared/admin-panel/blocks/webhooks/seed.ts — STATUS_META + DELIVERY_META tone tables + 4 endpoints + 12 deliveries + SAMPLE_PAYLOAD + SAMPLE_SIGNATURE
  • _shared/admin-panel/blocks/webhooks/WebhooksBlockView.tsx — orchestrator (header stats + 3-tab Endpoints/Deliveries/Payload)
  • _shared/admin-panel/blocks/webhooks/endpoint-row.tsx — row with Test + DropdownMenu (Pause/Resume/Rotate/Delete) + event chips + secret tail
  • _shared/admin-panel/blocks/webhooks/delivery-table.tsx — 12-row recent deliveries grid with replay button
  • Dispatcher update

    • AdminFeatureStubPage: added `if (segment === "webhooks") return <WebhooksBlockView />;` case

    Coverage

    • 5 of 6 admin-panel blocks now real (users, audit-log, ai-config, analytics, webhooks). Only settings remains as placeholder.
    • All 8 templates' webhooks routes auto-updated via shared dispatcher.
  • _shared/admin-panel/blocks/analytics/seed.ts — buildSeries() deterministic 30-day series + 4 KPI cards + 5 sources + 6 top pages + 5-step funnel
  • _shared/admin-panel/blocks/analytics/AnalyticsBlockView.tsx — orchestrator (header range chips + KPI grid + chart + donut + funnel + top-pages table)
  • _shared/admin-panel/blocks/analytics/traffic-chart.tsx — recharts AreaChart with gradient fills via shadcn ChartContainer + ChartConfig
  • _shared/admin-panel/blocks/analytics/sources-donut.tsx — recharts PieChart donut + legend list with visit counts + %
  • _shared/admin-panel/blocks/analytics/funnel-and-pages.tsx — FunnelList (drop-off % per step) + TopPagesTable
  • Dispatcher update

    • AdminFeatureStubPage: added `if (segment === "analytics") return <AnalyticsBlockView />;` case
    • Real impl backed by event-tracking slice

    Coverage

    • 4 of 6 admin-panel blocks now real (users, audit-log, ai-config, analytics). 2 still placeholder (webhooks, settings).
    • All 8 templates' analytics routes auto-updated via shared dispatcher. Zero per-template touchpoints.
  • _shared/admin-panel/blocks/ai-config/types.ts — ProviderId + ProviderStatus + AiProvider + ModelTier + AiModel + ModerationRule + AiConfig
  • _shared/admin-panel/blocks/ai-config/seed.ts — 4 providers + STATUS_META + TIER_META + 10 models + DEFAULT_CONFIG + DEFAULT_MODERATION (5 rules)
  • _shared/admin-panel/blocks/ai-config/AiConfigBlockView.tsx — orchestrator (header stats + provider grid + active model card + prompt+sampling + moderation list)
  • _shared/admin-panel/blocks/ai-config/provider-card.tsx — provider tile (status badge + masked key + rotate/connect button + docs link)
  • _shared/admin-panel/blocks/ai-config/moderation-row.tsx — rule row (Switch + optional threshold Slider)
  • _shared/admin-panel/blocks/ai-config/knobs.tsx — Stat tile + Knob slider+label helpers (extracted to keep orchestrator ≤200 LOC)
  • Dispatcher update

    • AdminFeatureStubPage: added `if (segment === "ai-config") return <AiConfigBlockView />;` case
    • Real impl backed by ai-router slice (today barrel-only)

    Coverage

    • 3 of 6 admin-panel blocks now real (users, audit-log, ai-config). 3 still placeholder (analytics, webhooks, settings).
    • All 8 templates' ai-config routes auto-updated via shared dispatcher. Zero per-template touchpoints.
  • workspace-shell 1.0.0 — atomic NavContext primitive
  • Tables (workspaceShell_*)

    • menuSets / menuItems / itemComponents
    • wsAssignments / userAssignments / rolePerms
    • navContext — per-user atomic (wsId, menuSetId) cache

    Components

    • NavContextProvider + useNavContext + useNavContextRequired
    • WorkspaceSwitcher — 2-tier dropdown
    • MenuSetPicker — 3-tier (user / workspace / system) radio
    • ContextBadge — header chip
    • DeprecationBanner — 30-day countdown for legacy shims

    RBAC

    • menus.manage — admin edits workspace-default menuSet
    • menus.fork — user creates personal copy via forkMenuSet
    • menus.view / savedViews.{view,manage,manage_shared} — already shipped