<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Marek Jóźwiak</title>
    <description>The latest articles on Forem by Marek Jóźwiak (@66hex).</description>
    <link>https://forem.com/66hex</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3060636%2F6236af8d-2d7a-45d3-a9ad-1d3854edbe44.jpeg</url>
      <title>Forem: Marek Jóźwiak</title>
      <link>https://forem.com/66hex</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/66hex"/>
    <language>en</language>
    <item>
      <title>Why I Rewrote Nocta CLI in Rust (Even Though I Didn't Need To)</title>
      <dc:creator>Marek Jóźwiak</dc:creator>
      <pubDate>Fri, 17 Oct 2025 21:58:06 +0000</pubDate>
      <link>https://forem.com/66hex/why-i-rewrote-nocta-cli-in-rust-even-though-i-didnt-need-to-1hmd</link>
      <guid>https://forem.com/66hex/why-i-rewrote-nocta-cli-in-rust-even-though-i-didnt-need-to-1hmd</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi3yyxtz10mxzt82xpn6r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi3yyxtz10mxzt82xpn6r.png" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Backstory
&lt;/h2&gt;

&lt;p&gt;When I first built the Nocta UI CLI, it was a simple JavaScript tool — a few Node scripts that let developers initialize projects, install components, and sync their design tokens. It worked great, and honestly, it didn't need to change.&lt;/p&gt;

&lt;p&gt;But like many dev experiments, this rewrite started with curiosity, not necessity.&lt;/p&gt;

&lt;p&gt;I'd recently come across how packages like &lt;code&gt;@openai/codex&lt;/code&gt; ship native Rust binaries inside an npm package — completely transparent to the end user. You install or run it via &lt;code&gt;npx&lt;/code&gt;, and under the hood, you're actually executing optimized compiled code. That idea stuck with me.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Could I make Nocta CLI work the same way — still npm-first, but powered by Rust under the hood?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Turns out, yes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing the New Nocta CLI
&lt;/h2&gt;

&lt;p&gt;The new CLI lives here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;👉 &lt;a href="https://www.npmjs.com/package/@nocta-ui/cli" rel="noopener noreferrer"&gt;@nocta-ui/cli on npm&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;👉 &lt;a href="https://github.com/nocta-ui/nocta-ui-cli" rel="noopener noreferrer"&gt;GitHub repo&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can still run it exactly like before:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @nocta-ui/cli init
npx @nocta-ui/cli add button card accordion
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But now, when you do, you're running &lt;strong&gt;native Rust binaries&lt;/strong&gt; — distributed through npm and executed transparently via a lightweight JavaScript wrapper.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Rewrite Something That Worked Fine?
&lt;/h2&gt;

&lt;p&gt;Honestly? &lt;strong&gt;Curiosity.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This rewrite wasn't driven by performance bottlenecks or bugs — it was driven by fascination. I wanted to explore what happens when you combine the ergonomics of npm with the performance and reliability of Rust.&lt;/p&gt;

&lt;p&gt;And it turned out to be a surprisingly elegant setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Under the Hood
&lt;/h2&gt;

&lt;p&gt;The project is now structured as a polyglot monorepo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.
├── Cargo.lock
├── Cargo.toml
├── crates
│   ├── cli          # Handles commands like init, add, list
│   └── core         # Core logic: config, fs ops, registry, deps
├── js
│   ├── bin/nocta-ui.js   # Tiny Node wrapper around the native binary
│   └── package.json
└── package.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's what happens when you run &lt;code&gt;npx @nocta-ui/cli init&lt;/code&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Node wrapper runs&lt;/strong&gt; → detects your platform&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Loads the right Rust binary&lt;/strong&gt; → compiled for macOS, Linux, or Windows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Executes native logic&lt;/strong&gt; — all the heavy lifting (file ops, config parsing, dependency detection) is done in Rust&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No crazy runtime setup, no dependencies — just a fast native executable doing its job.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's New Under the Hood
&lt;/h2&gt;

&lt;p&gt;The CLI still does everything you'd expect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Initializes new projects&lt;/li&gt;
&lt;li&gt;Detects frameworks like Next.js, Vite + React, Tanstack Start or React Router 7&lt;/li&gt;
&lt;li&gt;Installs Tailwind v4 tokens&lt;/li&gt;
&lt;li&gt;Scaffolds components with their dependencies&lt;/li&gt;
&lt;li&gt;Integrates seamlessly with your existing package manager&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But now it feels &lt;strong&gt;instant&lt;/strong&gt;. Every command runs with near-zero startup time, thanks to Rust's compiled performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Win: Simplicity in Distribution
&lt;/h2&gt;

&lt;p&gt;What made this rewrite truly interesting wasn't the Rust code itself — it was how simple npm makes distributing native binaries once you step outside the "pure JS" mindset.&lt;/p&gt;

&lt;p&gt;Each platform gets its own small binary, published alongside the npm package. The JavaScript layer just picks the right one and runs it. No users even notice the difference — except for the speed.&lt;/p&gt;

&lt;p&gt;It's a hybrid model that feels… right.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons Learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Rust + npm is a surprisingly powerful combo.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Native performance can live inside your JS workflow without friction.&lt;/li&gt;
&lt;li&gt;And most importantly: &lt;strong&gt;rewrites don't always need a reason&lt;/strong&gt; — sometimes, they're just how we learn.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Future
&lt;/h2&gt;

&lt;p&gt;This rewrite won't change how developers use Nocta UI — it'll just make their CLI faster, more stable, and easier to maintain.&lt;/p&gt;

&lt;p&gt;If you're curious about how native binaries and npm can coexist, check out the repo and peek under the hood:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/nocta-ui/nocta-ui-cli" rel="noopener noreferrer"&gt;https://github.com/nocta-ui/nocta-ui-cli&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And if you're already using Nocta UI, just keep running the same command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @nocta-ui/cli init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;It's the same CLI you know — just rebuilt for fun, and made faster by Rust.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>react</category>
    </item>
    <item>
      <title>Why I Built Nocta UI: A Developer-First Alternative to shadcn/ui</title>
      <dc:creator>Marek Jóźwiak</dc:creator>
      <pubDate>Sat, 05 Jul 2025 11:42:19 +0000</pubDate>
      <link>https://forem.com/66hex/why-i-built-nocta-ui-a-developer-first-alternative-to-shadcnui-mbk</link>
      <guid>https://forem.com/66hex/why-i-built-nocta-ui-a-developer-first-alternative-to-shadcnui-mbk</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7twfdnx1mswjsyyeues3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7twfdnx1mswjsyyeues3.jpg" alt="Nocta UI Thumbnail" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Why I Built Nocta UI: A Developer-First Alternative to shadcn/ui
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Building a React component library that puts developer experience and customization first&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem That Started It All
&lt;/h2&gt;

&lt;p&gt;Picture this: You're building a beautiful accordion component for your app. You want to add some smooth GSAP animations to make it feel premium. You're using shadcn/ui, which is fantastic, but then you hit a wall.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The accordion component uses Radix UI primitives under the hood.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;These primitives are great for accessibility and basic functionality, but they're &lt;strong&gt;black boxes&lt;/strong&gt;. You can't modify their internal behavior. You can't add complex animations. You can't change how they handle state transitions.&lt;/p&gt;

&lt;p&gt;I needed my accordion to have sophisticated GSAP animations with custom easing, staggered reveals, and precise timing control. But the Radix primitives were fighting me every step of the way.&lt;/p&gt;

&lt;p&gt;That's when I realized: &lt;strong&gt;What if we could have the copy-paste philosophy of shadcn/ui, but with components that are truly yours to modify?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing Nocta UI
&lt;/h2&gt;

&lt;p&gt;Nocta UI is a modern React component library that follows the copy-paste approach pioneered by shadcn/ui, but with a crucial difference: &lt;strong&gt;every component is built from the ground up for maximum customization&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Initialize your project&lt;/span&gt;
npx nocta-ui init

&lt;span class="c"&gt;# Add components to your project&lt;/span&gt;
npx nocta-ui add button card accordion

&lt;span class="c"&gt;# Components are now in your /components/ui directory&lt;/span&gt;
&lt;span class="c"&gt;# You own the code and can modify it however you want&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Philosophy: Four Core Principles
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Minimal&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Clean components with no unnecessary complexity. Every element serves a purpose, every interaction feels natural. We believe in doing less, but doing it perfectly.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Performant&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Copy-paste approach with CLI tooling. Components live in your codebase, giving you full control and customization power. No bundle bloat, no version conflicts.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Accessible&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;WCAG 2.1 AA compliant components with keyboard navigation, screen reader support, and semantic HTML. Accessibility isn't an afterthought—it's built in from the ground up.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Developer First&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Full TypeScript support, intuitive APIs, and comprehensive documentation. Components that just work, and when they don't work exactly how you want, you can make them work.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Makes Nocta UI Different
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;True Source Code Ownership&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Unlike libraries that use primitives or complex abstractions, Nocta UI components are built with standard React patterns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// This is YOUR accordion component after copying&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Accordion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;openItems&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setOpenItems&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

  &lt;span class="c1"&gt;// Want to add GSAP animations? Go ahead!&lt;/span&gt;
  &lt;span class="c1"&gt;// Want to change state management? It's your code!&lt;/span&gt;
  &lt;span class="c1"&gt;// Want to modify accessibility behavior? You control it!&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;cn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;space-y-2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. &lt;strong&gt;Beautiful Design System&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Choose from 4 carefully crafted themes during initialization:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Charcoal&lt;/strong&gt; - Neutral gray theme (default)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jade&lt;/strong&gt; - Subtle green theme
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Copper&lt;/strong&gt; - Warm copper theme&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cobalt&lt;/strong&gt; - Cool blue theme&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The CLI automatically adds the complete color palette to your Tailwind config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"bg-nocta-50 text-nocta-900 border-nocta-200"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"bg-nocta-500 hover:bg-nocta-600 text-white"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    Primary Action
  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. &lt;strong&gt;Smart CLI with Zero Config&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The CLI is built for developer experience:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx nocta-ui init

⠦ Checking Tailwind CSS installation...
✔ Found Tailwind CSS ^3.4.0 ✓
⠦ Detecting project framework...
✔ Found Next.js 15.0.3 &lt;span class="o"&gt;(&lt;/span&gt;App Router&lt;span class="o"&gt;)&lt;/span&gt; ✓

Select a color theme:
  1. Charcoal - Neutral gray theme &lt;span class="o"&gt;(&lt;/span&gt;default&lt;span class="o"&gt;)&lt;/span&gt;
  2. Jade - Subtle green theme
  3. Copper - Warm copper theme
  4. Cobalt - Cool blue theme

? Choose your theme: Jade - Subtle green theme
✔ Selected theme: Jade

✔ nocta-ui initialized successfully!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What happens automatically:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Validates Tailwind CSS installation&lt;/li&gt;
&lt;li&gt;Detects your framework (Next.js, Vite)&lt;/li&gt;
&lt;li&gt;Installs required dependencies (&lt;code&gt;clsx&lt;/code&gt;, &lt;code&gt;tailwind-merge&lt;/code&gt;, &lt;code&gt;class-variance-authority&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Creates utility functions (&lt;code&gt;@/lib/utils.ts&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Adds design tokens to your Tailwind config&lt;/li&gt;
&lt;li&gt;Protects existing files with overwrite confirmation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. &lt;strong&gt;Unlimited Customization&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Since you own the component source code, customization is limitless:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Want to add custom animations? Easy!&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;CustomAccordion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Add your GSAP timeline here&lt;/span&gt;
    &lt;span class="nx"&gt;gsap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;timeline&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.accordion-content&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;auto&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;ease&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;power2.out&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.accordion-icon&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;rotation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;180&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Accordion&lt;/span&gt; &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Accordion&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Want to change the styling system? Go for it!&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;variants&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;brand&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bg-purple-600 text-white hover:bg-purple-700&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;danger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bg-red-600 text-white hover:bg-red-700&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bg-green-600 text-white hover:bg-green-700&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Real-World Usage Example
&lt;/h2&gt;

&lt;p&gt;Here's how you'd use Nocta UI in a real project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@/components/ui/button&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Card&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CardHeader&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CardTitle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CardContent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@/components/ui/card&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Accordion&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;AccordionItem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;AccordionTrigger&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;AccordionContent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@/components/ui/accordion&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Dashboard&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"min-h-screen bg-nocta-50"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"container mx-auto py-8"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Card&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"border-nocta-200"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;CardHeader&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"bg-nocta-100"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;CardTitle&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text-nocta-900"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Feature Overview&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;CardTitle&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;CardHeader&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;CardContent&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"bg-white"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Accordion&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
              &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;AccordionItem&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"performance"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;AccordionTrigger&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text-nocta-800 hover:text-nocta-900"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                  Performance
                &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;AccordionTrigger&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;AccordionContent&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text-nocta-600"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                  Copy-paste approach means zero bundle bloat and full control.
                &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;AccordionContent&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
              &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;AccordionItem&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
              &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;AccordionItem&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"accessibility"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;AccordionTrigger&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text-nocta-800 hover:text-nocta-900"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                  Accessibility
                &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;AccordionTrigger&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;AccordionContent&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text-nocta-600"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                  WCAG 2.1 AA compliant with keyboard navigation and screen reader support.
                &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;AccordionContent&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
              &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;AccordionItem&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Accordion&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"mt-6 space-x-4"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
              &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt; 
                &lt;span class="na"&gt;variant&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"primary"&lt;/span&gt; 
                &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"lg"&lt;/span&gt;
                &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"bg-nocta-500 hover:bg-nocta-600"&lt;/span&gt;
              &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                Get Started
              &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
              &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt; 
                &lt;span class="na"&gt;variant&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"outline"&lt;/span&gt; 
                &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"lg"&lt;/span&gt;
                &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"border-nocta-300 text-nocta-700 hover:bg-nocta-50"&lt;/span&gt;
              &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                Learn More
              &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;CardContent&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Card&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Technical Features
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Design System&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;4 beautiful color themes with automatic dark mode support&lt;/li&gt;
&lt;li&gt;Consistent spacing system based on 4px base unit&lt;/li&gt;
&lt;li&gt;Typography hierarchy optimized for readability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Performance&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy-paste approach eliminates bundle bloat&lt;/li&gt;
&lt;li&gt;Minimal re-renders with optimized component architecture&lt;/li&gt;
&lt;li&gt;Efficient animations and transitions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Accessibility&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WCAG 2.1 AA compliant out of the box&lt;/li&gt;
&lt;li&gt;Keyboard navigation for all interactive elements&lt;/li&gt;
&lt;li&gt;Screen reader support with proper ARIA attributes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Developer Experience&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full TypeScript support with comprehensive type definitions&lt;/li&gt;
&lt;li&gt;Intuitive APIs that follow React best practices&lt;/li&gt;
&lt;li&gt;Comprehensive documentation with interactive examples&lt;/li&gt;
&lt;li&gt;CLI with smart framework detection and zero config setup&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Ready to try Nocta UI? Here's how to get started:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Make sure you have Tailwind CSS installed&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; tailwindcss

&lt;span class="c"&gt;# Initialize your project&lt;/span&gt;
npx nocta-ui init

&lt;span class="c"&gt;# Add your first components&lt;/span&gt;
npx nocta-ui add button card accordion

&lt;span class="c"&gt;# Start building!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React 18+&lt;/li&gt;
&lt;li&gt;Tailwind CSS v3 or v4&lt;/li&gt;
&lt;li&gt;TypeScript (recommended)&lt;/li&gt;
&lt;li&gt;Node.js 16+&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Framework Support:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next.js (App Router &amp;amp; Pages Router)&lt;/li&gt;
&lt;li&gt;Vite + React&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Future of Component Libraries
&lt;/h2&gt;

&lt;p&gt;I believe the future of component libraries lies in giving developers &lt;strong&gt;true ownership&lt;/strong&gt; of their code. Not black box abstractions, not complex primitives you can't modify, but &lt;strong&gt;actual source code&lt;/strong&gt; that you can read, understand, and customize.&lt;/p&gt;

&lt;p&gt;Nocta UI represents this philosophy: beautiful, accessible, performant components that are &lt;strong&gt;truly yours&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Today
&lt;/h2&gt;

&lt;p&gt;Whether you're building a simple landing page or a complex dashboard, Nocta UI provides the foundation you need with the flexibility you want.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Documentation&lt;/strong&gt;: &lt;a href="https://github.com/66HEX/nocta-ui" rel="noopener noreferrer"&gt;https://github.com/66HEX/nocta-ui&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLI Repository&lt;/strong&gt;: &lt;a href="https://github.com/66HEX/nocta-ui-cli" rel="noopener noreferrer"&gt;https://github.com/66HEX/nocta-ui-cli&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quick Start&lt;/strong&gt;: &lt;code&gt;npx nocta-ui init&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Have you struggled with component library limitations? What features would you want in a truly customizable component library? Let me know in the comments!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; #react #typescript #tailwindcss #ui #components #accessibility #performance #developer-experience&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
