Neighborhood

Design System v0.1

A component library and design system built completely by me from the ground up. This case study exclusively covers the thinking and decision making behind the v0.1 release. Neighborhood is still under active development, and the system continues to evolve beyond what's documented here.

RoleSole DesignerDeveloper
Components18 Components11 Atomic7 Compositional
TypeDesign SystemDocumentation
Statusv0.1 ReleasedActive Development
System at a Glance

A small preview of Neighborhood's component library. These aren't screenshots or mockups, but the functional, live components that are packaged and ready to be installed through the GitHub. Explore them!

Button
Badge
Shippedv0.1npm18
Toggle
Tabs
Input
Avatar
AT
NB
DS
UI
Switcher
Banner
Changes saved.
Empty State

No results

Try a different search.

Token System

Every visual decision is a CSS custom property. Components completely reference tokens (not hardcoded values), ensuring structure and consistency throughout. Currently we have six primary token categories: typography, color, spacing, radius, elevation, and motion. This token system was finalized before any components were built.

Warm Stone Neutrals

11 warm steps. Approachable, not clinical.

Extended Palette

Primary

Grass Green · 7 steps

Token
--primary-*
Use cases
Primary actions, success states, CTA
Live Preview
ActivePendingDraftNew
PR

Primary

Primary actions, success states, CTA

Role-Based Radius
Control8px
Surface12px
Pill9999px
Motion Tokens

4 easing curves · 4 durations. Click to compare bracket and landing selection patterns.

Bracket variant
Landing variant
--ease-default--ease-spring--ease-pop--ease-loop
Components

18 components in two layers. 11 atomic primitives handle individual interactions and act as building blocks for compositional components. 7 compositional components compose those atoms into reusable patterns. This is where our systems thinking lives.

Button

4 variants · hover, active, focus, disabled, loading states

Setting

Appeared 10+ times on a single Notion page. Label + description left, any control right. The slot accepts any atom.

Dark modeSwitch themes
NotificationsReceive alerts
LanguageDisplay language
Property

All three products display labeled data differently. One component API unifies them.

Notion style
Status
Active
Assignee
Akin Tewe
Due
Mar 15, 2026
Stripe style
Plan
Pro
Balance
$2,450.00
Email
akin@example.com
Discord style
Name
paid actor
User
eightybot
Since
Jan 2024
Banner + Empty State

4 severity levels. Empty State uses a signature dashed border. Both support action slots.

New version available.
Saved successfully.
Trial expires in 3 days.
Failed to save.

No projects yet

Create your first project to get started.

Two-Repo Architecture

Published as @neighborhood/ui. Doc site imports from the package, not local files. This ensures a clean API boundary, and allows our doc site to live as a live consumer of the design system.

$ npm install github:akin-tewe/neighborhood-ui
Accessibility

Every component has a visible focus ring via :focus-visible. Consistent spec: 2px solid sky-400, 2px offset. Every documented keyboard interaction works.

Composition

Atoms compose into reusable patterns. Scroll to watch a settings panel assemble itself from individual components.

Building a settings panel...
Dark modeSwitch between light and dark themes
NotificationsReceive alerts for new activity
LanguageChoose your preferred language
3 atoms → 1 composed settings panel
Methodology

Constructing random components to make up the initial pool would leave most of them dead and unused, which is a common problem in design systems. To ensure a strong foundation, the initial component pool was built using 3 pilots as a reference model. I performed an in-depth analysis of Notion, Stripe, and Discord's infrastructure to see which components came up consistently across all 3. From this we could decide what to extract and abstract into our usable component pools. These websites were chosen as a triangle: content tools, data dashboards, and social platforms. This ensures a valuable range of information and core use cases to abstract from.

Discord

Screenshots omitted for privacy

Settings preferences — the densest setting row page across all audits

Settings preferences — the densest setting row page across all audits

People settings — empty states, tabs, and invite input patterns

People settings — empty states, tabs, and invite input patterns

Command palette — search overlay with categorized results

