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 9 of 25. Full prose history in CHANGELOG.md.

SEP092026
Improvementsite@svelte-convex-starterSep 9, 2026

Svelte/Convex best-practice baseline aligned to template starter

The Svelte + Convex profile now matches the current template-svelte-convex-starter baseline: Bun 1.4.2 / Node 22.23.2, Svelte 5.57.0, SvelteKit 2.70.3, TypeScript 6.0.3, Vite 8.2.2, Tailwind 4.3.3, shadcn-svelte 1.5.1, Convex 1.45.0 and convex-svelte 0.14.0.

Architecture and backend

  • Requires CONTRACT.md and product PRD ownership; root feature slices with public barrels, thin routes and a lazy registry SSOT; generated Convex types; args and returns validators; backend authorization; bounded indexed reads; and widen → backfill → tighten schema evolution.

Safe clean clones

  • Auth/private data, BYOK AI, MCP, payment/email and cloud integrations remain disabled until required and acceptance-tested. Provider, model and tool results stay untrusted behind allowlists, budgets, cancellation and explicit tool review.

Release evidence

  • Requires frozen Bun install plus asset, type, lint, unit and build gates; narrow-mobile, mobile and desktop Playwright; development hydration smoke; and applicable Node/container evidence. Next-only 200-line and GitHub Actions restrictions no longer leak into the Svelte prompt.
AUG032026
Featuredashboard-merge-wave-4Aug 3, 2026

No sidebars on mobile — every menu is a thumbnail drawer now

A phone was still getting a sheet-shaped copy of the desktop sidebar: shadcn's Sidebar renders its list inside a Sheet under md, and the site navbar and docs shell each had their own list-in-a-sheet. That is three different mobile menus with the same shape and none of them thumb-friendly. dashboard-shell 1.2.0 replaces all of it with one component — MobileMenuDrawer: a bottom drawer of thumbnail TILES (icon in a rounded square + label, 4 per row), grouped exactly like the rail, with one level of drill-down for items that have sub-items and a back chevron. The rail itself no longer renders at all under md (DashboardSidebar returns null when shadcn's own useSidebar() reports mobile), so there is no second copy to keep in sync: the dock's Menu tile and the topbar button both open the drawer. The docs shell and the marketing navbar now mount the same drawer — docs clusters and slice categories became tiles, and tapping a category drills into its slices.

Slices touched

  • dashboard-shell 1.2.0 — MobileMenuDrawer + MobileMenuTiles; DashboardSidebar returns null on mobile; MobileDock takes `onMenu`; needs shadcn `drawer` (vaul)

Site

  • docs shell: asking three-column for the mobile "left" view opens the tile drawer instead of the full-screen sidebar list; new docs-sidebar/to-nav.ts maps the docs tree (clusters → tiles, branches → drill-down) with a per-label icon map
  • top navbar: the lg:hidden Sheet link-list is gone — same drawer, six tiles
  • /admin and every preview inherit it from the slice; the dock's Menu tile and the topbar hamburger open the same surface

Left alone on purpose

  • build-shell's left column is an input FORM, not navigation; file-explorer / code-editor mobile sheets hold content trees; appshell app-chrome is OS window chrome
AUG032026
Improvementdashboard-merge-wave-3Aug 3, 2026

Settings joins the one-navigation pattern — and the audit says the rest should not

Third and last pass of the dashboard merge. A sweep of every slice that renders its own persistent left rail turned up six; five of them are NOT app navigation and were deliberately left alone — user-management's Roles/Teams rails list adapter DATA rows (master-detail, and they already sit inside horizontal tabs), image-editor's rail is a canvas tool palette, reel-editor's files pane is a content browser and its track-head column is one row per timeline track. Only settings qualified: a hard-coded four-section catalog rendered as a second rail. It now follows the admin console's pattern — `SettingsShell nav={false}` renders the active panel only, and `settingsSectionsToNav(onSelect, { activeId, dockCount })` hands the sections to the app sidebar as plain data (structural shape, no cross-slice import). The section catalog moved to lib/nav.ts as the SSOT for both the built-in rail and the mapper, with the old `SettingsSectionId` export path kept alive. Default stays `nav: true`, so every existing consumer renders byte-identically.

