Skip to content

[WIP] docs: add Registry tab with installable Workflow patterns#1858

Draft
karthikscale3 wants to merge 2 commits intomainfrom
karthik/shadcn-registry-2
Draft

[WIP] docs: add Registry tab with installable Workflow patterns#1858
karthikscale3 wants to merge 2 commits intomainfrom
karthik/shadcn-registry-2

Conversation

@karthikscale3
Copy link
Copy Markdown
Contributor

@karthikscale3 karthikscale3 commented Apr 27, 2026

Status: Work in progress. Don't merge yet — surface still in flux and pending the companion shadcn registry-index PR (see below).

Summary

Adds a new Registry section to the docs (/registry) — a listing + per-item detail surface for installable Workflow recipes (workflow + API routes + UI) that ship via shadcn add.

Scope was tightened to registry-only in the most recent revision: cookbook rewrites that were previously bundled here have been split off and will land separately. This PR is now a single-commit, additive change.

Initial entries

Slug Category What it ships
@workflow-sdk/resend Email Cancellable onboarding email drip campaign
@workflow-sdk/ai-sdk Vercel Durable multi-turn chat with streaming + tools
@workflow-sdk/sandbox Vercel Persistent code-execution session beyond the 5-hour cap
@workflow-sdk/chat-sdk Vercel Durable bot sessions across Slack, Teams, Discord, etc.

Surface

  • New top-nav Registry tab (added in docs/geistdocs.tsx).
  • Landing page (/registry) — filterable card grid with auto-derived category chips (Show all, Vercel, Email).
  • Detail page (/registry/[id]) — hero with logo + breadcrumbs + quick links, install command tabs (pnpm / npm / yarn / bun), env var list, installed file list, and shiki-rendered code snippet tabs.
  • AI SDK and Chat SDK wordmarks ported from the canonical marks in vercel/ai and vercel/chat. Card + detail-hero logo slots are flexible-width so square brand marks (Resend, Sandbox) and horizontal wordmarks (AI SDK, Chat SDK) both render cleanly.

Files added

docs/app/[lang]/registry/page.tsx
docs/app/[lang]/registry/[id]/page.tsx
docs/components/registry/RegistryCard.tsx
docs/components/registry/RegistryCodeTabs.tsx
docs/components/registry/RegistryDetailHero.tsx
docs/components/registry/RegistryGrid.tsx
docs/components/registry/RegistryInstallTabs.tsx
docs/components/registry/logos/{index,logo-ai-sdk,logo-chat-sdk,logo-resend,logo-sandbox}.tsx
docs/lib/registry/manifest.ts
docs/lib/registry/types.ts
docs/lib/registry/snippets/{ai-sdk,chat-sdk,resend,sandbox}.ts

Plus a 4-line addition to docs/geistdocs.tsx adding the top-nav entry.

Total: 19 files, +2297 / -0.

Companion PR (also WIP)

The shadcnSlug for each item (e.g. @workflow-sdk/resend) is a placeholder until we land the corresponding entry in shadcn-ui/ui → apps/v4/registry/directory.json. That PR is work in progress and will be opened separately. Until it merges, the install command on each detail page will render verbatim but won't actually resolve via shadcn add.

Outstanding

  • Open companion shadcn registry-index PR
  • Validate per-item registry JSON against the shadcn schema
  • Final copy + visual polish on detail pages
  • Decide on final placement / naming for the Vercel-owned bucket
  • Screenshots for review

Test plan

  • /registry renders all four cards with correct logos in light + dark mode
  • Filter chips toggle correctly (Show all, Vercel, Email)
  • Each /registry/[id] page renders without console errors and generateStaticParams produces all four routes at build time
  • Install command tabs and code snippet tabs are keyboard-navigable
  • LogoChatSdk / LogoAiSdk wordmarks don't clip at any breakpoint

