shadcn registry
full-stack blocks

Tholvoric Next.js Registry

Copy-paste Next.js blocks distributed via the shadcn CLI β€” shells for layout, feature blocks for data, and a shared db-client layer.

Shells

Layout only β€” pick one, drop feature blocks into its slots.

Dashboard Shell (Sidebar)

shell

dashboard-shell

Tholvoric
Overview
Orders
Customers
☰ header
KPI
KPI
KPI
content

Layout-only shell built on shadcn Sidebar β€” collapsible on desktop, sheet drawer on mobile. Slots: sidebar nav, header actions, main content.

npx shadcn add dashboard-shellLive demo

Dashboard Shell (Top Nav)

shell

dashboard-shell-topnav

TholvoricOverviewOrders
table
feed

Same slot contract as the sidebar shell, but with a full-width top bar and shadcn NavigationMenu instead of a sidebar.

npx shadcn add dashboard-shell-topnavLive demo

Ecommerce Shell

shell

ecommerce-shell

StoreProductsπŸ›’
item
item
item
item

Storefront header with logo, NavigationMenu, and cart Sheet trigger. Wraps children in CartProvider. Footer slot optional.

npx shadcn add ecommerce-shellLive demo

Dashboard blocks

Full-stack components written against db-client.

Stat Card

block

stat-card

Total Orders

Self-fetching KPI card. Runs a db-client aggregate (count, sum, avg, min, max) for any resource.

Shown in: Overview demo

npx shadcn add stat-cardLive demo

Search Command

block

search-command

Debounced search input β†’ server action β†’ TanStack infinite query β†’ virtualized result list.

Shown in: Overview demo

npx shadcn add search-commandLive demo

Data Table

block

data-table

Sortable, page-based table backed by db-client. Column render functions and server-side pagination.

Shown in: Top nav demo

npx shadcn add data-tableLive demo

Activity Feed

block

activity-feed

Recent orders

Lightly-polled recent-items list in a Card. Good filler for a dashboard secondary column.

Shown in: Top nav demo

npx shadcn add activity-feedLive demo

Ecommerce blocks

Storefront components β€” cart is client-only.

Product Grid

block

product-grid

Paginated grid of ProductCards backed by db-client. Pulls in resource-products automatically.

Shown in: Ecommerce demo

npx shadcn add product-gridLive demo

Product Card

component

product-card

No image

Widget Pro

$49.99

Presentational card with image placeholder, price, and Add to cart wired to useCart.

npx shadcn add product-cardLive demo

Cart Drawer

component

cart-drawer

Cart icon with badge count + shadcn Sheet panel. Client-only β€” reads from useCart context.

npx shadcn add cart-drawerLive demo

Foundation

Shared libs and hooks every block builds on.

DB Client

lib

db-client

ORM-agnostic data contract. Mock in-memory fake when DATABASE_URL is unset; Drizzle/Postgres when set.

npx shadcn add db-client

Resource: Orders

lib

resource-orders

Drizzle schema + registry entry for resource="orders". Required for dashboard demo blocks.

npx shadcn add resource-orders

Resource: Products

lib

resource-products

Schema + registry for resource="products". Auto-installed with product-grid.

npx shadcn add resource-products

Resource: Users

lib

resource-users

Example users table for generic blocks pointed at resource="users".

npx shadcn add resource-users

Query Keys

lib

query-keys

Shared TanStack Query key factory used by every full-stack block.

npx shadcn add query-keys

useDebounceValue

hook

use-debounce-value

Debounces fast-changing values β€” used by SearchCommand input.

npx shadcn add use-debounce-value

useVirtualList

hook

use-virtual-list

Virtual scroll wrapper with onEndReached β€” powers SearchCommand infinite scroll.

npx shadcn add use-virtual-list

useCart

hook

use-cart

Client cart state via React context + localStorage. Not db-backed by design.

npx shadcn add use-cart

How blocks connect to data

Every full-stack block calls dbClient through a server action β€” never Drizzle directly. Install db-client, add resource-* items for the tables you need, set DATABASE_URL, and run drizzle-kit push. Leave env unset to use the in-memory mock (what powers the live previews).