Slices touched

  • settings 1.1.0 — account variant: `nav={false}` panel-only mode + `settingsSectionsToNav()`; SETTINGS_SECTIONS is now the single catalog behind both faces; 6 unit tests

Left alone on purpose

  • user-management RolesPanel / TeamsPanel — the rail lists adapter data (roles, teams), not app sections; converting a data list into sidebar nav would be wrong
  • image-editor tool-rail (canvas tool palette), reel-editor files-pane (content browser) and track-head (one row per timeline track)

Site

  • /preview/slices/settings gains an "in the app shell" section: the sections drive the ONE sidebar while SettingsShell renders panels only
  • dockCount defaults to 3 across the mappers — the shell appends its own Menu button, and 5 labels in one dock row truncate on a 360px screen
AUG032026
Improvementdashboard-merge-wave-2Aug 3, 2026

Every sidebar in the repo now IS the dashboard-shell slice

Wave 1 built the one dashboard but left the surfaces that actually render on their own hand-rolled chrome — so nothing looked different. This wave migrates them. rr's own /admin operator panel drops its bespoke SidebarProvider + AppSidebar + NavMain (382 lines) and mounts the slice: same rail and breadcrumb topbar on desktop, and on mobile it now gets the bottom dock (Overview / Layouts / Registry / Menu) it never had. The three preview routes that faked a dashboard with `grid-cols-[220px_1fr]` divs now mount the real thing, so what the catalog shows is what `npx rr add` gives you. The admin console gains `nav={false}` + a `sectionsToNav()` mapper: its 26 sections feed the ONE app sidebar instead of stacking a second rail beside it — one navigation, one dock, on every screen. Three orphan sidebars (shared/layout/AppSidebar, site-sidebar and its two group files) had no importers left and are deleted.

Slices touched

  • admin 0.3.0 — console variant: `nav={false}` renders the panel only; new `sectionsToNav(sections, onSelect, { activeId, dockCount })` maps sections onto a dashboard-shell `nav` (structural, no cross-slice import)
  • dashboard-shell — NavItem gains `active?: boolean` so button items (onSelect, no href) can drive the rail + dock highlight

Site

  • /admin mounts DashboardShell — components/admin/{app-sidebar,nav-main}.tsx deleted, NavUser kept as the sidebar footer
  • /preview/slices/{admin,admin-panel,workspace-shell} render the real shell; workspace-shell's switcher now sits in `sidebarHeader`, its menuSet drives rail + dock
  • Deleted with no importers: components/shared/layout/AppSidebar.tsx, components/site/site-sidebar.tsx + site-sidebar/{sidebar-grouped-items,sidebar-list-group}.tsx
  • next.config: the /preview/:tpl/admin → /dashboard/admin redirect was swallowing /preview/slices/admin (308 → 404, the admin slice preview was unreachable). :tpl now excludes the slices namespace
AUG032026
Improvementdashboard-merge-waveAug 3, 2026

Six dashboards collapse into one — dashboard-shell 1.0.0

The repo carried six overlapping dashboard chromes: a facade slice pointing at superspace-coupled code under template-base (tsc-EXCLUDED, so it never compiled — and it advertised a `sidebar`/`topbar` API the component never had, meaning `npx rr add dashboard-shell` shipped consumers a broken import), a mock desktop/mobile pair that existed only so the preview had something renderable, appshell's single-pane cockpit shell, and the template `_shared` admin chrome in two archetypes (simple + advanced). This wave replaces all of them with one real, in-tree, typechecked slice. ONE `nav` prop is the SSOT: the desktop rail, the mobile sheet and the bottom dock all render from it — flag `dock: true` on the items you want docked, or let it take the first few. Breakpoints are CSS (`md:hidden`) plus shadcn's Sidebar sheet, so the slice never measures the viewport and there's no hydration flash. Slots cover what used to be forked components: sidebarHeader (workspace switcher), sidebarFooter (user menu), actions, topbar (full replace), secondary (the old three-column 'advanced' archetype). Net −3.4k lines.