@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented Apr 27, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
example-nextjs-workflow-turbopack Ready Ready Preview, Comment Apr 30, 2026 1:10am
example-nextjs-workflow-webpack Ready Ready Preview, Comment Apr 30, 2026 1:10am
example-workflow Ready Ready Preview, Comment Apr 30, 2026 1:10am
workbench-astro-workflow Ready Ready Preview, Comment Apr 30, 2026 1:10am
workbench-express-workflow Ready Ready Preview, Comment Apr 30, 2026 1:10am
workbench-fastify-workflow Ready Ready Preview, Comment Apr 30, 2026 1:10am
workbench-hono-workflow Ready Ready Preview, Comment Apr 30, 2026 1:10am
workbench-nitro-workflow Ready Ready Preview, Comment Apr 30, 2026 1:10am
workbench-nuxt-workflow Ready Ready Preview, Comment Apr 30, 2026 1:10am
workbench-sveltekit-workflow Ready Ready Preview, Comment Apr 30, 2026 1:10am
workbench-vite-workflow Ready Ready Preview, Comment Apr 30, 2026 1:10am
workflow-docs Ready Ready Preview, Comment, Open in v0 Apr 30, 2026 1:10am
workflow-swc-playground Ready Ready Preview, Comment Apr 30, 2026 1:10am
workflow-web Ready Ready Preview, Comment Apr 30, 2026 1:10am

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Apr 27, 2026

⚠️ No Changeset found

Latest commit: 240bfce

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 27, 2026

📊 Benchmark Results

📈 Comparing against baseline from main branch. Green 🟢 = faster, Red 🔺 = slower.

