Snicol
@snicol/ui 7 components ready

The design catalog for @snicol/ui

Tokens, type scale, component states, and the real home and portfolio pages that consume them. Verify a change here before it reaches production.

Token palette

Semantic colors, light value over dark value, from the same tokens.ts consumed by every app.

--background
--foreground
--primary
--secondary
--muted
--accent
--destructive
--ring
--status-positive
--status-caution
--status-negative
--page-light

Type scale

Every named size token, set at its real weight and line height.

xs
0.75rem
Ideas made clear, useful, and quietly memorable.
sm
0.875rem
Ideas made clear, useful, and quietly memorable.
base
1rem
Ideas made clear, useful, and quietly memorable.
lg
1.125rem
Ideas made clear, useful, and quietly memorable.
xl
1.25rem
Ideas made clear, useful, and quietly memorable.
2xl
1.5rem
Ideas made clear, useful, and quietly memorable.
3xl
2rem
Ideas made clear, useful, and quietly memorable.

Component states

Server-rendered variants above; interactive, client-only behavior below.

Button variants

Badge variants

defaultsecondarydestructiveoutline
Field Notes
A calmer way to collect observations, references, and next steps.

Full Card composition: header, title, description, and content parts, no client boundary required.

Arrow keys move focus between triggers and switch panels in one motion.

ToggleGroup, single selection

Vertical separator, decorative by default

Catalog

Every entry links to its own examples and accessibility notes.

Registry proof

Compare the packaged Button with the local shadcn CLI copy before changing registry output.

Open the registry proof

Real page previews

The actual copy and structure from apps/home and apps/portfolio, not stand-ins.

apps/home

Independent maker

Ideas made clear, useful, and quietly memorable.

Snicol is a small digital home for experiments, selected work, and the details that make products feel considered.

apps/portfolio

Selected portfolio

Useful things, made with care.

A small selection of digital products and systems shaped around people, not process.

Field Notes

A calmer way to collect observations, references, and next steps.

Accessibility notes

Collected from every catalog entry. Read these before shipping.

  • button. Icon-only buttons must carry an aria-label; the visible label is what screen readers announce otherwise.
  • button. Disabled buttons remain focusable-adjacent but must never silently swallow a required action. Explain why in adjacent text.
  • card. A card is a layout primitive, not a landmark. Give the surrounding section its own heading and aria-labelledby.
  • card. CardAction sits in the header grid; keep it a real interactive element, not a decorative icon.
  • badge. Color alone must not convey status; pair every badge with a text label (this catalog never ships a color-only badge).
  • separator. Set decorative={false} only when the separator marks a real thematic break a screen reader user needs announced.
  • tabs. Every TabsTrigger needs visible, distinguishing text. Icon-only tabs must add an aria-label.
  • tabs. Don't nest interactive widgets that also claim arrow-key navigation inside a TabsContent panel without testing focus order.
  • toggle-group. type="single" groups need an accessible group label (aria-label or aria-labelledby) describing the choice being made.
  • toggle-group. Every item needs its own accessible name. A bare icon glyph is not one.
  • tooltip. A tooltip must never be the only way to reach information required to use its trigger. Treat it as supplemental only.
  • tooltip. TooltipProvider must wrap the app once; nesting extra providers changes the default open/close delay unexpectedly.
@snicol/ui design catalogIndependent application at /design