The web design system
Bleecker
A React component library with shared typography, design tokens, accessible controls, and application layouts.
I designed and built this project independently, using my own resources.
01 / Context
The problem behind the project
A portfolio of applications needs a consistent visual language and interaction model without rebuilding the same controls in every repository.
A portfolio of operational products quickly becomes expensive to maintain if each application implements its own tables, dialogs, navigation, themes, and typography. I built Bleecker as the shared web foundation for those products, including this website, rather than treating visual consistency as an application-by-application exercise.
The design system also provides contracts that native libraries can implement. Sharing semantic names and tokens matters; forcing a native platform to import browser code does not.
02 / Implementation
Design and implementation
I design and build the shared web component system, its tokens, and the contracts consumed by the native implementations.
I designed the visual language and built the React components, layout primitives, theme system, bundled typography, Storybook fixtures, and platform-neutral token/contract exports. Canonical TypeScript token data generates the CSS layer and provides shared inputs to the sibling implementations.
The library includes operational layouts and continuously updated feed primitives, not just isolated buttons. Attention surfaces use a continuous intensity model, while applications own the domain meaning of that intensity. Form and overlay components own focus, label relationships, controlled state, and dismissal behavior.
I keep renderer-neutral exports dependency-light so native consumers can reuse vocabulary without loading the DOM, CSS, Radix, or chart implementation. Hand-authored components retain their platform behavior even when consuming generated conformance artifacts.
03 / Architecture
Architecture and workflow
Define a shared vocabulary
Canonical tokens and component contracts define semantic roles, variants, and visual foundations.
Render for the web
React components and layout patterns turn those contracts into accessible browser behavior.
Verify complete interactions
Storybook compositions and interaction fixtures exercise state, focus, reset, nested overlays, themes, and responsive layouts.
Consume through public boundaries
Applications use stable package entry points; native siblings reuse the neutral leaf exports rather than web renderers.
04 / Approach
Engineering decisions
A common vocabulary
Encode Sans, Libre Franklin, a restrained palette, and shared spacing and control sizes give applications a consistent foundation.
Components and composition
The library includes controls, navigation, feedback, data display, and application layouts, with visual fixtures documenting their behavior.
Contracts across platforms
Native sibling libraries share tokens and component contracts while using the interaction and accessibility conventions of their own platforms.
05 / Evidence
Evidence and outcomes
The controlled Select reset work checks the parent value, placeholder, native form value, and actual submitted data together. The modal lifecycle work covers mounted focus, Tab containment, nested dismissal, and focus/scroll restoration.
The build checks generated tokens for drift. A separate conformance proof consumes a pinned neutral artifact without overwriting the existing components; unsupported behavior stays explicit rather than being counted as complete parity.
Source and technical notes
06 / Current scope
Where it stands
The shared React library used by this website and other Gaulatti applications.
Application labels, page structure, and complete product workflows still need application-level accessibility testing. A component library can supply good primitives without proving every consumer is accessible.
Tailwind consumers compile the shared styling with their utilities; non-Tailwind consumers use the packaged stylesheet. Loading both compiled utility layers can change responsive behavior through the cascade.