rahman-resources 1.9.0 → 1.9.2

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.
Files changed (2) hide show
  1. package/lib/manifest.json +71 -9
  2. package/package.json +1 -1
package/lib/manifest.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 2,
3
- "generatedAt": "2026-05-28T06:14:32.508Z",
3
+ "generatedAt": "2026-05-31T10:45:23.016Z",
4
4
  "repo": "rahmanef63/resource-site",
5
5
  "branch": "main",
6
6
  "layouts": [
@@ -2579,6 +2579,28 @@
2579
2579
  "convex",
2580
2580
  "rbac"
2581
2581
  ]
2582
+ },
2583
+ {
2584
+ "slug": "library",
2585
+ "title": "Library — resource hub (prompts · visuals · snippets · links)",
2586
+ "category": "data",
2587
+ "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).",
2588
+ "source": "rahmanef.com",
2589
+ "install": "npx rahman-resources add library",
2590
+ "npmPackages": [],
2591
+ "exampleCode": "",
2592
+ "agentRecipe": "Run `npx rr add seo` (peer) then `npx rr add library`. Spread `seoTables` + `libraryTables` into your root Convex schema. Wrap the unauthenticated CRUD `internalMutation`s with your auth model (see README Install). Render `<LibraryIndex items={await fetchQuery(api.library.listPublic)} />` and `<LibraryDetail item={await fetchQuery(api.library.getBySlug, { slug })} />`. Pass `onUpvote` to enable voting (consumer-owned backend); override `copy` + `kindLabels` per consumer.",
2593
+ "tags": [
2594
+ "library",
2595
+ "resources",
2596
+ "prompts",
2597
+ "snippets",
2598
+ "moodboard",
2599
+ "downloads",
2600
+ "attribution",
2601
+ "seo",
2602
+ "personal-brand"
2603
+ ]
2582
2604
  }
2583
2605
  ],