Command palette — search overlay with categorized results

Home — content-first layout with warm typography and sidebar navigation

Home — content-first layout with warm typography and sidebar navigation

Share popover with input, permissions, and avatar row

Share popover with input, permissions, and avatar row

If a component appeared in all three, it was flagged as a non-negotiable addition. Two appearances meant strong consideration. One appearance required a high compositional value to earn inclusion. Among all of our identified components, 18 were picked out thoughtfully in regards to what would best serve Neighborhood's identity.

Tradeoffs

Every decision to include a component was also an active decision to exclude others. This deliberately tight inventory ensured development time wasn't bogged down with creating dead components, and set the pace on how to prioritize implementation for future development.

Same Need, Different Solutions

Settings architecture alone had three valid approaches. Notion uses a modal overlay, Discord does a full-page takeover, and Stripe uses a card grid hub. Property display had three implementations. Destructive actions used consistently used a red fill throughout most observations. Neighborhood documents this analysis and picks the right approach per context, not per preference.

Inclusion vs Exclusion

Toggle appeared in Notion (10+ instances) and Discord but not Stripe. This meant it should still be included because two products confirmed universality. Switcher appeared only in Stripe but its compositional value (filtering data in place without navigating) earned inclusion as a distinctive pattern. A metric card was deliberately excluded from v0.1. It was deemed too specific to data-dense dashboards for a system still establishing its identity.

Scope
In Scope — v0.1 Shipped
  • • 11 Atomic: Avatar, Badge, Button, Checkbox, Divider, Input, Switcher, Select, Tabs, Toggle, Tooltip
  • • 7 Compositional: Banner, Block, Table, Empty State, Form Group, Menu, Property, Setting Row
Up Next — v0.2 Roadmap
  • • Emerging patterns: fleshed out card system, showcase surfaces, flat strip indicator
  • • New components: Command Palette, avatar color props
  • • Dark mode via token architecture
  • • Messaging + e-commerce demos
Demos

Three demo pages, each exercising different composition contexts. These utilize a number of our components in each composition to demonstrate what this design system would look like working in harmony. Switch tabs to see different context demonstrations.

Display nameYour public username
LanguageDisplay language
TimezoneSet your local timezone
What's Next

While v0.1 shipped the foundation, several patterns emerged during documentation site development that are already actively shaping the next version.

Emerging Patterns

Patterns observed during doc site construction that are candidates for formal components. Cards, showcase surfaces, and a flat strip indicator (the non-rounded sibling of Banner, purpose-built for unified card compositions) have all been documented and are being evaluated for extraction. Expanded usage guidelines and implementation guidance per component are also in progress.

Card System
Showcase Surface
Flat Strip
Usage Guidelines
v0.2 Roadmap
New Components
  • • Command Palette (Notion), Profile Card (Discord)
  • • Avatar color prop, card system, showcase surfaces
  • • Dark mode via token architecture
Emerging Patterns
  • • Flat strip indicator, detailed usage + implementation guidelines
  • • Doc page layout abstraction
  • • Messaging + e-commerce demo pages
Selection Patterns

Two signature selection patterns have been established. Bracket (primary-400 vertical bars, spring animation) for primary navigation and tabs. Landing (translateY settle with inset shadow) for secondary nav and text-heavy lists. Both are documented with specific motion curves and use-case rules.

Responsive Infrastructure

CSS-first responsive system with two breakpoints (768px tablet, 640px mobile). Components also include their own mobile behavior. Setting wraps controls, Block hides descriptions, Switcher stacks vertically inside settings. Pages use layout classes and the CSS handles the rest.

Additional demo pages covering messaging and e-commerce contexts are planned to demonstrate wider compositional range. Dark mode implementation via the existing token architecture is also in scope. The CSS custom property foundation means this is just a matter of defining alternate values, not restructuring components.

Built With
Next.js 16 React 19 TypeScriptTailwind CSS 4 CSS Custom Properties

Tokens use CSS custom properties — they work anywhere CSS works.