Every UI kit is flat.
This one is lit.

One light crosses the page and all 548 free React components catch it: shadows swing, glass frosts, metal glints. Pick a material and the whole kit changes with it. Blocks, templates and brand kits included. MIT, Tailwind CSS v4, shadcn-compatible.

Browse components

The light drifts on its own. Switch the material.

Team

Most picked

$24/ seat / mo

Notifications

Revenue, last 30 days

$48,290

+12.4%

Customers

1,391

Churn

2.1%

ARPU

$34.70

Northwind Labs paid $12,400

INV-2041 settled to your Stripe balance.

now
Ask Lumen or search⌘K
Summarize this month↵
Remind unpaid customersR
Go to InvoicesG I

Team

6 of 10 seats
AKJLSRMWPTDN

Templates

Whole products, not just pages.

8 full landing pages with working product UI inside: a transfer app, a booking flow, an agent run, a cart. Open one and click around.

All 8 templates

Materials

Same code. Four materials.

Every component speaks in tokens, so a material is one attribute: data-material="metal" on any element. The four panels below run the exact same markup. Change the plan in one and watch all four.

Hairline

hairline

Revenue

+12%

$48,290

Auto-reminders

3 days before due

Invoice paid

Northwind Labs, $12,400

Unlit. 1px lines, quiet depth. For products that should disappear.

Glass

glass

Revenue

+12%

$48,290

Auto-reminders

3 days before due

Invoice paid

Northwind Labs, $12,400

Frosted, translucent, lit from your cursor. Colour moves behind it.

Metal

metal

Revenue

+12%

$48,290

Auto-reminders

3 days before due

Invoice paid

Northwind Labs, $12,400

Brushed aluminium, bevels that turn with the light, machined thumbs.

Paper

paper

Revenue

+12%

$48,290

Auto-reminders

3 days before due

Invoice paid

Northwind Labs, $12,400

Warm stock, real grain, long soft shadows. Editorial and calm.

01 / 04

Every screen is a stack of decisions.

02 / 04

Five layers. Every value is a token.

03 / 04

Nothing floats. Nothing is guessed.

04 / 04

Put back together, it is just your product. Try 7d, 30d, 90d.

Northwind / Overview

Search invoices⌘K
Invoice⌘I
Customer⌘C
Import CSV⌘U
AK

Revenue

+12.4%

$48,290

Active customers

+3.1%

1,391

Churn

-0.4%

2.1%

Revenue

Net of refunds, in USD

Activity

  • JLJordan paid INV-20412m
  • SRSam upgraded to Team18m
  • AKRefund issued to Globex1h
  • MWNew customer: Initech3h
CustomerInvoiceStatusAmount
Northwind LabsINV-2041Paid$12,400
Acme RoboticsINV-2040Pending$3,890
✓

Invoice sent

Northwind Labs will get it by email.

Northwind / Overview

Search invoices⌘K
Invoice⌘I
Customer⌘C
Import CSV⌘U
AK

Revenue

+12.4%

$48,290

Active customers

+3.1%

1,391

Churn

-0.4%

2.1%

Revenue

Net of refunds, in USD

Activity

  • JLJordan paid INV-20412m
  • SRSam upgraded to Team18m
  • AKRefund issued to Globex1h
  • MWNew customer: Initech3h
CustomerInvoiceStatusAmount
Northwind LabsINV-2041Paid$12,400
Acme RoboticsINV-2040Pending$3,890
✓

Invoice sent

Northwind Labs will get it by email.

Northwind / Overview

Search invoices⌘K
Invoice⌘I
Customer⌘C
Import CSV⌘U
AK

Revenue

+12.4%

$48,290

Active customers

+3.1%

1,391

Churn

-0.4%

2.1%

Revenue

Net of refunds, in USD

Activity

  • JLJordan paid INV-20412m
  • SRSam upgraded to Team18m
  • AKRefund issued to Globex1h
  • MWNew customer: Initech3h
CustomerInvoiceStatusAmount
Northwind LabsINV-2041Paid$12,400
Acme RoboticsINV-2040Pending$3,890
✓

Invoice sent

Northwind Labs will get it by email.

Northwind / Overview

Search invoices⌘K
Invoice⌘I
Customer⌘C
Import CSV⌘U
AK

Revenue

+12.4%

$48,290

Active customers

+3.1%

1,391

Churn

-0.4%

2.1%

Revenue

Net of refunds, in USD

Activity

  • JLJordan paid INV-20412m
  • SRSam upgraded to Team18m
  • AKRefund issued to Globex1h
  • MWNew customer: Initech3h
CustomerInvoiceStatusAmount
Northwind LabsINV-2041Paid$12,400
Acme RoboticsINV-2040Pending$3,890
✓

Invoice sent

Northwind Labs will get it by email.

Northwind / Overview

Search invoices⌘K
Invoice⌘I
Customer⌘C
Import CSV⌘U
AK

Revenue

+12.4%

$48,290

Active customers

+3.1%

1,391

Churn

-0.4%

2.1%

Revenue

Net of refunds, in USD

Activity

  • JLJordan paid INV-20412m
  • SRSam upgraded to Team18m
  • AKRefund issued to Globex1h
  • MWNew customer: Initech3h
CustomerInvoiceStatusAmount
Northwind LabsINV-2041Paid$12,400
Acme RoboticsINV-2040Pending$3,890
✓