2584
2606
  "slices": [
@@ -2587,7 +2609,7 @@
2587
2609
  "title": "Convex Auth — Multi-Provider Sign-in",
2588
2610
  "category": "auth",
2589
2611
  "kind": "backend",
2590
- "version": "0.2.0",
2612
+ "version": "0.2.1",
2591
2613
  "description": "@convex-dev/auth with Password (PBKDF2-SHA256 100k, self-hosted-friendly), Anonymous (guest), Google OAuth, and Resend magic-link. Ships a production SignInPage with i18n, prop-driven provider list, and split Login/Register tabs. No Clerk.",
2592
2614
  "source": "rahmanef63/resource-site",
2593
2615
  "slicePath": "frontend/slices/convex-auth",
@@ -2773,7 +2795,7 @@
2773
2795
  "title": "Resend — Transactional & Newsletter",
2774
2796
  "category": "email",
2775
2797
  "kind": "backend",
2776
- "version": "0.1.1",
2798
+ "version": "0.1.2",
2777
2799
  "description": "Transactional email + newsletter blast via Resend. Double opt-in flow + audience segmentation. Magic-link delivery for Convex Auth.",
2778
2800
  "source": "rahmanef63/resource-site",
2779
2801
  "slicePath": "frontend/slices/resend-newsletter",
@@ -3230,7 +3252,7 @@
3230
3252
  "title": "Full Width Toggle",
3231
3253
  "category": "ui",
3232
3254
  "kind": "ui",
3233
- "version": "0.1.0",
3255
+ "version": "0.1.1",
3234
3256
  "description": "Page-container width toggle (contained / wide / full). Per-device localStorage + cross-tab sync. Ships useFullWidth hook + FullWidthToggle button (icon/button/segment variants) + WidthContainer wrapper. Zero backend, zero env.",
3235
3257
  "source": "rahmanef63/resource-site",
3236
3258
  "slicePath": "frontend/slices/full-width-toggle",
@@ -3668,7 +3690,7 @@
3668
3690
  "title": "Hero",
3669
3691
  "category": "ui",
3670
3692
  "kind": "ui",
3671
- "version": "0.1.0",
3693
+ "version": "0.1.1",
3672
3694
  "description": "Editorial split-grid landing hero — eyebrow pill + large serif H1 + italic pull-quote + 1-2 button CTA row + right-column portrait card with optional caption. Fully props-driven (title/quote/ctas/image). Sanitized from rahmanef.com on 2026-05-16: SITE_CONFIG hardcode dropped, custom Heading/Section primitives replaced with raw semantic elements + stock Tailwind tracking-widest so the slice ships without consumer preset utilities.",
3673
3695
  "source": "rahmanef.com",
3674
3696
  "slicePath": "frontend/slices/hero",
@@ -3877,7 +3899,7 @@
3877
3899
  "title": "Create Your MCP",
3878
3900
  "category": "ai",
3879
3901
  "kind": "full",
3880
- "version": "0.1.0",
3902
+ "version": "0.1.1",
3881
3903
  "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.",
3882
3904
  "source": "rahmanef.com",
3883
3905
  "slicePath": "frontend/slices/create-your-mcp",
@@ -3982,7 +4004,7 @@
3982
4004
  "title": "Admin — Generic Shell",
3983
4005
  "category": "infra",
3984
4006
  "kind": "full",
3985
- "version": "0.2.0",
4007
+ "version": "0.2.1",
3986
4008
  "description": "Per-instance admin landing scaffold + portable nav-from-registry factory. Consumer supplies a SliceRegistryAdapter (each slice declares its own admin.activity[]) + queryTable reader; the slice's buildAdminStats(opts) emits the { counts, unreadMessages, activity } shape Convex's admin.stats query returns. Pulled UP from rahmanef.com (Wave N+3.1, commit b542389) — domain literals dropped at the kitab boundary. Gated by requireAdmin on Convex side; superadmin email gate via SUPER_ADMIN_EMAIL env.",
3987
4009
  "source": "rahmanef63/resource-site",
3988
4010
  "slicePath": "frontend/slices/admin",
@@ -4513,7 +4535,7 @@
4513
4535
  "title": "Files — pluggable upload + URL resolver with storage-adapter contract",
4514
4536
  "category": "data",
4515
4537
  "kind": "ui",
4516
- "version": "0.2.0",
4538
+ "version": "0.2.1",
4517
4539
  "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, …).",
4518
4540
  "source": "notion-page-clone",
4519
4541
  "slicePath": "frontend/slices/files",
@@ -4793,7 +4815,7 @@
4793
4815
  "title": "Notion Shell — page + sidebar + block editor primitives (pure, no database)",
4794
4816
  "category": "ui",
4795
4817
  "kind": "ui",
4796
- "version": "0.7.0",
4818
+ "version": "0.7.1",
4797
4819
  "description": "Portable Notion-style PAGE + SIDEBAR + BLOCK editor primitives. CI-wave (2026-05-21) split the database surface out — install the optional `notion-database` peer for embedded TableView / BoardView / ListView / GalleryView / CalendarView / FeedView, NotionDatabase, NotionProperty, ViewTabs, ViewOptions, ColumnHeaderMenu, property-cells. notion-shell alone gives you Notion-clone pages + sidebar + editor without the database weight. Domain types (Database, Property, PropertyValue, DbView, DatabaseViewConfig, DatabaseFilter, DatabaseSort) remain in notion-shell as the single source of truth (Page.rowOfDatabaseId + rowProps reference them). FULL OLD DESC BELOW: Portable Notion-style wrapper primitives. PAGE EDITOR: NotionPage (optional cover image band + header + body), NotionHeader / NotionSidebar / NotionBlock (live inline-markdown decorator, hover actions menu, optional dragHandle slot), 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). DATABASE: NotionDatabase (full DB surface w/ tabs + options + per-column menu), NotionProperty (10 property-cell types), 6 built-in views (Table/Board/List/Gallery/Calendar/Feed), ViewTabs, ViewOptions (sort + filter + search popover), ColumnHeaderMenu. SPECIALISED BLOCK RENDERERS: ImageRenderer (URL + caption + preview), EmbedRenderer (YouTube/Vimeo/Loom/Figma/CodePen/Spotify auto-detect + iframe fallback). Pure helpers: applyView, groupBy, bucketByDate. Pure / props-driven — host owns data + change handlers.",
4798
4820
  "source": "notion-page-clone",
4799
4821
  "slicePath": "frontend/slices/notion-shell",
@@ -4877,6 +4899,46 @@
4877
4899
  "rbac"
4878
4900
  ],