workflow with no steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 0.041s (-4.2%) 1.005s (~) 0.964s 10 1.00x
🐘 Postgres Express 0.059s (+1.0%) 1.010s (~) 0.952s 10 1.42x
🐘 Postgres Nitro 0.063s (-33.5% 🟢) 1.011s (-3.1%) 0.948s 10 1.53x
💻 Local Express ⚠️ missing - - - -
workflow with 1 step

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
💻 Local 🥇 Nitro 1.127s (~) 2.006s (~) 0.879s 10 1.00x
🐘 Postgres Nitro 1.138s (~) 2.010s (~) 0.872s 10 1.01x
🐘 Postgres Express 1.143s (~) 2.009s (~) 0.866s 10 1.01x
💻 Local Express ⚠️ missing - - - -
workflow with 10 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 10.867s (-0.9%) 11.021s (~) 0.154s 3 1.00x
🐘 Postgres Nitro 10.938s (+0.6%) 11.025s (~) 0.087s 3 1.01x
💻 Local Nitro 10.946s (~) 11.024s (~) 0.078s 3 1.01x
💻 Local Express ⚠️ missing - - - -
workflow with 25 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 14.490s (-0.6%) 15.022s (~) 0.532s 4 1.00x
🐘 Postgres Nitro 14.540s (~) 15.024s (~) 0.484s 4 1.00x
💻 Local Nitro 15.034s (~) 15.782s (-1.5%) 0.748s 4 1.04x
💻 Local Express ⚠️ missing - - - -
workflow with 50 sequential steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 13.847s (-1.1%) 14.018s (-3.9%) 0.171s 7 1.00x
🐘 Postgres Nitro 14.059s (+0.7%) 14.591s (+2.0%) 0.532s 7 1.02x
💻 Local Nitro 16.980s (+1.2%) 17.366s (+2.0%) 0.385s 6 1.23x
💻 Local Express ⚠️ missing - - - -
Promise.all with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 1.263s (-0.9%) 2.010s (~) 0.747s 15 1.00x
🐘 Postgres Express 1.264s (~) 2.009s (~) 0.745s 15 1.00x
💻 Local Nitro 1.543s (-5.4% 🟢) 2.006s (-3.3%) 0.463s 15 1.22x
💻 Local Express ⚠️ missing - - - -
Promise.all with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 2.319s (-1.4%) 3.009s (~) 0.690s 10 1.00x
🐘 Postgres Express 2.337s (-1.0%) 3.009s (~) 0.672s 10 1.01x
💻 Local Nitro 3.108s (-1.1%) 3.885s (~) 0.777s 8 1.34x
💻 Local Express ⚠️ missing - - - -
Promise.all with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 3.466s (-0.6%) 4.011s (~) 0.545s 8 1.00x
🐘 Postgres Nitro 3.475s (~) 4.011s (~) 0.537s 8 1.00x
💻 Local Nitro 8.534s (+2.2%) 9.019s (~) 0.485s 4 2.46x
💻 Local Express ⚠️ missing - - - -
Promise.race with 10 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.259s (~) 2.008s (~) 0.749s 15 1.00x
🐘 Postgres Nitro 1.263s (~) 2.009s (~) 0.746s 15 1.00x
💻 Local Nitro 1.531s (-17.9% 🟢) 2.006s (-14.3% 🟢) 0.475s 15 1.22x
💻 Local Express ⚠️ missing - - - -
Promise.race with 25 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 2.350s (~) 3.011s (~) 0.661s 10 1.00x
🐘 Postgres Nitro 2.365s (+1.1%) 3.010s (~) 0.644s 10 1.01x
💻 Local Nitro 3.155s (+2.9%) 3.885s (~) 0.730s 8 1.34x
💻 Local Express ⚠️ missing - - - -
Promise.race with 50 concurrent steps

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 3.469s (-0.9%) 4.011s (~) 0.541s 8 1.00x
🐘 Postgres Nitro 3.500s (+0.6%) 4.010s (~) 0.510s 8 1.01x
💻 Local Nitro 9.023s (-1.3%) 9.772s (-2.5%) 0.750s 4 2.60x
💻 Local Express ⚠️ missing - - - -
workflow with 10 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.815s (-2.8%) 1.023s (~) 0.207s 59 1.00x
🐘 Postgres Nitro 0.840s (+2.3%) 1.006s (~) 0.166s 60 1.03x
💻 Local Nitro 1.117s (+13.9% 🔺) 1.458s (+33.3% 🔺) 0.340s 42 1.37x
💻 Local Express ⚠️ missing - - - -
workflow with 25 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 2.001s (+3.8%) 2.441s (+16.2% 🔺) 0.440s 37 1.00x
🐘 Postgres Express 2.064s (+4.4%) 2.609s (+15.5% 🔺) 0.545s 35 1.03x
💻 Local Nitro 2.999s (-1.2%) 3.453s (-8.1% 🟢) 0.454s 27 1.50x
💻 Local Express ⚠️ missing - - - -
workflow with 50 sequential data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 3.889s (-2.6%) 4.108s (-6.0% 🟢) 0.220s 30 1.00x
🐘 Postgres Nitro 4.036s (-1.7%) 4.455s (-3.2%) 0.419s 27 1.04x
💻 Local Nitro 9.122s (-1.9%) 9.710s (-3.1%) 0.589s 13 2.35x
💻 Local Express ⚠️ missing - - - -
workflow with 10 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 0.282s (~) 1.007s (~) 0.725s 60 1.00x
🐘 Postgres Express 0.290s (+2.8%) 1.007s (~) 0.717s 60 1.03x
💻 Local Nitro 0.576s (-4.8%) 1.004s (-1.7%) 0.429s 60 2.04x
💻 Local Express ⚠️ missing - - - -
workflow with 25 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 0.494s (~) 1.006s (~) 0.512s 90 1.00x
🐘 Postgres Express 0.494s (-3.1%) 1.007s (~) 0.513s 90 1.00x
💻 Local Nitro 2.591s (+2.1%) 3.008s (~) 0.417s 30 5.24x
💻 Local Express ⚠️ missing - - - -
workflow with 50 concurrent data payload steps (10KB)

💻 Local Development

