<?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>DEV Community: Naveen R</title>
    <description>The latest articles on DEV Community by Naveen R (@naveen2070).</description>
    <link>https://dev.to/naveen2070</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1404456%2F12023491-0e79-4e94-8851-2a0256f9ff79.png</url>
      <title>DEV Community: Naveen R</title>
      <link>https://dev.to/naveen2070</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/naveen2070"/>
    <language>en</language>
    <item>
      <title>Min-Mozhi: the first Tamil-rooted, safe-by-default hardware description language</title>
      <dc:creator>Naveen R</dc:creator>
      <pubDate>Thu, 25 Jun 2026 08:00:00 +0000</pubDate>
      <link>https://dev.to/naveen2070/min-mozhi-the-first-tamil-rooted-safe-by-default-hardware-description-language-5d2h</link>
      <guid>https://dev.to/naveen2070/min-mozhi-the-first-tamil-rooted-safe-by-default-hardware-description-language-5d2h</guid>
      <description>&lt;p&gt;I built &lt;strong&gt;Min-Mozhi&lt;/strong&gt; (மின்மொழி — "language of electricity"): a modern HDL that&lt;br&gt;
reads like Go/TypeScript, is safe like Rust, and speaks English, Tanglish, and&lt;br&gt;
Tamil over one grammar. It compiles to synthesizable Verilog and ships its own&lt;br&gt;
event-driven simulator. &lt;strong&gt;v0.1.0 is out today.&lt;/strong&gt; 432 passing tests, MIT + Apache-2.0.&lt;/p&gt;

