Accessible component library - neelam-ui
A published React component library of 47 accessible components, built to the WAI-ARIA Authoring Practices Guide and shipped to npm as neelam-ui. It lives in a monorepo alongside its own documentation site at neelamui.com — a Next.js App Router build with MDX pages, generated prop tables and a gallery of whole-screen blocks — with unit, accessibility and axe-core story testing enforced in CI and releases published through npm trusted publishing.
- TypeScript
- React 19
- Tailwind CSS 4
- Next.js 15
- Storybook 10
- Vitest
- tsup
By the numbers
- 47
- Components published
- each with stories and tests
- 208
- Stories swept by axe
- in a real browser, every push
- 48
- Test files
- Vitest, RTL and jest-axe
- 8
- Blocks
- whole screens built from the library
Key features
- 47 components
- From primitives (Button, Input, Checkbox) to composite widgets (Dialog, Combobox, Command palette, DataTable, Carousel, Calendar, Sidebar, Resizable) and data display (Chart, Sparkline, StatCard), each with its own Storybook stories and test suite.
- Accessibility as the design constraint
- Every interactive component implements the WAI-ARIA APG pattern for its widget type: correct roles and ARIA relationships, full keyboard support, and managed focus.
- Native platform first
- Dialog is a real <dialog> driven by showModal(), so the focus trap, Escape-to-close, and top-layer stacking come from the browser rather than hand-rolled JavaScript; menus, popovers, selects and tooltips use the native Popover API, and collapsed regions are removed from the tab order with inert.
- Automated a11y testing in CI
- All 208 stories are run against axe-core through the Storybook test runner in a real Chromium, alongside 48 Vitest files using React Testing Library and jest-axe. CI deploys the exact artifact it just tested rather than rebuilding it.
- Its own documentation site
- neelamui.com is a Next.js App Router site with MDX pages, statically exported to S3 and CloudFront. It depends on neelam-ui as a workspace package and imports the built dist, so the docs exercise the published surface an outside consumer gets; prop tables are generated from the library's own TSDoc and every example renders live beside its verbatim source.
- Blocks gallery
- Eight whole-screen compositions — an analytics dashboard, account settings, sign-in and sign-up, pricing, a team table, an FAQ and a chat panel — each assembled only from published components and copy-pasteable as-is.
- Reduced-motion support
- All transitions are dropped under prefers-reduced-motion (WCAG 2.3.3), including animations built to avoid non-animatable properties (open/close via a grid-template-rows 0fr to 1fr transition instead of height: auto).
- Documented decision log
- A DECISIONS.md recording the per-component accessibility reasoning: why a native element was or wasn't used, how hidden content is removed from the tab order and accessibility tree with inert, and what each ARIA relationship is doing.
- Published and consumable
- Versioned with changesets and published to npm through OIDC trusted publishing with build provenance, as dual ESM/CJS bundles with generated TypeScript declarations and MIT licensing including third-party notices.
Tech stack
Library
- React 19 + TypeScript, authored as a headless-leaning component API
- Tailwind CSS 4 for styling, class-variance-authority for variant-driven props, tailwind-merge so a passed className reliably beats a component default
- Native browser primitives (<dialog>, the Popover API, inert) in place of JavaScript reimplementations
- Recharts as an optional peer dependency, used only by the charting components
Documentation
- Next.js 15 App Router + MDX, statically exported and served from neelamui.com behind AWS CloudFront
- Prop tables generated from the library's TSDoc with react-docgen-typescript; examples and blocks generated into a registry at build time so each demo ships with its own verbatim source
- Storybook 10 with the a11y addon, one story file per component, published separately at storybook.neelamui.com
Testing
- Vitest + React Testing Library + jest-axe for unit and accessibility assertions (48 test files)
- Storybook test runner with axe-playwright running axe-core over all 208 stories in a real browser
Build and distribution
- npm workspaces monorepo: the package, the docs site, and the CloudFront edge function that redirects the legacy URLs
- tsup producing ESM + CJS bundles with TypeScript declaration files
- Published to npm as neelam-ui with an exports map and peer-dependency ranges for React; releases versioned by changesets and published via OIDC trusted publishing with provenance
- GitHub Actions CI running lint, the unit suite, the package build, the docs typecheck and build, and the full axe-core story sweep on every push and pull request
Skills demonstrated
Accessibility engineering to a published specification (WAI-ARIA APG), design-system and component API design, keyboard and focus management, automated accessibility testing, npm package authoring and distribution (bundling, type declarations, release automation, licensing and compliance), monorepo tooling, documentation-site engineering with Next.js and MDX, and CI/CD pipeline configuration.