UI with a pulse.
A craft-obsessed React library where everything moves like it should — from a button's press to a streaming AI response. Copy the source or install with the shadcn CLI, fully yours to edit.
Fresh from the lab
The newest components to land — accessible, dependency-light, and built to move.
- 0 dots · bouncy
Move across the text.
The dots keep reacting under solid content. Swipe fast and they get thrown further than the same path taken slowly. Click for a shockwave.
Stiffness · 90Damping · 9Cursor drag · 0.9Critical damping is 2·√stiffness — about 19 here. Below it the dots overshoot and ring; above it they crawl home. Drop drag to 0 and the field stops caring how fast you move, which is how a lerped grid always behaves.
Magnetic DotsMagnetic Dots
BackgroundsA dot grid backdrop driven by a real spring, not a lerp. Dots carry velocity, so they get flung past their rest position and ring back — and the field reads how fast you move, not just where you are: a swipe throws dots further than the same path taken slowly. Click for an expanding shockwave. The canvas is pointer-transparent and listeners bind to the container, so it keeps reacting under headlines and buttons. Fixed 1/120s sub-stepping keeps the spring stable and frame-rate independent; the dirty rect bounds the cost to the influence radius.
Move across the field — or drag, on touch. React never re-renders while it moves.
FalloffDamping · 18Slabs · 15Damping under ~10 overshoots and wobbles; over ~30 it goes syrupy. The default is 18 — the difference between those numbers is the entire feel of the component.
Iso MomentumIso Momentum
IllustrationsAn isometric slab field where every slab's height tracks pointer proximity and springs independently. The pointer flows through a motion value into each slab's path `d` string at 60fps — no React state, no re-renders while it moves. Pointer events, so it works under touch and pen, not just a mouse.
- motion values/seamless wrap/scroll velocity/exponential decay/zero re-renders/motion values/seamless wrap/scroll velocity/exponential decay/zero re-renders/motion values/seamless wrap/scroll velocity/exponential decay/zero re-renders/
Scroll me — fast, slow, and backwards
01 Flick down and the strip accelerates left and shears with it. Flick up hard enough and it crosses zero and runs the other way. Let go and it coasts back to the base drift instead of stopping dead — that easing is the whole point.
02 Flick down and the strip accelerates left and shears with it. Flick up hard enough and it crosses zero and runs the other way. Let go and it coasts back to the base drift instead of stopping dead — that easing is the whole point.
03 Flick down and the strip accelerates left and shears with it. Flick up hard enough and it crosses zero and runs the other way. Let go and it coasts back to the base drift instead of stopping dead — that easing is the whole point.
04 Flick down and the strip accelerates left and shears with it. Flick up hard enough and it crosses zero and runs the other way. Let go and it coasts back to the base drift instead of stopping dead — that easing is the whole point.
05 Flick down and the strip accelerates left and shears with it. Flick up hard enough and it crosses zero and runs the other way. Let go and it coasts back to the base drift instead of stopping dead — that easing is the whole point.
06 Flick down and the strip accelerates left and shears with it. Flick up hard enough and it crosses zero and runs the other way. Let go and it coasts back to the base drift instead of stopping dead — that easing is the whole point.
07 Flick down and the strip accelerates left and shears with it. Flick up hard enough and it crosses zero and runs the other way. Let go and it coasts back to the base drift instead of stopping dead — that easing is the whole point.
08 Flick down and the strip accelerates left and shears with it. Flick up hard enough and it crosses zero and runs the other way. Let go and it coasts back to the base drift instead of stopping dead — that easing is the whole point.
09 Flick down and the strip accelerates left and shears with it. Flick up hard enough and it crosses zero and runs the other way. Let go and it coasts back to the base drift instead of stopping dead — that easing is the whole point.
10 Flick down and the strip accelerates left and shears with it. Flick up hard enough and it crosses zero and runs the other way. Let go and it coasts back to the base drift instead of stopping dead — that easing is the whole point.
11 Flick down and the strip accelerates left and shears with it. Flick up hard enough and it crosses zero and runs the other way. Let go and it coasts back to the base drift instead of stopping dead — that easing is the whole point.
12 Flick down and the strip accelerates left and shears with it. Flick up hard enough and it crosses zero and runs the other way. Let go and it coasts back to the base drift instead of stopping dead — that easing is the whole point.
13 Flick down and the strip accelerates left and shears with it. Flick up hard enough and it crosses zero and runs the other way. Let go and it coasts back to the base drift instead of stopping dead — that easing is the whole point.
14 Flick down and the strip accelerates left and shears with it. Flick up hard enough and it crosses zero and runs the other way. Let go and it coasts back to the base drift instead of stopping dead — that easing is the whole point.
Decay · 0.35sCoupling · 1.2Skew · 6°PlaybackDrop decay to 0.05s and the strip snaps to a halt the instant you stop — that is exactly the broken-feeling version. 0.35s is the default.
Velocity MarqueeVelocity Marquee
MarketingAn infinite strip whose speed and skew couple to scroll velocity — it accelerates as you scroll, reverses when you scroll back, and eases to a base drift when you stop. The wrap is a modulo on a measured content width (seamless in both directions, no CSS-animation restart), and the velocity is smoothed by an exponential moving average so it coasts instead of snapping.
Type that answers the cursor.Type that answers the cursor.
Every glyph measures its own distance from the pointer, springs independently, and resolves to a font-variation-settings string. The boxes are pinned to their resting widths, so nothing reflows and no cached centre ever goes stale — the letters swell in place instead of shoving each other along the line.Every glyph measures its own distance from the pointer, springs independently, and resolves to a font-variation-settings string. The boxes are pinned to their resting widths, so nothing reflows and no cached centre ever goes stale — the letters swell in place instead of shoving each other along the line.
Move across the text — zero React re-renders
Radius · 120pxPeak wght · 800Stiffness · 280Push peak weight to 900 and drag across a word: the line holds its wrapping exactly. Without the pinned boxes, that is the setting where it starts to jitter and re-wrap under the cursor.
Kinetic TypeKinetic Type
TypographyPer-glyph variable-font response to pointer proximity — axes swell near the cursor and relax away from it, continuously and reversibly. Glyph boxes are pinned to their resting widths so animating `wght` can't shift neighbours, stale the cached centres, or re-wrap the line; centres are measured once and only re-read on resize or font swap. The accessibility tree reads one clean string.
- External motion value
Scrub slowly through the middle — no crossings, no knots.
Spring · both directionsClick repeatedly — it reverses cleanly from wherever it is.
3 subpaths → 2 · the middle line collapses into the X
Morph IconMorph Icon
IconsTrue SVG path interpolation between two icons — not a cross-fade. Ships its own path normalizer with no dependency: a cursor-based parser (correct on packed arc flags, where a number regex silently fails), every command reduced to cubics including the full endpoint→centre arc conversion, equal-arc-length resampling, and a rotation/direction search that minimises total travel so the morph never ties itself in a knot. Multiple subpaths are paired by centroid, and an unmatched one collapses into its nearest counterpart.
- RangeEasingEffectnative if availablePanel 1
Driven by
--st-progress, cover · ease-in-outPanel 2Driven by
--st-progress, cover · ease-in-outPanel 3Driven by
--st-progress, cover · ease-in-outforced fallbackPanel 1Driven by
--st-progress, cover · ease-in-outPanel 2Driven by
--st-progress, cover · ease-in-outPanel 3Driven by
--st-progress, cover · ease-in-outeffect="none" · your own CSSScroll each panel. The two columns must stay locked together — the left one uses
animation-timeline: view()where the browser has it, the right one is forced onto the rAF fallback. Both drive the same custom property, so there is only one thing rendering.Scroll TimelineScroll Timeline
EffectsContinuous scroll-linked animation on the native Scroll-Driven Animations API, with a JS fallback that is numerically identical rather than merely similar. Both paths drive one registered custom property, `--st-progress`, so there is a single renderer and only the source of the number changes — the spec's four view-progress ranges and a real cubic-bézier solver make the fallback match to ~1e-6. Set `forceFallback` on one of two instances to check it yourself.
- 0 dotsDPR 1hover to measureSpacing · 10pxRadius · 140pxModeDirection
Drop spacing to 8 or below to push past 5,000 dots and watch the fps hold — the per-frame cost is bounded by the influence radius, not the grid size. Scroll the field out of view and the rAF loop is cancelled outright, not left spinning.
Dot FieldDot Field
BackgroundsA canvas dot grid that reacts around the cursor, at a density SVG can't reach. The per-frame cost is bounded by the influence radius rather than the dot count: only the dirty rect is cleared and redrawn, and dots are batched into 16 paths by quantised alpha instead of one fill each. DPR-correct on retina, and the rAF loop is genuinely cancelled — offscreen, backgrounded, or simply settled.
Drag, or focus a row and press space
- Pointer capturedrag survives leaving the row
- Cached geometrysnapshotted once at lift — the whole reason this doesn't oscillate
- Auto-scrollnear the container edges
- Keyboard modespace, arrows, space
- Live announcementsaria-live on every move
- Drop animationglides into the final slot
- Ragged heightslayout is exact, not a uniform pitch
- Zero re-renderstransforms written straight to the DOM
Try to make it oscillate: park the cursor exactly on a boundary and jiggle. The target index is a pure function of the frozen snapshot and the pointer delta, so there is no feedback loop to buzz in.
Tab to a row, then Space to lift, ↑↓ to move, Space to drop, Esc to cancel — the entire flow without a mouse.
a → b → c → d → e → f → g → h
Sortable ListSortable List
Data DisplayDrag-to-reorder, hand-written, with a keyboard mode that shares the same code path. The target index is a pure function of geometry frozen at lift and the pointer delta — monotonic in the delta by construction, so there is no feedback loop to oscillate in at any drag speed. Pointer capture, edge auto-scroll, a drop animation into the final slot, and `aria-live` announcements throughout.
Three detents
Flick the handle hard and it carries past a detent. Drag it slowly past the same point and it settles on the nearer one — the position is identical, only the velocity differs.
01Scrollable row 1Drag down from here while scrolled — the sheet stays put02Scrollable row 2Drag down from here while scrolled — the sheet stays put03Scrollable row 3Drag down from here while scrolled — the sheet stays put04Scrollable row 4Drag down from here while scrolled — the sheet stays put05Scrollable row 5Drag down from here while scrolled — the sheet stays put06Scrollable row 6Drag down from here while scrolled — the sheet stays put07Scrollable row 7Drag down from here while scrolled — the sheet stays put08Scrollable row 8Drag down from here while scrolled — the sheet stays put09Scrollable row 9Drag down from here while scrolled — the sheet stays put10Scrollable row 10Drag down from here while scrolled — the sheet stays put11Scrollable row 11Drag down from here while scrolled — the sheet stays put12Scrollable row 12Drag down from here while scrolled — the sheet stays put13Scrollable row 13Drag down from here while scrolled — the sheet stays put14Scrollable row 14Drag down from here while scrolled — the sheet stays put15Scrollable row 15Drag down from here while scrolled — the sheet stays put16Scrollable row 16Drag down from here while scrolled — the sheet stays put17Scrollable row 17Drag down from here while scrolled — the sheet stays put18Scrollable row 18Drag down from here while scrolled — the sheet stays put- Arbitration: scroll the list down, then drag down from inside it — the sheet does not move. Scroll back to the top and the same gesture drags the sheet.
- Locked for the gesture: start a downward drag mid-list and keep going past the top. The sheet still doesn't grab it — the decision was made on the first move.
- Rubber band: pull the handle up past the tallest detent.
Drag SheetDrag Sheet
OverlaysA bottom sheet with snap points that feels native rather than like a `<div>` with a transition — three formulas and a state machine. Snapping is velocity-projected, so a flick and a slow drag past the same point resolve differently; bounds use Apple's rubber-band curve; and the drag-vs-scroll decision is made on the first `pointermove` past a 4px threshold and locked for the whole gesture, which is what stops a sheet from stealing a scroll halfway through.
Text that develops into focus.
Each line de-blurs and fades up as it enters the viewport — fires once, and respects reduced-motion.
Text RevealText Reveal
MotionReveals its children with a soft de-blur + fade as they scroll into view — the 'text develops into focus' effect. Fires once, respects reduced-motion, and is polymorphic via `as` so it can wrap a heading, paragraph, or a single list item.
Whole sections, ready to drop in
Install one and its component dependencies come with it.
SEO is no longer something you do. It’s something you run.
Meet your autonomous
SEO system.- 01/04
Finds
Spots gaps, queries, and content ready to rank.
- 02/04
Decides
Prioritizes what actually moves the needle.
- 03/04
Executes
Ships updates, fixes, and structure changes.
- 04/04
Compounds
Learns from each change, then improves again.
↻RUNS CONTINUOUSLYProcess IsometricProcess Isometric
Features- Autonomous SEO — built for modern search.
Stop Doing SEO
Let It Run ItselfAn AI system that finds opportunities, creates content, fixes technical issues, and gets you cited in AI search — automatically.
Live now. Join teams already running SEO on autopilot.
AI SEO Console
Ask anything. I'll audit, plan, and execute across your site.
Scroll for live insights↓AreaFindingRecommendationAction- Keywords14 high-intent gaps vs. top 3 competitorsGenerate content briefs
- Content8 pages with thin content (<400 words)Expand with AI outlines
- Tech SEOLCP 3.8s on /blog/seo-tipsInline critical CSS
- On-PageDuplicate H1s on 14 pagesRewrite headings
- Backlinks5 broken inbound links losing equityReclaim via redirects
- SchemaMissing FAQ schema on 12 pagesAdd structured data
Monthly Growth Pacing- Organic Search18.2K / 24K
- AI Overviews4.1K / 6K
- Long-tail Queries2.8K / 5K
- Branded Search9.4K / 10K
Top Ranking Pages- /ai-content-briefpos 3.22.1K
- /seo-audit-toolpos 5.81.6K
- /keyword-gappos 7.1940
- /technical-seopos 9.4612
Agent running — 6 tasks queuedLast scan 4m agoHero AgentHero Agent
Heroes SEO isn't hard.
It's just exhausting.You're not losing because you're bad at SEO. You're losing because the game changed — and the old playbook still demands all your time.01Search is changing faster than you can keep up.
AI answers steal clicks before users even reach your site. Fewer clicks. Less visibility. Same traffic, gone.
02You don’t lack data — you lack direction.
You jump between tools, export reports, stare at numbers… and still don’t know what to do next.
03Everything takes longer than it should.
One blog = keyword research → outline → writing → optimization → internal links → publishing. It eats hours. Every single time.
research→outline→write→optimize→links→publish04And while you’re figuring it out…
someone else already shipped 10 pages and took your spot.
THE TRAPSo you stay busy — but nothing compounds.
You're stuck in the cycle of doing SEO, but never seeing SEO work.
Pain PointsPain Points
FeaturesOutcomes,
not dashboards.Every feature replaces hours of manual work with a clear result.Always know what to do next
Three high-impact actions. Not fifty metrics. No decision fatigue.
Ship /pricing rewriteCluster 8 new queriesFix 3 broken linksContent that gets cited
Answer a few questions. The system ships content AI engines actually reference.
CITEDby perplexitySee when AI recommends you
Track visibility across AI search, not just Google. Know when you're cited — or missed.
ChatGPTLIVEPerplexityLIVEClaudemissedOutcome FeaturesOutcome Features
FeaturesSet it up once. Let it run.
- 1
- 2
- 3
Connect your website
Plug in your site and data sources. Takes minutes.
Your site
https://yoursite.comConnected
The system starts working
It analyzes performance, spots opportunities, and begins executing.
ANALYZINGCrawling 412 pagesMapping 1,284 queriesRanking opportunitiesYou approve — or automate
Review every action, or let it run hands-off. Your call.
Auto-approveReview each changeSetup StepsSetup Steps
Features- LIVE RESULTS · 2,000+ CLIENTS0.0xAvg. ROAS$0.0MRevenue driven0.0MOrganic visits0k+Keywords on page 1+0%Conversion liftLast updated: Apr 24, 2026All systems ok
Stop doing SEO
Start running itIt's live. Join the teams already running SEO on autopilot.Get startedNo spam. No fluff. Just results.
Stats CTAStats CTA
CTA - 01 — Capture
Start with the raw signal
Every interaction, error, and metric streams in unshaped. On its own it's noise — but it's the ground truth everything else is built from.
- 02 — Structure
Find the shape in the noise
Group, align, and connect. Patterns snap into a grid and the trend that was hiding in the scatter becomes something you can actually reason about.
- 03 — Ship
Turn insight into an answer
Collapse the analysis into one confident result your users can act on — the moment all that work pays off.
Scroll StoryScroll Story
Marketing- Prompt
Explain how a Bloom filter works, and when you'd reach for one.
Atlas 21.2s · 214 tokA Bloom filter is a compact, probabilistic set. It answers one question — “have I possibly seen this key?” — using far less memory than storing the keys themselves.
It's a bit array of m zeros plus k independent hash functions. To add a key, hash it k ways and set those k bits to 1. To test a key, hash it the same k ways: if any of those bits is 0 it is definitely absent; if all are 1 it is probably present.
That asymmetry is the whole point. False negatives are impossible, but false positives happen because unrelated keys can collectively light up the same bits. The false-positive rate rises as the array fills, and you trade it off against m and k up front.
Reach for one as a cheap gate in front of something expensive: skip a disk or network lookup when the filter says “definitely not there.” LSM-tree databases put a Bloom filter on each SST file for exactly this reason.
The catch: a classic Bloom filter can't delete or count, and it can't enumerate its members. If you need deletion, look at a counting or cuckoo filter instead.
Nova 10.8s · 176 tokThink of a Bloom filter as a membership test that's allowed to say “maybe.” It never forgets something you added, but it will occasionally claim to recognize something you didn't.
Under the hood it's just a row of bits and a handful of hash functions. Adding an item flips a few bits on; checking an item asks whether those same bits are all on.
Because different items can flip overlapping bits, an “all on” result isn't proof — it's a strong hint. A “not all on” result, though, is a guarantee the item was never added.
The practical win is memory. You can represent millions of items in a few megabytes and get near-constant-time checks, which is why caches, databases, and crawlers use them to avoid pointless work.
Just remember the limits: you can't remove items or ask what's inside, and you must size it for your expected item count or the false-positive rate creeps up on you.
Compare SplitCompare Split
Marketing
Full pages, assembled
Production-ready pages built from the blocks — install everything at once.
- Autonomous SEO — built for modern search.
Stop Doing SEO
Let It Run ItselfAn AI system that finds opportunities, creates content, fixes technical issues, and gets you cited in AI search — automatically.
Live now. Join teams already running SEO on autopilot.
AI SEO Console
Ask anything. I'll audit, plan, and execute across your site.
Scroll for live insights↓AreaFindingRecommendationAction- Keywords14 high-intent gaps vs. top 3 competitorsGenerate content briefs
- Content8 pages with thin content (<400 words)Expand with AI outlines
- Tech SEOLCP 3.8s on /blog/seo-tipsInline critical CSS
- On-PageDuplicate H1s on 14 pagesRewrite headings
- Backlinks5 broken inbound links losing equityReclaim via redirects
- SchemaMissing FAQ schema on 12 pagesAdd structured data
Monthly Growth Pacing- Organic Search18.2K / 24K
- AI Overviews4.1K / 6K
- Long-tail Queries2.8K / 5K
- Branded Search9.4K / 10K
Top Ranking Pages- /ai-content-briefpos 3.22.1K
- /seo-audit-toolpos 5.81.6K
- /keyword-gappos 7.1940
- /technical-seopos 9.4612
Agent running — 6 tasks queuedLast scan 4m agoSEO isn't hard.
It's just exhausting.You're not losing because you're bad at SEO. You're losing because the game changed — and the old playbook still demands all your time.01Search is changing faster than you can keep up.
AI answers steal clicks before users even reach your site. Fewer clicks. Less visibility. Same traffic, gone.
02You don’t lack data — you lack direction.
You jump between tools, export reports, stare at numbers… and still don’t know what to do next.
03Everything takes longer than it should.
One blog = keyword research → outline → writing → optimization → internal links → publishing. It eats hours. Every single time.
research→outline→write→optimize→links→publish04And while you’re figuring it out…
someone else already shipped 10 pages and took your spot.
THE TRAPSo you stay busy — but nothing compounds.
You're stuck in the cycle of doing SEO, but never seeing SEO work.
SEO is no longer something you do. It’s something you run.
Meet your autonomous
SEO system.- 01/04
Finds
Spots gaps, queries, and content ready to rank.
- 02/04
Decides
Prioritizes what actually moves the needle.
- 03/04
Executes
Ships updates, fixes, and structure changes.
- 04/04
Compounds
Learns from each change, then improves again.
↻RUNS CONTINUOUSLYOutcomes,
not dashboards.Every feature replaces hours of manual work with a clear result.Always know what to do next
Three high-impact actions. Not fifty metrics. No decision fatigue.
Ship /pricing rewriteCluster 8 new queriesFix 3 broken linksContent that gets cited
Answer a few questions. The system ships content AI engines actually reference.
CITEDby perplexitySee when AI recommends you
Track visibility across AI search, not just Google. Know when you're cited — or missed.
ChatGPTLIVEPerplexityLIVEClaudemissedSet it up once. Let it run.
- 1
- 2
- 3
Connect your website
Plug in your site and data sources. Takes minutes.
Your site
https://yoursite.comConnected
The system starts working
It analyzes performance, spots opportunities, and begins executing.
ANALYZINGCrawling 412 pagesMapping 1,284 queriesRanking opportunitiesYou approve — or automate
Review every action, or let it run hands-off. Your call.
Auto-approveReview each changeLIVE RESULTS · 2,000+ CLIENTS0.0xAvg. ROAS$0.0MRevenue driven0.0MOrganic visits0k+Keywords on page 1+0%Conversion liftLast updated: Apr 24, 2026All systems okStop doing SEO
Start running itIt's live. Join the teams already running SEO on autopilot.Get startedNo spam. No fluff. Just results.
Agentic Landing8 blocksAgentic Landing
A complete landing page for an AI/agent product, assembled from the agentic blocks: navbar → hero → problem → autonomous system → outcomes → setup → closing CTA → footer. `brand` + `label` props thread the amber accent and wordmark through every section; light-mode, motion-rich, self-contained theme. Install it and every block + component comes with it.
- v1.0 is now available
Ship your product faster than ever.
The all-in-one platform that helps teams design, build, and launch — without the busywork. Start free, scale when you're ready.
No credit card required · Free 14-day trial
Trusted by fast-moving teams everywhere
NorthwindCobaltHarborLoopVantageMeridianEverything you need to ship
A complete toolkit so your team can move from idea to launch without the usual friction.
Blazing fast
Static-first architecture and edge delivery keep every interaction under a frame.
Secure by default
SOC 2 Type II, SSO, and granular role-based access come standard on every plan.
Integrates with everything
Native connectors for the tools your team already lives in — plus a typed API.
Automate the busywork
Build flows that move data and trigger actions without writing a line of glue code.
Composable
Start with a template and reshape it. Every piece is a building block you control.
Delightful details
Thoughtful motion, keyboard support, and dark mode — polish your users can feel.
Built for scale, designed for humans
The power of an enterprise platform with the ergonomics of a weekend project.
Real-time everything
Changes propagate instantly across every client with sub-100ms sync.
Global edge
Served from 300+ locations, close to every user.
Versioned history
Roll back any change.
Observability built in
Traces, logs, and metrics for every request — no extra agents, no extra bill.
99.99%Uptime over the last year120k+Developers building with us8BRequests served per day<40msMedian global response timeLoved by teams that ship
Thousands of fast-moving teams build on the platform every day.
“We replaced three tools with this and shipped our redesign two weeks early. The team actually enjoys using it.”
MCMaya ChenHead of Product, Northwind “The attention to detail is unreal. Keyboard shortcuts, dark mode, the little animations — it all just feels right.”
DADiego AlvarezFounder, Loop “Onboarding took an afternoon. By the next morning the whole engineering org had migrated.”
PNPriya NairStaff Engineer, Cobalt “Support is fast and honest, the API is a joy, and the docs are the best I've read in years.”
SWSam WhitfieldCTO, Harbor Simple, transparent pricing
Start free. Upgrade when you grow. Cancel anytime.
Starter
Everything you need to get going.
$0/mo- 1 project
- Community support
- 1 GB storage
- Basic analytics
Pro
Most popularFor growing teams that ship often.
$24/mo- Unlimited projects
- Priority support
- 100 GB storage
- Advanced analytics
- Custom domains
Enterprise
Security and scale for large orgs.
Custom- SSO & SAML
- Dedicated support
- Unlimited storage
- Audit logs
- SLA
Frequently asked questions
Everything else you might be wondering. Still stuck? Reach out any time.
Can I use this in a commercial project?
Yes. Everything is MIT licensed — use it in personal and commercial projects without attribution.
Do I need a design background?
Not at all. Each block is ready to drop in and looks good out of the box. Tweak the copy and you're done.
How do updates work?
Because the code lives in your repo, nothing changes underneath you. Pull new versions only when you want them.
Is it accessible?
Components are built on Radix primitives with keyboard support and ARIA wired up, and blocks follow the same standards.
Can I customize the styling?
Completely. It's plain Tailwind and CSS variables — restyle a token or a class and the whole system follows.
Ready to build something great?
Join thousands of teams shipping faster with our platform. Get started in minutes — no credit card required.
SaaS Landing Page11 blocksSaaS Landing Page
A complete, production-ready SaaS landing page — navbar, hero, logos, features, bento, stats, testimonials, pricing, FAQ, CTA, and footer — assembled from the blocks. Install it and every block and component comes with it.
No lock-in. The code becomes yours.
No theme to set up. Add any component, block, or template — by CLI or copy-paste — and it brings its own styling.
Install with the CLI
One command drops the component and its dependencies into your project via the shadcn registry.
Or just copy-paste
Every component page shows the full, dependency-light source with a one-click copy button.
# add anything — components, blocks, or a whole template
npx shadcn@latest add https://ui.saumyarex.xyz/r/spotlight-card.json
# no theme step, no config: each item ships its own light + dark colors
npx shadcn@latest add https://ui.saumyarex.xyz/r/hero-agent.json