Skip to main content
Design SystemsReactTailwind CSS

Building Production-Ready UIs with Ninna UI and Tailwind v4

A

Alex Rivera

June 23, 2026

8 min read

Introduction

Modern front-end development demands more than just getting things to work — it requires systems that scale, components that compose, and designs that adapt. Ninna UI is built from the ground up to satisfy all three. In this guide, we'll walk through building a full-featured application interface, from project setup to production deployment.

Setting Up the Project

The fastest way to start is with the Ninna UI CLI. Run npx create-ninna-app and follow the prompts to select your framework (Vite, Next.js, or React Router v7), your theme preset, and TypeScript configuration. The scaffolder sets up Tailwind v4 with the correct CSS imports and aliases automatically.

Semantic Token System

One of Ninna UI's strongest features is its token hierarchy. Instead of hardcoding colors, you style with tokens like bg-primary, text-base-content, and border-base-200. Because these map to CSS custom properties backed by oklch values, dark mode is zero-effort: flip the .dark class and every token inverts appropriately.

Responsive Layouts

The Grid component accepts a breakpoint map for its columns prop, making responsive grids declarative. For direction changes on Stack components, lean on Tailwind utility classes like flex-col md:flex-row — Stack's direction prop doesn't change per breakpoint, but className does.

Accessibility by Default

Every interactive component in Ninna UI is built on Radix UI primitives, which ship with correct ARIA attributes, keyboard navigation, and focus management. Overlays like Modal and Drawer handle focus trapping automatically. Your job is semantic HTML structure — use main, nav, section, and header landmarks appropriately.

Production Checklist

Before shipping: run pnpm typecheck, verify pnpm build passes, and test at 375px, 768px, and 1280px viewports. Check both light and dark modes. Ensure all interactive elements have visible focus rings and aria-labels. Use Lighthouse or axe DevTools to catch any remaining accessibility gaps.

Reading progress

0%