World Framework Workflow Time Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.781s (-4.6%) 1.008s (-1.0%) 0.227s 120 1.00x
🐘 Postgres Nitro 0.808s (+2.2%) 1.009s (~) 0.201s 119 1.03x
💻 Local Nitro 11.218s (~) 11.937s (+2.3%) 0.719s 11 14.37x
💻 Local Express ⚠️ missing - - - -
Stream Benchmarks (includes TTFB metrics)
workflow with stream

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 0.207s (+0.8%) 0.996s (~) 0.001s (-26.7% 🟢) 1.010s (~) 0.803s 10 1.00x
🐘 Postgres Express 0.211s (+3.0%) 0.992s (-0.7%) 0.002s (-6.3% 🟢) 1.010s (~) 0.798s 10 1.02x
💻 Local Nitro 0.213s (~) 1.004s (~) 0.013s (+5.6% 🔺) 1.020s (~) 0.807s 10 1.03x
💻 Local Express ⚠️ missing - - - - -
stream pipeline with 5 transform steps (1MB)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 0.600s (-4.8%) 1.006s (~) 0.004s (+6.2% 🔺) 1.022s (~) 0.422s 59 1.00x
🐘 Postgres Nitro 0.624s (~) 1.003s (~) 0.004s (-4.1%) 1.023s (~) 0.399s 59 1.04x
💻 Local Nitro 0.851s (+1.5%) 1.012s (~) 0.010s (+2.6%) 1.116s (~) 0.265s 54 1.42x
💻 Local Express ⚠️ missing - - - - -
10 parallel streams (1MB each)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Nitro 0.952s (-1.7%) 1.144s (-8.3% 🟢) 0.000s (-100.0% 🟢) 1.156s (-8.1% 🟢) 0.204s 54 1.00x
🐘 Postgres Express 0.967s (+0.6%) 1.232s (-3.6%) 0.000s (-54.0% 🟢) 1.248s (-4.5%) 0.281s 50 1.02x
💻 Local Nitro 1.241s (+1.5%) 2.022s (~) 0.000s (+333.3% 🔺) 2.024s (~) 0.783s 30 1.30x
💻 Local Express ⚠️ missing - - - - -
fan-out fan-in 10 streams (1MB each)

💻 Local Development

World Framework Workflow Time TTFB Slurp Wall Time Overhead Samples vs Fastest
🐘 Postgres 🥇 Express 1.755s (-1.0%) 2.175s (~) 0.000s (+Infinity% 🔺) 2.200s (~) 0.446s 28 1.00x
🐘 Postgres Nitro 1.757s (-1.9%) 2.103s (-1.8%) 0.000s (+189.7% 🔺) 2.120s (-2.5%) 0.363s 29 1.00x
💻 Local Nitro 3.888s (+14.8% 🔺) 4.030s (~) 0.001s (+20.5% 🔺) 4.392s (+8.8% 🔺) 0.505s 14 2.22x
💻 Local Express ⚠️ missing - - - - -

Summary

Fastest Framework by World

Winner determined by most benchmark wins

World 🥇 Fastest Framework Wins
💻 Local Nitro 21/21
🐘 Postgres Express 13/21
Fastest World by Framework

Winner determined by most benchmark wins

Framework 🥇 Fastest World Wins
Express 🐘 Postgres 21/21
Nitro 🐘 Postgres 19/21
Column Definitions
  • Workflow Time: Runtime reported by workflow (completedAt - createdAt) - primary metric
  • TTFB: Time to First Byte - time from workflow start until first stream byte received (stream benchmarks only)
  • Slurp: Time from first byte to complete stream consumption (stream benchmarks only)
  • Wall Time: Total testbench time (trigger workflow + poll for result)
  • Overhead: Testbench overhead (Wall Time - Workflow Time)
  • Samples: Number of benchmark iterations run
  • vs Fastest: How much slower compared to the fastest configuration for this benchmark

Worlds:

  • 💻 Local: In-memory filesystem world (local development)
  • 🐘 Postgres: PostgreSQL database world (local development)
  • ▲ Vercel: Vercel production/preview deployment
  • 🌐 Turso: Community world (local development)
  • 🌐 MongoDB: Community world (local development)
  • 🌐 Redis: Community world (local development)
  • 🌐 Jazz: Community world (local development)

📋 View full workflow run


Some benchmark jobs failed:

  • Local: failure
  • Postgres: success
  • Vercel: cancelled

Check the workflow run for details.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 27, 2026

🧪 E2E Test Results

Some tests failed

Summary

Passed Failed Skipped Total
✅ ▲ Vercel Production 989 0 67 1056
✅ 💻 Local Development 893 0 67 960
✅ 📦 Local Production 720 0 48 768
❌ 🐘 Local Postgres 716 4 48 768
✅ 🪟 Windows 96 0 0 96
✅ 📋 Other 270 0 18 288
Total 3684 4 248 3936

❌ Failed Tests

🐘 Local Postgres (4 failed)

nitro-stable (2 failed):

  • fibonacciWorkflow - recursive workflow composition via start() | wrun_01KQDZ7A7P0PWQJ8R0BRYD1D55
  • health check (queue-based) - workflow and step endpoints respond to health check messages