&lt;p&gt;Here's a counter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;module Counter(WIDTH: int = 8) {
  clock clk
  reset rst
  out count: bits[WIDTH]
  reg value: bits[WIDTH] = 0
  on rise(clk) {
    value &amp;lt;- value +% 1
  }
  count = value
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The same module in &lt;strong&gt;Tanglish&lt;/strong&gt; — same grammar, only the keywords change:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;thoguthi Counter(WIDTH: int = 8) {
  thudippu clk
  meettamai rst
  veliyeedu count: bits[WIDTH]
  pathivedu value: bits[WIDTH] = 0
  pothu yetram(clk) {
    value &amp;lt;- value +% 1
  }
  count = value
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Quick start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cargo build
mimz check   examples/english/counter.mimz
mimz compile examples/english/counter.mimz -o counter.v --emit-testbench
mimz sim     demo/cpu.mimz --cycles 8 -o demo/cpu.vcd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Release v0.1.0: &lt;a href="https://github.com/Naveen2070/min-mozhi/releases/tag/v0.1.0" rel="noopener noreferrer"&gt;https://github.com/Naveen2070/min-mozhi/releases/tag/v0.1.0&lt;/a&gt;&lt;br&gt;
Repo: &lt;a href="https://github.com/Naveen2070/min-mozhi" rel="noopener noreferrer"&gt;https://github.com/Naveen2070/min-mozhi&lt;/a&gt;&lt;br&gt;
Site: &lt;a href="https://mimz.naveenr.in" rel="noopener noreferrer"&gt;https://mimz.naveenr.in&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What would you build if you could write hardware in your own language?&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>programming</category>
      <category>rust</category>
    </item>
    <item>
      <title>Stop Building Boring Interfaces for Cool Systems</title>
      <dc:creator>Naveen R</dc:creator>
      <pubDate>Thu, 25 Jun 2026 06:53:03 +0000</pubDate>
      <link>https://dev.to/naveen2070/stop-building-boring-interfaces-for-cool-systems-hj9</link>
      <guid>https://dev.to/naveen2070/stop-building-boring-interfaces-for-cool-systems-hj9</guid>
      <description>&lt;p&gt;Why developer tools deserve a design language of their own - and how I built one for my own corner of the&amp;nbsp;web&lt;/p&gt;




&lt;p&gt;Somewhere along the line, we collectively agreed that "functional" had to mean "boring."&lt;/p&gt;

&lt;p&gt;Open almost any developer tool, internal dashboard, or technical log and you'll find the same thing: a sterile corporate wiki. Grey on white. The same SaaS design system everyone copied from the same three component libraries. Rounded cards, a sans-serif font, a faint drop shadow. It works. It's also completely forgettable.&lt;/p&gt;

&lt;p&gt;But here's the thing nobody says out loud: when you're building for engineers - or building your own space on the web - you are under no obligation to follow the standard playbook.&lt;/p&gt;

&lt;p&gt;The intersection of system design and visual identity is one of the most under-explored areas in frontend architecture. We obsess over latency, bundle size, and runtime dependencies, then slap a default theme on top and call it done. The backend gets all the craft. The interface gets a template.&lt;/p&gt;

&lt;p&gt;I wanted to do the opposite.&lt;/p&gt;




&lt;p&gt;Building VOID_PROTOCOL&lt;br&gt;
When I put together my own developer log - &lt;a href="https://blog.naveenr.in%E2%80%8A-%E2%80%8AI" rel="noopener noreferrer"&gt;https://blog.naveenr.in - I&lt;/a&gt; deliberately stepped away from the standard minimalist tech blog. Instead, I built out a full design system I call the VOID_PROTOCOL × Manga Editorial Design System: dark-only, type-driven, built on Astro 6, Tailwind 4 (CSS-first &lt;a class="mentioned-user" href="https://dev.to/theme"&gt;@theme&lt;/a&gt; tokens), and React 19 islands.&lt;/p&gt;

&lt;p&gt;The name isn't decoration. VOID_PROTOCOL started on my &lt;a href="https://naveenr.in" rel="noopener noreferrer"&gt;https://naveenr.in&lt;/a&gt; portfolio, which runs in two modes. There's a minimal version, and there's an immersive one - and in immersive mode the background is a real-time 3D simulation of a sentinel entity. It's not a looping video; it actually responds to your movement, clicks, and scroll. When you leave it alone long enough, it sleeps. And when it sleeps, it dreams - it dreams my initials. (Yes, really. It started as a joke and I kept it.)&lt;/p&gt;

&lt;p&gt;That entity is the soul of the whole identity: black, empty, void-like space and a cool blue palette, a deep-space console you've wandered into rather than a page you're reading. The blog inherits that DNA and pushes it somewhere more printed and tactile by mashing up three references that have no business sharing a page:&lt;/p&gt;

&lt;p&gt;A cyberpunk terminal HUD. The VOID_PROTOCOL layer, carried straight over from that immersive portfolio mode - near-black canvas (the surface ladder runs void → surface-4, roughly #07080c upward), sky-blue accent (#38bdf8), square 4px scrollbars, and a voice to match. The UI doesn't say "search" and "comments"; it says QUERY_, VOID_PROTOCOL CONNECTED, Transmissions_, Frequency_Stable. Terminal slang as chrome.&lt;/p&gt;

&lt;p&gt;A printed manga / zine page. This is where it stops being just another dark tech site. Every panel is a double-lined manga frame with crop marks in the corners, like registration marks on a printed page. Headings are set in Bangers (the comic-stamp face); halftone dot fields, speed lines, and a giant 96px chapter watermark sit behind the hero. Posts are literally framed as issues - // ISSUE #04 - CURRENTLY READING.&lt;/p&gt;

&lt;p&gt;A tactile sticker / sketchbook layer. Handwritten annotations and pull-quotes in Caveat, rotated a half-degree so they feel scribbled in by hand. Ink underlines. The logo badge is clipped like a sticker peeling off its sheet. Pagination corners fold up like paper when you hover them. And clicking spawns floating handwritten sound effects - &lt;em&gt;SYNC&lt;/em&gt;, &lt;em&gt;SHIP&lt;/em&gt;, &lt;em&gt;LOG&lt;/em&gt; - that change depending on what you're reading.&lt;/p&gt;

&lt;p&gt;The connective tissue is something I call the mood system: every post's first tag picks an accent color, and a single CSS class recolors the entire page - borders, headings, halftones, even the sound-effect vocabulary - without swapping a single component. A dev-log post glows blue; an architecture post burns orange; the experimental "hive" category goes industrial red.&lt;/p&gt;

&lt;p&gt;That last detail is the whole point, and it's why this isn't just "I made it look cool." Because the system is built on CSS-first &lt;a class="mentioned-user" href="https://dev.to/theme"&gt;@theme&lt;/a&gt; tokens with React islands only where real interactivity is needed, the visual identity isn't paint on a template - it's wired into the architecture. The design system is the stack.&lt;/p&gt;




&lt;p&gt;The real argument: design should follow use and&amp;nbsp;place&lt;br&gt;
Here's where I want to push the original idea a bit further, because "make it look cool" is the lazy version of this.&lt;/p&gt;

&lt;p&gt;The reason VOID_PROTOCOL works isn't that it's edgy. It's that the design is fit to its context - its use and its place. That's the actual principle worth defending.&lt;/p&gt;

&lt;p&gt;A developer log is a personal, opinionated, low-stakes space. It's read by people who are comfortable with terminals, schematics, and dense information. A terminal-HUD-meets-manga-zine aesthetic isn't just decoration there - it signals who this is for and what kind of reading to expect. The form matches the function and the audience. The very mashup that makes it work - cold cyberpunk HUD, loud manga page, handwritten sticker layer - would be pure noise in a context that demanded restraint.&lt;br&gt;
And that's the test. &lt;/p&gt;

&lt;p&gt;That same design language would be wrong almost anywhere else. A medical records dashboard, a tax-filing flow, a tool used by exhausted on-call engineers at 3 a.m. - those demand calm, legibility, and zero friction, not halftone patterns and paper peel-corners. The minimalist SaaS look that I'm complaining about exists for a reason: it's a safe default that rarely actively hurts.&lt;/p&gt;

&lt;p&gt;So the takeaway isn't "abandon the corporate wiki for manga panels." It's this:&lt;/p&gt;

&lt;p&gt;Aesthetic choices are engineering choices. They should be derived from who uses the thing, where it lives, and what it's for - not inherited by default and not chosen purely to look striking.&lt;/p&gt;

&lt;p&gt;When you control the entire stack - backend infrastructure down to the exact runtime dependencies on the frontend - you get to dictate the vibe deliberately. That's a privilege most engineers waste. You aren't just pushing pixels; you're crafting an environment, and an environment communicates before anyone reads a word of your content.&lt;/p&gt;

&lt;p&gt;My portfolio is the cleanest example of this I can give you. Same content, two designs: a minimal mode for someone who just wants to read my work and leave, and an immersive mode with the living 3D entity for someone who wants to poke around. I didn't build two modes to show off - I built them because the reader's intent changes what the right interface is, and I'd rather serve both than force everyone through one. That's the principle in miniature.&lt;/p&gt;

&lt;p&gt;For my log, the right answer happened to be loud, dark, and tactile. For your tool, the right answer might be the quietest, most invisible interface imaginable. Both are good design if they're reasoned from use and place rather than copied from a starter template.&lt;/p&gt;




&lt;p&gt;Aesthetics matter in engineering&lt;/p&gt;

&lt;p&gt;A tool that looks engaging and feels tactile is one that developers actually want to use and read. A tool that's calm and frictionless is one they can rely on under pressure. Neither happens by accident, and neither happens by default.&lt;/p&gt;

&lt;p&gt;Stop inheriting your interface. Start deriving it.&lt;/p&gt;




&lt;p&gt;What's the most visually striking developer tool or documentation site you've come across recently? Drop them below - bonus points if you can articulate why the design fits what the thing is for.&lt;/p&gt;

</description>
      <category>design</category>
      <category>frontend</category>
      <category>webdev</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Crucible v1.1.0 — Generate UI components you actually own (React/Vue/Angular)</title>
      <dc:creator>Naveen R</dc:creator>
      <pubDate>Sat, 06 Jun 2026 08:49:36 +0000</pubDate>
      <link>https://dev.to/naveen2070/crucible-v110-generate-ui-components-you-actually-own-reactvueangular-49eo</link>
      <guid>https://dev.to/naveen2070/crucible-v110-generate-ui-components-you-actually-own-reactvueangular-49eo</guid>
      <description>&lt;h1&gt;
  
  
  Crucible v1.1.0 — The App-Building Kit Release 🚀
&lt;/h1&gt;

&lt;p&gt;Most component libraries give you a black box: install a package, fight its API, and inherit a runtime dependency you can't fully control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Crucible takes the opposite approach&lt;/strong&gt; — it &lt;em&gt;generates the source code&lt;/em&gt; for components directly into your project.&lt;/p&gt;

&lt;p&gt;No runtime. You own every file.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;v1.1.0&lt;/code&gt; is the &lt;strong&gt;App-Building Kit&lt;/strong&gt; release.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's new
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;14 new components&lt;/strong&gt;, bringing the library to &lt;strong&gt;25&lt;/strong&gt; — Label, Separator, Badge, Skeleton, Avatar, Textarea, Checkbox, Switch, Alert, Progress (linear + circular), Breadcrumb, RadioGroup, Accordion, and a floating-ui DropdownMenu.&lt;/li&gt;
&lt;li&gt;Enough to scaffold a &lt;strong&gt;minimal SaaS app, web app, form, or marketing site&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;plug-and-play plugin architecture&lt;/strong&gt; — add your own components by dropping a manifest + templates into &lt;code&gt;.crucible/plugins/&lt;/code&gt;, with no changes to the engine.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every component ships across &lt;strong&gt;React / Vue / Angular × CSS / SCSS / Tailwind&lt;/strong&gt;, is token-backed, and is accessible by default.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i &lt;span class="nt"&gt;-D&lt;/span&gt; @cruciblelab/crucible
npx crucible init
npx crucible add Button Card Dialog Accordion
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The generated files land in your project as plain, readable source — edit them like code you wrote yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "you own it" matters
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;No version-lock to a library's release cadence&lt;/li&gt;
&lt;li&gt;No fighting an opinionated API — change the markup directly&lt;/li&gt;
&lt;li&gt;No runtime footprint shipped to users&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📦 &lt;strong&gt;npm:&lt;/strong&gt; &lt;code&gt;@cruciblelab/crucible&lt;/code&gt;&lt;br&gt;
📖 &lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://crucible-docs.naveenr.in" rel="noopener noreferrer"&gt;https://crucible-docs.naveenr.in&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What would you want generated next? Drop ideas in the comments 👇&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>react</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Crucible v1.0 — generate React, Vue, and Angular components that you actually own</title>
      <dc:creator>Naveen R</dc:creator>
      <pubDate>Sun, 29 Mar 2026 18:02:01 +0000</pubDate>
      <link>https://dev.to/naveen2070/crucible-v10-generate-react-vue-and-angular-components-that-you-actually-own-3452</link>
      <guid>https://dev.to/naveen2070/crucible-v10-generate-react-vue-and-angular-components-that-you-actually-own-3452</guid>
      <description>&lt;p&gt;I shipped Crucible v1.0 today. It's a code generation engine — you run a CLI command, it writes production-ready component source files into your project, and then it disappears. Zero runtime footprint. You own every line.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx crucible add Button
&lt;span class="c"&gt;# writes Button/Button.tsx, Button/Button.module.css,&lt;/span&gt;
&lt;span class="c"&gt;# Button/Button.types.ts, Button/README.md&lt;/span&gt;
&lt;span class="c"&gt;# into your project. yours forever.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I built it because I kept running into the ceiling of what component libraries let you do — and I wanted to see what the "no library, just code" model looked like taken further than copy-paste snippets.&lt;/p&gt;

&lt;p&gt;Here's how it works.&lt;/p&gt;




&lt;h3&gt;
  
  
  The five-layer pipeline
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;crucible.config.json
  → Config Layer      read + validate with ajv
  → Token Resolver    CSS custom props + OKLCH dark mode derivation
  → Component Model   normalised IR for templates
  → Template Engine   Handlebars, strictly logic-free
  → File Writer       hash protection + Prettier formatting
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The IR (intermediate representation) layer is the decision I'm happiest with. Without it, templates become conditional nightmares — &lt;code&gt;{{#if angular}}&lt;/code&gt;, &lt;code&gt;{{#if dark}}&lt;/code&gt;, &lt;code&gt;{{#if compoundComponents}}&lt;/code&gt;. With it, all that logic lives in TypeScript where it can be typed and tested. Templates become pure interpolation.&lt;/p&gt;

&lt;p&gt;Templates are audited on every build. Comparisons, ternaries, and &lt;code&gt;else-if&lt;/code&gt; chains are prohibited at the &lt;code&gt;.hbs&lt;/code&gt; level. &lt;code&gt;npm run audit:templates&lt;/code&gt; runs as a &lt;code&gt;prebuild&lt;/code&gt; hook and fails the build on any violation.&lt;/p&gt;




&lt;h3&gt;
  
  
  Token resolution
&lt;/h3&gt;

&lt;p&gt;Tokens deep-merge with your chosen preset. Set only what you want to change:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"theme"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"minimal"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"primary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"#FF6B6B"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Only &lt;code&gt;primary&lt;/code&gt; changes. The rest of the minimal preset — radius, typography, backgrounds — is untouched.&lt;/p&gt;

&lt;p&gt;Everything resolves to CSS custom properties. No mode ever hard-codes a hex value:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--color-primary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#FF6B6B&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--radius-md&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--spacing-unit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;4px&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;
  
  
  OKLCH dark mode
&lt;/h3&gt;

&lt;p&gt;Dark tokens are derived in OKLCH, not HSL.&lt;/p&gt;

&lt;p&gt;HSL lightness shifts change perceived hue — blue can drift toward cyan, purple toward gray-purple. OKLCH is perceptually uniform: lightness changes without hue drift.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"darkMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"strategy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"auto"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the whole config. Crucible derives the full dark palette automatically and emits it as &lt;code&gt;[data-theme="dark"]&lt;/code&gt; CSS vars alongside the light &lt;code&gt;:root&lt;/code&gt; block.&lt;/p&gt;

&lt;p&gt;Manual override is also supported for specific tokens.&lt;/p&gt;




&lt;h3&gt;
  
  
  Framework output
&lt;/h3&gt;

&lt;p&gt;Three frameworks, three style systems — parallel template folders, no &lt;code&gt;{{#if framework}}&lt;/code&gt; anywhere in the templates themselves:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Framework&lt;/th&gt;
&lt;th&gt;Patterns used&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;React 18+&lt;/td&gt;
&lt;td&gt;Hooks, CSS Modules, compound components (static property pattern)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vue 3.4+&lt;/td&gt;
&lt;td&gt;Composition API, &lt;code&gt;&amp;lt;script setup&amp;gt;&lt;/code&gt;, named slots&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Angular 17+&lt;/td&gt;
&lt;td&gt;Standalone components, &lt;code&gt;@if&lt;/code&gt;/&lt;code&gt;@for&lt;/code&gt;, &lt;code&gt;ng-content&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Style systems: &lt;code&gt;css&lt;/code&gt; (CSS Modules), &lt;code&gt;scss&lt;/code&gt; (SCSS Modules), &lt;code&gt;tailwind&lt;/code&gt; (Tailwind v4 with CSS variable arbitrary values).&lt;/p&gt;

&lt;p&gt;Adding a new framework means adding a template folder — nothing in the engine changes.&lt;/p&gt;




&lt;h3&gt;
  
  
  Hash-based overwrite protection
&lt;/h3&gt;

&lt;p&gt;Every generated file gets a content hash stored in &lt;code&gt;.crucible/manifest.json&lt;/code&gt;. On re-generation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hash matches → overwrite (file is unchanged from generated output)&lt;/li&gt;
&lt;li&gt;Hash differs → warn and skip (you've edited it; Crucible leaves it alone)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--force&lt;/code&gt; → overwrite regardless&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--dry-run&lt;/code&gt; → print what would happen, write nothing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The manifest key includes the component subfolder name (&lt;code&gt;Button/Button.tsx&lt;/code&gt;) to prevent collisions across components.&lt;/p&gt;




&lt;h3&gt;
  
  
  CLI
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;crucible init              &lt;span class="c"&gt;# scaffold crucible.config.json&lt;/span&gt;
crucible add Button        &lt;span class="c"&gt;# generate one component&lt;/span&gt;
crucible add &lt;span class="nt"&gt;-a&lt;/span&gt;            &lt;span class="c"&gt;# generate all components&lt;/span&gt;
crucible add Button &lt;span class="nt"&gt;--stories&lt;/span&gt;  &lt;span class="c"&gt;# with Storybook stories&lt;/span&gt;
crucible eject             &lt;span class="c"&gt;# copy preset tokens into config for full manual control&lt;/span&gt;
crucible tokens            &lt;span class="c"&gt;# regenerate tokens.css only&lt;/span&gt;
crucible doctor            &lt;span class="c"&gt;# check Node version, config validity, framework install&lt;/span&gt;
crucible config            &lt;span class="c"&gt;# print resolved config&lt;/span&gt;
crucible clean             &lt;span class="c"&gt;# remove generated files&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All commands have short aliases: &lt;code&gt;a&lt;/code&gt;, &lt;code&gt;i&lt;/code&gt;, &lt;code&gt;d&lt;/code&gt;, &lt;code&gt;t&lt;/code&gt;, &lt;code&gt;e&lt;/code&gt;, &lt;code&gt;l&lt;/code&gt;, &lt;code&gt;c&lt;/code&gt;, &lt;code&gt;cfg&lt;/code&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  Components in v1.0
&lt;/h3&gt;

&lt;p&gt;Button · Input · Card · Dialog · Select&lt;/p&gt;

&lt;p&gt;Each one: full variant/size/state matrix, TypeScript types, compound components (React) / named slots (Vue) / ng-content (Angular), WCAG 2.1 AA accessibility, auto-generated README.&lt;/p&gt;




&lt;h3&gt;
  
  
  Test coverage
&lt;/h3&gt;

&lt;p&gt;230 unit tests, 24 test files, 19 E2E phases.&lt;/p&gt;

&lt;p&gt;E2E phases cover every &lt;code&gt;framework × style-system&lt;/code&gt; combination (React/Vue/Angular × CSS/SCSS/Tailwind = 9 phases), plus write protection scenarios, batch generation, theme presets, custom output directories, and all CLI commands. Each phase runs in an isolated temp directory.&lt;/p&gt;




&lt;h3&gt;
  
  
  Repo
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/Naveen2070/project_crucible" rel="noopener noreferrer"&gt;github.com/Naveen2070/project_crucible&lt;/a&gt; — MIT, open from day one.&lt;/p&gt;

&lt;p&gt;Good first contributions: Textarea, Badge, Checkbox. The pattern is: add to &lt;code&gt;src/registry/manifests/defaults.ts&lt;/code&gt;, create template files in the right framework folders, run the test suite. The engine discovers new components automatically.&lt;/p&gt;

&lt;p&gt;Happy to go deep on any of the architecture decisions in the comments.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>designsystem</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