Slices touched

  • dashboard-shell 1.0.0 — real slice at frontend/slices/dashboard-shell (was a facade over template-base): DashboardShell + DashboardSidebar + MobileDock + nav helpers (isActive / deriveDock / activeItem / activeTitle / flattenNav), unit-tested
  • appshell 1.6.0 — the bundled `dashboard` shell mode is gone (ShellId, shell order, DESKTOP_IDS, chrome-kit + its test, slice-extras barrel). appshell stays the windowed OS (macOS / Windows / iOS / Android); a route-based dashboard is dashboard-shell's job, and consumers can still registerShell() their own single-pane chrome

Deleted duplicates

  • template-base/frontend/slices/dashboard-shell (facade) + shared/ui/layout/dashboard/{Desktop,Mobile,Responsive}DashboardShell + mobile/{MobileDashboardDock,MobilePortalHome,MobileWorkspaceLauncher,MobileProfileSheet,MobileTopBar,useUnifiedMobileWorkspaceContext} — dead once the facade went (nothing in template-base mounted them); dashboard-routes.ts + mobile-chrome-title.tsx kept, they're still imported by AppSidebar / header presets / command-menu
  • app/preview/slices/dashboard-shell/{shells,shell-parts}.tsx — the mock chrome; the preview now mounts the real slice
  • components/templates/_shared/ui/{admin-sidebar,admin-nav-items,dashboard-shell-advanced,secondary-sidebar}.tsx — dashboard-shell.tsx is now a ~140-line adapter mapping template types (Brand/User/AdminNav*) onto the slice, DashboardShellAdvanced is an alias, and AdminTopbar dropped its own mobile nav (the sheet + dock cover it)

Site

  • Catalog/manifest/CLI regenerated — dashboard-shell recipe + wiring now describe the API that actually exists
  • lib/templates/configs.ts layout-scaffold prompt no longer emits the phantom `<ResponsiveDashboardShell variant=… />` call
JUL042026
Improvementperf-skeletons-caching-waveJul 4, 2026

Perf pass — preview skeletons, lazy recharts, deploy-life caching, dead-dep cut