sveltekit-stable (2 failed):

  • fibonacciWorkflow - recursive workflow composition via start() | wrun_01KQDZ7A7P0PWQJ8R0BRYD1D55
  • health check (queue-based) - workflow and step endpoints respond to health check messages

Details by Category

✅ ▲ Vercel Production
App Passed Failed Skipped
✅ astro 89 0 7
✅ example 89 0 7
✅ express 89 0 7
✅ fastify 89 0 7
✅ hono 89 0 7
✅ nextjs-turbopack 94 0 2
✅ nextjs-webpack 94 0 2
✅ nitro 89 0 7
✅ nuxt 89 0 7
✅ sveltekit 89 0 7
✅ vite 89 0 7
✅ 💻 Local Development
App Passed Failed Skipped
✅ astro-stable 90 0 6
✅ express-stable 90 0 6
✅ fastify-stable 90 0 6
✅ hono-stable 90 0 6
✅ nextjs-turbopack-canary 77 0 19
✅ nextjs-turbopack-stable 96 0 0
✅ nitro-stable 90 0 6
✅ nuxt-stable 90 0 6
✅ sveltekit-stable 90 0 6
✅ vite-stable 90 0 6
✅ 📦 Local Production
App Passed Failed Skipped
✅ astro-stable 90 0 6
✅ express-stable 90 0 6
✅ fastify-stable 90 0 6
✅ hono-stable 90 0 6
✅ nitro-stable 90 0 6
✅ nuxt-stable 90 0 6
✅ sveltekit-stable 90 0 6
✅ vite-stable 90 0 6
❌ 🐘 Local Postgres
App Passed Failed Skipped
✅ astro-stable 90 0 6
✅ express-stable 90 0 6
✅ fastify-stable 90 0 6
✅ hono-stable 90 0 6
❌ nitro-stable 88 2 6
✅ nuxt-stable 90 0 6
❌ sveltekit-stable 88 2 6
✅ vite-stable 90 0 6
✅ 🪟 Windows
App Passed Failed Skipped
✅ nextjs-turbopack 96 0 0
✅ 📋 Other
App Passed Failed Skipped
✅ e2e-local-dev-nest-stable 90 0 6
✅ e2e-local-postgres-nest-stable 90 0 6
✅ e2e-local-prod-nest-stable 90 0 6

📋 View full workflow run


Some E2E test jobs failed:

  • Vercel Prod: success
  • Local Dev: failure
  • Local Prod: failure
  • Local Postgres: failure
  • Windows: success

Check the workflow run for details.

@karthikscale3 karthikscale3 changed the base branch from main to karthik/shadcn-registry April 27, 2026 21:03
Base automatically changed from karthik/shadcn-registry to main April 28, 2026 23:52
@karthikscale3 karthikscale3 force-pushed the karthik/shadcn-registry-2 branch from 8ad4dc6 to 36b9eb0 Compare April 29, 2026 23:46
Adds 14 installable patterns to the registry, expanding it from the
initial 4 providers/integrations into a near-complete replacement for
the cookbook's pattern catalogue:

- Agents: Durable Agent, Agent Cancellation, Human In The Loop
- Common: Sequential & Parallel, Workflow Composition, Saga, Batching,
  Rate Limiting, Scheduling, Timeouts, Idempotency, Webhooks
- Advanced: Child Workflows, Distributed Abort Controller

Each pattern ships its own logo, snippet bundle, and manifest entry.

Schema and UI changes:

- `RegistryItem.category` becomes `categories: RegistryCategory[]` so
  items can live in more than one bucket. AI SDK, Chat SDK, and Vercel
  Sandbox now appear under both Agents and Vercel filters.
- `RegistryCard` renders one badge per category; `RegistryGrid` filter
  counts and matches use `includes()` against the array.
- Manifest reordered into Agents -> Vercel -> Common -> Advanced ->
  Providers, alphabetised within each group; the chip filter row picks
  up the same order automatically.

Polish:

- New / refined logos for webhooks (canonical webhook triangle),
  idempotency (refresh loop around equals sign), durable-agent (bot
  glyph), and the 11 other patterns.
- Detail-page code tabs no longer collide on small viewports
  (`RegistryCodeTabs` gets `gap-1` + `flex-none` per trigger).

Made-with: Cursor
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant