Registry
shadcn-compatible primitives, blocks, and kits
Campfire distributes layouts and components through a shadcn-compatible registry — no custom format, no hidden runtime dependencies. Items are copied as source straight into your repo:
components/ registry components install here
layouts/ registry layouts install here
lib/ shared helpers (cn) install hereThere is no special registry folder — installed files sit next to your own and are yours to edit. If an installed file would collide with one of yours, review the diff shadcn shows before accepting the overwrite.
Installing
camp add metric-card
camp add problem-solutionBare names resolve to this site: /r/<name>.json. Anything
shadcn-compatible works too:
bunx shadcn@latest add https://campfire-deck.vercel.app/r/metric-card.jsonComponents
Small reusable primitives, installed under components/:
Metric Card
A headline number with label and optional delta.
Logo Cloud
A centered, muted row of logos.
Callout
An emphasized aside with tone variants.
Quote Card
A large quotation with attribution.
Step
A numbered step with heading and detail.
Timeline
A horizontal sequence of milestones for roadmap slides.
Team Member
A person card for team slides: photo or initials, name, role.
Blocks
Narrative patterns — a layout plus its supporting components, installed under
layouts/ (and components/ for anything they pull in):
Title
Opening slide: oversized title with supporting copy.
Agenda
What the talk covers, as numbered rows.
Section
A full-bleed divider slide on the primary color.
Split
The two-column workhorse: children flow into equal panels.
Statement
One big takeaway, centered.
Problem / Solution
Two-panel narrative layout with Problem and Solution components.
Closing
Centered thank-you slide.
Kits
Starter packs that compose multiple blocks (planned, not v1).
Principles
Shipped items follow the components.build standard for composable components:
- Native first. Every component wraps one element and extends its
attributes (
ComponentProps<"div">), so anything HTML accepts, the component accepts. - Overridable styling. Base classes merge with your
classNamethroughcn(clsx + tailwind-merge), user classes win. Theutilsitem providescn; every item depends on it. - Stable styling hooks. Each part exposes a
data-slotattribute (data-slot="metric-card-value"), sotheme.csscan restyle items without touching their source. Variants surface as data attributes too (data-toneon Callout). - No naming conflicts. Props never shadow native attributes — items use
headinginstead oftitle,affiliationinstead ofrole. - Exported types. Every item exports its
<Name>Propstype.
And the registry itself:
- The registry distributes source code into your repo.
- Installation behavior is exactly shadcn's —
camp addonly resolves nicer names. - Item metadata uses shadcn's schema:
files[].targetplaces code underlayouts/andcomponents/;registryDependenciespulls in supporting items.