The site had cacheComponents (PPR) on but barely used it. This wave closes the gaps a ponytail/perf audit surfaced: (1) a route-level loading.tsx paints an instant skeleton for all 63 /preview/** routes (each ships a 0.4–1.1MB slice chunk) instead of blank, plus a preview-shaped skeleton for /tour. (2) recharts (~150kB) is code-split out of the markdown slice — it only loads when a chart fence actually renders, not on every markdown page (ChartBlock now next/dynamic's a ChartCanvas chunk, mirroring the already-lazy MermaidBlock). (3) the slice-files fs walkers get cacheLife('max') + cacheTag('slice-files') so immutable repo files cache for the deploy's life instead of a 5–15min revalidate. (4) 25 zero-interactivity preview pages + the docs footer + code-tab dropped 'use client', leaving the client graph so they PPR-prerender.

Slices touched

  • markdown — recharts code-split behind next/dynamic (ChartBlock → ChartCanvas + chart-spec)
JUL032026
Featureslice-variants-waveJul 3, 2026

shadcn-style slice variants — 80 slices consolidated to 69

New variant mechanism: a slice can declare `variants` in slice.json. `npx rr add <slug> <variant>` installs one variant (its files flatten to the slice root, so imports resolve at @/features/<slug> like any slice); `npx rr add <slug>` installs all variants + a root switcher and you pick via a prop — exactly the shadcn pattern. An optional `shared/` folder is copied for every variant, and each variant can declare its own `convex` roots so it pulls only its own backend. Purely additive: the ~60 non-variant slices install exactly as before, and every old slug keeps working via an alias. Used to collapse the confusingly-named slice families into fewer, clearer slices.

Merged into variant slices

  • feedback-states — loading + empty (was loading-states + empty-states)
  • profile — resume + card (was resume + about-profile)
  • settings — account + appearance (was settings-page + shell-settings)
  • payment — doku + midtrans (was doku-payment + midtrans-payment)
  • notion-ui — page + database + sidebar (was notion-shell + notion-database + notion-sidebar)
  • admin — shell + console, each pulling only its own convex (was admin + admin-console)
  • ai-workspace — chat + studio + agents, only the chat variant pulls convex (was ai-chat + ai-studio + ai-agents; studio/agents views lifted from superspace)

Renamed for clarity (old slugs aliased)

  • files → file-upload (vs file-explorer)
  • media-studio → design-studio (vs image-editor)
  • onboarding-wizard → site-setup-wizard
  • notion → notion-app (vs notion-ui primitives)
  • landing-sections → sections
JUL022026
Featureslices@admin-consoleJul 2, 2026

admin-console — composed admin panel; /slices gains sort + clearer filter; CLI 1.15.0

The ideal admin panel lands as a portable composition slice (admin-console): a gated two-column shell over a 26-section registry harvested from ~15 project admin panels, mounting existing rr slices by id via a consumer components map (no slice→slice imports), plus 5 net-new gap sections nothing else covered — Analytics, Audit-log viewer, Navigation config, Leads/CRM inbox, SEO health — each adapter-driven with in-memory mocks so the whole console runs backend-free. Access is injected; gate logic is pure + unit-tested. Convex copy-source ships ac_leads + ac_nav_items with requireAdmin-gated CRUD. Alongside it, the /slices catalog gains a clearer toolbar — a Sort dropdown (Featured / Recently updated / Name A–Z / Version) and a labelled tag-filter row — and rahman-resources publishes 1.15.0 so `npx rr add admin-console` resolves.

New slices

  • admin-console — composed admin panel: 26-section registry + gated shell + 5 gap sections (analytics, audit-log viewer, nav config, leads/CRM, SEO health), adapter-driven, backend-free demo
JUN302026
Featureslices@html-studioJun 30, 2026

html-studio — new os slice: sandboxed HTML/CSS/JS editor with live preview (backend-injected)

Ported from the rahmanef-com web-OS as a brand-free, self-contained slice. A tiny web-page studio: type HTML / CSS / JS and watch it render live in a sandboxed iframe (srcdoc + sandbox=allow-scripts WITHOUT allow-same-origin → opaque origin, the security boundary), then Save to a shareable /p/<slug>. Keeps the Code / Split / Preview view toggle, device-width preview (responsive / tablet / phone), a saved-pages rail, and public/private visibility. The Convex page store + auth/write-key/session bits were dropped in favour of an injected HtmlStudioAdapter (save/load/list/remove); unwired it runs on an in-memory mock so the editor + live preview + saved list are interactive with zero backend.

New slices

  • html-studio — sandboxed HTML/CSS/JS editor + live iframe preview, HtmlStudioAdapter host seam, in-memory mock
JUN302026
Featureslices@resources-launcher-adminJun 30, 2026

resources-launcher-admin — new os slice: curated icon-launcher CRUD (backend-injected)

Ported from the rahmanef-com web-OS as a brand-free, self-contained slice. An owner-gated admin for a curated icon-launcher: add / edit / remove / reorder links (label, lucide icon NAME, url, group, order) that open in a new tab. The backend is injected via a ResourcesAdapter (list/upsert/remove/canManage); unwired it runs on an in-memory mock so the whole CRUD — including reorder — is interactive with zero backend. The Convex resources.* mutations and the auth/sign-in gating were replaced by the adapter plus a simple canManage flag, and the launcher icon map was brand-stripped to generic lucide NAMEs.

New slices

  • resources-launcher-admin — curated icon-launcher CRUD (add/edit/remove/reorder), ResourcesAdapter host seam, in-memory mock
NewerPage 9 / 25Older