Invoice sent

Northwind Labs will get it by email.

UI components
397
full-page blocks
43
motion moments
108
themes, one token set
2
contrast, both themes
AA
MIT, free forever
$0

Physics

Things that move have mass.

AI can write a component in seconds. It cannot make one feel right. Every moving part here runs on a tuned spring, keeps its identity while it moves, and holds still for anyone who asks for reduced motion.

MorphPanel

The button becomes the panel

One surface stretches on a spring. Corners ease from 10 to 16px. Nothing pops.

Revenue today

Live

$48,290

0 manual sales

NumberRoll

Numbers roll, not swap

Only the digits that changed move. Columns keep their place as the number grows.

Team

$24/ seat / mo

Billed $288 per seat yearly

SegmentedControl + NumberRoll

Price changes you can follow

The thumb glides, the discount badge lights, and the price counts to its new value.

Try 424242, or anything else.

OtpInput

Wrong answers shake

One real input under painted slots. Paste and SMS autofill just work.

Live, not screenshots

Built for the screens people live in.

Every tile below is the real component, running. Type in the composer, select rows, flip the billing cycle.

AI surfaces

Composer, reasoning, tool calls, streaming

Explore
Add a yearly toggle to the pricing table
Pricing table uses PlanCard × 3. A SegmentedControl above it keeps the toggle on the same baseline as the heading.
+ <SegmentedControl items={["Monthly", "Yearly"]} />
Done. I added a yearly toggle to the pricing table, kept prices in tabular numerals, and marked the Scale plan as recommended. Both themes pass contrast.
pricing-table.tsx Preview
MonthlyYearly

Starter

$0/mo

Pro

$15/mo

Best value

Scale

$39/mo

Opus

Data

Selection, bulk actions, status

Explore
1 selected
AOAda Okaforada@northwind.devActive
LBLeo Brandtleo@halcyon.healthInvited
MSMira Satomira@parabola.studioActive
TRTomás Reyestomas@kestrel.ioSuspended

Billing

Plans, cycles, checkout

Explore

Settings

Preferences that save themselves

Explore
Weekly digestA Monday summary of activity
Product updatesNew features, once a month
Security alertsSign-ins from new devices

Command

Keyboard-first navigation

Explore
⌘K
New invoiceBilling
Invite teammateWorkspaceI
Open dashboardNavigationD
Email receiptsBillingE
Ask Lumen AIAssistantA

Auth

Sign in, sign up, 2FA, magic links

Explore

Sign in to Lumen

Welcome back. Pick up where you left off.

or

Charts

Area, line, bar, sparklines

Explore

12,480

+18.2%

Signups this week · hover a bar

Blueprint

The spec ships with the component.

Hold ⌥ on any page of this site and hover anything. You get the box, the padding, the gaps, the radius, the type, and the exact token classes it was built from. Off-grid values get flagged. Your AI agent reads the same spec from llms.txt.

then hover the card on the right
NL

Northwind Labs

INV-2041 · due in 3 days

$12,400

The hairline standard

Details you feel before you notice them.

Six rules every component follows. They are why a settings page built with MiniDev UI reads as expensive, and one built without it reads as a template.

Continue
inset 0 1px highlight1px hairline border0 1px key edge

One pixel, two lights

Solid controls carry a top highlight and a bottom key edge. Depth comes from light, not blur.

inner r12
outer r20 · pad 812 = 20 − 8

Radii that nest

Inner radius equals outer radius minus padding. Concentric corners are the first thing a designer checks.

Body13px
+0.005em
Section22px
−0.018em
Display44px
−0.03em

Tracking tightens with size

Every size ships with its own letter-spacing, so headings never look loose and body text never looks cramped.

enter 200msexit 160ms

Exit is faster than entry

200ms in, 160ms out, on curves tuned for interfaces. Tap the rail to feel the difference.

--bg
--surface
--sunken
--border
--fg-muted
--ink
--accent
--accent-2

Tokens, not hex

Components speak in semantic OKLCH tokens. Change the accent or flip the theme and nothing else needs to move.

Saverest
Savehover
Savefocus
Saveactive
Savebusy
Savedisabled

Every state, drawn

Rest, hover, focus, pressed, busy and disabled are designed, not left to browser defaults. None of them shift layout.

Copy. Paste. Own it.

No lock-in. The code is yours.

Install the package, or copy one file and change anything. There is no runtime, no theme provider, no wrapper to fight.

Read the docs

Your AI already knows it.

Point Cursor, Claude or any agent at /llms.txt. Every component and its import, in one file a model can read.

  1. 01

    Install

    One package. React, Tailwind v4 and Base UI are the only peers.

    bash
    npm i minidev-ui-kit
    
  2. 02

    Import

    Every component is a single file you can also copy straight into your repo.

    tsx
    import { Button } from "minidev-ui-kit/ui/button"
    import { DataTable } from "minidev-ui-kit/ui/data-table"
    
  3. 03

    Ship

    Tokens live in CSS, so theming is a variable change, not a rebuild.

    tsx
    export default function Billing() {
      return <Button size="lg">Upgrade to Team</Button>
    }
    

Index

Everything, one hairline apart.

Browse all 20 categories

Stop rebuilding
the boring parts.

Settings pages, invoice tables, sign-in flows, chat composers. They are already drawn. Spend your week on the part only you can build.