rahman-resources 1.13.2 → 1.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.js +45 -6
- package/bin/migrate-load.mjs +15 -8
- package/bin/migrate.mjs +1 -1
- package/lib/compose-solver-loader.mjs +14 -40
- package/lib/compose-solver-resolve.mjs +3 -3
- package/lib/contract-tools.test.ts +52 -0
- package/lib/contract-types.ts +8 -0
- package/lib/contract-validate.ts +23 -1
- package/lib/contract.ts +2 -0
- package/lib/load-contract.mjs +33 -0
- package/lib/manifest.json +396 -1414
- package/lib/slice-schema.json +8 -0
- package/lib/snapshot.mjs +11 -57
- package/lib/starter/_README.md +29 -6
- package/package.json +4 -4
package/lib/manifest.json
CHANGED
|
@@ -11,1359 +11,7 @@
|
|
|
11
11
|
"testimonials-grid": "landing-sections",
|
|
12
12
|
"pricing-page": "landing-sections"
|
|
13
13
|
},
|
|
14
|
-
"layouts": [
|
|
15
|
-
{
|
|
16
|
-
"slug": "personal-brand-os",
|
|
17
|
-
"title": "Personal Brand OS",
|
|
18
|
-
"category": "website-template",
|
|
19
|
-
"description": "Full-app personal site — public landing (hero, blog, portfolio, services, resources, contact) + admin dashboard (posts, leads, chatbot, comments). Inspired by saudivisuals.com + cescadesigns. Fill-in-the-blank with lorem ipsum.",
|
|
20
|
-
"source": "saudivisuals.com + cescadesigns",
|
|
21
|
-
"repoPath": "app/preview/personal-brand-os",
|
|
22
|
-
"pullPaths": [
|
|
23
|
-
"app/preview/personal-brand-os",
|
|
24
|
-
"components/templates/_shared",
|
|
25
|
-
"components/templates/personal-brand",
|
|
26
|
-
"convex-templates/personal-brand-os"
|
|
27
|
-
],
|
|
28
|
-
"files": [
|
|
29
|
-
"app/preview/personal-brand-os/robots.ts",
|
|
30
|
-
"app/preview/personal-brand-os/sitemap.ts",
|
|
31
|
-
"app/preview/personal-brand-os/opengraph-image.tsx",
|
|
32
|
-
"app/preview/personal-brand-os/public/layout.tsx",
|
|
33
|
-
"app/preview/personal-brand-os/public/page.tsx",
|
|
34
|
-
"app/preview/personal-brand-os/public/blog/page.tsx",
|
|
35
|
-
"app/preview/personal-brand-os/public/blog/[slug]/page.tsx",
|
|
36
|
-
"app/preview/personal-brand-os/public/portfolio/page.tsx",
|
|
37
|
-
"app/preview/personal-brand-os/public/portfolio/[slug]/page.tsx",
|
|
38
|
-
"app/preview/personal-brand-os/public/services/page.tsx",
|
|
39
|
-
"app/preview/personal-brand-os/public/resources/page.tsx",
|
|
40
|
-
"app/preview/personal-brand-os/public/contact/page.tsx",
|
|
41
|
-
"app/preview/personal-brand-os/public/about/page.tsx",
|
|
42
|
-
"app/preview/personal-brand-os/dashboard/admin/layout.tsx",
|
|
43
|
-
"app/preview/personal-brand-os/dashboard/admin/page.tsx",
|
|
44
|
-
"app/preview/personal-brand-os/dashboard/admin/posts/page.tsx",
|
|
45
|
-
"app/preview/personal-brand-os/dashboard/admin/posts/new/page.tsx",
|
|
46
|
-
"app/preview/personal-brand-os/dashboard/admin/posts/[id]/page.tsx",
|
|
47
|
-
"app/preview/personal-brand-os/dashboard/admin/portfolio/page.tsx",
|
|
48
|
-
"app/preview/personal-brand-os/dashboard/admin/portfolio/new/page.tsx",
|
|
49
|
-
"app/preview/personal-brand-os/dashboard/admin/portfolio/[id]/page.tsx",
|
|
50
|
-
"app/preview/personal-brand-os/dashboard/admin/services/page.tsx",
|
|
51
|
-
"app/preview/personal-brand-os/dashboard/admin/resources/page.tsx",
|
|
52
|
-
"app/preview/personal-brand-os/dashboard/admin/leads/page.tsx",
|
|
53
|
-
"app/preview/personal-brand-os/dashboard/admin/comments/page.tsx",
|
|
54
|
-
"app/preview/personal-brand-os/dashboard/admin/chatbot/page.tsx",
|
|
55
|
-
"app/preview/personal-brand-os/dashboard/admin/newsletter/page.tsx",
|
|
56
|
-
"app/preview/personal-brand-os/dashboard/admin/analytics/page.tsx",
|
|
57
|
-
"app/preview/personal-brand-os/dashboard/admin/settings/site/page.tsx",
|
|
58
|
-
"app/preview/personal-brand-os/dashboard/admin/settings/team/page.tsx",
|
|
59
|
-
"app/preview/personal-brand-os/dashboard/admin/settings/ai/page.tsx",
|
|
60
|
-
"components/templates/_shared/index.ts",
|
|
61
|
-
"components/templates/_shared/types/common.ts",
|
|
62
|
-
"components/templates/_shared/utils/index.ts",
|
|
63
|
-
"components/templates/_shared/hooks/create-template-store.tsx",
|
|
64
|
-
"components/templates/_shared/ui/section-head.tsx",
|
|
65
|
-
"components/templates/_shared/ui/site-nav.tsx",
|
|
66
|
-
"components/templates/_shared/ui/site-footer.tsx",
|
|
67
|
-
"components/templates/_shared/ui/site-shell.tsx",
|
|
68
|
-
"components/templates/_shared/ui/admin-sidebar.tsx",
|
|
69
|
-
"components/templates/_shared/ui/admin-topbar.tsx",
|
|
70
|
-
"components/templates/_shared/ui/admin-shell.tsx",
|
|
71
|
-
"components/templates/_shared/ui/stat-card.tsx",
|
|
72
|
-
"components/templates/personal-brand/shared/types.ts",
|
|
73
|
-
"components/templates/personal-brand/shared/store.tsx",
|
|
74
|
-
"components/templates/personal-brand/shared/seed.ts",
|
|
75
|
-
"components/templates/personal-brand/shared/site-config.ts",
|
|
76
|
-
"components/templates/personal-brand/shared/nav-config.ts",
|
|
77
|
-
"components/templates/personal-brand/shared/ui/chat-fab.tsx",
|
|
78
|
-
"components/templates/personal-brand/slices/home/HomePage.tsx",
|
|
79
|
-
"components/templates/personal-brand/slices/home/NewsletterBlock.tsx",
|
|
80
|
-
"components/templates/personal-brand/slices/blog/BlogList.tsx",
|
|
81
|
-
"components/templates/personal-brand/slices/blog/BlogDetail.tsx",
|
|
82
|
-
"components/templates/personal-brand/slices/portfolio/PortfolioListPage.tsx",
|
|
83
|
-
"components/templates/personal-brand/slices/portfolio/PortfolioDetailPage.tsx",
|
|
84
|
-
"components/templates/personal-brand/slices/services/ServicesPage.tsx",
|
|
85
|
-
"components/templates/personal-brand/slices/resources/ResourcesPage.tsx",
|
|
86
|
-
"components/templates/personal-brand/slices/about/AboutPage.tsx",
|
|
87
|
-
"components/templates/personal-brand/slices/contact/ContactPage.tsx",
|
|
88
|
-
"app/preview/personal-brand-os/dashboard/admin/admin-shell-client.tsx",
|
|
89
|
-
"components/templates/personal-brand/slices/admin/dashboard/DashboardView.tsx",
|
|
90
|
-
"components/templates/personal-brand/slices/admin/posts/PostsList.tsx",
|
|
91
|
-
"components/templates/personal-brand/slices/admin/posts/PostEditor.tsx",
|
|
92
|
-
"components/templates/personal-brand/slices/admin/portfolio/PortfolioListAdmin.tsx",
|
|
93
|
-
"components/templates/personal-brand/slices/admin/portfolio/PortfolioEditor.tsx",
|
|
94
|
-
"components/templates/personal-brand/slices/admin/services/ServicesAdminView.tsx",
|
|
95
|
-
"components/templates/personal-brand/slices/admin/resources/ResourcesAdminView.tsx",
|
|
96
|
-
"components/templates/personal-brand/slices/admin/leads/LeadsView.tsx",
|
|
97
|
-
"components/templates/personal-brand/slices/admin/comments/CommentsView.tsx",
|
|
98
|
-
"components/templates/personal-brand/slices/admin/chatbot/ChatbotAdminView.tsx",
|
|
99
|
-
"components/templates/personal-brand/slices/admin/newsletter/NewsletterView.tsx",
|
|
100
|
-
"components/templates/personal-brand/slices/admin/analytics/AnalyticsView.tsx",
|
|
101
|
-
"components/templates/personal-brand/slices/admin/settings/SettingsView.tsx",
|
|
102
|
-
"convex-templates/personal-brand-os/schema.ts",
|
|
103
|
-
"convex-templates/personal-brand-os/posts.ts",
|
|
104
|
-
"convex-templates/personal-brand-os/portfolio.ts",
|
|
105
|
-
"convex-templates/personal-brand-os/services.ts",
|
|
106
|
-
"convex-templates/personal-brand-os/resources.ts",
|
|
107
|
-
"convex-templates/personal-brand-os/leads.ts",
|
|
108
|
-
"convex-templates/personal-brand-os/comments.ts",
|
|
109
|
-
"convex-templates/personal-brand-os/subscribers.ts",
|
|
110
|
-
"convex-templates/personal-brand-os/chat.ts",
|
|
111
|
-
"convex-templates/personal-brand-os/README.md"
|
|
112
|
-
],
|
|
113
|
-
"dependencies": [
|
|
114
|
-
"next@^16",
|
|
115
|
-
"react@^19",
|
|
116
|
-
"react-dom@^19",
|
|
117
|
-
"lucide-react",
|
|
118
|
-
"@tabler/icons-react",
|
|
119
|
-
"sonner",
|
|
120
|
-
"next-themes",
|
|
121
|
-
"tailwindcss@^4",
|
|
122
|
-
"convex",
|
|
123
|
-
"@convex-dev/auth",
|
|
124
|
-
"@auth/core@^0.37.0",
|
|
125
|
-
"@radix-ui/react-avatar",
|
|
126
|
-
"@radix-ui/react-dialog",
|
|
127
|
-
"@radix-ui/react-dropdown-menu",
|
|
128
|
-
"@radix-ui/react-label",
|
|
129
|
-
"@radix-ui/react-scroll-area",
|
|
130
|
-
"@radix-ui/react-select",
|
|
131
|
-
"@radix-ui/react-separator",
|
|
132
|
-
"@radix-ui/react-slot",
|
|
133
|
-
"@radix-ui/react-tabs"
|
|
134
|
-
],
|
|
135
|
-
"shadcnComponents": [
|
|
136
|
-
"badge",
|
|
137
|
-
"button",
|
|
138
|
-
"card",
|
|
139
|
-
"dialog",
|
|
140
|
-
"input",
|
|
141
|
-
"separator",
|
|
142
|
-
"sheet",
|
|
143
|
-
"tabs",
|
|
144
|
-
"textarea"
|
|
145
|
-
],
|
|
146
|
-
"agentRecipe": "Run `npx rr init <app> --template personal-brand-os` (or `npx rr add personal-brand-os` inside an existing project). Personal Brand OS = full-app template (public + admin). 1) Default `npx rr add personal-brand-os` runs `--at root`: routes promoted to app/(public)/ + app/admin/, and /preview/personal-brand-os/* path constants in nav-config/site-config/robots/sitemap auto-rewritten. (Pass `--at preview` only for sandbox demos that keep /preview/personal-brand-os/* URLs.) 2) Edit components/templates/personal-brand/shared/site-config.ts — set brandName, ownerName, baseUrl, twitter, email. 3) Wire convex-templates/personal-brand-os/* into your convex/features/personal-brand-os/ (kitab ships them outside `convex/` so the bundler doesn't try to compile scaffolds without _generated) and add @convex-dev/auth on admin routes. 4) Replace localStorage StoreProvider with Convex queries (schema mirrors localStorage shape).",
|
|
147
|
-
"tags": [
|
|
148
|
-
"template",
|
|
149
|
-
"personal-brand",
|
|
150
|
-
"blog",
|
|
151
|
-
"portfolio",
|
|
152
|
-
"admin",
|
|
153
|
-
"saas"
|
|
154
|
-
],
|
|
155
|
-
"primaryFile": "app/preview/personal-brand-os/public/page.tsx"
|
|
156
|
-
},
|
|
157
|
-
{
|
|
158
|
-
"slug": "agency-studio-os",
|
|
159
|
-
"title": "Agency Studio OS",
|
|
160
|
-
"category": "website-template",
|
|
161
|
-
"description": "Full-app B2B agency / studio site — public (home, services, work + project detail, about, contact) + admin (dashboard, projects pipeline, clients, services, leads, settings). Inspired by saudivisuals.com + cescadesigns.",
|
|
162
|
-
"source": "saudivisuals.com + cescadesigns",
|
|
163
|
-
"repoPath": "app/preview/agency-studio-os",
|
|
164
|
-
"pullPaths": [
|
|
165
|
-
"app/preview/agency-studio-os",
|
|
166
|
-
"components/templates/_shared",
|
|
167
|
-
"components/templates/agency-studio",
|
|
168
|
-
"convex-templates/agency-studio-os"
|
|
169
|
-
],
|
|
170
|
-
"files": [
|
|
171
|
-
"app/preview/agency-studio-os/robots.ts",
|
|
172
|
-
"app/preview/agency-studio-os/sitemap.ts",
|
|
173
|
-
"app/preview/agency-studio-os/opengraph-image.tsx",
|
|
174
|
-
"app/preview/agency-studio-os/public/layout.tsx",
|
|
175
|
-
"app/preview/agency-studio-os/public/page.tsx",
|
|
176
|
-
"app/preview/agency-studio-os/public/services/page.tsx",
|
|
177
|
-
"app/preview/agency-studio-os/public/portfolio/page.tsx",
|
|
178
|
-
"app/preview/agency-studio-os/public/portfolio/[slug]/page.tsx",
|
|
179
|
-
"app/preview/agency-studio-os/public/about/page.tsx",
|
|
180
|
-
"app/preview/agency-studio-os/public/contact/page.tsx",
|
|
181
|
-
"app/preview/agency-studio-os/dashboard/admin/layout.tsx",
|
|
182
|
-
"app/preview/agency-studio-os/dashboard/admin/page.tsx",
|
|
183
|
-
"app/preview/agency-studio-os/dashboard/admin/projects/page.tsx",
|
|
184
|
-
"app/preview/agency-studio-os/dashboard/admin/projects/new/page.tsx",
|
|
185
|
-
"app/preview/agency-studio-os/dashboard/admin/projects/[id]/page.tsx",
|
|
186
|
-
"app/preview/agency-studio-os/dashboard/admin/clients/page.tsx",
|
|
187
|
-
"app/preview/agency-studio-os/dashboard/admin/services/page.tsx",
|
|
188
|
-
"app/preview/agency-studio-os/dashboard/admin/leads/page.tsx",
|
|
189
|
-
"app/preview/agency-studio-os/dashboard/admin/settings/page.tsx",
|
|
190
|
-
"components/templates/agency-studio/shared/types.ts",
|
|
191
|
-
"components/templates/agency-studio/shared/store.tsx",
|
|
192
|
-
"components/templates/agency-studio/shared/seed.ts",
|
|
193
|
-
"components/templates/agency-studio/shared/site-config.ts",
|
|
194
|
-
"components/templates/agency-studio/shared/nav-config.ts",
|
|
195
|
-
"components/templates/agency-studio/slices/home/HomePage.tsx",
|
|
196
|
-
"components/templates/agency-studio/slices/services/ServicesPage.tsx",
|
|
197
|
-
"components/templates/agency-studio/slices/portfolio/PortfolioListPage.tsx",
|
|
198
|
-
"components/templates/agency-studio/slices/portfolio/PortfolioDetailPage.tsx",
|
|
199
|
-
"components/templates/agency-studio/slices/about/AboutPage.tsx",
|
|
200
|
-
"components/templates/agency-studio/slices/contact/ContactPage.tsx",
|
|
201
|
-
"app/preview/agency-studio-os/dashboard/admin/admin-shell-client.tsx",
|
|
202
|
-
"components/templates/agency-studio/slices/admin/dashboard/DashboardView.tsx",
|
|
203
|
-
"components/templates/agency-studio/slices/admin/projects/ProjectsList.tsx",
|
|
204
|
-
"components/templates/agency-studio/slices/admin/projects/ProjectEditor.tsx",
|
|
205
|
-
"components/templates/agency-studio/slices/admin/clients/ClientsList.tsx",
|
|
206
|
-
"components/templates/agency-studio/slices/admin/services/ServicesAdminView.tsx",
|
|
207
|
-
"components/templates/agency-studio/slices/admin/leads/LeadsView.tsx",
|
|
208
|
-
"components/templates/agency-studio/slices/admin/settings/SettingsView.tsx",
|
|
209
|
-
"convex-templates/agency-studio-os/schema.ts",
|
|
210
|
-
"convex-templates/agency-studio-os/projects.ts",
|
|
211
|
-
"convex-templates/agency-studio-os/clients.ts",
|
|
212
|
-
"convex-templates/agency-studio-os/services.ts",
|
|
213
|
-
"convex-templates/agency-studio-os/leads.ts",
|
|
214
|
-
"convex-templates/agency-studio-os/README.md"
|
|
215
|
-
],
|
|
216
|
-
"dependencies": [
|
|
217
|
-
"next@^16",
|
|
218
|
-
"react@^19",
|
|
219
|
-
"react-dom@^19",
|
|
220
|
-
"lucide-react",
|
|
221
|
-
"@tabler/icons-react",
|
|
222
|
-
"sonner",
|
|
223
|
-
"next-themes",
|
|
224
|
-
"tailwindcss@^4",
|
|
225
|
-
"convex",
|
|
226
|
-
"@convex-dev/auth",
|
|
227
|
-
"@auth/core@^0.37.0",
|
|
228
|
-
"@radix-ui/react-avatar",
|
|
229
|
-
"@radix-ui/react-dialog",
|
|
230
|
-
"@radix-ui/react-label",
|
|
231
|
-
"@radix-ui/react-separator",
|
|
232
|
-
"@radix-ui/react-slot"
|
|
233
|
-
],
|
|
234
|
-
"shadcnComponents": [
|
|
235
|
-
"badge",
|
|
236
|
-
"button",
|
|
237
|
-
"card",
|
|
238
|
-
"input",
|
|
239
|
-
"label",
|
|
240
|
-
"separator",
|
|
241
|
-
"sheet",
|
|
242
|
-
"textarea"
|
|
243
|
-
],
|
|
244
|
-
"agentRecipe": "Run `npx rr init <app> --template agency-studio-os`. Agency Studio OS = full-app B2B agency template (public + admin). 1) Move app/preview/agency-studio-os/{robots,sitemap,opengraph-image}.* to app root. 2) Copy public into app/(public)/, admin into app/(admin)/. 3) Edit components/templates/agency-studio/shared/site-config.ts — set studioName, brandName, baseUrl, twitter, email. 4) Wire convex-templates/agency-studio-os/* into your convex/ (kitab ships them outside `convex/` so the bundler doesn't try to compile scaffolds without _generated) and add @convex-dev/auth on admin routes. 5) Replace localStorage StoreProvider with Convex queries.",
|
|
245
|
-
"tags": [
|
|
246
|
-
"template",
|
|
247
|
-
"agency",
|
|
248
|
-
"studio",
|
|
249
|
-
"portfolio",
|
|
250
|
-
"b2b",
|
|
251
|
-
"admin",
|
|
252
|
-
"saas"
|
|
253
|
-
],
|
|
254
|
-
"primaryFile": "app/preview/agency-studio-os/public/page.tsx"
|
|
255
|
-
},
|
|
256
|
-
{
|
|
257
|
-
"slug": "landing-hero-carousel",
|
|
258
|
-
"title": "Landing — Hero Carousel",
|
|
259
|
-
"category": "marketing",
|
|
260
|
-
"description": "Full-width image carousel hero with auto-fade + dot indicators. Originally CMS-driven via Convex. Best for visual brands.",
|
|
261
|
-
"source": "cescadesigns",
|
|
262
|
-
"repoPath": "cookbook/layouts/landing-hero-carousel",
|
|
263
|
-
"pullPaths": [
|
|
264
|
-
"app/preview/landing-hero-carousel"
|
|
265
|
-
],
|
|
266
|
-
"files": [],
|
|
267
|
-
"dependencies": [],
|
|
268
|
-
"shadcnComponents": [],
|
|
269
|
-
"agentRecipe": "Run `npx rr add landing-hero-carousel`. Mount the HeroSection from cookbook/layouts/landing-hero-carousel as the hero of the marketing route group. Provide image array via props or wire to Convex api.heroImages.list.",
|
|
270
|
-
"tags": [
|
|
271
|
-
"marketing",
|
|
272
|
-
"carousel",
|
|
273
|
-
"image",
|
|
274
|
-
"cms"
|
|
275
|
-
],
|
|
276
|
-
"primaryFile": "cookbook/layouts/landing-hero-carousel/src/HeroSection.tsx"
|
|
277
|
-
},
|
|
278
|
-
{
|
|
279
|
-
"slug": "landing-asymmetric-masonry",
|
|
280
|
-
"title": "Landing — Asymmetric Masonry",
|
|
281
|
-
"category": "marketing",
|
|
282
|
-
"description": "8-slot repeating asymmetric grid. Intersection-observer staggered scroll-reveal. Lifted from rahmanef.com portfolio.",
|
|
283
|
-
"source": "rahmanef.com",
|
|
284
|
-
"repoPath": "cookbook/layouts/landing-asymmetric-masonry",
|
|
285
|
-
"pullPaths": [
|
|
286
|
-
"app/preview/landing-asymmetric-masonry"
|
|
287
|
-
],
|
|
288
|
-
"files": [],
|
|
289
|
-
"dependencies": [],
|
|
290
|
-
"shadcnComponents": [],
|
|
291
|
-
"agentRecipe": "Run `npx rr add landing-asymmetric-masonry`. Use PortfolioGrid for case-study or portfolio pages. Items array shape: { id, title, cover, href, category }. The 8-slot pattern repeats; supply at least 8 items for the layout to bloom.",
|
|
292
|
-
"tags": [
|
|
293
|
-
"marketing",
|
|
294
|
-
"portfolio",
|
|
295
|
-
"masonry",
|
|
296
|
-
"scroll-reveal"
|
|
297
|
-
],
|
|
298
|
-
"primaryFile": "cookbook/layouts/landing-asymmetric-masonry/src/PortfolioGrid.tsx"
|
|
299
|
-
},
|
|
300
|
-
{
|
|
301
|
-
"slug": "landing-bento",
|
|
302
|
-
"title": "Landing — Bento Grid",
|
|
303
|
-
"category": "marketing",
|
|
304
|
-
"description": "Feature-grid marketing landing. Compose Card + Magnetic + KineticHeading. Modern SaaS feel.",
|
|
305
|
-
"source": "synthesized",
|
|
306
|
-
"repoPath": "cookbook/layouts/landing-bento",
|
|
307
|
-
"pullPaths": [
|
|
308
|
-
"app/preview/landing-bento"
|
|
309
|
-
],
|
|
310
|
-
"files": [],
|
|
311
|
-
"dependencies": [],
|
|
312
|
-
"shadcnComponents": [],
|
|
313
|
-
"agentRecipe": "Run `npx rr add landing-bento`. Compose a 3-column CSS grid with explicit area assignments per feature. Mix Card sizes (1x1, 1x2, 2x1, 2x2) for visual rhythm.",
|
|
314
|
-
"tags": [
|
|
315
|
-
"marketing",
|
|
316
|
-
"bento",
|
|
317
|
-
"features"
|
|
318
|
-
],
|
|
319
|
-
"primaryFile": "README.md"
|
|
320
|
-
},
|
|
321
|
-
{
|
|
322
|
-
"slug": "landing-kinetic-text",
|
|
323
|
-
"title": "Landing — Kinetic Text",
|
|
324
|
-
"category": "marketing",
|
|
325
|
-
"description": "Brand-forward landing. Letter-stagger headings + magnetic CTAs + marquee strips. Motion-heavy.",
|
|
326
|
-
"source": "rahmanef.com",
|
|
327
|
-
"repoPath": "cookbook/layouts/landing-kinetic-text",
|
|
328
|
-
"pullPaths": [
|
|
329
|
-
"app/preview/landing-kinetic-text"
|
|
330
|
-
],
|
|
331
|
-
"files": [],
|
|
332
|
-
"dependencies": [],
|
|
333
|
-
"shadcnComponents": [],
|
|
334
|
-
"agentRecipe": "Run `npx rr add landing-kinetic-text`. Use motion primitives marquee, kinetic-heading, magnetic from components/motion (already imported into the kitab from rahmanef.com). All respect prefers-reduced-motion automatically.",
|
|
335
|
-
"tags": [
|
|
336
|
-
"marketing",
|
|
337
|
-
"motion",
|
|
338
|
-
"type"
|
|
339
|
-
],
|
|
340
|
-
"primaryFile": "README.md"
|
|
341
|
-
},
|
|
342
|
-
{
|
|
343
|
-
"slug": "dashboard-three-column",
|
|
344
|
-
"title": "Dashboard — Three Column",
|
|
345
|
-
"category": "dashboard",
|
|
346
|
-
"description": "Kitab flagship. Left tree / main / right inspector. Resizable, collapsible, mobile drawer fallback. Used by Database, Tasks, Contacts.",
|
|
347
|
-
"source": "kitab-core",
|
|
348
|
-
"repoPath": "cookbook/layouts/dashboard-three-column",
|
|
349
|
-
"pullPaths": [
|
|
350
|
-
"app/preview/dashboard-three-column"
|
|
351
|
-
],
|
|
352
|
-
"files": [],
|
|
353
|
-
"dependencies": [],
|
|
354
|
-
"shadcnComponents": [],
|
|
355
|
-
"agentRecipe": "Run `npx rr add dashboard-three-column`. Mount inside app/dashboard/<slice>/page.tsx. Wrap with the kitab's <ThreeColumnLayout>. Slot in slice-specific sidebars and inspectors. Mobile auto-collapses to drawers.",
|
|
356
|
-
"tags": [
|
|
357
|
-
"dashboard",
|
|
358
|
-
"three-column",
|
|
359
|
-
"resizable",
|
|
360
|
-
"responsive"
|
|
361
|
-
],
|
|
362
|
-
"primaryFile": "template-base/frontend/shared/ui/layout/container/three-column/ThreeColumnLayout.tsx"
|
|
363
|
-
},
|
|
364
|
-
{
|
|
365
|
-
"slug": "dashboard-ide",
|
|
366
|
-
"title": "Dashboard — IDE",
|
|
367
|
-
"category": "dashboard",
|
|
368
|
-
"description": "Activity bar + tabs + LAZY explorer + editor + bottom panel + status bar. The explorer fetches each folder's children on expand and drops them on collapse (mounted rows ≈ visible rows — node_modules costs nothing until opened); the editor holds one file body at a time. Editor-first apps (notion, code, doc tools).",
|
|
369
|
-
"source": "synthesized",
|
|
370
|
-
"repoPath": "cookbook/layouts/dashboard-ide",
|
|
371
|
-
"pullPaths": [
|
|
372
|
-
"app/preview/dashboard-ide"
|
|
373
|
-
],
|
|
374
|
-
"files": [],
|
|
375
|
-
"dependencies": [],
|
|
376
|
-
"shadcnComponents": [],
|
|
377
|
-
"agentRecipe": "Run `npx rr add dashboard-ide`. Compose grid: 44px activity bar + tabs row + lazy explorer column + editor/inspector flex row + bottom console + status bar. Explorer rule: fetch ONLY the expanded folder's children (listDir(path) per expand) and drop listing + DOM on collapse; tabs keep paths only and the editor fetches one body on focus. In production swap listDir for the file-explorer slice's FileExplorerAdapter.list(path). Wire activity bar items to dispatch into tabs/inspector store.",
|
|
378
|
-
"tags": [
|
|
379
|
-
"dashboard",
|
|
380
|
-
"ide",
|
|
381
|
-
"editor"
|
|
382
|
-
],
|
|
383
|
-
"primaryFile": "README.md"
|
|
384
|
-
},
|
|
385
|
-
{
|
|
386
|
-
"slug": "dashboard-mobile-dock",
|
|
387
|
-
"title": "Dashboard — Mobile Dock",
|
|
388
|
-
"category": "dashboard",
|
|
389
|
-
"description": "Mobile-first auth app. MobileTopBar + content + MobileDashboardDock bottom nav. Native-app feel on mobile, sidebar on desktop.",
|
|
390
|
-
"source": "kitab-core",
|
|
391
|
-
"repoPath": "cookbook/layouts/dashboard-mobile-dock",
|
|
392
|
-
"pullPaths": [
|
|
393
|
-
"app/preview/dashboard-mobile-dock"
|
|
394
|
-
],
|
|
395
|
-
"files": [],
|
|
396
|
-
"dependencies": [],
|
|
397
|
-
"shadcnComponents": [],
|
|
398
|
-
"agentRecipe": "Run `npx rr add dashboard-mobile-dock`. Use ResponsiveDashboardShell which branches desktop (sidebar) vs mobile (dock). Customize MobileDashboardDock items and MobileTopBar workspace switcher to your domain.",
|
|
399
|
-
"tags": [
|
|
400
|
-
"dashboard",
|
|
401
|
-
"mobile",
|
|
402
|
-
"pwa"
|
|
403
|
-
],
|
|
404
|
-
"primaryFile": "template-base/frontend/shared/ui/layout/dashboard/MobileDashboardShell.tsx"
|
|
405
|
-
},
|
|
406
|
-
{
|
|
407
|
-
"slug": "cms-public-storefront",
|
|
408
|
-
"title": "CMS — Public Storefront",
|
|
409
|
-
"category": "cms",
|
|
410
|
-
"description": "E-commerce / blog public storefront. Convex read-only. Cart context + currency selector + i18n.",
|
|
411
|
-
"source": "kitab-core cms-lite",
|
|
412
|
-
"repoPath": "cookbook/layouts/cms-public-storefront",
|
|
413
|
-
"pullPaths": [
|
|
414
|
-
"app/preview/cms-public-storefront"
|
|
415
|
-
],
|
|
416
|
-
"files": [],
|
|
417
|
-
"dependencies": [],
|
|
418
|
-
"shadcnComponents": [],
|
|
419
|
-
"agentRecipe": "Run `npx rr add cms-public-storefront`. Port kitab-core slices/cms-lite/ into your project's app/(cms)/ route group. Fetch products/pages from Convex via api.cmsLite.* queries.",
|
|
420
|
-
"tags": [
|
|
421
|
-
"cms",
|
|
422
|
-
"ecommerce",
|
|
423
|
-
"storefront"
|
|
424
|
-
],
|
|
425
|
-
"primaryFile": "README.md"
|
|
426
|
-
},
|
|
427
|
-
{
|
|
428
|
-
"slug": "notion-page-clone-os",
|
|
429
|
-
"title": "Notion Page Clone OS — localStorage demo (pointer to open-silong for production)",
|
|
430
|
-
"category": "website-template",
|
|
431
|
-
"status": "stable",
|
|
432
|
-
"description": "localStorage-only DEMO of a Notion-clone surface — tree-structured sidebar + page editor + embedded databases. It is the COMBINATION of independently-reusable rr slices: notion-sidebar (tree nav + page CRUD — double-click rename, drag-reorder/reparent, icon picker), notion-shell (NotionPage / NotionBlock page editor — code + equation blocks built-in), notion-database (11 views + drag-fill grid + relation/rollup), image-picker (one-button image/wallpaper chooser — gallery / upload / link / Unsplash + reposition, wired to the files slice + an /api/unsplash proxy; here it's the page cover), icon-picker, and files — glued by createTemplateStore (localStorage + BroadcastChannel). No Convex, no auth, no multi-user — drop-in starter for evaluating the UI or embedding a Notion-style editor in your own project. **For the production-grade Convex-backed product (multi-workspace + auth + sharing + comments + snapshots + MCP), use the open-source open-silong repo: https://github.com/rahmanef63/open-silong (silong.rahmanef.com).** This rr template is the DEMO; the github repo is the PRODUCT.",
|
|
433
|
-
"source": "synthesized + notion-shell wrappers (built-in code/equation); production stack at github.com/rahmanef63/open-silong",
|
|
434
|
-
"repoPath": "app/preview/notion-page-clone-os",
|
|
435
|
-
"pullPaths": [
|
|
436
|
-
"app/preview/notion-page-clone-os",
|
|
437
|
-
"components/templates/_shared",
|
|
438
|
-
"components/templates/notion-page-clone",
|
|
439
|
-
"frontend/slices/notion-sidebar",
|
|
440
|
-
"frontend/slices/notion-shell",
|
|
441
|
-
"frontend/slices/notion-database",
|
|
442
|
-
"frontend/slices/image-picker",
|
|
443
|
-
"frontend/slices/files",
|
|
444
|
-
"frontend/slices/icon-picker",
|
|
445
|
-
"app/api/unsplash"
|
|
446
|
-
],
|
|
447
|
-
"files": [
|
|
448
|
-
"app/preview/notion-page-clone-os/public/layout.tsx",
|
|
449
|
-
"app/preview/notion-page-clone-os/public/page.tsx",
|
|
450
|
-
"app/preview/notion-page-clone-os/public/d/[id]/page.tsx",
|
|
451
|
-
"app/preview/notion-page-clone-os/public/db/[id]/page.tsx",
|
|
452
|
-
"app/preview/notion-page-clone-os/dashboard/admin/layout.tsx",
|
|
453
|
-
"app/preview/notion-page-clone-os/dashboard/admin/admin-shell-client.tsx",
|
|
454
|
-
"app/preview/notion-page-clone-os/dashboard/admin/page.tsx",
|
|
455
|
-
"app/preview/notion-page-clone-os/dashboard/admin/snippets/page.tsx",
|
|
456
|
-
"components/templates/notion-page-clone/shared/site-config.ts",
|
|
457
|
-
"components/templates/notion-page-clone/shared/nav-config.ts",
|
|
458
|
-
"components/templates/notion-page-clone/shared/types.ts",
|
|
459
|
-
"components/templates/notion-page-clone/shared/store.tsx",
|
|
460
|
-
"components/templates/notion-page-clone/shared/seed.ts",
|
|
461
|
-
"components/templates/notion-page-clone/slices/admin/snippets/SnippetsView.tsx",
|
|
462
|
-
"components/templates/notion-page-clone/slices/notion-app/Dashboard.tsx",
|
|
463
|
-
"components/templates/notion-page-clone/slices/notion-app/DocView.tsx",
|
|
464
|
-
"components/templates/notion-page-clone/slices/notion-app/DocCover.tsx",
|
|
465
|
-
"components/templates/notion-page-clone/slices/notion-app/DatabaseView.tsx",
|
|
466
|
-
"components/templates/notion-page-clone/slices/notion-app/hooks.ts",
|
|
467
|
-
"components/templates/notion-page-clone/slices/notion-app/block-renderers.tsx",
|
|
468
|
-
"components/templates/notion-page-clone/shared/notion-reducer.ts",
|
|
469
|
-
"components/templates/notion-page-clone/shared/notion-db-reducer.ts"
|
|
470
|
-
],
|
|
471
|
-
"dependencies": [
|
|
472
|
-
"next@^16",
|
|
473
|
-
"react@^19",
|
|
474
|
-
"react-dom@^19",
|
|
475
|
-
"lucide-react",
|
|
476
|
-
"katex@^0.16.45",
|
|
477
|
-
"highlight.js@^11.11.1",
|
|
478
|
-
"rahman-shared@^0.2.0",
|
|
479
|
-
"tailwindcss@^4"
|
|
480
|
-
],
|
|
481
|
-
"shadcnComponents": [
|
|
482
|
-
"badge",
|
|
483
|
-
"button",
|
|
484
|
-
"popover",
|
|
485
|
-
"dropdown-menu",
|
|
486
|
-
"input",
|
|
487
|
-
"label",
|
|
488
|
-
"switch",
|
|
489
|
-
"textarea",
|
|
490
|
-
"select",
|
|
491
|
-
"dialog"
|
|
492
|
-
],
|
|
493
|
-
"agentRecipe": "Run `npx rr init <app> --template notion-page-clone-os`. Cascades notion-shell (wrappers, built-in code/equation blocks) + notion-database + icon-picker. Edit components/templates/notion-page-clone/shared/site-config.ts to set brand; seed.ts to bootstrap docs + databases. Sidebar CRUD already wired — hover a row → +/✎/🗑.",
|
|
494
|
-
"tags": [
|
|
495
|
-
"template",
|
|
496
|
-
"notion",
|
|
497
|
-
"notes",
|
|
498
|
-
"blocks",
|
|
499
|
-
"katex",
|
|
500
|
-
"code",
|
|
501
|
-
"editor",
|
|
502
|
-
"indonesia"
|
|
503
|
-
],
|
|
504
|
-
"primaryFile": "app/preview/notion-page-clone-os/public/page.tsx"
|
|
505
|
-
},
|
|
506
|
-
{
|
|
507
|
-
"slug": "saas-marketing-os",
|
|
508
|
-
"title": "SaaS Marketing OS",
|
|
509
|
-
"category": "website-template",
|
|
510
|
-
"status": "stable",
|
|
511
|
-
"description": "Marketing site for a SaaS product — landing, pricing, features, blog, changelog, about, contact — backed by a full admin panel (Pages, Posts, Pricing, Features, Customers, Subscriptions, Leads, Changelog, Settings). Same grouped Pages + Features sidebar pattern as every other template.",
|
|
512
|
-
"source": "synthesized",
|
|
513
|
-
"repoPath": "app/preview/saas-marketing-os",
|
|
514
|
-
"pullPaths": [
|
|
515
|
-
"app/preview/saas-marketing-os",
|
|
516
|
-
"components/templates/_shared",
|
|
517
|
-
"components/templates/saas-marketing"
|
|
518
|
-
],
|
|
519
|
-
"files": [
|
|
520
|
-
"app/preview/saas-marketing-os/public/layout.tsx",
|
|
521
|
-
"app/preview/saas-marketing-os/public/page.tsx",
|
|
522
|
-
"app/preview/saas-marketing-os/public/pricing/page.tsx",
|
|
523
|
-
"app/preview/saas-marketing-os/public/features/page.tsx",
|
|
524
|
-
"app/preview/saas-marketing-os/public/blog/page.tsx",
|
|
525
|
-
"app/preview/saas-marketing-os/public/blog/[slug]/page.tsx",
|
|
526
|
-
"app/preview/saas-marketing-os/public/changelog/page.tsx",
|
|
527
|
-
"app/preview/saas-marketing-os/public/about/page.tsx",
|
|
528
|
-
"app/preview/saas-marketing-os/public/contact/page.tsx",
|
|
529
|
-
"components/templates/saas-marketing/shared/site-config.ts",
|
|
530
|
-
"components/templates/saas-marketing/shared/nav-config.ts",
|
|
531
|
-
"components/templates/saas-marketing/shared/types.ts",
|
|
532
|
-
"components/templates/saas-marketing/shared/store.tsx",
|
|
533
|
-
"components/templates/saas-marketing/shared/seed.ts",
|
|
534
|
-
"components/templates/saas-marketing/slices/home/HomePage.tsx",
|
|
535
|
-
"components/templates/saas-marketing/slices/pricing/PricingPage.tsx",
|
|
536
|
-
"components/templates/saas-marketing/slices/features/FeaturesPage.tsx",
|
|
537
|
-
"components/templates/saas-marketing/slices/blog/BlogList.tsx",
|
|
538
|
-
"components/templates/saas-marketing/slices/blog/BlogDetail.tsx",
|
|
539
|
-
"components/templates/saas-marketing/slices/changelog/ChangelogPage.tsx",
|
|
540
|
-
"components/templates/saas-marketing/slices/about/AboutPage.tsx",
|
|
541
|
-
"components/templates/saas-marketing/slices/contact/ContactPage.tsx",
|
|
542
|
-
"app/preview/saas-marketing-os/dashboard/layout.tsx",
|
|
543
|
-
"app/preview/saas-marketing-os/dashboard/dashboard-shell-client.tsx",
|
|
544
|
-
"app/preview/saas-marketing-os/dashboard/admin/page.tsx",
|
|
545
|
-
"app/preview/saas-marketing-os/dashboard/admin/pages/page.tsx",
|
|
546
|
-
"app/preview/saas-marketing-os/dashboard/admin/pages/[id]/page.tsx",
|
|
547
|
-
"app/preview/saas-marketing-os/dashboard/admin/landing/page.tsx",
|
|
548
|
-
"app/preview/saas-marketing-os/dashboard/admin/landing/[id]/page.tsx",
|
|
549
|
-
"app/preview/saas-marketing-os/dashboard/admin/posts/page.tsx",
|
|
550
|
-
"app/preview/saas-marketing-os/dashboard/admin/posts/[id]/page.tsx",
|
|
551
|
-
"app/preview/saas-marketing-os/dashboard/admin/pricing/page.tsx",
|
|
552
|
-
"app/preview/saas-marketing-os/dashboard/admin/pricing/[id]/page.tsx",
|
|
553
|
-
"app/preview/saas-marketing-os/dashboard/admin/features/page.tsx",
|
|
554
|
-
"app/preview/saas-marketing-os/dashboard/admin/features/[id]/page.tsx",
|
|
555
|
-
"app/preview/saas-marketing-os/dashboard/admin/customers/page.tsx",
|
|
556
|
-
"app/preview/saas-marketing-os/dashboard/admin/customers/[id]/page.tsx",
|
|
557
|
-
"app/preview/saas-marketing-os/dashboard/admin/subscriptions/page.tsx",
|
|
558
|
-
"app/preview/saas-marketing-os/dashboard/admin/subscriptions/[id]/page.tsx",
|
|
559
|
-
"app/preview/saas-marketing-os/dashboard/admin/leads/page.tsx",
|
|
560
|
-
"app/preview/saas-marketing-os/dashboard/admin/leads/[id]/page.tsx",
|
|
561
|
-
"app/preview/saas-marketing-os/dashboard/admin/changelog/page.tsx",
|
|
562
|
-
"app/preview/saas-marketing-os/dashboard/admin/changelog/[id]/page.tsx",
|
|
563
|
-
"app/preview/saas-marketing-os/dashboard/admin/settings/page.tsx"
|
|
564
|
-
],
|
|
565
|
-
"dependencies": [
|
|
566
|
-
"next@^16",
|
|
567
|
-
"react@^19",
|
|
568
|
-
"react-dom@^19",
|
|
569
|
-
"lucide-react",
|
|
570
|
-
"@tabler/icons-react",
|
|
571
|
-
"sonner",
|
|
572
|
-
"next-themes",
|
|
573
|
-
"tailwindcss@^4",
|
|
574
|
-
"@radix-ui/react-label",
|
|
575
|
-
"@radix-ui/react-separator",
|
|
576
|
-
"@radix-ui/react-slot"
|
|
577
|
-
],
|
|
578
|
-
"shadcnComponents": [
|
|
579
|
-
"badge",
|
|
580
|
-
"button",
|
|
581
|
-
"input",
|
|
582
|
-
"label",
|
|
583
|
-
"separator",
|
|
584
|
-
"sheet",
|
|
585
|
-
"textarea"
|
|
586
|
-
],
|
|
587
|
-
"agentRecipe": "Run `npx rr init <app> --template saas-marketing-os`. SaaS Marketing OS = public-only marketing template. Edit components/templates/saas-marketing/shared/site-config.ts to set product name, tagline, pricing tiers, contact email.",
|
|
588
|
-
"tags": [
|
|
589
|
-
"template",
|
|
590
|
-
"saas",
|
|
591
|
-
"marketing",
|
|
592
|
-
"mdx",
|
|
593
|
-
"blog",
|
|
594
|
-
"changelog",
|
|
595
|
-
"admin"
|
|
596
|
-
],
|
|
597
|
-
"primaryFile": "app/preview/saas-marketing-os/public/page.tsx"
|
|
598
|
-
},
|
|
599
|
-
{
|
|
600
|
-
"slug": "kreator-studio-os",
|
|
601
|
-
"title": "Kreator Studio OS",
|
|
602
|
-
"category": "website-template",
|
|
603
|
-
"description": "Multi-channel content planner + voice trainer + repurposing engine + carousel maker. Public newsletter site + admin (planner, voice, scripts, carousels, assets, performance, comments). Bahasa Indonesia, ID-first.",
|
|
604
|
-
"source": "synthesized",
|
|
605
|
-
"repoPath": "app/preview/kreator-studio-os",
|
|
606
|
-
"pullPaths": [
|
|
607
|
-
"app/preview/kreator-studio-os",
|
|
608
|
-
"components/templates/_shared",
|
|
609
|
-
"components/templates/kreator-studio"
|
|
610
|
-
],
|
|
611
|
-
"files": [
|
|
612
|
-
"app/preview/kreator-studio-os/robots.ts",
|
|
613
|
-
"app/preview/kreator-studio-os/sitemap.ts",
|
|
614
|
-
"app/preview/kreator-studio-os/opengraph-image.tsx",
|
|
615
|
-
"app/preview/kreator-studio-os/public/layout.tsx",
|
|
616
|
-
"app/preview/kreator-studio-os/public/page.tsx",
|
|
617
|
-
"app/preview/kreator-studio-os/public/posts/page.tsx",
|
|
618
|
-
"app/preview/kreator-studio-os/public/about/page.tsx",
|
|
619
|
-
"app/preview/kreator-studio-os/dashboard/admin/layout.tsx",
|
|
620
|
-
"app/preview/kreator-studio-os/dashboard/admin/page.tsx",
|
|
621
|
-
"app/preview/kreator-studio-os/dashboard/admin/admin-shell-client.tsx",
|
|
622
|
-
"app/preview/kreator-studio-os/dashboard/admin/planner/page.tsx",
|
|
623
|
-
"app/preview/kreator-studio-os/dashboard/admin/voice/page.tsx",
|
|
624
|
-
"app/preview/kreator-studio-os/dashboard/admin/scripts/page.tsx",
|
|
625
|
-
"app/preview/kreator-studio-os/dashboard/admin/carousels/page.tsx",
|
|
626
|
-
"app/preview/kreator-studio-os/dashboard/admin/assets/page.tsx",
|
|
627
|
-
"app/preview/kreator-studio-os/dashboard/admin/performance/page.tsx",
|
|
628
|
-
"app/preview/kreator-studio-os/dashboard/admin/newsletter/page.tsx",
|
|
629
|
-
"app/preview/kreator-studio-os/dashboard/admin/comments/page.tsx",
|
|
630
|
-
"app/preview/kreator-studio-os/dashboard/admin/settings/page.tsx",
|
|
631
|
-
"components/templates/kreator-studio/shared/site-config.ts",
|
|
632
|
-
"components/templates/kreator-studio/shared/types.ts",
|
|
633
|
-
"components/templates/kreator-studio/shared/seed.ts",
|
|
634
|
-
"components/templates/kreator-studio/shared/nav-config.ts",
|
|
635
|
-
"components/templates/kreator-studio/shared/store.tsx",
|
|
636
|
-
"components/templates/kreator-studio/slices/home/HomePage.tsx",
|
|
637
|
-
"components/templates/kreator-studio/slices/posts/PostsPage.tsx",
|
|
638
|
-
"components/templates/kreator-studio/slices/about/AboutPage.tsx",
|
|
639
|
-
"components/templates/kreator-studio/slices/admin/dashboard/DashboardView.tsx",
|
|
640
|
-
"components/templates/kreator-studio/slices/admin/planner/PlannerView.tsx",
|
|
641
|
-
"components/templates/kreator-studio/slices/admin/voice/VoiceView.tsx",
|
|
642
|
-
"components/templates/kreator-studio/slices/admin/scripts/ScriptsView.tsx",
|
|
643
|
-
"components/templates/kreator-studio/slices/admin/carousels/CarouselsView.tsx",
|
|
644
|
-
"components/templates/kreator-studio/slices/admin/assets/AssetsView.tsx",
|
|
645
|
-
"components/templates/kreator-studio/slices/admin/performance/PerformanceView.tsx",
|
|
646
|
-
"components/templates/kreator-studio/slices/admin/newsletter/NewsletterView.tsx",
|
|
647
|
-
"components/templates/kreator-studio/slices/admin/comments/CommentsView.tsx",
|
|
648
|
-
"components/templates/kreator-studio/slices/admin/settings/SettingsView.tsx"
|
|
649
|
-
],
|
|
650
|
-
"dependencies": [
|
|
651
|
-
"next@^16",
|
|
652
|
-
"react@^19",
|
|
653
|
-
"react-dom@^19",
|
|
654
|
-
"lucide-react",
|
|
655
|
-
"@tabler/icons-react",
|
|
656
|
-
"tailwindcss@^4",
|
|
657
|
-
"@radix-ui/react-label",
|
|
658
|
-
"@radix-ui/react-separator",
|
|
659
|
-
"@radix-ui/react-slot"
|
|
660
|
-
],
|
|
661
|
-
"shadcnComponents": [
|
|
662
|
-
"badge",
|
|
663
|
-
"button",
|
|
664
|
-
"card",
|
|
665
|
-
"input",
|
|
666
|
-
"label",
|
|
667
|
-
"separator",
|
|
668
|
-
"sheet"
|
|
669
|
-
],
|
|
670
|
-
"agentRecipe": "Run `npx rr init <app> --template kreator-studio-os`. Kreator Studio OS = full-app content-creator template (public newsletter + 9-tab admin). 1) Edit components/templates/kreator-studio/shared/site-config.ts (brandName, ownerName, baseUrl, twitter). 2) Replace localStorage StoreProvider with Convex queries (state shape mirrors localStorage). 3) Wire Resend for newsletter + Midtrans tip-jar on public CTA. 4) Voice/Scripts/Carousels admin views are scaffolds — wire to ai-router (mid tier for voice-train/voice-apply, nano for shortform script).",
|
|
671
|
-
"tags": [
|
|
672
|
-
"template",
|
|
673
|
-
"creator",
|
|
674
|
-
"newsletter",
|
|
675
|
-
"content-planner",
|
|
676
|
-
"voice-trainer",
|
|
677
|
-
"indonesia"
|
|
678
|
-
],
|
|
679
|
-
"primaryFile": "app/preview/kreator-studio-os/public/page.tsx"
|
|
680
|
-
},
|
|
681
|
-
{
|
|
682
|
-
"slug": "konsultan-os",
|
|
683
|
-
"title": "Konsultan OS",
|
|
684
|
-
"category": "website-template",
|
|
685
|
-
"description": "Consultancy workspace — public services landing + case studies + admin (CRM, proposals AI, kontrak ID-aware, projects, PajakAware billing, documents). Indonesian-tax aware (PPN/PPh).",
|
|
686
|
-
"source": "synthesized",
|
|
687
|
-
"repoPath": "app/preview/konsultan-os",
|
|
688
|
-
"pullPaths": [
|
|
689
|
-
"app/preview/konsultan-os",
|
|
690
|
-
"components/templates/_shared",
|
|
691
|
-
"components/templates/konsultan"
|
|
692
|
-
],
|
|
693
|
-
"files": [
|
|
694
|
-
"app/preview/konsultan-os/robots.ts",
|
|
695
|
-
"app/preview/konsultan-os/sitemap.ts",
|
|
696
|
-
"app/preview/konsultan-os/opengraph-image.tsx",
|
|
697
|
-
"app/preview/konsultan-os/public/layout.tsx",
|
|
698
|
-
"app/preview/konsultan-os/public/page.tsx",
|
|
699
|
-
"app/preview/konsultan-os/public/case-studies/page.tsx",
|
|
700
|
-
"app/preview/konsultan-os/public/contact/page.tsx",
|
|
701
|
-
"app/preview/konsultan-os/dashboard/admin/layout.tsx",
|
|
702
|
-
"app/preview/konsultan-os/dashboard/admin/page.tsx",
|
|
703
|
-
"app/preview/konsultan-os/dashboard/admin/admin-shell-client.tsx",
|
|
704
|
-
"app/preview/konsultan-os/dashboard/admin/clients/page.tsx",
|
|
705
|
-
"app/preview/konsultan-os/dashboard/admin/proposals/page.tsx",
|
|
706
|
-
"app/preview/konsultan-os/dashboard/admin/contracts/page.tsx",
|
|
707
|
-
"app/preview/konsultan-os/dashboard/admin/projects/page.tsx",
|
|
708
|
-
"app/preview/konsultan-os/dashboard/admin/billing/page.tsx",
|
|
709
|
-
"app/preview/konsultan-os/dashboard/admin/documents/page.tsx",
|
|
710
|
-
"app/preview/konsultan-os/dashboard/admin/settings/page.tsx",
|
|
711
|
-
"components/templates/konsultan/shared/site-config.ts",
|
|
712
|
-
"components/templates/konsultan/shared/types.ts",
|
|
713
|
-
"components/templates/konsultan/shared/seed.ts",
|
|
714
|
-
"components/templates/konsultan/shared/nav-config.ts",
|
|
715
|
-
"components/templates/konsultan/shared/store.tsx",
|
|
716
|
-
"components/templates/konsultan/slices/home/HomePage.tsx",
|
|
717
|
-
"components/templates/konsultan/slices/case-studies/CaseStudiesPage.tsx",
|
|
718
|
-
"components/templates/konsultan/slices/contact/ContactPage.tsx",
|
|
719
|
-
"components/templates/konsultan/slices/admin/dashboard/DashboardView.tsx",
|
|
720
|
-
"components/templates/konsultan/slices/admin/clients/ClientsView.tsx",
|
|
721
|
-
"components/templates/konsultan/slices/admin/proposals/ProposalsView.tsx",
|
|
722
|
-
"components/templates/konsultan/slices/admin/contracts/ContractsView.tsx",
|
|
723
|
-
"components/templates/konsultan/slices/admin/projects/ProjectsView.tsx",
|
|
724
|
-
"components/templates/konsultan/slices/admin/billing/BillingView.tsx",
|
|
725
|
-
"components/templates/konsultan/slices/admin/documents/DocumentsView.tsx",
|
|
726
|
-
"components/templates/konsultan/slices/admin/settings/SettingsView.tsx"
|
|
727
|
-
],
|
|
728
|
-
"dependencies": [
|
|
729
|
-
"next@^16",
|
|
730
|
-
"react@^19",
|
|
731
|
-
"react-dom@^19",
|
|
732
|
-
"lucide-react",
|
|
733
|
-
"@tabler/icons-react",
|
|
734
|
-
"tailwindcss@^4",
|
|
735
|
-
"@radix-ui/react-label",
|
|
736
|
-
"@radix-ui/react-separator",
|
|
737
|
-
"@radix-ui/react-slot"
|
|
738
|
-
],
|
|
739
|
-
"shadcnComponents": [
|
|
740
|
-
"badge",
|
|
741
|
-
"button",
|
|
742
|
-
"card",
|
|
743
|
-
"input",
|
|
744
|
-
"label",
|
|
745
|
-
"separator",
|
|
746
|
-
"sheet",
|
|
747
|
-
"textarea"
|
|
748
|
-
],
|
|
749
|
-
"agentRecipe": "Run `npx rr init <app> --template konsultan-os`. Konsultan OS = full-app consultancy template (public services + 7-tab admin). 1) Edit components/templates/konsultan/shared/site-config.ts (brandName, ownerName, baseUrl). 2) Replace localStorage StoreProvider with Convex queries. 3) Add @convex-dev/auth + RBAC on /admin routes. 4) Wire Resend for proposal email + e-sign provider for contracts. 5) Billing view is PajakAware-ready — connect to Midtrans + Indonesian-tax calc on invoice generation.",
|
|
750
|
-
"tags": [
|
|
751
|
-
"template",
|
|
752
|
-
"consultant",
|
|
753
|
-
"crm",
|
|
754
|
-
"proposals",
|
|
755
|
-
"billing",
|
|
756
|
-
"indonesia"
|
|
757
|
-
],
|
|
758
|
-
"primaryFile": "app/preview/konsultan-os/public/page.tsx"
|
|
759
|
-
},
|
|
760
|
-
{
|
|
761
|
-
"slug": "wirausaha-os",
|
|
762
|
-
"title": "Wirausaha OS",
|
|
763
|
-
"category": "website-template",
|
|
764
|
-
"description": "Indonesian UKM operations hub — public storefront + 8-tab admin (multi-business registry, inventory, orders, customers/CRM, finance with AI laporan, staff). Bahasa Indonesia, mobile-first public.",
|
|
765
|
-
"source": "synthesized",
|
|
766
|
-
"repoPath": "app/preview/wirausaha-os",
|
|
767
|
-
"pullPaths": [
|
|
768
|
-
"app/preview/wirausaha-os",
|
|
769
|
-
"components/templates/_shared",
|
|
770
|
-
"components/templates/wirausaha"
|
|
771
|
-
],
|
|
772
|
-
"files": [
|
|
773
|
-
"app/preview/wirausaha-os/robots.ts",
|
|
774
|
-
"app/preview/wirausaha-os/sitemap.ts",
|
|
775
|
-
"app/preview/wirausaha-os/opengraph-image.tsx",
|
|
776
|
-
"app/preview/wirausaha-os/public/layout.tsx",
|
|
777
|
-
"app/preview/wirausaha-os/public/page.tsx",
|
|
778
|
-
"app/preview/wirausaha-os/public/services/page.tsx",
|
|
779
|
-
"app/preview/wirausaha-os/public/contact/page.tsx",
|
|
780
|
-
"app/preview/wirausaha-os/dashboard/admin/layout.tsx",
|
|
781
|
-
"app/preview/wirausaha-os/dashboard/admin/page.tsx",
|
|
782
|
-
"app/preview/wirausaha-os/dashboard/admin/admin-shell-client.tsx",
|
|
783
|
-
"app/preview/wirausaha-os/dashboard/admin/businesses/page.tsx",
|
|
784
|
-
"app/preview/wirausaha-os/dashboard/admin/inventory/page.tsx",
|
|
785
|
-
"app/preview/wirausaha-os/dashboard/admin/orders/page.tsx",
|
|
786
|
-
"app/preview/wirausaha-os/dashboard/admin/customers/page.tsx",
|
|
787
|
-
"app/preview/wirausaha-os/dashboard/admin/finance/page.tsx",
|
|
788
|
-
"app/preview/wirausaha-os/dashboard/admin/staff/page.tsx",
|
|
789
|
-
"app/preview/wirausaha-os/dashboard/admin/settings/page.tsx",
|
|
790
|
-
"components/templates/wirausaha/shared/site-config.ts",
|
|
791
|
-
"components/templates/wirausaha/shared/types.ts",
|
|
792
|
-
"components/templates/wirausaha/shared/seed.ts",
|
|
793
|
-
"components/templates/wirausaha/shared/nav-config.ts",
|
|
794
|
-
"components/templates/wirausaha/shared/store.tsx",
|
|
795
|
-
"components/templates/wirausaha/slices/home/HomePage.tsx",
|
|
796
|
-
"components/templates/wirausaha/slices/services/ServicesPage.tsx",
|
|
797
|
-
"components/templates/wirausaha/slices/contact/ContactPage.tsx",
|
|
798
|
-
"components/templates/wirausaha/slices/admin/dashboard/DashboardView.tsx",
|
|
799
|
-
"components/templates/wirausaha/slices/admin/businesses/BusinessesView.tsx",
|
|
800
|
-
"components/templates/wirausaha/slices/admin/inventory/InventoryView.tsx",
|
|
801
|
-
"components/templates/wirausaha/slices/admin/orders/OrdersView.tsx",
|
|
802
|
-
"components/templates/wirausaha/slices/admin/customers/CustomersView.tsx",
|
|
803
|
-
"components/templates/wirausaha/slices/admin/finance/FinanceView.tsx",
|
|
804
|
-
"components/templates/wirausaha/slices/admin/staff/StaffView.tsx",
|
|
805
|
-
"components/templates/wirausaha/slices/admin/settings/SettingsView.tsx"
|
|
806
|
-
],
|
|
807
|
-
"dependencies": [
|
|
808
|
-
"next@^16",
|
|
809
|
-
"react@^19",
|
|
810
|
-
"react-dom@^19",
|
|
811
|
-
"lucide-react",
|
|
812
|
-
"@tabler/icons-react",
|
|
813
|
-
"tailwindcss@^4",
|
|
814
|
-
"@radix-ui/react-label",
|
|
815
|
-
"@radix-ui/react-separator",
|
|
816
|
-
"@radix-ui/react-slot"
|
|
817
|
-
],
|
|
818
|
-
"shadcnComponents": [
|
|
819
|
-
"badge",
|
|
820
|
-
"button",
|
|
821
|
-
"card",
|
|
822
|
-
"input",
|
|
823
|
-
"label",
|
|
824
|
-
"separator",
|
|
825
|
-
"sheet",
|
|
826
|
-
"textarea"
|
|
827
|
-
],
|
|
828
|
-
"agentRecipe": "Run `npx rr init <app> --template wirausaha-os`. Wirausaha OS = full-app UKM template (mobile-first public storefront + 8-tab admin). 1) Edit components/templates/wirausaha/shared/site-config.ts. 2) Replace localStorage StoreProvider with Convex queries. 3) Wire Midtrans + QRIS for orders. 4) Add WhatsApp-bot for order confirmations. 5) Finance view scaffolds AI-laporan — connect to ai-router (mid tier) for narrative generation from monthly aggregates.",
|
|
829
|
-
"tags": [
|
|
830
|
-
"template",
|
|
831
|
-
"smb",
|
|
832
|
-
"ukm",
|
|
833
|
-
"multi-business",
|
|
834
|
-
"midtrans",
|
|
835
|
-
"qris",
|
|
836
|
-
"indonesia"
|
|
837
|
-
],
|
|
838
|
-
"primaryFile": "app/preview/wirausaha-os/public/page.tsx"
|
|
839
|
-
},
|
|
840
|
-
{
|
|
841
|
-
"slug": "riset-kit",
|
|
842
|
-
"title": "Riset Kit",
|
|
843
|
-
"category": "website-template",
|
|
844
|
-
"description": "Research workspace — public knowledge-base reader + admin (document library, AI reader, literature review, citations, notes). Bahasa Indonesia academic-style, vector-search ready.",
|
|
845
|
-
"source": "synthesized",
|
|
846
|
-
"repoPath": "app/preview/riset-kit",
|
|
847
|
-
"pullPaths": [
|
|
848
|
-
"app/preview/riset-kit",
|
|
849
|
-
"components/templates/_shared",
|
|
850
|
-
"components/templates/research"
|
|
851
|
-
],
|
|
852
|
-
"files": [
|
|
853
|
-
"app/preview/riset-kit/robots.ts",
|
|
854
|
-
"app/preview/riset-kit/sitemap.ts",
|
|
855
|
-
"app/preview/riset-kit/opengraph-image.tsx",
|
|
856
|
-
"app/preview/riset-kit/public/layout.tsx",
|
|
857
|
-
"app/preview/riset-kit/public/page.tsx",
|
|
858
|
-
"app/preview/riset-kit/public/library/page.tsx",
|
|
859
|
-
"app/preview/riset-kit/public/about/page.tsx",
|
|
860
|
-
"app/preview/riset-kit/dashboard/admin/layout.tsx",
|
|
861
|
-
"app/preview/riset-kit/dashboard/admin/page.tsx",
|
|
862
|
-
"app/preview/riset-kit/dashboard/admin/admin-shell-client.tsx",
|
|
863
|
-
"app/preview/riset-kit/dashboard/admin/documents/page.tsx",
|
|
864
|
-
"app/preview/riset-kit/dashboard/admin/notes/page.tsx",
|
|
865
|
-
"app/preview/riset-kit/dashboard/admin/citations/page.tsx",
|
|
866
|
-
"app/preview/riset-kit/dashboard/admin/ai-reader/page.tsx",
|
|
867
|
-
"app/preview/riset-kit/dashboard/admin/lit-review/page.tsx",
|
|
868
|
-
"app/preview/riset-kit/dashboard/admin/settings/page.tsx",
|
|
869
|
-
"components/templates/research/shared/site-config.ts",
|
|
870
|
-
"components/templates/research/shared/types.ts",
|
|
871
|
-
"components/templates/research/shared/seed.ts",
|
|
872
|
-
"components/templates/research/shared/nav-config.ts",
|
|
873
|
-
"components/templates/research/shared/store.tsx",
|
|
874
|
-
"components/templates/research/slices/home/HomePage.tsx",
|
|
875
|
-
"components/templates/research/slices/library/LibraryPage.tsx",
|
|
876
|
-
"components/templates/research/slices/about/AboutPage.tsx",
|
|
877
|
-
"components/templates/research/slices/admin/dashboard/DashboardView.tsx",
|
|
878
|
-
"components/templates/research/slices/admin/documents/DocumentsView.tsx",
|
|
879
|
-
"components/templates/research/slices/admin/notes/NotesView.tsx",
|
|
880
|
-
"components/templates/research/slices/admin/citations/CitationsView.tsx",
|
|
881
|
-
"components/templates/research/slices/admin/ai-reader/AiReaderView.tsx",
|
|
882
|
-
"components/templates/research/slices/admin/lit-review/LitReviewView.tsx",
|
|
883
|
-
"components/templates/research/slices/admin/settings/SettingsView.tsx"
|
|
884
|
-
],
|
|
885
|
-
"dependencies": [
|
|
886
|
-
"next@^16",
|
|
887
|
-
"react@^19",
|
|
888
|
-
"react-dom@^19",
|
|
889
|
-
"lucide-react",
|
|
890
|
-
"@tabler/icons-react",
|
|
891
|
-
"tailwindcss@^4",
|
|
892
|
-
"@radix-ui/react-label",
|
|
893
|
-
"@radix-ui/react-separator",
|
|
894
|
-
"@radix-ui/react-slot"
|
|
895
|
-
],
|
|
896
|
-
"shadcnComponents": [
|
|
897
|
-
"badge",
|
|
898
|
-
"button",
|
|
899
|
-
"card",
|
|
900
|
-
"input",
|
|
901
|
-
"label",
|
|
902
|
-
"separator",
|
|
903
|
-
"sheet"
|
|
904
|
-
],
|
|
905
|
-
"agentRecipe": "Run `npx rr init <app> --template riset-kit`. Riset Kit = full-app research template (public KB reader + 6-tab admin). 1) Edit components/templates/research/shared/site-config.ts. 2) Replace localStorage StoreProvider with Convex queries. 3) Add @convex-dev/auth on /admin (single owner suffices). 4) Document library expects pdf-extract + vector-search — wire convex-vector-search component. 5) AI Reader wires ai-router (mid tier) for QA over uploaded PDFs. 6) Lit-review matrix is a scaffold — wire AI summarizer per cell.",
|
|
906
|
-
"tags": [
|
|
907
|
-
"template",
|
|
908
|
-
"research",
|
|
909
|
-
"knowledge-base",
|
|
910
|
-
"vector-search",
|
|
911
|
-
"ai-reader",
|
|
912
|
-
"indonesia"
|
|
913
|
-
],
|
|
914
|
-
"primaryFile": "app/preview/riset-kit/public/page.tsx"
|
|
915
|
-
},
|
|
916
|
-
{
|
|
917
|
-
"slug": "hero-centered",
|
|
918
|
-
"title": "Hero — Centered",
|
|
919
|
-
"category": "marketing",
|
|
920
|
-
"description": "Single-column centered hero with eyebrow pill, headline, sub-copy, and dual CTA. Radial gradient backdrop.",
|
|
921
|
-
"source": "kitab",
|
|
922
|
-
"repoPath": "app/preview/hero-centered",
|
|
923
|
-
"pullPaths": [
|
|
924
|
-
"app/preview/hero-centered"
|
|
925
|
-
],
|
|
926
|
-
"files": [],
|
|
927
|
-
"dependencies": [],
|
|
928
|
-
"shadcnComponents": [],
|
|
929
|
-
"agentRecipe": "Run `npx rr add hero-centered`. Pure layout. Drop into landing pages where the product needs minimum framing. Replace the eyebrow pill with a status badge or release tag. Two CTAs is the sweet spot.",
|
|
930
|
-
"tags": [
|
|
931
|
-
"block",
|
|
932
|
-
"hero",
|
|
933
|
-
"centered",
|
|
934
|
-
"marketing"
|
|
935
|
-
],
|
|
936
|
-
"primaryFile": "app/preview/hero-centered/page.tsx"
|
|
937
|
-
},
|
|
938
|
-
{
|
|
939
|
-
"slug": "hero-split",
|
|
940
|
-
"title": "Hero — Split (Text + Visual)",
|
|
941
|
-
"category": "marketing",
|
|
942
|
-
"description": "Two-column hero: left copy + feature list + CTAs, right visual slot. 9-cell mock grid placeholder for product shot.",
|
|
943
|
-
"source": "kitab",
|
|
944
|
-
"repoPath": "app/preview/hero-split",
|
|
945
|
-
"pullPaths": [
|
|
946
|
-
"app/preview/hero-split"
|
|
947
|
-
],
|
|
948
|
-
"files": [],
|
|
949
|
-
"dependencies": [],
|
|
950
|
-
"shadcnComponents": [],
|
|
951
|
-
"agentRecipe": "Run `npx rr add hero-split`. Right column accepts any visual — screenshot, product mock, illustration, or live demo iframe. Feature list pairs Lucide icons with one-line value props.",
|
|
952
|
-
"tags": [
|
|
953
|
-
"block",
|
|
954
|
-
"hero",
|
|
955
|
-
"split",
|
|
956
|
-
"marketing",
|
|
957
|
-
"product"
|
|
958
|
-
],
|
|
959
|
-
"primaryFile": "app/preview/hero-split/page.tsx"
|
|
960
|
-
},
|
|
961
|
-
{
|
|
962
|
-
"slug": "hero-bento-bg",
|
|
963
|
-
"title": "Hero — Bento Background",
|
|
964
|
-
"category": "marketing",
|
|
965
|
-
"description": "Bento mini-grid behind a centered headline. Radial mask focuses the eye on the copy while the grid hints at features.",
|
|
966
|
-
"source": "kitab",
|
|
967
|
-
"repoPath": "app/preview/hero-bento-bg",
|
|
968
|
-
"pullPaths": [
|
|
969
|
-
"app/preview/hero-bento-bg"
|
|
970
|
-
],
|
|
971
|
-
"files": [],
|
|
972
|
-
"dependencies": [],
|
|
973
|
-
"shadcnComponents": [],
|
|
974
|
-
"agentRecipe": "Run `npx rr add hero-bento-bg`. Background tiles get a radial mask so the center stays readable. Use 6-8 tiles with asymmetric spans (col-span-2 row-span-2 for one, others 1x1). Lucide icon in each tile.",
|
|
975
|
-
"tags": [
|
|
976
|
-
"block",
|
|
977
|
-
"hero",
|
|
978
|
-
"bento",
|
|
979
|
-
"marketing",
|
|
980
|
-
"decorative"
|
|
981
|
-
],
|
|
982
|
-
"primaryFile": "app/preview/hero-bento-bg/page.tsx"
|
|
983
|
-
},
|
|
984
|
-
{
|
|
985
|
-
"slug": "hero-video-loop",
|
|
986
|
-
"title": "Hero — Video Loop (dark)",
|
|
987
|
-
"category": "marketing",
|
|
988
|
-
"description": "Dark-mode hero with conic-gradient animated backdrop (stand-in for video). Play CTA, headline, dual CTA.",
|
|
989
|
-
"source": "kitab",
|
|
990
|
-
"repoPath": "app/preview/hero-video-loop",
|
|
991
|
-
"pullPaths": [
|
|
992
|
-
"app/preview/hero-video-loop"
|
|
993
|
-
],
|
|
994
|
-
"files": [],
|
|
995
|
-
"dependencies": [],
|
|
996
|
-
"shadcnComponents": [],
|
|
997
|
-
"agentRecipe": "Run `npx rr add hero-video-loop`. Replace the conic-gradient backdrop with a muted <video autoplay loop>. Keep the dark theme — light text on motion only reads when the contrast is hard.",
|
|
998
|
-
"tags": [
|
|
999
|
-
"block",
|
|
1000
|
-
"hero",
|
|
1001
|
-
"video",
|
|
1002
|
-
"marketing",
|
|
1003
|
-
"dark"
|
|
1004
|
-
],
|
|
1005
|
-
"primaryFile": "app/preview/hero-video-loop/page.tsx"
|
|
1006
|
-
},
|
|
1007
|
-
{
|
|
1008
|
-
"slug": "hero-animated-text",
|
|
1009
|
-
"title": "Hero — Animated Text",
|
|
1010
|
-
"category": "marketing",
|
|
1011
|
-
"description": "Rotating word inside the headline cycles every 2s with gradient text + fade-slide transition. Lightweight, no extra deps.",
|
|
1012
|
-
"source": "kitab",
|
|
1013
|
-
"repoPath": "app/preview/hero-animated-text",
|
|
1014
|
-
"pullPaths": [
|
|
1015
|
-
"app/preview/hero-animated-text"
|
|
1016
|
-
],
|
|
1017
|
-
"files": [],
|
|
1018
|
-
"dependencies": [],
|
|
1019
|
-
"shadcnComponents": [],
|
|
1020
|
-
"agentRecipe": "Run `npx rr add hero-animated-text`. Use absolute-positioned word slots with translate-y + opacity transitions. The invisible placeholder word keeps the bounding box stable.",
|
|
1021
|
-
"tags": [
|
|
1022
|
-
"block",
|
|
1023
|
-
"hero",
|
|
1024
|
-
"motion",
|
|
1025
|
-
"marketing",
|
|
1026
|
-
"kinetic"
|
|
1027
|
-
],
|
|
1028
|
-
"primaryFile": "app/preview/hero-animated-text/page.tsx"
|
|
1029
|
-
},
|
|
1030
|
-
{
|
|
1031
|
-
"slug": "pricing-three",
|
|
1032
|
-
"title": "Pricing — Three Tier",
|
|
1033
|
-
"category": "marketing",
|
|
1034
|
-
"description": "Classic 3-tier card layout. Middle tier highlighted with Most Popular badge + soft shadow.",
|
|
1035
|
-
"source": "kitab",
|
|
1036
|
-
"repoPath": "app/preview/pricing-three",
|
|
1037
|
-
"pullPaths": [
|
|
1038
|
-
"app/preview/pricing-three"
|
|
1039
|
-
],
|
|
1040
|
-
"files": [],
|
|
1041
|
-
"dependencies": [],
|
|
1042
|
-
"shadcnComponents": [],
|
|
1043
|
-
"agentRecipe": "Run `npx rr add pricing-three`. Three is the magic number for SaaS pricing — fewer feels limited, more triggers analysis paralysis. Middle tier should be the one you actually want to sell.",
|
|
1044
|
-
"tags": [
|
|
1045
|
-
"block",
|
|
1046
|
-
"pricing",
|
|
1047
|
-
"marketing",
|
|
1048
|
-
"saas"
|
|
1049
|
-
],
|
|
1050
|
-
"primaryFile": "app/preview/pricing-three/page.tsx"
|
|
1051
|
-
},
|
|
1052
|
-
{
|
|
1053
|
-
"slug": "pricing-four",
|
|
1054
|
-
"title": "Pricing — Four Tier",
|
|
1055
|
-
"category": "marketing",
|
|
1056
|
-
"description": "Four-tier with Best Value badge on tier 3. Compact card chrome, 4-column grid that collapses gracefully.",
|
|
1057
|
-
"source": "kitab",
|
|
1058
|
-
"repoPath": "app/preview/pricing-four",
|
|
1059
|
-
"pullPaths": [
|
|
1060
|
-
"app/preview/pricing-four"
|
|
1061
|
-
],
|
|
1062
|
-
"files": [],
|
|
1063
|
-
"dependencies": [],
|
|
1064
|
-
"shadcnComponents": [],
|
|
1065
|
-
"agentRecipe": "Run `npx rr add pricing-four`. Use when you genuinely have four distinct tiers (free / solo / team / enterprise). Don't pad to four — use the three-tier variant if the fourth is forced.",
|
|
1066
|
-
"tags": [
|
|
1067
|
-
"block",
|
|
1068
|
-
"pricing",
|
|
1069
|
-
"marketing",
|
|
1070
|
-
"saas"
|
|
1071
|
-
],
|
|
1072
|
-
"primaryFile": "app/preview/pricing-four/page.tsx"
|
|
1073
|
-
},
|
|
1074
|
-
{
|
|
1075
|
-
"slug": "pricing-toggle",
|
|
1076
|
-
"title": "Pricing — Monthly/Yearly Toggle",
|
|
1077
|
-
"category": "marketing",
|
|
1078
|
-
"description": "3-tier with a monthly/yearly pill toggle. Yearly price strikethroughs the monthly, -20% savings badge inside the toggle.",
|
|
1079
|
-
"source": "kitab",
|
|
1080
|
-
"repoPath": "app/preview/pricing-toggle",
|
|
1081
|
-
"pullPaths": [
|
|
1082
|
-
"app/preview/pricing-toggle"
|
|
1083
|
-
],
|
|
1084
|
-
"files": [],
|
|
1085
|
-
"dependencies": [],
|
|
1086
|
-
"shadcnComponents": [],
|
|
1087
|
-
"agentRecipe": "Run `npx rr add pricing-toggle`. Default to yearly — that's the conversion-optimized choice. Show the monthly strikethrough so the savings feel real, not implied.",
|
|
1088
|
-
"tags": [
|
|
1089
|
-
"block",
|
|
1090
|
-
"pricing",
|
|
1091
|
-
"marketing",
|
|
1092
|
-
"interactive"
|
|
1093
|
-
],
|
|
1094
|
-
"primaryFile": "app/preview/pricing-toggle/page.tsx"
|
|
1095
|
-
},
|
|
1096
|
-
{
|
|
1097
|
-
"slug": "pricing-compare",
|
|
1098
|
-
"title": "Pricing — Feature Comparison",
|
|
1099
|
-
"category": "marketing",
|
|
1100
|
-
"description": "Single comparison table: feature rows × plan columns. Check/Minus icons, header row with prices, sticky CTA row.",
|
|
1101
|
-
"source": "kitab",
|
|
1102
|
-
"repoPath": "app/preview/pricing-compare",
|
|
1103
|
-
"pullPaths": [
|
|
1104
|
-
"app/preview/pricing-compare"
|
|
1105
|
-
],
|
|
1106
|
-
"files": [],
|
|
1107
|
-
"dependencies": [],
|
|
1108
|
-
"shadcnComponents": [],
|
|
1109
|
-
"agentRecipe": "Run `npx rr add pricing-compare`. Use for complex products where buyers actually compare. Mix boolean rows (Check/Minus) with string-value rows (\"1\", \"10\", \"Unlimited\") for clarity.",
|
|
1110
|
-
"tags": [
|
|
1111
|
-
"block",
|
|
1112
|
-
"pricing",
|
|
1113
|
-
"marketing",
|
|
1114
|
-
"comparison",
|
|
1115
|
-
"table"
|
|
1116
|
-
],
|
|
1117
|
-
"primaryFile": "app/preview/pricing-compare/page.tsx"
|
|
1118
|
-
},
|
|
1119
|
-
{
|
|
1120
|
-
"slug": "pricing-slider",
|
|
1121
|
-
"title": "Pricing — Usage Slider",
|
|
1122
|
-
"category": "marketing",
|
|
1123
|
-
"description": "Range slider drives the price. Tier name and per-seat cost update live. Single-card layout, focus on the math.",
|
|
1124
|
-
"source": "kitab",
|
|
1125
|
-
"repoPath": "app/preview/pricing-slider",
|
|
1126
|
-
"pullPaths": [
|
|
1127
|
-
"app/preview/pricing-slider"
|
|
1128
|
-
],
|
|
1129
|
-
"files": [],
|
|
1130
|
-
"dependencies": [],
|
|
1131
|
-
"shadcnComponents": [],
|
|
1132
|
-
"agentRecipe": "Run `npx rr add pricing-slider`. Use for usage-based or seat-based products. Make the breakpoints transparent — buyers should be able to predict the next price without surprises.",
|
|
1133
|
-
"tags": [
|
|
1134
|
-
"block",
|
|
1135
|
-
"pricing",
|
|
1136
|
-
"marketing",
|
|
1137
|
-
"interactive",
|
|
1138
|
-
"usage"
|
|
1139
|
-
],
|
|
1140
|
-
"primaryFile": "app/preview/pricing-slider/page.tsx"
|
|
1141
|
-
},
|
|
1142
|
-
{
|
|
1143
|
-
"slug": "accordion-faq",
|
|
1144
|
-
"title": "Accordion — Classic FAQ",
|
|
1145
|
-
"category": "marketing",
|
|
1146
|
-
"description": "Single-open FAQ accordion. ChevronDown rotates, content reveals below. Clean, compact, perfect for support pages.",
|
|
1147
|
-
"source": "kitab",
|
|
1148
|
-
"repoPath": "app/preview/accordion-faq",
|
|
1149
|
-
"pullPaths": [
|
|
1150
|
-
"app/preview/accordion-faq"
|
|
1151
|
-
],
|
|
1152
|
-
"files": [],
|
|
1153
|
-
"dependencies": [],
|
|
1154
|
-
"shadcnComponents": [],
|
|
1155
|
-
"agentRecipe": "Run `npx rr add accordion-faq`. Single-open keeps the page short. Use when answers are independent. Switch to multi-open if buyers tend to scan multiple answers at once.",
|
|
1156
|
-
"tags": [
|
|
1157
|
-
"block",
|
|
1158
|
-
"accordion",
|
|
1159
|
-
"faq",
|
|
1160
|
-
"marketing"
|
|
1161
|
-
],
|
|
1162
|
-
"primaryFile": "app/preview/accordion-faq/page.tsx"
|
|
1163
|
-
},
|
|
1164
|
-
{
|
|
1165
|
-
"slug": "accordion-grouped",
|
|
1166
|
-
"title": "Accordion — Grouped Sections",
|
|
1167
|
-
"category": "marketing",
|
|
1168
|
-
"description": "FAQ split into themed groups (Getting Started / Slices / Billing). Each group is its own card. Independent open state per item.",
|
|
1169
|
-
"source": "kitab",
|
|
1170
|
-
"repoPath": "app/preview/accordion-grouped",
|
|
1171
|
-
"pullPaths": [
|
|
1172
|
-
"app/preview/accordion-grouped"
|
|
1173
|
-
],
|
|
1174
|
-
"files": [],
|
|
1175
|
-
"dependencies": [],
|
|
1176
|
-
"shadcnComponents": [],
|
|
1177
|
-
"agentRecipe": "Run `npx rr add accordion-grouped`. Use when the FAQ is long (>10 items) and questions cluster naturally. Each group's Item owns its open state for predictable UX.",
|
|
1178
|
-
"tags": [
|
|
1179
|
-
"block",
|
|
1180
|
-
"accordion",
|
|
1181
|
-
"faq",
|
|
1182
|
-
"marketing",
|
|
1183
|
-
"grouped"
|
|
1184
|
-
],
|
|
1185
|
-
"primaryFile": "app/preview/accordion-grouped/page.tsx"
|
|
1186
|
-
},
|
|
1187
|
-
{
|
|
1188
|
-
"slug": "accordion-sidebar",
|
|
1189
|
-
"title": "Accordion — Sidebar Navigation",
|
|
1190
|
-
"category": "marketing",
|
|
1191
|
-
"description": "Docs-style: left nav switches sections, right pane shows the section's accordion. Two-axis navigation in one layout.",
|
|
1192
|
-
"source": "kitab",
|
|
1193
|
-
"repoPath": "app/preview/accordion-sidebar",
|
|
1194
|
-
"pullPaths": [
|
|
1195
|
-
"app/preview/accordion-sidebar"
|
|
1196
|
-
],
|
|
1197
|
-
"files": [],
|
|
1198
|
-
"dependencies": [],
|
|
1199
|
-
"shadcnComponents": [],
|
|
1200
|
-
"agentRecipe": "Run `npx rr add accordion-sidebar`. Use for help/docs pages with section breadth. Keep section count ≤ 5 — beyond that, the sidebar gets noisy. Reset accordion state on section change.",
|
|
1201
|
-
"tags": [
|
|
1202
|
-
"block",
|
|
1203
|
-
"accordion",
|
|
1204
|
-
"docs",
|
|
1205
|
-
"sidebar",
|
|
1206
|
-
"navigation"
|
|
1207
|
-
],
|
|
1208
|
-
"primaryFile": "app/preview/accordion-sidebar/page.tsx"
|
|
1209
|
-
},
|
|
1210
|
-
{
|
|
1211
|
-
"slug": "accordion-animated",
|
|
1212
|
-
"title": "Accordion — Smooth Animated",
|
|
1213
|
-
"category": "marketing",
|
|
1214
|
-
"description": "Grid-row transition for true height animation, no janky calc. Each item is a rounded card with rotating plus → primary close icon.",
|
|
1215
|
-
"source": "kitab",
|
|
1216
|
-
"repoPath": "app/preview/accordion-animated",
|
|
1217
|
-
"pullPaths": [
|
|
1218
|
-
"app/preview/accordion-animated"
|
|
1219
|
-
],
|
|
1220
|
-
"files": [],
|
|
1221
|
-
"dependencies": [],
|
|
1222
|
-
"shadcnComponents": [],
|
|
1223
|
-
"agentRecipe": "Run `npx rr add accordion-animated`. The grid-template-rows trick lets CSS animate to-auto-height natively. No JS measurement, no jank. Pair with rounded card chrome for premium feel.",
|
|
1224
|
-
"tags": [
|
|
1225
|
-
"block",
|
|
1226
|
-
"accordion",
|
|
1227
|
-
"marketing",
|
|
1228
|
-
"motion"
|
|
1229
|
-
],
|
|
1230
|
-
"primaryFile": "app/preview/accordion-animated/page.tsx"
|
|
1231
|
-
},
|
|
1232
|
-
{
|
|
1233
|
-
"slug": "accordion-multi",
|
|
1234
|
-
"title": "Accordion — Multi-open",
|
|
1235
|
-
"category": "marketing",
|
|
1236
|
-
"description": "All items can be open at once. Expand-all / Collapse-all toggle in header. Best for compare-style reading.",
|
|
1237
|
-
"source": "kitab",
|
|
1238
|
-
"repoPath": "app/preview/accordion-multi",
|
|
1239
|
-
"pullPaths": [
|
|
1240
|
-
"app/preview/accordion-multi"
|
|
1241
|
-
],
|
|
1242
|
-
"files": [],
|
|
1243
|
-
"dependencies": [],
|
|
1244
|
-
"shadcnComponents": [],
|
|
1245
|
-
"agentRecipe": "Run `npx rr add accordion-multi`. Use when answers reference each other or buyers want to keep multiple sections visible (changelogs, release notes, feature comparison FAQs).",
|
|
1246
|
-
"tags": [
|
|
1247
|
-
"block",
|
|
1248
|
-
"accordion",
|
|
1249
|
-
"marketing",
|
|
1250
|
-
"multi-open"
|
|
1251
|
-
],
|
|
1252
|
-
"primaryFile": "app/preview/accordion-multi/page.tsx"
|
|
1253
|
-
},
|
|
1254
|
-
{
|
|
1255
|
-
"slug": "blog-grid",
|
|
1256
|
-
"title": "Blog — Card Grid",
|
|
1257
|
-
"category": "cms",
|
|
1258
|
-
"description": "3-column responsive card grid. Cover thumbnail (HSL gradient), title, excerpt, author·date·read meta. Default blog index shape.",
|
|
1259
|
-
"source": "kitab",
|
|
1260
|
-
"repoPath": "app/preview/blog-grid",
|
|
1261
|
-
"pullPaths": [
|
|
1262
|
-
"app/preview/blog-grid"
|
|
1263
|
-
],
|
|
1264
|
-
"files": [],
|
|
1265
|
-
"dependencies": [],
|
|
1266
|
-
"shadcnComponents": [],
|
|
1267
|
-
"agentRecipe": "Run `npx rr add blog-grid`. Default to 3 columns at lg. Use the Thumb helper for cover generation when posts don't ship an image yet — HSL gradient by post.hue keeps each card distinct.",
|
|
1268
|
-
"tags": [
|
|
1269
|
-
"block",
|
|
1270
|
-
"blog",
|
|
1271
|
-
"cms",
|
|
1272
|
-
"grid"
|
|
1273
|
-
],
|
|
1274
|
-
"primaryFile": "app/preview/blog-grid/page.tsx"
|
|
1275
|
-
},
|
|
1276
|
-
{
|
|
1277
|
-
"slug": "blog-list",
|
|
1278
|
-
"title": "Blog — Dense List",
|
|
1279
|
-
"category": "cms",
|
|
1280
|
-
"description": "Single-column scannable list. Thumbnail left, meta + title + excerpt right. High density, low scroll.",
|
|
1281
|
-
"source": "kitab",
|
|
1282
|
-
"repoPath": "app/preview/blog-list",
|
|
1283
|
-
"pullPaths": [
|
|
1284
|
-
"app/preview/blog-list"
|
|
1285
|
-
],
|
|
1286
|
-
"files": [],
|
|
1287
|
-
"dependencies": [],
|
|
1288
|
-
"shadcnComponents": [],
|
|
1289
|
-
"agentRecipe": "Run `npx rr add blog-list`. Use for archives or category pages where the reader is hunting a specific post. Compact thumbnail keeps the line height tight.",
|
|
1290
|
-
"tags": [
|
|
1291
|
-
"block",
|
|
1292
|
-
"blog",
|
|
1293
|
-
"cms",
|
|
1294
|
-
"list"
|
|
1295
|
-
],
|
|
1296
|
-
"primaryFile": "app/preview/blog-list/page.tsx"
|
|
1297
|
-
},
|
|
1298
|
-
{
|
|
1299
|
-
"slug": "blog-magazine",
|
|
1300
|
-
"title": "Blog — Magazine Layout",
|
|
1301
|
-
"category": "cms",
|
|
1302
|
-
"description": "Editorial spread: large hero post (2/3 width) + secondary featured + tail of headlines. Issue-number header gives quarterly feel.",
|
|
1303
|
-
"source": "kitab",
|
|
1304
|
-
"repoPath": "app/preview/blog-magazine",
|
|
1305
|
-
"pullPaths": [
|
|
1306
|
-
"app/preview/blog-magazine"
|
|
1307
|
-
],
|
|
1308
|
-
"files": [],
|
|
1309
|
-
"dependencies": [],
|
|
1310
|
-
"shadcnComponents": [],
|
|
1311
|
-
"agentRecipe": "Run `npx rr add blog-magazine`. Use for content-heavy publications. Hero post earns the visual real estate; the sidebar carries breadth. Mix typography sizes for editorial rhythm.",
|
|
1312
|
-
"tags": [
|
|
1313
|
-
"block",
|
|
1314
|
-
"blog",
|
|
1315
|
-
"cms",
|
|
1316
|
-
"editorial",
|
|
1317
|
-
"magazine"
|
|
1318
|
-
],
|
|
1319
|
-
"primaryFile": "app/preview/blog-magazine/page.tsx"
|
|
1320
|
-
},
|
|
1321
|
-
{
|
|
1322
|
-
"slug": "blog-masonry",
|
|
1323
|
-
"title": "Blog — Masonry",
|
|
1324
|
-
"category": "cms",
|
|
1325
|
-
"description": "CSS columns-based masonry with varying card heights for organic rhythm. break-inside-avoid keeps each card intact.",
|
|
1326
|
-
"source": "kitab",
|
|
1327
|
-
"repoPath": "app/preview/blog-masonry",
|
|
1328
|
-
"pullPaths": [
|
|
1329
|
-
"app/preview/blog-masonry"
|
|
1330
|
-
],
|
|
1331
|
-
"files": [],
|
|
1332
|
-
"dependencies": [],
|
|
1333
|
-
"shadcnComponents": [],
|
|
1334
|
-
"agentRecipe": "Run `npx rr add blog-masonry`. CSS columns are the cheap masonry — no JS, no layout shift. Vary the thumbnail height via a HEIGHTS array (h-44 to h-80). DOM order ≠ visual order — design around it.",
|
|
1335
|
-
"tags": [
|
|
1336
|
-
"block",
|
|
1337
|
-
"blog",
|
|
1338
|
-
"cms",
|
|
1339
|
-
"masonry"
|
|
1340
|
-
],
|
|
1341
|
-
"primaryFile": "app/preview/blog-masonry/page.tsx"
|
|
1342
|
-
},
|
|
1343
|
-
{
|
|
1344
|
-
"slug": "blog-featured",
|
|
1345
|
-
"title": "Blog — Featured Hero + Tail",
|
|
1346
|
-
"category": "cms",
|
|
1347
|
-
"description": "Full-bleed cover hero on the first post, then a tight 2-column grid for the rest. Cinematic open, fast scroll for the tail.",
|
|
1348
|
-
"source": "kitab",
|
|
1349
|
-
"repoPath": "app/preview/blog-featured",
|
|
1350
|
-
"pullPaths": [
|
|
1351
|
-
"app/preview/blog-featured"
|
|
1352
|
-
],
|
|
1353
|
-
"files": [],
|
|
1354
|
-
"dependencies": [],
|
|
1355
|
-
"shadcnComponents": [],
|
|
1356
|
-
"agentRecipe": "Run `npx rr add blog-featured`. Use for marketing-driven content sites (newsletter, podcast, brand journal) where the lead story carries the visit. Tail grid keeps the index scrollable without losing the hero impact.",
|
|
1357
|
-
"tags": [
|
|
1358
|
-
"block",
|
|
1359
|
-
"blog",
|
|
1360
|
-
"cms",
|
|
1361
|
-
"featured",
|
|
1362
|
-
"hero"
|
|
1363
|
-
],
|
|
1364
|
-
"primaryFile": "app/preview/blog-featured/page.tsx"
|
|
1365
|
-
}
|
|
1366
|
-
],
|
|
14
|
+
"layouts": [],
|
|
1367
15
|
"recipes": [],
|
|
1368
16
|
"features": [
|
|
1369
17
|
{
|
|
@@ -1475,7 +123,7 @@
|
|
|
1475
123
|
},
|
|
1476
124
|
{
|
|
1477
125
|
"slug": "os-terminal",
|
|
1478
|
-
"title": "Terminal — shell emulator with live passthrough",
|
|
126
|
+
"title": "Terminal — shell emulator with live passthrough + PTY seam",
|
|
1479
127
|
"category": "os",
|
|
1480
128
|
"description": "A React-DOM terminal: monospace glass aesthetic, colored prompt, arrow-key history, red stderr. Built-ins (ls·cd·pwd·cat·mkdir·touch·rm·mv·cp·echo·whoami·date·uname·df·ps·neofetch·help·clear) run against an in-memory FsModel, so it works with ZERO backend. Wire configureTerminal({ mode:\"live\", fs, exec }) and ls/cat read through your real filesystem, file mutations mirror to it, and any unknown command passes through exec.run as a one-shot shell call (stdout/stderr/exit rendered). Self-contained: shell inspector hooks are inert seams in lib/host.ts.",
|
|
1481
129
|
"source": "rahmanef63/os-vps",
|
|
@@ -2312,18 +960,63 @@
|
|
|
2312
960
|
"slug": "landing-sections",
|
|
2313
961
|
"title": "Landing Sections",
|
|
2314
962
|
"category": "content",
|
|
2315
|
-
"description": "Canonical landing-page composition slice — replaces the former standalone hero / cta / pricing-page / faq-section / feature-grid / testimonials-grid / blog-section / portfolio-section / changelog-feed slices (all merged here as `kind` variants in v0.2.0). Ships a pure reducer + LandingProvider store adapter + admin LandingView/LandingEditorView built on the shared CRUD primitives, plus a per-section LandingSectionShell
|
|
2316
|
-
"source": "rahman-resources",
|
|
963
|
+
"description": "Canonical landing-page composition slice — replaces the former standalone hero / cta / pricing-page / faq-section / feature-grid / testimonials-grid / blog-section / portfolio-section / changelog-feed slices (all merged here as `kind` variants in v0.2.0). Ships a pure reducer (v0.4.0: LANDING_UPSERT auto-shifts sibling `order` to keep positions unique; LANDING_DELETE closes the gap) + LandingProvider store adapter + admin LandingView/LandingEditorView built on the shared CRUD primitives, plus a per-section LandingSectionShell (background image + custom Tailwind className overlay + scroll-reveal). NEW in v0.4.0: a `sections/` library of config-driven public renderers (StatsSection, TestimonialsSection, FaqSection, PricingSection, NewsletterSection, CustomSection) that read `LandingSection.config` JSON merged over template defaults — content stays dashboard-controlled without per-template renderer code; plus `parse-config` helpers (parseConfigBadge/parseConfigField) and `sections/config` guards (parseConfigObject, cfg*). Sections carry { kind, order, title, subtitle, enabled, imageUrl, imageRatio, bgImageUrl, className, config (JSON) } with up/down reorder arrows. Lifted from the _templates fleet `_shared/landing` (2026-06-11) — the 8 standalone templates ship a byte-similar copy; this rr slice is the SSOT. Used by all 7 rr website templates.",
|
|
964
|
+
"source": "rahman-resources (lifted from _templates fleet)",
|
|
2317
965
|
"install": "npx rahman-resources add landing-sections",
|
|
2318
966
|
"npmPackages": [],
|
|
2319
967
|
"exampleCode": "",
|
|
2320
|
-
"agentRecipe": "Run `npx rr add landing-sections`. Fold `landingReducer` into your root reducer (cases LANDING_UPSERT + LANDING_DELETE), seed State.landingSections with `defaultLandingSections()`, wrap your StoreProvider with `<LandingProvider value={adapter}/>` where adapter maps {items, publicBase, adminBase, create, update, remove} from your dispatch. Mount `<LandingView/>` at `/admin/landing` and `<LandingEditorView id={params.id}/>` at `/admin/landing/[id]`. In HomePage iterate `state.landingSections.filter(s => s.enabled).sort((a,b) => a.order - b.order)` and render each
|
|
968
|
+
"agentRecipe": "Run `npx rr add landing-sections`. Fold `landingReducer` into your root reducer (cases LANDING_UPSERT + LANDING_DELETE), seed State.landingSections with `defaultLandingSections()`, wrap your StoreProvider with `<LandingProvider value={adapter}/>` where adapter maps {items, publicBase, adminBase, create, update, remove} from your dispatch. Mount `<LandingView/>` at `/admin/landing` and `<LandingEditorView id={params.id}/>` at `/admin/landing/[id]`. In HomePage iterate `state.landingSections.filter(s => s.enabled).sort((a,b) => a.order - b.order)` and render each inside `<LandingSectionShell section={s}>`; for stats/testimonials/pricing/faq/newsletter/custom kinds drop in the shipped `<StatsSection/>` etc. (they read `section.config` JSON over your template defaults), or map the remaining kinds (hero/features/blog/etc.) to your own renderer. Use `parseConfigBadge(section.config)` for a section badge. Requires the template-base shared surface that ships in every rr website template: `@/components/templates/_shared/motion` (Reveal/Stagger/CountUp/Marquee/useInView — the motion-kit primitives), `@/components/templates/_shared/ui/section-head`, and `@/components/templates/_shared/crud/*`. Sections also use shadcn accordion/card/carousel + embla-carousel-autoplay.",
|
|
2321
969
|
"tags": [
|
|
2322
970
|
"admin",
|
|
2323
971
|
"landing",
|
|
2324
972
|
"cms",
|
|
2325
973
|
"sections",
|
|
2326
|
-
"crud"
|
|
974
|
+
"crud",
|
|
975
|
+
"renderer"
|
|
976
|
+
]
|
|
977
|
+
},
|
|
978
|
+
{
|
|
979
|
+
"slug": "motion-kit",
|
|
980
|
+
"title": "Motion Kit — scroll reveals, carousel, accordion, micro-interactions",
|
|
981
|
+
"category": "ui",
|
|
982
|
+
"description": "Zero-dependency scroll-motion layer (IntersectionObserver + CSS) plus an embla carousel and a radix accordion, packaged so any page gets tasteful entrance animations without pulling in a motion library. Ships Reveal (fade-up/fade/fade-left/fade-right/zoom), Stagger (incremental per-child reveal for grids/lists), CountUp (rAF count-to-value with locale formatting; integers), Marquee (infinite logo/brand strip with hover-pause + edge fade), and the useInView hook behind them; plus Carousel (embla, optional Autoplay plugin) and Accordion (radix). All reveal + keyframe motion is gated behind prefers-reduced-motion. Consumers append globals-motion.css to their app/globals.css for the [data-reveal] transitions + accordion/marquee/blob keyframes. Lifted 2026-06-10 from the _templates fleet `_shared/motion` copy — the 8 standalone website templates already ship a byte-identical copy; this rr slice is the SSOT so future scaffolds get it via `npx rr add motion-kit`. Pairs with landing-sections (its renderers consume these primitives).",
|
|
983
|
+
"source": "rahman-resources (lifted from _templates fleet)",
|
|
984
|
+
"install": "npx rahman-resources add motion-kit",
|
|
985
|
+
"npmPackages": [],
|
|
986
|
+
"exampleCode": "",
|
|
987
|
+
"agentRecipe": "Run `npx rr add motion-kit`. Append the contents of `globals-motion.css` to your `app/globals.css` (after `@import \"tailwindcss\";`) — without it `data-reveal` elements stay static and the accordion snaps. Then import from `@/features/motion-kit`: `<Reveal variant=\"fade-up\">`, `<Stagger itemClassName=\"h-full\">{cards}</Stagger>` for grids, `<CountUp value={4800} />` (integers), `<Marquee speed={32}>{logos}</Marquee>`. Carousel: pair with `Autoplay` from embla-carousel-autoplay. Any component consuming a passed render/icon fn AND these hooks must be `\"use client\"`. Hover-lift convention: `transition-[translate,box-shadow] duration-300 hover:-translate-y-1 hover:shadow-lg`.",
|
|
988
|
+
"tags": [
|
|
989
|
+
"ui",
|
|
990
|
+
"motion",
|
|
991
|
+
"animation",
|
|
992
|
+
"scroll",
|
|
993
|
+
"reveal",
|
|
994
|
+
"carousel",
|
|
995
|
+
"accordion",
|
|
996
|
+
"marquee",
|
|
997
|
+
"countup",
|
|
998
|
+
"embla"
|
|
999
|
+
]
|
|
1000
|
+
},
|
|
1001
|
+
{
|
|
1002
|
+
"slug": "storefront-checkout",
|
|
1003
|
+
"title": "Storefront Checkout — guest cart + checkout composition",
|
|
1004
|
+
"category": "content",
|
|
1005
|
+
"description": "Guest-friendly shopping cart for catalog storefronts. CartProvider holds items in React context with localStorage persistence (anonymous buyers keep their cart across reloads, zero backend). CartWidget is a header trigger with live count badge opening a slide-over Sheet: per-item qty steppers, remove, subtotal, checkout CTA to a host route. CheckoutSummary renders the order panel on the checkout page. Props-driven R3 — no convex/react anywhere; the host resolves a NUMERIC price per catalog item before add() and MUST re-price every line server-side when placing the order (client subtotal is display-only, never the charge). Proven end-to-end on wirausaha-os: catalog → cart → server-priced placeOrder action → DOKU Direct instructions → webhook flips paid (reactive). Pairs with doku-payment ≥0.2 (guest checkout: optional userId + buyer contact, key-guarded actions, guest-readable status query) or midtrans-payment.",
|
|
1006
|
+
"source": "wirausaha-os guest-checkout build-out 2026-06-10",
|
|
1007
|
+
"install": "npx rahman-resources add storefront-checkout",
|
|
1008
|
+
"npmPackages": [],
|
|
1009
|
+
"exampleCode": "",
|
|
1010
|
+
"agentRecipe": "Run `npx rr add storefront-checkout`. Wrap your public layout once with `<CartProvider storageKey=\"my-shop-cart\">` and mount `<CartWidget checkoutHref=\"/checkout\" />` in the header extras. On product surfaces call `useCart().add({ slug, name, price, priceLabel, emoji })` with a host-resolved NUMERIC price. Build a /checkout route composing `<CheckoutSummary />` + a payment form (doku-payment's DokuDirectForm): its onSubmit calls YOUR Convex place-order action which re-prices each {slug, qty} from your catalog table server-side, generates an unguessable orderId, calls api.features.payment.actions.doku.createDirectPayment, records your domain order row, and returns { ok, orderId, instructions, expiresAt } ({ ok:false, notice } when DOKU creds are unset — surface it in the form and offer a contact fallback). After success render DokuPaymentInstructions + reactive status via api.features.payment.query.getOrderByOrderId. Reference: template-wirausaha-os convex/checkout.ts + slices/checkout/CheckoutPage.tsx.",
|
|
1011
|
+
"tags": [
|
|
1012
|
+
"ecommerce",
|
|
1013
|
+
"cart",
|
|
1014
|
+
"checkout",
|
|
1015
|
+
"guest",
|
|
1016
|
+
"storefront",
|
|
1017
|
+
"payment",
|
|
1018
|
+
"localStorage",
|
|
1019
|
+
"sheet"
|
|
2327
1020
|
]
|
|
2328
1021
|
},
|
|
2329
1022
|
{
|
|
@@ -2613,6 +1306,26 @@
|
|
|
2613
1306
|
"basics"
|
|
2614
1307
|
]
|
|
2615
1308
|
},
|
|
1309
|
+
{
|
|
1310
|
+
"slug": "pages-cms",
|
|
1311
|
+
"title": "Pages CMS — block-composed multi-page editor",
|
|
1312
|
+
"category": "content",
|
|
1313
|
+
"description": "A small multi-page CMS. PagesView (list + CRUD: create/edit/duplicate/delete/publish) + PageEditorView (metadata form + block editor) + a read-only public BlockRenderer. Pages are composed of 11 block kinds: hero, text, feature-list, cta, logo-cloud, testimonial, video, image-gallery, faq, stats, pricing-table. Ships a localStorage adapter (LocalPagesProvider) + a generic Home/About/Pricing seed so it runs env-free — or wire the bundled pagesReducer + PagesProvider to your own backend (optional Convex copy-source included). Pure UI; no Convex required.",
|
|
1314
|
+
"source": "rr original (generalized from saas-marketing pages engine)",
|
|
1315
|
+
"install": "npx rahman-resources add pages-cms",
|
|
1316
|
+
"npmPackages": [],
|
|
1317
|
+
"exampleCode": "",
|
|
1318
|
+
"agentRecipe": "Run `npx rr add pages-cms`. Wrap your admin surface in <LocalPagesProvider seed={defaultPages()}> (localStorage, zero backend) or supply your own PagesStore via <PagesProvider>. Render <PagesView publicBase adminBase> for the list and <PageEditorView id publicBase adminBase> for the editor route. Public catch-all looks up the page by slug and renders <BlocksRenderer blocks={page.blocks} />. Add block kinds by extending the PageBlock union + emptyBlock + the renderer/editor switches.",
|
|
1319
|
+
"tags": [
|
|
1320
|
+
"content",
|
|
1321
|
+
"cms",
|
|
1322
|
+
"pages",
|
|
1323
|
+
"blocks",
|
|
1324
|
+
"editor",
|
|
1325
|
+
"builder",
|
|
1326
|
+
"basics"
|
|
1327
|
+
]
|
|
1328
|
+
},
|
|
2616
1329
|
{
|
|
2617
1330
|
"slug": "empty-states",
|
|
2618
1331
|
"title": "Empty States — 404/500/403 + zero-data",
|
|
@@ -2712,6 +1425,62 @@
|
|
|
2712
1425
|
"toast",
|
|
2713
1426
|
"basics"
|
|
2714
1427
|
]
|
|
1428
|
+
},
|
|
1429
|
+
{
|
|
1430
|
+
"slug": "media-studio",
|
|
1431
|
+
"title": "Media Studio — photo / social design canvas",
|
|
1432
|
+
"category": "os",
|
|
1433
|
+
"description": "A layered canvas studio: image/text/shape layers with filters, masks, transforms, safe-area guides and aspect presets (1:1/4:5/9:16/16:9), plus an export modal (download / copy / import JSON). Runs fully offline on bundled gradient-SVG samples. Host wiring is one call: configureMediaStudio({ saveDoc, imageSources }) lights up Save-to-host and feeds real image sources. Self-contained: inspector hooks are inert seams in lib/host.ts.",
|
|
1434
|
+
"source": "rahmanef63/os-vps",
|
|
1435
|
+
"install": "npx rahman-resources add media-studio",
|
|
1436
|
+
"npmPackages": [],
|
|
1437
|
+
"exampleCode": "\"use client\";\nimport { MediaStudio } from \"@/features/media-studio\";\n\nexport default function StudioDemo() {\n return <div className=\"h-dvh w-full\"><MediaStudio /></div>;\n}",
|
|
1438
|
+
"agentRecipe": "Stack: Next 16 + React 19 + Tailwind 4 + shadcn/ui. Layered canvas editor. Fully client-side; no backend required.\n\nSTEP 1 — Install. `npx rr add media-studio`. Ensure `@/features/media-studio` resolves and Tailwind scans the slice folder.\n\nSTEP 2 — Deps. npm: `lucide-react`. shadcn: button, dialog, badge, tooltip, scroll-area.\n\nSTEP 3 — Mount. `<MediaStudio />` in a height-bearing box — unwired it edits bundled sample layers. Or register `mediaStudioApp` in an appshell manifest.\n\nSTEP 4 — Host wiring. `configureMediaStudio({ saveDoc, imageSources })` — saveDoc persists the serialized document (enables Save-to-host in the export modal); imageSources supplies image URLs for new layers.",
|
|
1439
|
+
"tags": [
|
|
1440
|
+
"canvas",
|
|
1441
|
+
"editor",
|
|
1442
|
+
"layers",
|
|
1443
|
+
"filters",
|
|
1444
|
+
"export",
|
|
1445
|
+
"design",
|
|
1446
|
+
"ui"
|
|
1447
|
+
]
|
|
1448
|
+
},
|
|
1449
|
+
{
|
|
1450
|
+
"slug": "quicklinks",
|
|
1451
|
+
"title": "Quicklinks — website shortcuts with favicons",
|
|
1452
|
+
"category": "os",
|
|
1453
|
+
"description": "A website-shortcut grid: add/remove links with auto favicons (Google s2) and new-tab open. State lives behind an injectable QuicklinksStore — createLocalStore persists to localStorage (SSR-safe hydrate), createMemoryStore suits previews/tests, configureQuicklinks swaps in a host store. Pairs with appshell: the useQuickLinks capability + QuicklinkIcon surface the same links in the dock/Launchpad/mobile grid.",
|
|
1454
|
+
"source": "rahmanef63/os-vps",
|
|
1455
|
+
"install": "npx rahman-resources add quicklinks",
|
|
1456
|
+
"npmPackages": [],
|
|
1457
|
+
"exampleCode": "\"use client\";\nimport { Quicklinks } from \"@/features/quicklinks\";\n\nexport default function LinksDemo() {\n return <div className=\"h-dvh w-full\"><Quicklinks /></div>;\n}",
|
|
1458
|
+
"agentRecipe": "Stack: Next 16 + React 19 + Tailwind 4 + shadcn/ui. Website shortcut grid. Fully client-side; no backend required.\n\nSTEP 1 — Install. `npx rr add quicklinks`. Ensure `@/features/quicklinks` resolves and Tailwind scans the slice folder.\n\nSTEP 2 — Deps. npm: `lucide-react`. shadcn: button.\n\nSTEP 3 — Mount. `<Quicklinks />` — unwired it persists to localStorage (\"rr:quicklinks\") with 4 demo seeds. Or register `quicklinksApp` in an appshell manifest.\n\nSTEP 4 — Host store. `configureQuicklinks(store)` with { get, subscribe, add, remove, hydrate? } — or feed appshell's useQuickLinks capability from the same store so dock shortcuts stay in sync.",
|
|
1459
|
+
"tags": [
|
|
1460
|
+
"shortcuts",
|
|
1461
|
+
"bookmarks",
|
|
1462
|
+
"favicons",
|
|
1463
|
+
"launcher",
|
|
1464
|
+
"ui"
|
|
1465
|
+
]
|
|
1466
|
+
},
|
|
1467
|
+
{
|
|
1468
|
+
"slug": "shell-settings",
|
|
1469
|
+
"title": "Shell Settings — settings-app UI primitives",
|
|
1470
|
+
"category": "ui",
|
|
1471
|
+
"description": "The settings-app building blocks: SettingsSection, Row, AccentSwatches, a slice-local Segmented control, and a ready AppearancePanel (style/mode/accent/wallpaper/device/transparency groups — every group optional). Pure presentation: the injected AppearanceAdapter IS the contract, so it binds to any appearance store (appshell capabilities, zustand, plain useState) with zero slice edits.",
|
|
1472
|
+
"source": "rahmanef63/os-vps",
|
|
1473
|
+
"install": "npx rahman-resources add shell-settings",
|
|
1474
|
+
"npmPackages": [],
|
|
1475
|
+
"exampleCode": "\"use client\";\nimport { useState } from \"react\";\nimport { AppearancePanel } from \"@/features/shell-settings\";\n\nexport default function SettingsDemo() {\n const [mode, setMode] = useState<\"light\" | \"dark\">(\"light\");\n return <AppearancePanel adapter={{ mode: { value: mode, set: setMode } }} />;\n}",
|
|
1476
|
+
"agentRecipe": "Stack: Next 16 + React 19 + Tailwind 4 + shadcn/ui. Settings UI primitives. Pure presentation; state injected.\n\nSTEP 1 — Install. `npx rr add shell-settings`. Ensure `@/features/shell-settings` resolves and Tailwind scans the slice folder.\n\nSTEP 2 — Deps. npm: `lucide-react`. shadcn: button, switch, toggle-group, separator.\n\nSTEP 3 — Mount. `<AppearancePanel adapter={adapter} />` with an AppearanceAdapter (all groups optional — omit a group to hide it), or compose SettingsSection/Row/AccentSwatches/Segmented directly for custom panels.\n\nSTEP 4 — Bind. Wire the adapter to your appearance store (theme mode, accent, wallpaper, device, transparency) — the panel re-renders from the values you pass; no internal state.",
|
|
1477
|
+
"tags": [
|
|
1478
|
+
"settings",
|
|
1479
|
+
"preferences",
|
|
1480
|
+
"appearance",
|
|
1481
|
+
"primitives",
|
|
1482
|
+
"ui"
|
|
1483
|
+
]
|
|
2715
1484
|
}
|
|
2716
1485
|
],
|
|
2717
1486
|
"slices": [
|
|
@@ -2720,7 +1489,7 @@
|
|
|
2720
1489
|
"title": "Image Editor — layered raster editor",
|
|
2721
1490
|
"category": "os",
|
|
2722
1491
|
"kind": "ui",
|
|
2723
|
-
"version": "2.
|
|
1492
|
+
"version": "2.1.1",
|
|
2724
1493
|
"description": "A Photoshop-style raster image editor built on Konva. Layers panel (reorder, opacity, visibility, lock, 16 blend modes), free transform (move/scale/rotate/flip via a Transformer), image + text + shape + paint layers, brush & eraser with size/opacity/hardness, non-destructive adjustments + filters, canvas resize/aspect presets, and LAYER STYLES: stroke, drop shadow, outer glow, clipping mask. One-click BACKGROUND REMOVAL runs fully in-browser via @imgly/background-removal (free, no API key — downloads a small ONNX model on first use). Undo/redo, zoom/pan, shortcuts, PNG/JPG/WebP export. v2 adds an AI FUNCTION-CALLING layer: every editor operation is a named, schema'd command (EDITOR_COMMANDS registry + useEditorCommands binding) driven by an in-editor chat; the streaming bridge is injectable via configureAgentStream(fn) and everything except the chat works without it. A headless server barrel (server.ts) runs commands against documents with no DOM. Image I/O via props (initialImage / onSave).",
|
|
2725
1494
|
"source": "rahmanef63/os-vps",
|
|
2726
1495
|
"slicePath": "frontend/slices/image-editor",
|
|
@@ -2768,7 +1537,7 @@
|
|
|
2768
1537
|
"title": "Reel — video timeline editor",
|
|
2769
1538
|
"category": "os",
|
|
2770
1539
|
"kind": "ui",
|
|
2771
|
-
"version": "1.
|
|
1540
|
+
"version": "1.2.1",
|
|
2772
1541
|
"description": "A complete in-browser video editor. Real media clips (image/video/audio) on a layered multi-track timeline — the top row renders frontmost, with ▲▼ reorder and per-track lock/hide/mute. ONE Canvas-2D draw path is shared by the live preview and the realtime MediaRecorder exporter, so what you see is exactly what renders (WebM with real mixed audio: per-clip volume/fades/auto-duck through a streaming audio graph). Per-clip trim/speed (0.25–4×)/reverse, dissolve/wipe/slide transitions via clip overlap, keyframes (opacity/scale/x/y/rotation) with easing + one-click In/Out animation presets, text styling with preset grid, color grading + vignette, filmstrip thumbnails + real waveforms, snapping, split/duplicate. The workspace is config-driven: 6 resizable layout presets (react-resizable-panels v4) incl. quick-import files-pane layouts, plus custom composition size. Drafts auto-save to localStorage. Self-contained: toasts via sonner, the files pane runs on an injectable fs adapter (configureReelFs; in-memory mock by default), and shell hooks (inspector/activity) are inert seams in lib/host.ts.",
|
|
2773
1542
|
"source": "rahmanef63/os-vps",
|
|
2774
1543
|
"slicePath": "frontend/slices/reel-editor",
|
|
@@ -2810,7 +1579,7 @@
|
|
|
2810
1579
|
"title": "Preview — media quick-look",
|
|
2811
1580
|
"category": "os",
|
|
2812
1581
|
"kind": "ui",
|
|
2813
|
-
"version": "1.
|
|
1582
|
+
"version": "1.2.1",
|
|
2814
1583
|
"description": "A quick-look media viewer in the macOS Preview spirit. Images render on a zoomable (40–300%) checkerboard stage so transparency reads; audio gets a card player with a CSS-bar waveform + transport; video gets play/pause + scrubber + volume; PDFs embed full-bleed and text gets a simple surface. The toolbar carries a type-indicator chip, zoom, Download, Open-in-editor, and prev/next. Two integration seams in lib/host.ts make it portable: configureMediaSource maps fs paths to fetchable URLs (identity by default, so public URLs work with zero wiring) and configureMediaOpener routes the Open-in-editor handoff (image → image-editor, video/audio → reel-editor) to your shell — both inert until set. Launched bare it shows a fully offline sample gallery (inline SVG gradients, simulated A/V playback). Pairs with file-explorer (onOpenFile → MediaViewer payload) and the editors.",
|
|
2815
1584
|
"source": "rahmanef63/os-vps",
|
|
2816
1585
|
"slicePath": "frontend/slices/media-viewer",
|
|
@@ -2846,7 +1615,7 @@
|
|
|
2846
1615
|
"title": "Code — overlay syntax editor",
|
|
2847
1616
|
"category": "os",
|
|
2848
1617
|
"kind": "ui",
|
|
2849
|
-
"version": "1.
|
|
1618
|
+
"version": "1.2.1",
|
|
2850
1619
|
"description": "A lightweight code editor in the VS-Code spirit without the weight: a transparent textarea layered over a highlighted pre (regex tokenizer for JS/TS/JSON/CSS) gives real editing with live syntax color and a line-number gutter; a tab strip tracks dirty buffers with Cmd/Ctrl+S save; a status bar shows path, Ln/Col, tab size, language and save state. The explorer is a lazy per-directory tree — each folder lists on expand, with inline new-file/new-folder affordances — rendered as a rail on desktop and a Sheet on mobile, and the new-file form is a responsive dialog ⇄ bottom drawer. The filesystem is INJECTED via a small CodeFsAdapter (list/read/write/mkdir): point configureCodeFs at a real API or use the bundled writable in-memory mock (seeded sample tree) so it works with zero backend. Writes are best-effort — a read-only host flags the save but keeps the local buffer. Pairs with file-explorer (onOpenFile → payload) and appshell.",
|
|
2851
1620
|
"source": "rahmanef63/os-vps",
|
|
2852
1621
|
"slicePath": "frontend/slices/code-editor",
|
|
@@ -2881,7 +1650,7 @@
|
|
|
2881
1650
|
"title": "System Monitor — host telemetry dashboard",
|
|
2882
1651
|
"category": "os",
|
|
2883
1652
|
"kind": "ui",
|
|
2884
|
-
"version": "1.
|
|
1653
|
+
"version": "1.2.1",
|
|
2885
1654
|
"description": "An Activity-Monitor-style dashboard: circular CPU/RAM/disk/GPU gauges, rolling CPU + network sparklines on glass panels, and a live process table — polling every 1.5s with a ~40-point history. Telemetry is INJECTED via a small SysMonAdapter (stats/processes): point configureSysmon at a real host API (/proc, an agent, a cloud endpoint) or keep the bundled wavy in-browser mock so the dashboard renders alive with zero backend. Self-contained: shell inspector hooks are inert seams in lib/host.ts.",
|
|
2886
1655
|
"source": "rahmanef63/os-vps",
|
|
2887
1656
|
"slicePath": "frontend/slices/system-monitor",
|
|
@@ -2908,10 +1677,10 @@
|
|
|
2908
1677
|
},
|
|
2909
1678
|
{
|
|
2910
1679
|
"slug": "os-terminal",
|
|
2911
|
-
"title": "Terminal — shell emulator with live passthrough",
|
|
1680
|
+
"title": "Terminal — shell emulator with live passthrough + PTY seam",
|
|
2912
1681
|
"category": "os",
|
|
2913
1682
|
"kind": "ui",
|
|
2914
|
-
"version": "1.
|
|
1683
|
+
"version": "1.2.1",
|
|
2915
1684
|
"description": "A React-DOM terminal: monospace glass aesthetic, colored prompt, arrow-key history, red stderr. Built-ins (ls·cd·pwd·cat·mkdir·touch·rm·mv·cp·echo·whoami·date·uname·df·ps·neofetch·help·clear) run against an in-memory FsModel, so it works with ZERO backend. Wire configureTerminal({ mode:\"live\", fs, exec }) and ls/cat read through your real filesystem, file mutations mirror to it, and any unknown command passes through exec.run as a one-shot shell call (stdout/stderr/exit rendered). Self-contained: shell inspector hooks are inert seams in lib/host.ts.",
|
|
2916
1685
|
"source": "rahmanef63/os-vps",
|
|
2917
1686
|
"slicePath": "frontend/slices/os-terminal",
|
|
@@ -2938,7 +1707,7 @@
|
|
|
2938
1707
|
"title": "Assistant — agent workspace with streaming chat",
|
|
2939
1708
|
"category": "os",
|
|
2940
1709
|
"kind": "ui",
|
|
2941
|
-
"version": "1.
|
|
1710
|
+
"version": "1.1.1",
|
|
2942
1711
|
"description": "A full agent workspace: streaming chat with typing deltas and graceful error notes, plus a library where users CREATE and manage agents (persona, avatar gradient, system prompt), skills, and automations (trigger + schedule forms) — all persisted in localStorage, no backend. Preset agents/skills ship as starting points. The model is INJECTED: configureAssistantStream takes any (messages) => AsyncIterable<string> — your SSE endpoint, the AI SDK, an agent loop — and until wired a typing demo stream keeps the whole UI working offline. Self-contained: shell inspector hooks are inert seams in lib/host.ts.",
|
|
2943
1712
|
"source": "rahmanef63/os-vps",
|
|
2944
1713
|
"slicePath": "frontend/slices/assistant",
|
|
@@ -2977,7 +1746,7 @@
|
|
|
2977
1746
|
"title": "Browser — remote headless-browser chrome",
|
|
2978
1747
|
"category": "os",
|
|
2979
1748
|
"kind": "ui",
|
|
2980
|
-
"version": "1.
|
|
1749
|
+
"version": "1.2.1",
|
|
2981
1750
|
"description": "Full browser chrome for a REMOTE headless browser: omnibar with search-or-URL detection, bookmark bar, history view (localStorage-persisted), favicons with globe fallback, busy states, and a screenshot viewport that forwards clicks/typing/keys/scroll into the remote page. The backend is INJECTED via a small BrowserAdapter (state/screenshot/act): point configureBrowser at a real headless-Chromium service (e.g. Playwright behind an authed route — any site renders, no X-Frame-Options problem) or keep the bundled offline canvas demo renderer that fakes the viewport so the whole chrome works with zero backend. Self-contained: shell inspector hooks are inert seams in lib/host.ts.",
|
|
2982
1751
|
"source": "rahmanef63/os-vps",
|
|
2983
1752
|
"slicePath": "frontend/slices/browser",
|
|
@@ -3012,7 +1781,7 @@
|
|
|
3012
1781
|
"title": "App Store — install, create + toggle apps",
|
|
3013
1782
|
"category": "os",
|
|
3014
1783
|
"kind": "ui",
|
|
3015
|
-
"version": "1.
|
|
1784
|
+
"version": "1.2.1",
|
|
3016
1785
|
"description": "The dynamic half of an app registry, in two surfaces. AppStore: a storefront with featured hero, category sidebar, install/uninstall cards for a curated catalog, and toggles that disable built-in apps/shell features (the DISABLED set is persisted so new apps always ship enabled). CreateApp: build a custom app — name, glyph, accent gradient, runtime (html/node/python/shell), entry — with live manifest preview. Both write one localStorage registry; useInstalledApps() turns it into appshell-style descriptors (html apps mount in a sandboxed iframe, command apps in a terminal-style console). The console's shell is INJECTED via configureAppStoreExec (demo echo by default). Self-contained: inspector hooks are inert seams in lib/host.ts; the Create-App flow is bundled in (no cross-slice imports).",
|
|
3017
1786
|
"source": "rahmanef63/os-vps",
|
|
3018
1787
|
"slicePath": "frontend/slices/app-store",
|
|
@@ -3047,7 +1816,7 @@
|
|
|
3047
1816
|
"title": "File Explorer — Tree + CRUD + Breadcrumb",
|
|
3048
1817
|
"category": "os",
|
|
3049
1818
|
"kind": "full",
|
|
3050
|
-
"version": "1.1
|
|
1819
|
+
"version": "1.4.1",
|
|
3051
1820
|
"description": "A complete, portable file-directory explorer: a collapsible folder TREE sidebar (lazy-loaded per dir), a responsive BREADCRUMB that auto-collapses to a dropdown, grid + list views with sort, multi-select, a right-click context menu, drag-and-drop (internal move + external file/folder upload), inline rename, and full CRUD (new folder, rename, cut/copy/paste, move, delete/trash, empty trash). The filesystem backend is INJECTED via a small FileExplorerAdapter (list/mkdir/remove/move/copy/upload/usage/rawUrl) — point it at a real API or use the bundled createMockAdapter() (a writable in-memory tree) so it works with zero backend. Opening a file fires an onOpenFile(path, entry) callback you wire to your own viewer/editor. Self-contained: imports only @/components/ui/* + @/lib/utils. Ported from os-vps (Topside) files manager. Pairs with appshell as the file-dir counterpart to a notion-style sidebar.",
|
|
3052
1821
|
"source": "rahmanef63/os-vps",
|
|
3053
1822
|
"slicePath": "frontend/slices/file-explorer",
|
|
@@ -3083,7 +1852,7 @@
|
|
|
3083
1852
|
"title": "AppShell — Desktop + Mobile OS Shell",
|
|
3084
1853
|
"category": "os",
|
|
3085
1854
|
"kind": "full",
|
|
3086
|
-
"version": "1.
|
|
1855
|
+
"version": "1.5.1",
|
|
3087
1856
|
"description": "Generic, brand-free OS-style shell framework. One <AppShell manifest> wrapper provider gives a project a macOS-style window manager (drag/snap/maximize, dock, menu bar, Spotlight) AND an iOS-style mobile surface (home pager, app library, control center, widgets), driven entirely by a manifest: brand, apps, features, surface regions, capabilities, persistence, keymap. Five shell features (search, inspector, notifications, control-center, widgets) are bundled as defineFeature() contributions inside the slice and mount via named <Slot>s. Responsiveness is a single ResponsiveProvider + 4 DRY primitives (AppFrame, MasterDetail, ResponsiveToolbar, TouchList). Imports nothing project-specific — the consumer injects data/auth/AI through manifest.capabilities. Lifted from os-vps (Topside).",
|
|
3088
1857
|
"source": "rahmanef63/os-vps",
|
|
3089
1858
|
"slicePath": "frontend/slices/appshell",
|
|
@@ -3124,7 +1893,7 @@
|
|
|
3124
1893
|
"title": "Convex Auth — Multi-Provider Sign-in",
|
|
3125
1894
|
"category": "auth",
|
|
3126
1895
|
"kind": "backend",
|
|
3127
|
-
"version": "0.
|
|
1896
|
+
"version": "0.4.0",
|
|
3128
1897
|
"description": "@convex-dev/auth with Password (PBKDF2-SHA256 100k, self-hosted-friendly), Anonymous (guest), Google OAuth, and Resend magic-link. Ships a production SignInPage plus a presentational, props-driven AuthCard (v0.3) — choose `methods` (google, github, magic-link, password signin/signup tabs, phone OTP, anonymous) and render the card anywhere with different props; handlers default to a mock so it's interactive with zero wiring. i18n via labels. No Clerk.",
|
|
3129
1898
|
"source": "rahmanef63/resource-site",
|
|
3130
1899
|
"slicePath": "frontend/slices/convex-auth",
|
|
@@ -3190,7 +1959,7 @@
|
|
|
3190
1959
|
"title": "DOKU — Indonesia Payment",
|
|
3191
1960
|
"category": "integrations",
|
|
3192
1961
|
"kind": "full",
|
|
3193
|
-
"version": "0.
|
|
1962
|
+
"version": "0.4.0",
|
|
3194
1963
|
"description": "Pembayaran lokal Indonesia via DOKU — Checkout (hosted) + Direct (VA / QRIS / e-Wallet / PayLater / Minimarket / Kartu). HMAC-signed REST + signature-verified webhook + idempotent retries. Sibling slice to midtrans-payment dengan paymentOrders schema yang dishare.",
|
|
3195
1964
|
"source": "rahmanef63/resource-site",
|
|
3196
1965
|
"slicePath": "frontend/slices/doku-payment",
|
|
@@ -3254,7 +2023,7 @@
|
|
|
3254
2023
|
"title": "Midtrans — Indonesia Payment",
|
|
3255
2024
|
"category": "integrations",
|
|
3256
2025
|
"kind": "full",
|
|
3257
|
-
"version": "0.
|
|
2026
|
+
"version": "0.2.0",
|
|
3258
2027
|
"description": "Pembayaran lokal Indonesia via Midtrans Snap (BCA, Mandiri, BRI, e-wallet GoPay/OVO/Dana, QRIS). Webhook untuk konfirmasi. Provider-isolated under components/providers/midtrans + actions/midtrans so Doku/Stripe land as siblings.",
|
|
3259
2028
|
"source": "rahmanef63/resource-site",
|
|
3260
2029
|
"slicePath": "frontend/slices/midtrans-payment",
|
|
@@ -3311,7 +2080,7 @@
|
|
|
3311
2080
|
"title": "Resend — Transactional & Newsletter",
|
|
3312
2081
|
"category": "integrations",
|
|
3313
2082
|
"kind": "backend",
|
|
3314
|
-
"version": "0.
|
|
2083
|
+
"version": "0.2.0",
|
|
3315
2084
|
"description": "Transactional email + newsletter blast via Resend. Double opt-in flow + audience segmentation. Magic-link delivery for Convex Auth. Bundles the subscribers list backend (subscribe / confirm / unsubscribe / count) — formerly the standalone `subscribers` slice, merged here in v0.1.3.",
|
|
3316
2085
|
"source": "rahmanef63/resource-site",
|
|
3317
2086
|
"slicePath": "frontend/slices/resend-newsletter",
|
|
@@ -3355,7 +2124,7 @@
|
|
|
3355
2124
|
"title": "AI Chat — Workbench / Sidebar / Search",
|
|
3356
2125
|
"category": "ai",
|
|
3357
2126
|
"kind": "full",
|
|
3358
|
-
"version": "0.
|
|
2127
|
+
"version": "0.3.0",
|
|
3359
2128
|
"description": "One conversational AI feature, three render modes. Same Convex backend (threads + streaming + tool calls + RAG), pick the surface via prop:\n\n • workbench — Claude.ai / ChatGPT three-column page (default)\n • sidebar — collapsible copilot panel inside another CRUD app\n • search — single-question + answer + citations (Perplexity)\n\nUse cases:\n – Customer-support chatbot embedded in your marketing site\n – Developer copilot in your PR/docs admin\n – Knowledge-base search over your blog + docs corpus\n – Internal AI assistant in your dashboard\n\nWhat it ships: multi-provider (Anthropic / OpenAI / Google / Mistral / Ollama), multimodal (text + image + PDF + audio), typed tool calls with inline inspector, agent mode (plan→execute→reflect), branching threads, RAG citations, resumable streams, usage telemetry. Public surface = consumer chat; admin surface = persona, fallback, guardrails per-bot.",
|
|
3360
2129
|
"source": "rahmanef63/resource-site",
|
|
3361
2130
|
"slicePath": "frontend/slices/ai-chat",
|
|
@@ -3441,7 +2210,7 @@
|
|
|
3441
2210
|
"title": "AI Studio — Generation Canvas",
|
|
3442
2211
|
"category": "ai",
|
|
3443
2212
|
"kind": "full",
|
|
3444
|
-
"version": "0.
|
|
2213
|
+
"version": "0.2.0",
|
|
3445
2214
|
"description": "AI is the primary UI — single big prompt input → live-streaming output → variation grid → version tree. Suno / Midjourney / Lovable / v0 pattern. Output kinds: text, code, image, audio (configurable per template).\n\nUse cases:\n – AI image generation product (creative output)\n – AI logo / banner / social-post studio\n – AI code-snippet generator (component scaffolder)\n – AI music / voiceover producer\n – AI blog-draft factory (text)\n\nFeatures: prompt history, branch + compare outputs, like + favorite, share-to-link, templates from ai-admin.",
|
|
3446
2215
|
"source": "rahmanef63/resource-site",
|
|
3447
2216
|
"slicePath": "frontend/slices/ai-studio",
|
|
@@ -3496,7 +2265,7 @@
|
|
|
3496
2265
|
"title": "AI Agents — Autonomous Workers",
|
|
3497
2266
|
"category": "ai",
|
|
3498
2267
|
"kind": "full",
|
|
3499
|
-
"version": "0.
|
|
2268
|
+
"version": "0.2.0",
|
|
3500
2269
|
"description": "Background AI workers. Define an agent (skill × model × tools × max-iter), trigger it on-demand or on a cron schedule, watch the step-by-step trace as it runs. Devin / Replit-Agent / Manus pattern.\n\nUse cases:\n – Nightly audit-bp on the codebase (PR-reviewer style)\n – Weekly SEO crawl + content suggestions\n – Auto-moderate comment queue\n – Scheduled data ingestion + summarization\n – Long-form research task with multi-source citations\n\nFeatures: queue + live trace, per-step retry policy, hard cost cap, shareable trace URLs, full audit-log integration.",
|
|
3501
2270
|
"source": "rahmanef63/resource-site",
|
|
3502
2271
|
"slicePath": "frontend/slices/ai-agents",
|
|
@@ -3555,7 +2324,7 @@
|
|
|
3555
2324
|
"title": "AI Admin — Console (Instructions · Skills · Tools · Agents · Providers)",
|
|
3556
2325
|
"category": "ai",
|
|
3557
2326
|
"kind": "full",
|
|
3558
|
-
"version": "0.
|
|
2327
|
+
"version": "0.3.0",
|
|
3559
2328
|
"description": "Central operator console for the whole AI stack. Every other ai-* feature reads its registries from here. Tabs ordered to match the build-flow:\n\n 1. Providers — register Anthropic / OpenAI / Google / Mistral / Ollama (API keys AES-encrypted at rest)\n 2. Models — per-provider catalog (capabilities, context window, pricing)\n 3. Instructions — custom system-prompt library (Claude Projects-style)\n 4. Skills — named instruction + model default + tool defaults (consumed by chat + studio)\n 5. Tools — JSON-schema function specs + impl (http / convex / shell) + sandbox flag\n 6. Agents — skill × model × tools × max-iter (consumed by ai-agents)\n 7. Budgets — per-workspace cost caps + alerts + hard kill\n 8. Audit — every AI call: actor / agent / tokens / cost / latency / outcome\n\nIncludes Create-Agent / Create-Skill / Create-Tool / Create-Instruction wizards.",
|
|
3560
2329
|
"source": "rahmanef63/resource-site",
|
|
3561
2330
|
"slicePath": "frontend/slices/ai-admin",
|
|
@@ -3627,7 +2396,7 @@
|
|
|
3627
2396
|
"title": "AI Router — Backend Provider Proxy",
|
|
3628
2397
|
"category": "ai",
|
|
3629
2398
|
"kind": "backend",
|
|
3630
|
-
"version": "0.
|
|
2399
|
+
"version": "0.5.0",
|
|
3631
2400
|
"description": "Backend infrastructure (no UI). Single proxy that every other ai-* feature calls. Tier-routed — nano (Haiku) for classification, mid (Sonnet) for chat, flagship (Opus) for deep reasoning. Per-call usage log + cost guard. Works with direct provider keys or OpenRouter umbrella.\n\nNot something you mount — installed automatically as a peer when you add ai-chat / ai-studio / ai-agents.",
|
|
3632
2401
|
"source": "rahmanef63/resource-site",
|
|
3633
2402
|
"slicePath": "frontend/slices/ai-router",
|
|
@@ -3663,7 +2432,7 @@
|
|
|
3663
2432
|
"title": "Convex Vector Search",
|
|
3664
2433
|
"category": "data",
|
|
3665
2434
|
"kind": "full",
|
|
3666
|
-
"version": "0.
|
|
2435
|
+
"version": "0.2.0",
|
|
3667
2436
|
"description": "Embeddings-based search via Convex's built-in vector index. Embed via OpenAI text-embedding-3-small (1536-dim), query via vectorIndex().",
|
|
3668
2437
|
"source": "rahmanef63/resource-site",
|
|
3669
2438
|
"slicePath": "frontend/slices/vector-search",
|
|
@@ -3700,7 +2469,7 @@
|
|
|
3700
2469
|
"title": "Cal.com Booking",
|
|
3701
2470
|
"category": "data",
|
|
3702
2471
|
"kind": "full",
|
|
3703
|
-
"version": "0.
|
|
2472
|
+
"version": "0.2.0",
|
|
3704
2473
|
"description": "Embedded Cal.com booking widget + webhook receiver to mirror bookings into Convex.",
|
|
3705
2474
|
"source": "rahmanef63/resource-site",
|
|
3706
2475
|
"slicePath": "frontend/slices/cal-com-booking",
|
|
@@ -3740,7 +2509,7 @@
|
|
|
3740
2509
|
"title": "Command Menu",
|
|
3741
2510
|
"category": "ui",
|
|
3742
2511
|
"kind": "ui",
|
|
3743
|
-
"version": "0.
|
|
2512
|
+
"version": "0.3.0",
|
|
3744
2513
|
"description": "Renderless ⌘K command palette + generic search modal. Consumer supplies CommandGroup[] + onSelect + label bag; slice owns dialog chrome, ⌘K hotkey, MRU history. Pulled UP from notion-page-clone's command-palette renderless surface (Wave N+3.7) — Nosion adapters dropped at the kitab boundary.",
|
|
3745
2514
|
"source": "notion-page-clone (consumerVersion 0.3.0) + earlier superspace facade",
|
|
3746
2515
|
"slicePath": "frontend/slices/command-menu",
|
|
@@ -3887,7 +2656,7 @@
|
|
|
3887
2656
|
"title": "BroadcastChannel — Cross-tab Sync",
|
|
3888
2657
|
"category": "data",
|
|
3889
2658
|
"kind": "ui",
|
|
3890
|
-
"version": "0.
|
|
2659
|
+
"version": "0.2.0",
|
|
3891
2660
|
"description": "Same-origin cross-tab + cross-iframe state sync via BroadcastChannel API. Tiny, no backend, no install.",
|
|
3892
2661
|
"source": "Web Platform — BroadcastChannel API",
|
|
3893
2662
|
"slicePath": "frontend/slices/broadcast-channel-sync",
|
|
@@ -3910,7 +2679,7 @@
|
|
|
3910
2679
|
"title": "RBAC — Roles & Permissions",
|
|
3911
2680
|
"category": "auth",
|
|
3912
2681
|
"kind": "full",
|
|
3913
|
-
"version": "0.
|
|
2682
|
+
"version": "0.3.0",
|
|
3914
2683
|
"description": "RBAC engine ported from superspace. 6 system role presets (owner/admin/manager/staff/client/guest with levels), dot-namespaced permissions with `*` / `feature.*` wildcard matching, and pure check helpers (resolvePermissions / hasPermission / roleHasPermission). Props-driven UI primitives: <PermissionGate>, usePermissions, <RoleBadge>, <PermissionMatrix>. Convex template ships a tenant-scoped rbac_roles table + checkPermission / requirePermission helpers + idempotent seedSystemRoles, with a PLATFORM_ADMIN_EMAILS superadmin bypass. Pair with `user-management` for the members / invites / roles-admin UI. @convex-dev/auth aware — no Clerk.",
|
|
3915
2684
|
"source": "superspace",
|
|
3916
2685
|
"slicePath": "frontend/slices/rbac-roles",
|
|
@@ -3954,7 +2723,7 @@
|
|
|
3954
2723
|
"title": "User Management",
|
|
3955
2724
|
"category": "auth",
|
|
3956
2725
|
"kind": "full",
|
|
3957
|
-
"version": "0.
|
|
2726
|
+
"version": "0.7.0",
|
|
3958
2727
|
"description": "Full superspace-parity user management, props-driven + RBAC-agnostic. <UserManagementPanel> tabs Members + Roles + Teams + Access: member table (search / filter / sort, inline role dropdown, soft-remove), InviteDialog (with an optional 'propagate to sub-workspaces' toggle — same / step-down role strategy) + PendingInvites, a RolesPanel (custom roles via permission matrix; system roles read-only), a TeamsPanel (named user groups), and an AccessMatrix (users × tenants grid with inline role assignment). All permission-gated. You pass `roles` + `currentPerms` + the permission catalog (resolved from rbac-roles) + callbacks; the slice imports no other slice's frontend. Convex ships um_members + um_invites + um_teams + um_team_members + um_tenant_links + member / invite / team / hierarchy endpoints + getAccessMatrix (gated via rbac-roles' requirePermission); roles CRUD reuses rbac-roles'. The hierarchy is a generic edge tree — rr never owns the tenant entities. P0–P4c: the complete user-management epic.",
|
|
3959
2728
|
"source": "superspace",
|
|
3960
2729
|
"slicePath": "frontend/slices/user-management",
|
|
@@ -4084,7 +2853,7 @@
|
|
|
4084
2853
|
"title": "Icon Picker",
|
|
4085
2854
|
"category": "ui",
|
|
4086
2855
|
"kind": "ui",
|
|
4087
|
-
"version": "0.
|
|
2856
|
+
"version": "0.5.0",
|
|
4088
2857
|
"description": "Emoji + lucide (outline) + phosphor (fill) icon picker with search, 10-color palette, Twemoji/native toggle, recents tracking, and smart positioning. Two-tab layout (Emoji | Icon) with sub-variant pills (Native | Twemoji / Lucide | Phosphor fill). One string stores emoji OR lucide:Name OR phosphor:Name OR with ?c=hex tint — backwards-compat with raw-emoji fields. Popover auto-flips on collision (caps to Radix `--radix-popover-content-available-height`) and falls back to centered Dialog when neither side fits. Two variants: Popover (compact trigger) and Inline (full sheet/dialog use). Lifted 2026-05-25 from open-silong.",
|
|
4089
2858
|
"source": "open-silong",
|
|
4090
2859
|
"slicePath": "frontend/slices/icon-picker",
|
|
@@ -4121,7 +2890,7 @@
|
|
|
4121
2890
|
"title": "Activity — public productivity log",
|
|
4122
2891
|
"category": "data",
|
|
4123
2892
|
"kind": "full",
|
|
4124
|
-
"version": "0.
|
|
2893
|
+
"version": "0.3.0",
|
|
4125
2894
|
"description": "Public-facing weekly activity log. Lists user-facing activities grouped by ISO week with schema.org-friendly markup, designed to maximise SEO so the question 'what is <person> working on this week?' lands here. Convex-backed (schema + queries + unauthenticated mutations); MCP-friendly so AI workflows (Claude / GPT / custom agents) can append entries directly. All user-facing copy + per-category labels + date/time locale are prop-driven (English defaults). Lifted 2026-05-27 from rahmanef.com; 225-LOC view split into view + 2 sub-components + 4 lib helpers for the 200-LOC cap; Indonesian strings + custom primitives stripped; cross-slice auth import dropped (consumer wraps mutations).",
|
|
4126
2895
|
"source": "rahmanef.com",
|
|
4127
2896
|
"slicePath": "frontend/slices/activity",
|
|
@@ -4155,7 +2924,7 @@
|
|
|
4155
2924
|
"title": "Rate Limit",
|
|
4156
2925
|
"category": "infra",
|
|
4157
2926
|
"kind": "backend",
|
|
4158
|
-
"version": "0.
|
|
2927
|
+
"version": "0.3.0",
|
|
4159
2928
|
"description": "Convex-backed per-key request counter. Atomic check-and-increment via `consume` mutation; expired rows pruned by `_pruneExpired` internalMutation wired to a 5-min cron. Replaces single-replica in-memory Map so multi-replica Next deployments share buckets. Limits live in an in-code POLICY map keyed by namespace prefix (admin-login:<ip>, mcp:<ip>) — never caller-supplied; optional RATE_LIMIT_SERVER_KEY env gates anonymous calls. Lifted 2026-05-16 from rahmanef.com; hardened 2026-06-07.",
|
|
4160
2929
|
"source": "rahmanef.com",
|
|
4161
2930
|
"slicePath": "frontend/slices/rate-limit",
|
|
@@ -4258,7 +3027,7 @@
|
|
|
4258
3027
|
"title": "Create Your MCP",
|
|
4259
3028
|
"category": "ai",
|
|
4260
3029
|
"kind": "full",
|
|
4261
|
-
"version": "0.
|
|
3030
|
+
"version": "0.2.0",
|
|
4262
3031
|
"description": "Turn any rr-based app into an MCP server that ChatGPT custom apps, Claude.ai connectors, Cursor MCP, and other AI clients authenticate to. OAuth 2.1 + PKCE flow with code → bearer exchange, env-configured vendor-host allowlist, single-use codes, 1-year bearer tokens, scope-tagged tools, opaque error collapsing, constant-time token compare. Static MCP_API_KEY fallback for service-account / CI scripts. Sanitized 2026-05-16 from rahmanef.com's production MCP integration — vendor literals (chatgpt.com / OpenAI paths) replaced with MCP_OAUTH_ALLOWED_HOSTS + MCP_OAUTH_ALLOWED_PATH_PREFIXES env vars so the slice ships portable.",
|
|
4263
3032
|
"source": "rahmanef.com",
|
|
4264
3033
|
"slicePath": "frontend/slices/create-your-mcp",
|
|
@@ -4404,7 +3173,7 @@
|
|
|
4404
3173
|
"title": "Platform Admin — Multi-Tenant Control Plane",
|
|
4405
3174
|
"category": "infra",
|
|
4406
3175
|
"kind": "full",
|
|
4407
|
-
"version": "0.
|
|
3176
|
+
"version": "0.2.0",
|
|
4408
3177
|
"description": "Multi-tenant SaaS control plane. Workspace lifecycle ops (list/delete/cascade), per-tenant tier presets (gates + quota), KPI dashboard grid. Consumer-domain bits injected via adapter props (tenantTablesAdapter / tierPresets / kpiSources). Contract-only scaffold; canonical implementation lands via /rr-send from superspace. See docs/contract-negotiations-2026-05-15.md §4.",
|
|
4409
3178
|
"source": "rahmanef63/resource-site",
|
|
4410
3179
|
"slicePath": "frontend/slices/platform-admin",
|
|
@@ -4451,7 +3220,7 @@
|
|
|
4451
3220
|
"title": "Audit Log — Workspace Events",
|
|
4452
3221
|
"category": "infra",
|
|
4453
3222
|
"kind": "backend",
|
|
4454
|
-
"version": "0.
|
|
3223
|
+
"version": "0.3.0",
|
|
4455
3224
|
"description": "Workspace-scoped audit event recorder. Canonical logAuditEvent helper for mutations + actions; supports entity tracking, before/after diff, IP/user-agent capture.",
|
|
4456
3225
|
"source": "rahmanef63/resource-site",
|
|
4457
3226
|
"slicePath": "frontend/slices/audit-log",
|
|
@@ -4482,7 +3251,7 @@
|
|
|
4482
3251
|
"title": "Comments — Threaded",
|
|
4483
3252
|
"category": "content",
|
|
4484
3253
|
"kind": "full",
|
|
4485
|
-
"version": "0.
|
|
3254
|
+
"version": "0.3.0",
|
|
4486
3255
|
"description": "Polymorphic-target threaded comments. Consumer picks `TargetRef = { kind, id, subId? }` (e.g. page+block, blog+slug, task+id). Reply nesting is real: `parentId` end-to-end + `buildThread(flat) → CommentNode[]` tree (oldest-first, orphan-safe). Renderless <CommentsThread> + <CommentsAnchor> wrappers; useComments(bindings, opts) returns items + `tree` + openCount + CRUD + forbiddenWords guard. Adapter pattern — see contract-negotiations §1.",
|
|
4487
3256
|
"source": "rahmanef63/resource-site",
|
|
4488
3257
|
"slicePath": "frontend/slices/comments",
|
|
@@ -4518,7 +3287,7 @@
|
|
|
4518
3287
|
"title": "SEO — AI Metadata Generator",
|
|
4519
3288
|
"category": "content",
|
|
4520
3289
|
"kind": "full",
|
|
4521
|
-
"version": "0.
|
|
3290
|
+
"version": "0.3.0",
|
|
4522
3291
|
"description": "Service slice for SEO metadata generation — Anthropic-backed action with per-user 24h cost guard + portable persona prop. No public route. Backend exposes generate + generateAndApply mutations gated by requireAdmin; consumers inject brand voice via the personaContext arg (or buildSeoSystemPrompt factory).",
|
|
4523
3292
|
"source": "rahmanef63/resource-site",
|
|
4524
3293
|
"slicePath": "frontend/slices/seo",
|
|
@@ -4556,7 +3325,7 @@
|
|
|
4556
3325
|
"title": "Markdown — page container with CRUD tabs + diagrams",
|
|
4557
3326
|
"category": "content",
|
|
4558
3327
|
"kind": "ui",
|
|
4559
|
-
"version": "0.
|
|
3328
|
+
"version": "0.3.1",
|
|
4560
3329
|
"description": "Markdown (.md) page container with optional CRUD surfaces. <MarkdownPage content={md} tabs={['read','write','review']}/> — Read renders rich text (headings, lists, todo, GitHub-style callouts, fenced code, KaTeX, tables, images, <details> toggles, inline marks); Write is a raw-source editor with snippet toolbar + live preview; Review overlays block-anchored comments (add/resolve, controlled via onAddComment/onResolveComment or internal fallback). Fenced ```mermaid blocks render as SVG diagrams (dynamic-imported mermaid) and ```chart blocks as recharts bar/line/area/pie from a JSON spec. Self-contained: ships its own parser (parseMarkdown → MdNode[]) + inline renderer, no notion runtime dependency. Sync is by shared grammar: the notion cluster's blocksToMarkdown / markdownToBlocks bridge (@notion/shared/lib/markdown) emits/consumes the exact same markdown this slice parses, so anything readable in the notion block page is readable here and vice-versa. No store, no Convex — comments CRUD is consumer-wired callbacks.",
|
|
4561
3330
|
"source": "rahman-resources",
|
|
4562
3331
|
"slicePath": "frontend/slices/markdown",
|
|
@@ -4595,7 +3364,7 @@
|
|
|
4595
3364
|
"title": "Notion — Block Editor",
|
|
4596
3365
|
"category": "content",
|
|
4597
3366
|
"kind": "full",
|
|
4598
|
-
"version": "1.
|
|
3367
|
+
"version": "1.1.1",
|
|
4599
3368
|
"description": "Nested vertical slice (slice-of-slices) housing the full notion-page-clone block editor. Mount <PageEditor pageId/> inside <EditorAdapterProvider adapter/> — with `{}` it is a working plain-text/markdown block editor (slash menu, markdown triggers `# - > [] etc.`, dnd-kit drag with column layouts, per-block toolbar with turn-into/color/duplicate, per-block undo, paste-markdown import); host capabilities light up per optional adapter: data (block+page CRUD), selection (multi-select), comments (per-block popover), ai (Ask-AI panel), database (render + picker), mention (@-typeahead), page (nav/uploads/covers). Cluster-private shared layer under @notion/* — vendored block/page/database model, uid, inline markdown, page→md/html export. Pure convex block helpers (_blocks/_blockOps, unit-tested) ship in convex/features/notion. Same markdown grammar as the standalone `markdown` slice (blocksToMarkdown/markdownToBlocks bridge).",
|
|
4600
3369
|
"source": "notion-page-clone",
|
|
4601
3370
|
"slicePath": "frontend/slices/notion",
|
|
@@ -4639,17 +3408,22 @@
|
|
|
4639
3408
|
"title": "Landing Sections",
|
|
4640
3409
|
"category": "content",
|
|
4641
3410
|
"kind": "ui",
|
|
4642
|
-
"version": "0.
|
|
4643
|
-
"description": "Canonical landing-page composition slice — replaces the former standalone hero / cta / pricing-page / faq-section / feature-grid / testimonials-grid / blog-section / portfolio-section / changelog-feed slices (all merged here as `kind` variants in v0.2.0). Ships a pure reducer + LandingProvider store adapter + admin LandingView/LandingEditorView built on the shared CRUD primitives, plus a per-section LandingSectionShell
|
|
4644
|
-
"source": "rahman-resources",
|
|
3411
|
+
"version": "0.4.0",
|
|
3412
|
+
"description": "Canonical landing-page composition slice — replaces the former standalone hero / cta / pricing-page / faq-section / feature-grid / testimonials-grid / blog-section / portfolio-section / changelog-feed slices (all merged here as `kind` variants in v0.2.0). Ships a pure reducer (v0.4.0: LANDING_UPSERT auto-shifts sibling `order` to keep positions unique; LANDING_DELETE closes the gap) + LandingProvider store adapter + admin LandingView/LandingEditorView built on the shared CRUD primitives, plus a per-section LandingSectionShell (background image + custom Tailwind className overlay + scroll-reveal). NEW in v0.4.0: a `sections/` library of config-driven public renderers (StatsSection, TestimonialsSection, FaqSection, PricingSection, NewsletterSection, CustomSection) that read `LandingSection.config` JSON merged over template defaults — content stays dashboard-controlled without per-template renderer code; plus `parse-config` helpers (parseConfigBadge/parseConfigField) and `sections/config` guards (parseConfigObject, cfg*). Sections carry { kind, order, title, subtitle, enabled, imageUrl, imageRatio, bgImageUrl, className, config (JSON) } with up/down reorder arrows. Lifted from the _templates fleet `_shared/landing` (2026-06-11) — the 8 standalone templates ship a byte-similar copy; this rr slice is the SSOT. Used by all 7 rr website templates.",
|
|
3413
|
+
"source": "rahman-resources (lifted from _templates fleet)",
|
|
4645
3414
|
"slicePath": "frontend/slices/landing-sections",
|
|
4646
3415
|
"convexPaths": [],
|
|
4647
3416
|
"npm": [
|
|
4648
|
-
"lucide-react@^0.400.0"
|
|
3417
|
+
"lucide-react@^0.400.0",
|
|
3418
|
+
"embla-carousel-autoplay@^8.6.0",
|
|
3419
|
+
"next@^15"
|
|
4649
3420
|
],
|
|
4650
3421
|
"shadcn": [
|
|
3422
|
+
"accordion",
|
|
4651
3423
|
"badge",
|
|
4652
3424
|
"button",
|
|
3425
|
+
"card",
|
|
3426
|
+
"carousel",
|
|
4653
3427
|
"dialog",
|
|
4654
3428
|
"input",
|
|
4655
3429
|
"label",
|
|
@@ -4666,16 +3440,92 @@
|
|
|
4666
3440
|
"landing",
|
|
4667
3441
|
"cms",
|
|
4668
3442
|
"sections",
|
|
4669
|
-
"crud"
|
|
3443
|
+
"crud",
|
|
3444
|
+
"renderer"
|
|
3445
|
+
],
|
|
3446
|
+
"agentRecipe": "Run `npx rr add landing-sections`. Fold `landingReducer` into your root reducer (cases LANDING_UPSERT + LANDING_DELETE), seed State.landingSections with `defaultLandingSections()`, wrap your StoreProvider with `<LandingProvider value={adapter}/>` where adapter maps {items, publicBase, adminBase, create, update, remove} from your dispatch. Mount `<LandingView/>` at `/admin/landing` and `<LandingEditorView id={params.id}/>` at `/admin/landing/[id]`. In HomePage iterate `state.landingSections.filter(s => s.enabled).sort((a,b) => a.order - b.order)` and render each inside `<LandingSectionShell section={s}>`; for stats/testimonials/pricing/faq/newsletter/custom kinds drop in the shipped `<StatsSection/>` etc. (they read `section.config` JSON over your template defaults), or map the remaining kinds (hero/features/blog/etc.) to your own renderer. Use `parseConfigBadge(section.config)` for a section badge. Requires the template-base shared surface that ships in every rr website template: `@/components/templates/_shared/motion` (Reveal/Stagger/CountUp/Marquee/useInView — the motion-kit primitives), `@/components/templates/_shared/ui/section-head`, and `@/components/templates/_shared/crud/*`. Sections also use shadcn accordion/card/carousel + embla-carousel-autoplay."
|
|
3447
|
+
},
|
|
3448
|
+
{
|
|
3449
|
+
"slug": "motion-kit",
|
|
3450
|
+
"title": "Motion Kit — scroll reveals, carousel, accordion, micro-interactions",
|
|
3451
|
+
"category": "ui",
|
|
3452
|
+
"kind": "ui",
|
|
3453
|
+
"version": "0.1.0",
|
|
3454
|
+
"description": "Zero-dependency scroll-motion layer (IntersectionObserver + CSS) plus an embla carousel and a radix accordion, packaged so any page gets tasteful entrance animations without pulling in a motion library. Ships Reveal (fade-up/fade/fade-left/fade-right/zoom), Stagger (incremental per-child reveal for grids/lists), CountUp (rAF count-to-value with locale formatting; integers), Marquee (infinite logo/brand strip with hover-pause + edge fade), and the useInView hook behind them; plus Carousel (embla, optional Autoplay plugin) and Accordion (radix). All reveal + keyframe motion is gated behind prefers-reduced-motion. Consumers append globals-motion.css to their app/globals.css for the [data-reveal] transitions + accordion/marquee/blob keyframes. Lifted 2026-06-10 from the _templates fleet `_shared/motion` copy — the 8 standalone website templates already ship a byte-identical copy; this rr slice is the SSOT so future scaffolds get it via `npx rr add motion-kit`. Pairs with landing-sections (its renderers consume these primitives).",
|
|
3455
|
+
"source": "rahman-resources (lifted from _templates fleet)",
|
|
3456
|
+
"slicePath": "frontend/slices/motion-kit",
|
|
3457
|
+
"convexPaths": [],
|
|
3458
|
+
"npm": [
|
|
3459
|
+
"embla-carousel-react@^8.6.0",
|
|
3460
|
+
"embla-carousel-autoplay@^8.6.0",
|
|
3461
|
+
"radix-ui@^1.4.3",
|
|
3462
|
+
"lucide-react@^0.400.0"
|
|
3463
|
+
],
|
|
3464
|
+
"shadcn": [
|
|
3465
|
+
"button"
|
|
3466
|
+
],
|
|
3467
|
+
"env": [],
|
|
3468
|
+
"peers": [],
|
|
3469
|
+
"providers": [],
|
|
3470
|
+
"tags": [
|
|
3471
|
+
"ui",
|
|
3472
|
+
"motion",
|
|
3473
|
+
"animation",
|
|
3474
|
+
"scroll",
|
|
3475
|
+
"reveal",
|
|
3476
|
+
"carousel",
|
|
3477
|
+
"accordion",
|
|
3478
|
+
"marquee",
|
|
3479
|
+
"countup",
|
|
3480
|
+
"embla"
|
|
3481
|
+
],
|
|
3482
|
+
"agentRecipe": "Run `npx rr add motion-kit`. Append the contents of `globals-motion.css` to your `app/globals.css` (after `@import \"tailwindcss\";`) — without it `data-reveal` elements stay static and the accordion snaps. Then import from `@/features/motion-kit`: `<Reveal variant=\"fade-up\">`, `<Stagger itemClassName=\"h-full\">{cards}</Stagger>` for grids, `<CountUp value={4800} />` (integers), `<Marquee speed={32}>{logos}</Marquee>`. Carousel: pair with `Autoplay` from embla-carousel-autoplay. Any component consuming a passed render/icon fn AND these hooks must be `\"use client\"`. Hover-lift convention: `transition-[translate,box-shadow] duration-300 hover:-translate-y-1 hover:shadow-lg`."
|
|
3483
|
+
},
|
|
3484
|
+
{
|
|
3485
|
+
"slug": "storefront-checkout",
|
|
3486
|
+
"title": "Storefront Checkout — guest cart + checkout composition",
|
|
3487
|
+
"category": "content",
|
|
3488
|
+
"kind": "ui",
|
|
3489
|
+
"version": "0.2.0",
|
|
3490
|
+
"description": "Guest-friendly shopping cart for catalog storefronts. CartProvider holds items in React context with localStorage persistence (anonymous buyers keep their cart across reloads, zero backend). CartWidget is a header trigger with live count badge opening a slide-over Sheet: per-item qty steppers, remove, subtotal, checkout CTA to a host route. CheckoutSummary renders the order panel on the checkout page. Props-driven R3 — no convex/react anywhere; the host resolves a NUMERIC price per catalog item before add() and MUST re-price every line server-side when placing the order (client subtotal is display-only, never the charge). Proven end-to-end on wirausaha-os: catalog → cart → server-priced placeOrder action → DOKU Direct instructions → webhook flips paid (reactive). Pairs with doku-payment ≥0.2 (guest checkout: optional userId + buyer contact, key-guarded actions, guest-readable status query) or midtrans-payment.",
|
|
3491
|
+
"source": "wirausaha-os guest-checkout build-out 2026-06-10",
|
|
3492
|
+
"slicePath": "frontend/slices/storefront-checkout",
|
|
3493
|
+
"convexPaths": [],
|
|
3494
|
+
"npm": [],
|
|
3495
|
+
"shadcn": [
|
|
3496
|
+
"badge",
|
|
3497
|
+
"button",
|
|
3498
|
+
"card",
|
|
3499
|
+
"separator",
|
|
3500
|
+
"sheet"
|
|
3501
|
+
],
|
|
3502
|
+
"env": [],
|
|
3503
|
+
"peers": [
|
|
3504
|
+
{
|
|
3505
|
+
"slug": "doku-payment",
|
|
3506
|
+
"range": "^0.2",
|
|
3507
|
+
"reason": "Optional payment step — checkout page composes DokuDirectForm + DokuPaymentInstructions (or swap midtrans-payment)."
|
|
3508
|
+
}
|
|
3509
|
+
],
|
|
3510
|
+
"providers": [],
|
|
3511
|
+
"tags": [
|
|
3512
|
+
"ecommerce",
|
|
3513
|
+
"cart",
|
|
3514
|
+
"checkout",
|
|
3515
|
+
"guest",
|
|
3516
|
+
"storefront",
|
|
3517
|
+
"payment",
|
|
3518
|
+
"localStorage",
|
|
3519
|
+
"sheet"
|
|
4670
3520
|
],
|
|
4671
|
-
"agentRecipe": "Run `npx rr add
|
|
3521
|
+
"agentRecipe": "Run `npx rr add storefront-checkout`. Wrap your public layout once with `<CartProvider storageKey=\"my-shop-cart\">` and mount `<CartWidget checkoutHref=\"/checkout\" />` in the header extras. On product surfaces call `useCart().add({ slug, name, price, priceLabel, emoji })` with a host-resolved NUMERIC price. Build a /checkout route composing `<CheckoutSummary />` + a payment form (doku-payment's DokuDirectForm): its onSubmit calls YOUR Convex place-order action which re-prices each {slug, qty} from your catalog table server-side, generates an unguessable orderId, calls api.features.payment.actions.doku.createDirectPayment, records your domain order row, and returns { ok, orderId, instructions, expiresAt } ({ ok:false, notice } when DOKU creds are unset — surface it in the form and offer a contact fallback). After success render DokuPaymentInstructions + reactive status via api.features.payment.query.getOrderByOrderId. Reference: template-wirausaha-os convex/checkout.ts + slices/checkout/CheckoutPage.tsx."
|
|
4672
3522
|
},
|
|
4673
3523
|
{
|
|
4674
3524
|
"slug": "theme-presets",
|
|
4675
3525
|
"title": "Theme Presets — unified switcher with bundled tweakcn registry",
|
|
4676
3526
|
"category": "ui",
|
|
4677
3527
|
"kind": "ui",
|
|
4678
|
-
"version": "0.
|
|
3528
|
+
"version": "0.4.0",
|
|
4679
3529
|
"description": "Single unified theme controller for next-themes apps. ThemePresetSwitcher ships a Palette-icon Popover trigger with three stacked sections: (1) sticky light/dark/system mode tabs, (2) sticky preset-count row with a Default reset button, (3) scrollable color-preset list grouped by mood (Profesional / Bold / Hangat / Artistik / Gelap + Lainnya). Hover-to-preview + click-to-commit + restore-on-close semantics. ThemePresetProvider context wraps state so deeply-nested consumers read via useThemePreset() instead of mounting the switcher directly. ThemeColorSync wrapper enables live tweakcn-CSS-variable preview on routes that need it. Tweakcn registry (~30 curated presets after HIDDEN_PRESETS filter drops Doom 64 / Cyberpunk / Neo Brutalism / Bubblegum / Candyland / Pastel Dreams) ships inside the slice as registry-data.json and loads lazily via dynamic import — code-splits into its own chunk, zero consumer public/ setup, no network roundtrip to a hosted URL. localStorage key `host:theme-preset` (rename via slice fork). CK-1F (2026-05-23) — collapsed prior TweakcnSwitcher + ThemePicker + phantom `theme-preset-switcher` catalog entry into this single component.",
|
|
4680
3530
|
"source": "CareerPack + notion-page-clone",
|
|
4681
3531
|
"slicePath": "frontend/slices/theme-presets",
|
|
@@ -4708,7 +3558,7 @@
|
|
|
4708
3558
|
"title": "Onboarding Wizard — first-run site setup",
|
|
4709
3559
|
"category": "ui",
|
|
4710
3560
|
"kind": "ui",
|
|
4711
|
-
"version": "0.
|
|
3561
|
+
"version": "0.2.0",
|
|
4712
3562
|
"description": "Post-claim onboarding wizard for clone-to-own templates, graduated from the headless template surface (2026-06-06). Multi-step card flow (Identitas / Branding / Konten / Selesai) that stores ALL site config in the host backend via a props-driven save callback — a non-coder configures their site with zero code. Branding step ships a readable shadcn Select theme-preset picker (color swatches per preset + grouped headers + live preview callback — replaces the white-on-white native select), brand color quick-chips, light/dark/system default mode, logo/favicon upload via injected ImageField, and optional Analytics ID. Identity step hints invalid email format. 'Lewati setup' marks onboarded without fields and reverts any browsed-but-unsaved preset. Props-driven (R3): no convex/react import — host wires settings.upsert / seed.seedSample / setup.status into props; pairs naturally with the theme-presets slice (registry + tweakcnSwatches + previewTweakcnPreset) but works with any theme system or none.",
|
|
4713
3563
|
"source": "personal-brand-os",
|
|
4714
3564
|
"slicePath": "frontend/slices/onboarding-wizard",
|
|
@@ -4743,7 +3593,7 @@
|
|
|
4743
3593
|
"title": "Files — pluggable upload + URL resolver with storage-adapter contract",
|
|
4744
3594
|
"category": "data",
|
|
4745
3595
|
"kind": "ui",
|
|
4746
|
-
"version": "0.
|
|
3596
|
+
"version": "0.3.0",
|
|
4747
3597
|
"description": "Host-pluggable file upload + URL resolution. Ships <FileUploadButton>, <FileChip>, useFileUpload(), useFileUrl() — all reading from a FilesAdapter the host wires via <FilesAdapterProvider>. Bundled localStorage demo adapter stores blobs as data URLs (small files only). Drop in your own adapter for Convex / S3 / GCS / R2. The slice itself has zero backend coupling, proving the storage-adapter pattern for the rest of the open-silong blocked-pending-adapter wave (cover, workspace-io, templates, …).",
|
|
4748
3598
|
"source": "notion-page-clone",
|
|
4749
3599
|
"slicePath": "frontend/slices/files",
|
|
@@ -4799,7 +3649,7 @@
|
|
|
4799
3649
|
"title": "Notion Database",
|
|
4800
3650
|
"category": "ui",
|
|
4801
3651
|
"kind": "ui",
|
|
4802
|
-
"version": "0.
|
|
3652
|
+
"version": "0.18.0",
|
|
4803
3653
|
"description": "Drop-in Notion-style database surface. 11 views (table, board, list, gallery, calendar, feed, chart, dashboard, form, map, timeline), 18 property/cell types, and a per-type column-header config menu (number format, date ranges, select, relation, rollup, formula) plus filter / sort / group / calculate, row peek, row multi-select, table cell selection + drag-to-fill (click a cell, drag the handle to copy down — merged from the former database-cell-selection slice in v0.16), and CSV + JSON import-export. Pure and props-driven — the host owns the data and dispatches change callbacks. Domain types live in notion-shell (install it as the peer). Full release history in CHANGELOG.md.",
|
|
4804
3654
|
"source": "open-silong",
|
|
4805
3655
|
"slicePath": "frontend/slices/notion-database",
|
|
@@ -4878,7 +3728,7 @@
|
|
|
4878
3728
|
"title": "Image Picker — one-button image/wallpaper chooser (gallery · upload · link · Unsplash · reposition)",
|
|
4879
3729
|
"category": "ui",
|
|
4880
3730
|
"kind": "ui",
|
|
4881
|
-
"version": "0.
|
|
3731
|
+
"version": "0.3.0",
|
|
4882
3732
|
"description": "Generic image/wallpaper picker — not coupled to Notion. The headline API is ONE button (ImagePickerButton) that opens a dialog with 4 tabs: Gallery (12 colours + 8 gradients + Notion textures), Upload (drag/click, ≤8MB), Link (paste any https image URL), Unsplash (bundled curated landscapes + live search). On pick, onChange fires with an ImageValue ({ type, value, positionY?, metadata? }). ImageBanner is the optional reposition-able band — render an ImageValue as a full-width cover / profile header / card hero with hover controls: Change (opens the dialog), Reposition (drag the vertical focal point), Remove. The slice imports NO other slice and NO backend — the upload backend and Unsplash search are INJECTED as props (onUpload + searchUnsplash), so it drops into any app: wire onUpload to the `files` slice and searchUnsplash to a server route via unsplashSearchVia('/api/unsplash') that holds UNSPLASH_ACCESS_KEY server-side (never NEXT_PUBLIC). Ships a curated Unsplash fallback + gallery so it works with zero config. parseImage normalizes legacy raw-string values; imageStyle builds the focal-point CSS. Wired into the notion-page-clone template as the page cover via NotionPage's coverSlot.",
|
|
4883
3733
|
"source": "notion-page-clone",
|
|
4884
3734
|
"slicePath": "frontend/slices/image-picker",
|
|
@@ -4963,7 +3813,7 @@
|
|
|
4963
3813
|
"title": "Notion Shell — page + block editor primitives (pure, no sidebar/database)",
|
|
4964
3814
|
"category": "ui",
|
|
4965
3815
|
"kind": "ui",
|
|
4966
|
-
"version": "0.
|
|
3816
|
+
"version": "0.24.0",
|
|
4967
3817
|
"description": "Portable Notion-style PAGE EDITOR primitives. v0.22 split the tree-nav SIDEBAR out into the standalone `notion-sidebar` slice (so the page editor and the sidebar are independently reusable); embedded DATABASES already live in the `notion-database` peer. notion-shell ships: NotionPage (optional cover image band + header + body), NotionHeader, NotionBlock (live inline-markdown decorator, hover actions menu, optional dragHandle slot, BUILT-IN code (highlight.js) + equation (KaTeX) blocks), SlashMenu (searchable block-type picker w/ keyboard nav), BlockActionsMenu (turn-into / duplicate / delete), InsertBlockButton (`+` trigger w/ SlashMenu), SortableBlockList (@dnd-kit render-prop wrapper for block reorder), PageActionsMenu (header dropdown: cover/favorite/duplicate/export/trash), InlineFormatToolbar + BlockColorPicker (colour) + MentionTypeahead + PageLayoutSection (layout). SPECIALISED BLOCK RENDERERS: ImageRenderer, EmbedRenderer (YouTube/Vimeo/Loom/Figma/CodePen/Spotify auto-detect). Domain types (Database, Property, PropertyValue, DbView, DatabaseViewConfig, DatabaseFilter, DatabaseSort) remain in notion-shell as the single source of truth (Page.rowOfDatabaseId + rowProps reference them). Pure / props-driven — host owns data + change handlers. Compose notion-sidebar + notion-shell + notion-database for the full Notion-clone OS.",
|
|
4968
3818
|
"source": "notion-page-clone",
|
|
4969
3819
|
"slicePath": "frontend/slices/notion-shell",
|
|
@@ -5053,7 +3903,7 @@
|
|
|
5053
3903
|
"title": "Library — resource hub (prompts · visuals · snippets · links)",
|
|
5054
3904
|
"category": "data",
|
|
5055
3905
|
"kind": "full",
|
|
5056
|
-
"version": "0.
|
|
3906
|
+
"version": "0.2.0",
|
|
5057
3907
|
"description": "Grab-bag resource hub. One polymorphic `libraryItems` table holds six kinds — prompt, image, video, link, download, snippet — with per-kind payload fields switched on `kind` (no joins). Attribution-first: every item carries optional source/license/tools so re-shares stay correct. Collections group items. Convex-backed (schema + queries + unauthenticated mutations); SEO override fields reused from the `seo` peer slice so the surface matches blog/projects rows. Public view = filterable card grid + per-item detail with copy-to-clipboard for prompts/snippets and an opt-in upvote control. Lifted 2026-05-28 from rahmanef.com; 432-LOC mutations + 330-LOC detail split for the 200-LOC cap; Indonesian copy + custom primitives stripped (prop-driven English defaults); cross-slice auth + comments-votes coupling dropped (consumer wraps mutations + supplies the upvote handler).",
|
|
5058
3908
|
"source": "rahmanef.com",
|
|
5059
3909
|
"slicePath": "frontend/slices/library",
|
|
@@ -5093,7 +3943,7 @@
|
|
|
5093
3943
|
"title": "Data Table — TanStack + shadcn",
|
|
5094
3944
|
"category": "data",
|
|
5095
3945
|
"kind": "ui",
|
|
5096
|
-
"version": "0.
|
|
3946
|
+
"version": "0.2.0",
|
|
5097
3947
|
"description": "Generic DataTable<TData> on TanStack Table v8 + shadcn Table. Sorting (3-state column headers), toolbar search bound to any column, pagination, checkbox row selection with count footer, column-visibility dropdown. density compact|comfortable + selectable on|off variant axes. Pure UI — consumer supplies columns + data.",
|
|
5098
3948
|
"source": "rr original (shadcn data-table pattern)",
|
|
5099
3949
|
"slicePath": "frontend/slices/data-table",
|
|
@@ -5125,12 +3975,51 @@
|
|
|
5125
3975
|
],
|
|
5126
3976
|
"agentRecipe": "Run `npx rr add data-table`. Build ColumnDef<TData>[] (use sortable headers via DataTableColumnHeader), pass data + columns to <DataTable>. searchKey binds the toolbar input to one column; selectable prepends the checkbox column; density tightens row padding."
|
|
5127
3977
|
},
|
|
3978
|
+
{
|
|
3979
|
+
"slug": "pages-cms",
|
|
3980
|
+
"title": "Pages CMS — block-composed multi-page editor",
|
|
3981
|
+
"category": "content",
|
|
3982
|
+
"kind": "ui",
|
|
3983
|
+
"version": "0.1.0",
|
|
3984
|
+
"description": "A small multi-page CMS. PagesView (list + CRUD: create/edit/duplicate/delete/publish) + PageEditorView (metadata form + block editor) + a read-only public BlockRenderer. Pages are composed of 11 block kinds: hero, text, feature-list, cta, logo-cloud, testimonial, video, image-gallery, faq, stats, pricing-table. Ships a localStorage adapter (LocalPagesProvider) + a generic Home/About/Pricing seed so it runs env-free — or wire the bundled pagesReducer + PagesProvider to your own backend (optional Convex copy-source included). Pure UI; no Convex required.",
|
|
3985
|
+
"source": "rr original (generalized from saas-marketing pages engine)",
|
|
3986
|
+
"slicePath": "frontend/slices/pages-cms",
|
|
3987
|
+
"convexPaths": [],
|
|
3988
|
+
"npm": [
|
|
3989
|
+
"lucide-react"
|
|
3990
|
+
],
|
|
3991
|
+
"shadcn": [
|
|
3992
|
+
"badge",
|
|
3993
|
+
"button",
|
|
3994
|
+
"table",
|
|
3995
|
+
"input",
|
|
3996
|
+
"textarea",
|
|
3997
|
+
"label",
|
|
3998
|
+
"select",
|
|
3999
|
+
"switch",
|
|
4000
|
+
"card",
|
|
4001
|
+
"dialog"
|
|
4002
|
+
],
|
|
4003
|
+
"env": [],
|
|
4004
|
+
"peers": [],
|
|
4005
|
+
"providers": [],
|
|
4006
|
+
"tags": [
|
|
4007
|
+
"content",
|
|
4008
|
+
"cms",
|
|
4009
|
+
"pages",
|
|
4010
|
+
"blocks",
|
|
4011
|
+
"editor",
|
|
4012
|
+
"builder",
|
|
4013
|
+
"basics"
|
|
4014
|
+
],
|
|
4015
|
+
"agentRecipe": "Run `npx rr add pages-cms`. Wrap your admin surface in <LocalPagesProvider seed={defaultPages()}> (localStorage, zero backend) or supply your own PagesStore via <PagesProvider>. Render <PagesView publicBase adminBase> for the list and <PageEditorView id publicBase adminBase> for the editor route. Public catch-all looks up the page by slug and renders <BlocksRenderer blocks={page.blocks} />. Add block kinds by extending the PageBlock union + emptyBlock + the renderer/editor switches."
|
|
4016
|
+
},
|
|
5128
4017
|
{
|
|
5129
4018
|
"slug": "empty-states",
|
|
5130
4019
|
"title": "Empty States — 404/500/403 + zero-data",
|
|
5131
4020
|
"category": "ui",
|
|
5132
4021
|
"kind": "ui",
|
|
5133
|
-
"version": "0.
|
|
4022
|
+
"version": "0.2.0",
|
|
5134
4023
|
"description": "Configurable EmptyState composing the shadcn Empty primitive: kind presets 404 / 500 / 403 / no-results / empty-list / first-use with default lucide icon + copy, all overridable. Primary/secondary actions. ErrorPage full-page wrapper is a drop-in for app/not-found.tsx and app/error.tsx (recipes in README).",
|
|
5135
4024
|
"source": "rr original",
|
|
5136
4025
|
"slicePath": "frontend/slices/empty-states",
|
|
@@ -5160,7 +4049,7 @@
|
|
|
5160
4049
|
"title": "Loading States — skeletons + spinners SSOT",
|
|
5161
4050
|
"category": "ui",
|
|
5162
4051
|
"kind": "ui",
|
|
5163
|
-
"version": "0.
|
|
4052
|
+
"version": "0.2.0",
|
|
5164
4053
|
"description": "Configurable LoadingSkeleton composing the shadcn Skeleton primitive: kind presets text / card / list / table / form / page / block with overridable count + columns. Spinner-based LoadingState (inline / block / overlay) covers in-flight work where a skeleton would be wrong. The page kind drops straight into a route loading.tsx (recipe in README).",
|
|
5165
4054
|
"source": "rr original",
|
|
5166
4055
|
"slicePath": "frontend/slices/loading-states",
|
|
@@ -5189,7 +4078,7 @@
|
|
|
5189
4078
|
"title": "Marketing Chrome — Header + Footer",
|
|
5190
4079
|
"category": "ui",
|
|
5191
4080
|
"kind": "ui",
|
|
5192
|
-
"version": "0.
|
|
4081
|
+
"version": "0.2.0",
|
|
5193
4082
|
"description": "MarketingHeader (split | centered | minimal layouts, sticky option, mobile sheet menu) + MarketingFooter (columns | slim layouts, link columns, social icons, legal bar). Brand / nav / CTA / columns all props — no hardcoded content. Lucide stand-ins for brand glyphs; swap a brand icon set post-copy (README).",
|
|
5194
4083
|
"source": "rr original (extracted from template duplication)",
|
|
5195
4084
|
"slicePath": "frontend/slices/marketing-chrome",
|
|
@@ -5219,7 +4108,7 @@
|
|
|
5219
4108
|
"title": "Settings Page — adapter-driven shell",
|
|
5220
4109
|
"category": "ui",
|
|
5221
4110
|
"kind": "ui",
|
|
5222
|
-
"version": "0.
|
|
4111
|
+
"version": "0.2.0",
|
|
5223
4112
|
"description": "SettingsShell two-column settings surface: section nav (mobile collapses to a Select) + Profile (avatar/name/email/bio), Preferences (theme/language/density), Notifications (switch rows), Danger zone (AlertDialog-confirmed delete). SettingsAdapter = load() + save(patch) — wire to Convex or anything; createMemoryAdapter ships for demos. Optimistic save with rollback.",
|
|
5224
4113
|
"source": "rr original",
|
|
5225
4114
|
"slicePath": "frontend/slices/settings-page",
|
|
@@ -5257,7 +4146,7 @@
|
|
|
5257
4146
|
"title": "Notifications Center — bell + inbox",
|
|
5258
4147
|
"category": "ui",
|
|
5259
4148
|
"kind": "ui",
|
|
5260
|
-
"version": "0.
|
|
4149
|
+
"version": "0.2.0",
|
|
5261
4150
|
"description": "NotificationBell (ghost icon button, unread badge, popover or sheet surface) + NotificationList (All/Unread tabs, mark-all-read, clear, ScrollArea rows with kind icon, relative time, hover actions). NotificationsAdapter contract (list/markRead/markAllRead/dismiss/clear) with a useSyncExternalStore-friendly memory adapter included — swap in Convex for production (sketch in README).",
|
|
5262
4151
|
"source": "rr original (appshell toast-log pattern, standalone)",
|
|
5263
4152
|
"slicePath": "frontend/slices/notifications-center",
|
|
@@ -5285,6 +4174,99 @@
|
|
|
5285
4174
|
"basics"
|
|
5286
4175
|
],
|
|
5287
4176
|
"agentRecipe": "Run `npx rr add notifications-center`. Mount <NotificationBell adapter> in your topbar. Implement NotificationsAdapter over your feed (Convex query + mutations) or start with createMemoryNotificationsAdapter(seed). surface=\"sheet\" for mobile-heavy apps."
|
|
4177
|
+
},
|
|
4178
|
+
{
|
|
4179
|
+
"slug": "media-studio",
|
|
4180
|
+
"title": "Media Studio — photo / social design canvas",
|
|
4181
|
+
"category": "os",
|
|
4182
|
+
"kind": "ui",
|
|
4183
|
+
"version": "1.0.0",
|
|
4184
|
+
"description": "A layered canvas studio: image/text/shape layers with filters, masks, transforms, safe-area guides and aspect presets (1:1/4:5/9:16/16:9), plus an export modal (download / copy / import JSON). Runs fully offline on bundled gradient-SVG samples. Host wiring is one call: configureMediaStudio({ saveDoc, imageSources }) lights up Save-to-host and feeds real image sources. Self-contained: inspector hooks are inert seams in lib/host.ts.",
|
|
4185
|
+
"source": "rahmanef63/os-vps",
|
|
4186
|
+
"slicePath": "frontend/slices/media-studio",
|
|
4187
|
+
"convexPaths": [],
|
|
4188
|
+
"npm": [
|
|
4189
|
+
"lucide-react"
|
|
4190
|
+
],
|
|
4191
|
+
"shadcn": [
|
|
4192
|
+
"button",
|
|
4193
|
+
"dialog",
|
|
4194
|
+
"badge",
|
|
4195
|
+
"tooltip",
|
|
4196
|
+
"scroll-area"
|
|
4197
|
+
],
|
|
4198
|
+
"env": [],
|
|
4199
|
+
"peers": [],
|
|
4200
|
+
"providers": [],
|
|
4201
|
+
"tags": [
|
|
4202
|
+
"canvas",
|
|
4203
|
+
"editor",
|
|
4204
|
+
"layers",
|
|
4205
|
+
"filters",
|
|
4206
|
+
"export",
|
|
4207
|
+
"design",
|
|
4208
|
+
"ui"
|
|
4209
|
+
],
|
|
4210
|
+
"agentRecipe": "Stack: Next 16 + React 19 + Tailwind 4 + shadcn/ui. Layered canvas editor. Fully client-side; no backend required.\n\nSTEP 1 — Install. `npx rr add media-studio`. Ensure `@/features/media-studio` resolves and Tailwind scans the slice folder.\n\nSTEP 2 — Deps. npm: `lucide-react`. shadcn: button, dialog, badge, tooltip, scroll-area.\n\nSTEP 3 — Mount. `<MediaStudio />` in a height-bearing box — unwired it edits bundled sample layers. Or register `mediaStudioApp` in an appshell manifest.\n\nSTEP 4 — Host wiring. `configureMediaStudio({ saveDoc, imageSources })` — saveDoc persists the serialized document (enables Save-to-host in the export modal); imageSources supplies image URLs for new layers."
|
|
4211
|
+
},
|
|
4212
|
+
{
|
|
4213
|
+
"slug": "quicklinks",
|
|
4214
|
+
"title": "Quicklinks — website shortcuts with favicons",
|
|
4215
|
+
"category": "os",
|
|
4216
|
+
"kind": "ui",
|
|
4217
|
+
"version": "1.0.0",
|
|
4218
|
+
"description": "A website-shortcut grid: add/remove links with auto favicons (Google s2) and new-tab open. State lives behind an injectable QuicklinksStore — createLocalStore persists to localStorage (SSR-safe hydrate), createMemoryStore suits previews/tests, configureQuicklinks swaps in a host store. Pairs with appshell: the useQuickLinks capability + QuicklinkIcon surface the same links in the dock/Launchpad/mobile grid.",
|
|
4219
|
+
"source": "rahmanef63/os-vps",
|
|
4220
|
+
"slicePath": "frontend/slices/quicklinks",
|
|
4221
|
+
"convexPaths": [],
|
|
4222
|
+
"npm": [
|
|
4223
|
+
"lucide-react"
|
|
4224
|
+
],
|
|
4225
|
+
"shadcn": [
|
|
4226
|
+
"button"
|
|
4227
|
+
],
|
|
4228
|
+
"env": [],
|
|
4229
|
+
"peers": [],
|
|
4230
|
+
"providers": [],
|
|
4231
|
+
"tags": [
|
|
4232
|
+
"shortcuts",
|
|
4233
|
+
"bookmarks",
|
|
4234
|
+
"favicons",
|
|
4235
|
+
"launcher",
|
|
4236
|
+
"ui"
|
|
4237
|
+
],
|
|
4238
|
+
"agentRecipe": "Stack: Next 16 + React 19 + Tailwind 4 + shadcn/ui. Website shortcut grid. Fully client-side; no backend required.\n\nSTEP 1 — Install. `npx rr add quicklinks`. Ensure `@/features/quicklinks` resolves and Tailwind scans the slice folder.\n\nSTEP 2 — Deps. npm: `lucide-react`. shadcn: button.\n\nSTEP 3 — Mount. `<Quicklinks />` — unwired it persists to localStorage (\"rr:quicklinks\") with 4 demo seeds. Or register `quicklinksApp` in an appshell manifest.\n\nSTEP 4 — Host store. `configureQuicklinks(store)` with { get, subscribe, add, remove, hydrate? } — or feed appshell's useQuickLinks capability from the same store so dock shortcuts stay in sync."
|
|
4239
|
+
},
|
|
4240
|
+
{
|
|
4241
|
+
"slug": "shell-settings",
|
|
4242
|
+
"title": "Shell Settings — settings-app UI primitives",
|
|
4243
|
+
"category": "ui",
|
|
4244
|
+
"kind": "ui",
|
|
4245
|
+
"version": "1.0.0",
|
|
4246
|
+
"description": "The settings-app building blocks: SettingsSection, Row, AccentSwatches, a slice-local Segmented control, and a ready AppearancePanel (style/mode/accent/wallpaper/device/transparency groups — every group optional). Pure presentation: the injected AppearanceAdapter IS the contract, so it binds to any appearance store (appshell capabilities, zustand, plain useState) with zero slice edits.",
|
|
4247
|
+
"source": "rahmanef63/os-vps",
|
|
4248
|
+
"slicePath": "frontend/slices/shell-settings",
|
|
4249
|
+
"convexPaths": [],
|
|
4250
|
+
"npm": [
|
|
4251
|
+
"lucide-react"
|
|
4252
|
+
],
|
|
4253
|
+
"shadcn": [
|
|
4254
|
+
"button",
|
|
4255
|
+
"switch",
|
|
4256
|
+
"toggle-group",
|
|
4257
|
+
"separator"
|
|
4258
|
+
],
|
|
4259
|
+
"env": [],
|
|
4260
|
+
"peers": [],
|
|
4261
|
+
"providers": [],
|
|
4262
|
+
"tags": [
|
|
4263
|
+
"settings",
|
|
4264
|
+
"preferences",
|
|
4265
|
+
"appearance",
|
|
4266
|
+
"primitives",
|
|
4267
|
+
"ui"
|
|
4268
|
+
],
|
|
4269
|
+
"agentRecipe": "Stack: Next 16 + React 19 + Tailwind 4 + shadcn/ui. Settings UI primitives. Pure presentation; state injected.\n\nSTEP 1 — Install. `npx rr add shell-settings`. Ensure `@/features/shell-settings` resolves and Tailwind scans the slice folder.\n\nSTEP 2 — Deps. npm: `lucide-react`. shadcn: button, switch, toggle-group, separator.\n\nSTEP 3 — Mount. `<AppearancePanel adapter={adapter} />` with an AppearanceAdapter (all groups optional — omit a group to hide it), or compose SettingsSection/Row/AccentSwatches/Segmented directly for custom panels.\n\nSTEP 4 — Bind. Wire the adapter to your appearance store (theme mode, accent, wallpaper, device, transparency) — the panel re-renders from the values you pass; no internal state."
|
|
5288
4270
|
}
|
|
5289
4271
|
]
|
|
5290
4272
|
}
|