4879
4901
  "agentRecipe": "Run `npx rr add workspace-shell`. Tables prefixed `workspaceShell_*` (menuSets, menuItems, itemComponents, wsAssignments, userAssignments, rolePerms, navContext). Mount `<NavContextProvider workspaceId={wsId}>` inside your auth provider; use `useNavContext(wsId)` to read `{workspace, menuSet, source, effectiveMenuItems, setMenuSet, forkMenuSet}`. Drop-in `<WorkspaceSwitcher canFork />` in sidebar header. Tiered RBAC: `menus.manage` for workspace-default editing, `menus.fork` for user-personal copy. Resolver chain: user cache → user assignment → workspace default → none. Pair with audit-log slice for context-switch / fork events (graceful try/catch if absent). Effective items query applies role filter via workspaceShell_rolePerms (no rolePerms → show all, pre-RBAC compat)."
4902
+ },
4903
+ {
4904
+ "slug": "library",
4905
+ "title": "Library — resource hub (prompts · visuals · snippets · links)",
4906
+ "category": "data",
4907
+ "kind": "full",
4908
+ "version": "0.1.0",
4909
+ "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).",
4910
+ "source": "rahmanef.com",
4911
+ "slicePath": "frontend/slices/library",
4912
+ "convexPaths": [
4913
+ "convex/features/library"
4914
+ ],
4915
+ "npm": [
4916
+ "convex@^1.17",
4917
+ "next@^15",
4918
+ "react@^18"
4919
+ ],
4920
+ "shadcn": [],
4921
+ "env": [],
4922
+ "peers": [
4923
+ {
4924
+ "slug": "seo",
4925
+ "range": "^0.2",
4926
+ "reason": "Library item SEO override fields reuse the seo slice's metadata shape so the surface matches blog/projects rows."
4927
+ }
4928
+ ],
4929
+ "providers": [],
4930
+ "tags": [
4931
+ "library",
4932
+ "resources",
4933
+ "prompts",
4934
+ "snippets",
4935
+ "moodboard",
4936
+ "downloads",
4937
+ "attribution",
4938
+ "seo",
4939
+ "personal-brand"
4940
+ ],
4941
+ "agentRecipe": "Run `npx rr add seo` (peer) then `npx rr add library`. Spread `seoTables` + `libraryTables` into your root Convex schema. Wrap the unauthenticated CRUD `internalMutation`s with your auth model (see README Install). Render `<LibraryIndex items={await fetchQuery(api.library.listPublic)} />` and `<LibraryDetail item={await fetchQuery(api.library.getBySlug, { slug })} />`. Pass `onUpvote` to enable voting (consumer-owned backend); override `copy` + `kindLabels` per consumer."
4880
4942
  }
4881
4943
  ]
4882
4944
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rahman-resources",
3
- "version": "1.9.0",
3
+ "version": "1.9.2",
4
4
  "description": "Rahman Resources (rr) — shadcn-style installer for vertical slices. `npx resources add <slug>` copies slice into your project's `slices/<slug>/`. You own the files.",
5
5
  "type": "module",
6
6
  "license": "MIT",