<?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: Eyruz Badalzada</title>
    <description>The latest articles on DEV Community by Eyruz Badalzada (@eyruz).</description>
    <link>https://dev.to/eyruz</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%2F3899405%2F69a1155a-4b85-40e4-9c5f-d6eb9c89241f.png</url>
      <title>DEV Community: Eyruz Badalzada</title>
      <link>https://dev.to/eyruz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/eyruz"/>
    <language>en</language>
    <item>
      <title>Bootstrap vs FrontAlign: Which Is Better Depends on Your Architecture</title>
      <dc:creator>Eyruz Badalzada</dc:creator>
      <pubDate>Thu, 30 Jul 2026 14:04:42 +0000</pubDate>
      <link>https://dev.to/eyruz/bootstrap-vs-frontalign-which-is-better-depends-on-your-architecture-2b66</link>
      <guid>https://dev.to/eyruz/bootstrap-vs-frontalign-which-is-better-depends-on-your-architecture-2b66</guid>
      <description>&lt;p&gt;Bootstrap has been the default answer to "how do I ship a UI fast" for over a decade. Pre-styled buttons, a battle-tested grid, and JS plugins for every common interaction pattern — you drop in the CSS and JS, add some classes, and you have a working interface.&lt;/p&gt;

&lt;p&gt;FrontAlign competes for some of the same territory (fast to ship, components included), but it gets there from a different starting point: utility-first CSS plus a zero-dependency runtime, rather than a component-class library plus a plugin system. Here's how the two actually differ once you get past the surface-level "both give you a Navbar and a Modal."&lt;/p&gt;

&lt;h2&gt;
  
  
  Styling Philosophy: Component Classes vs. Utility-First
&lt;/h2&gt;

&lt;p&gt;Bootstrap's core styling unit is the semantic component class: &lt;code&gt;.btn&lt;/code&gt;, &lt;code&gt;.btn-primary&lt;/code&gt;, &lt;code&gt;.card&lt;/code&gt;, &lt;code&gt;.navbar&lt;/code&gt;, &lt;code&gt;.alert-danger&lt;/code&gt;. You compose interfaces by combining these with a smaller set of utility classes (spacing, flex, display) that Bootstrap added in v4/v5 as a complement — not a replacement — for the component classes.&lt;/p&gt;

&lt;p&gt;FrontAlign flips that emphasis. Utilities are the primary building block, and components are layered on top via &lt;code&gt;fa-component&lt;/code&gt; attributes rather than being the thing you style directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;fa-component=&lt;/span&gt;&lt;span class="s"&gt;"swiper"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;...&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;nav&lt;/span&gt; &lt;span class="na"&gt;fa-component=&lt;/span&gt;&lt;span class="s"&gt;"tabview"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;...&lt;span class="nt"&gt;&amp;lt;/nav&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FrontAlign&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Practically, this means Bootstrap interfaces tend to look "Bootstrap-y" out of the box unless you invest in Sass overrides, because you're working within predefined component classes. FrontAlign interfaces are closer to fully custom, because you're composing utilities rather than inheriting a component's default visual identity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build Pipeline and Customization
&lt;/h2&gt;

&lt;p&gt;Bootstrap's customization story runs through Sass: you override &lt;code&gt;$primary&lt;/code&gt;, &lt;code&gt;$border-radius&lt;/code&gt;, and dozens of other variables and maps, then recompile. Bootstrap 5.3 added CSS custom properties and a &lt;code&gt;data-bs-theme&lt;/code&gt; attribute for light/dark switching, which narrowed the gap with runtime theming — but deep visual customization (spacing scale, typography scale, component variants) still generally goes through the Sass build.&lt;/p&gt;

&lt;p&gt;FrontAlign's JIT compiler scans your source for used classes and strips the rest, driven by &lt;code&gt;frontalign.config.js&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#2563eb&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;fonts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Inter&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;weights&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;400,600,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;jit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;scan&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./app&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./components&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./pages&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;safelist&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;is-primary&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;is-active&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The bigger architectural difference shows up at runtime, not build time — covered next.&lt;/p&gt;

&lt;h2&gt;
  
  
  Runtime Theming
&lt;/h2&gt;

&lt;p&gt;Bootstrap 5.3's &lt;code&gt;data-bs-theme="dark"&lt;/code&gt; covers light/dark switching well via CSS variables, but changing core design tokens (brand color, radius scale, spacing) beyond light/dark still typically means a Sass recompile.&lt;/p&gt;

&lt;p&gt;FrontAlign treats arbitrary theme changes as a runtime concern by default:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FrontAlign&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#6366f1&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;p&gt;If your product needs a user-facing theme picker or white-labeling beyond a dark-mode toggle, that's a meaningfully lower-friction path in FrontAlign. If dark mode is the only runtime switch you need, Bootstrap 5.3+ already covers it natively.&lt;/p&gt;

&lt;h2&gt;
  
  
  Component Coverage
&lt;/h2&gt;

&lt;p&gt;This is the category where the two frameworks overlap the most. Bootstrap ships Modal, Offcanvas (its drawer equivalent), Dropdown, Collapse, Accordion, Navbar, Carousel, Toast, Tooltip, Popover, Alerts, Forms with validation states, Badges, Placeholders (its skeleton/loading equivalent), and Spinners.&lt;/p&gt;

&lt;p&gt;FrontAlign's list reads almost like a modern remap of the same set: Modal, Drawer, Dropdown, Collapse, Accordion, Navbar, Carousel, Swiper, Toast, Tooltip, Popover, Alert, Select, Tabview, DarkMode, Form (attribute-driven validation, optional AJAX submit), Badge, Skeleton, Lazy Image, and a dual-mode Range slider.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;fa-component=&lt;/span&gt;&lt;span class="s"&gt;"form"&lt;/span&gt; &lt;span class="na"&gt;data-ajax=&lt;/span&gt;&lt;span class="s"&gt;"/api/submit"&lt;/span&gt; &lt;span class="na"&gt;novalidate&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;data-rule=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Send&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The practical difference isn't "who has more components" — it's initialization model. Bootstrap components are largely initialized via data attributes plus its own JS plugin classes (&lt;code&gt;bootstrap.Modal&lt;/code&gt;, &lt;code&gt;bootstrap.Tooltip&lt;/code&gt;, etc.), and some require manual re-initialization for dynamically injected content. FrontAlign's Smart Observer Runtime watches the DOM continuously and auto-initializes new &lt;code&gt;fa-component&lt;/code&gt; elements as they appear, without you calling anything again.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dependencies
&lt;/h2&gt;

&lt;p&gt;This is where the architectures diverge most concretely. Bootstrap's CSS has no dependencies, but several of its interactive JS components — Tooltip, Popover, Dropdown — depend on &lt;strong&gt;Popper.js&lt;/strong&gt; for positioning. That's an extra library in your bundle unless you're using a build that already includes it.&lt;/p&gt;

&lt;p&gt;FrontAlign ships as zero-dependency across both CSS and JS, positioning and all. That's a smaller and more predictable bundle if you're using those interaction patterns heavily, though it also means FrontAlign's positioning logic hasn't had a decade-plus of edge-case hardening the way Popper.js has.&lt;/p&gt;

&lt;h2&gt;
  
  
  Grid and Layout
&lt;/h2&gt;

&lt;p&gt;Bootstrap's 12-column grid (&lt;code&gt;container&lt;/code&gt;, &lt;code&gt;row&lt;/code&gt;, &lt;code&gt;col-*&lt;/code&gt;) is one of the most widely understood layout systems in frontend development — most developers can read Bootstrap grid markup without looking anything up. Its breakpoints (&lt;code&gt;sm&lt;/code&gt;, &lt;code&gt;md&lt;/code&gt;, &lt;code&gt;lg&lt;/code&gt;, &lt;code&gt;xl&lt;/code&gt;, &lt;code&gt;xxl&lt;/code&gt;) are tuned to fairly conservative, long-standing device-width conventions.&lt;/p&gt;

&lt;p&gt;FrontAlign uses responsive utility prefixes (&lt;code&gt;sm:&lt;/code&gt;, &lt;code&gt;md:&lt;/code&gt;, &lt;code&gt;lg:&lt;/code&gt;, &lt;code&gt;xl:&lt;/code&gt;, &lt;code&gt;2xl:&lt;/code&gt;) rather than a dedicated grid component, with breakpoints tuned to modern screen sizes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;sm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;640px&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;md&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;864px&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1120px&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;xl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1408px&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2xl&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1792px&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your team already thinks in Bootstrap's row/col mental model, that's real, transferable muscle memory. If you're comfortable composing layout with flex/grid utilities directly, FrontAlign's approach avoids an extra abstraction layer on top of CSS Grid/Flexbox.&lt;/p&gt;

&lt;h2&gt;
  
  
  Browser Support
&lt;/h2&gt;

&lt;p&gt;Bootstrap 5 supports a broad range of browsers, including some older ones, since it doesn't lean on newer CSS features by default. FrontAlign's use of OKLCH colors, CSS Layers, and Intersection/MutationObserver ties it to more modern browsers (Chrome/Edge 111+, Firefox 113+, Safari 15.4+). If legacy browser support is a hard requirement, that's worth checking before committing to either.&lt;/p&gt;

&lt;h2&gt;
  
  
  So, Which One?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Reach for Bootstrap if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your team already knows its component classes and grid system&lt;/li&gt;
&lt;li&gt;You want the most broadly documented, most Stack-Overflow-answered option&lt;/li&gt;
&lt;li&gt;Dark mode is the extent of your runtime theming needs&lt;/li&gt;
&lt;li&gt;You need dependable behavior across a wide range of browsers, including older ones&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Reach for FrontAlign if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You want utility-first styling instead of inheriting Bootstrap's default visual identity&lt;/li&gt;
&lt;li&gt;You need runtime theming beyond light/dark, without a rebuild&lt;/li&gt;
&lt;li&gt;A zero-dependency footprint (no Popper.js, no separate positioning library) matters to your bundle size&lt;/li&gt;
&lt;li&gt;You want components to auto-initialize on dynamically injected content without re-running setup code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Neither framework is "outdated" or "better" in the abstract — Bootstrap's component-class model and Sass pipeline are a known, stable quantity; FrontAlign's utility-first-plus-runtime model is a more modern bet with a smaller dependency footprint. Pick based on how your team already thinks about styling and how much runtime flexibility your product actually needs.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;FrontAlign docs: &lt;a href="https://frontalign.dev/docs" rel="noopener noreferrer"&gt;frontalign.dev/docs&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>bootstrap</category>
      <category>frontend</category>
      <category>css</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Tailwind vs FrontAlign: Which Is Better Depends on Your Architecture</title>
      <dc:creator>Eyruz Badalzada</dc:creator>
      <pubDate>Thu, 30 Jul 2026 14:02:03 +0000</pubDate>
      <link>https://dev.to/eyruz/tailwind-vs-frontalign-which-is-better-depends-on-your-architecture-9n</link>
      <guid>https://dev.to/eyruz/tailwind-vs-frontalign-which-is-better-depends-on-your-architecture-9n</guid>
      <description>&lt;p&gt;If you've built anything on the frontend in the last five years, you've almost certainly touched Tailwind CSS. It reshaped how a huge chunk of the industry thinks about styling — utility classes instead of hand-rolled CSS, a build pipeline that only ships what you use, and a massive ecosystem built around it.&lt;/p&gt;

&lt;p&gt;FrontAlign enters the same utility-first space, but it's solving a slightly different problem. Instead of asking "how do we generate utility classes efficiently," it asks "what if the utility layer, the components, and the runtime behavior all shipped together, with zero dependencies?"&lt;/p&gt;

&lt;p&gt;Neither answer is universally "better." The right pick depends on the shape of your project. Here's a breakdown by architecture, not by hype.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Core Difference: Utility Engine vs. Utility Engine + Runtime
&lt;/h2&gt;

&lt;p&gt;Tailwind is, at its heart, a CSS generation tool. It scans your markup, matches utility patterns, and emits a stylesheet at build time. Everything else — dropdowns, modals, form validation, carousels — is left to you or to a component library layered on top (Headless UI, Radix, shadcn/ui, etc.).&lt;/p&gt;

&lt;p&gt;FrontAlign ships that same utility-first, JIT-compiled CSS layer, but pairs it with a JavaScript runtime that auto-discovers and initializes components directly from markup attributes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;fa-component=&lt;/span&gt;&lt;span class="s"&gt;"swiper"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;...&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;nav&lt;/span&gt; &lt;span class="na"&gt;fa-component=&lt;/span&gt;&lt;span class="s"&gt;"tabview"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;...&lt;span class="nt"&gt;&amp;lt;/nav&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;data-src=&lt;/span&gt;&lt;span class="s"&gt;"/image.jpg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Lazy image"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FrontAlign&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That single call boots a "Smart Observer Runtime" that watches the DOM, initializes components as they appear (including ones added dynamically), and lazy-loads images with &lt;code&gt;data-src&lt;/code&gt; — no manual re-init calls scattered through your app.&lt;/p&gt;

&lt;p&gt;This is the crux of the architectural split: &lt;strong&gt;Tailwind gives you the styling primitive and expects you to assemble the rest. FrontAlign gives you the styling primitive plus a component/behavior layer already wired together.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Build Pipeline
&lt;/h2&gt;

&lt;p&gt;Both frameworks lean on a JIT compiler that scans your source for used classes and strips the rest. Configuration looks structurally similar too — FrontAlign's &lt;code&gt;frontalign.config.js&lt;/code&gt; supports theme tokens, font declarations, scan paths, a safelist for runtime-injected classes, and custom breakpoints:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#2563eb&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;fonts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Inter&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;weights&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;400,600,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;jit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;scan&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./app&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./components&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./pages&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;safelist&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;is-primary&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;is-active&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;extensions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mdx&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;concurrency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your team already has Tailwind's config mental model memorized, FrontAlign's build-time story won't feel like a big leap. The meaningful difference shows up at &lt;em&gt;runtime&lt;/em&gt;, not build time — see the next section.&lt;/p&gt;

&lt;h2&gt;
  
  
  Runtime Theming
&lt;/h2&gt;

&lt;p&gt;This is one area where the two diverge clearly. Tailwind's theme values are compiled into your CSS at build time; changing them typically means editing config and rebuilding (CSS custom properties can get you partway to runtime theming, but it's not the framework's default model).&lt;/p&gt;

&lt;p&gt;FrontAlign exposes runtime configuration as a first-class feature, separate from the build-time config file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FrontAlign&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#6366f1&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;p&gt;If your product needs user-configurable themes, white-labeling, or a theme switcher that doesn't trigger a rebuild, that's a real architectural point in FrontAlign's favor. If your theme is fixed at design time and you just want static, art-directed CSS, it's a non-issue either way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Component Coverage
&lt;/h2&gt;

&lt;p&gt;This is the other major fork in the road. Tailwind is deliberately unopinionated about components — that's a feature for teams who want full control over markup and behavior, and a liability for teams who don't want to build or vendor a component library from scratch.&lt;/p&gt;

&lt;p&gt;FrontAlign ships components directly: Modal, Drawer, Dropdown, Collapse, Accordion, Navbar, Carousel, Swiper, Toast, Tooltip, Popover, Alert, Select, Tabview, DarkMode, Form (with attribute-driven validation and optional AJAX submission), Badge, Skeleton, Lazy Image, and a dual-mode Range slider.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;fa-component=&lt;/span&gt;&lt;span class="s"&gt;"form"&lt;/span&gt; &lt;span class="na"&gt;data-ajax=&lt;/span&gt;&lt;span class="s"&gt;"/api/submit"&lt;/span&gt; &lt;span class="na"&gt;novalidate&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;data-rule=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Send&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The tradeoff is the classic one for any batteries-included tool: you move faster out of the box, but you're also more coupled to that library's conventions and markup expectations. Tailwind's ecosystem is broader and more heterogeneous precisely because it doesn't dictate component structure.&lt;/p&gt;

&lt;h2&gt;
  
  
  React and Framework Support
&lt;/h2&gt;

&lt;p&gt;Tailwind is framework-agnostic by design and works anywhere PostCSS can run — React, Vue, Svelte, Astro, plain HTML, you name it, with a huge body of community integrations.&lt;/p&gt;

&lt;p&gt;FrontAlign works across the same general surface (Vanilla JS, React, Next.js, Vue, Astro, Laravel, WordPress, static HTML) and adds a dedicated React package with hooks for component-level control:&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;use client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&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;useNavbar&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useDrawer&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="s1"&gt;frontalign/react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you're deep in a React/Next.js codebase and want hooks that map directly to component state, that's a convenience Tailwind doesn't provide natively — you'd reach for a separate headless library.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dependencies and Bundle Philosophy
&lt;/h2&gt;

&lt;p&gt;Both frameworks emphasize a lean footprint. Tailwind's runtime footprint is effectively zero, since it's a build-time tool with no JS shipped unless you add it yourself. FrontAlign ships zero external dependencies too, but — unlike Tailwind — it does ship its own JS runtime by design, since components and the observer system need it to function.&lt;/p&gt;

&lt;p&gt;That's not a strike against FrontAlign; it's a different bet. You're trading "no JS unless I add it" for "a small, dependency-free JS runtime that powers the components I'm already using."&lt;/p&gt;

&lt;h2&gt;
  
  
  Browser Support
&lt;/h2&gt;

&lt;p&gt;Worth flagging: FrontAlign's OKLCH color system and use of CSS Layers, IntersectionObserver, and MutationObserver mean it targets fairly modern browsers (Chrome/Edge 111+, Firefox 113+, Safari 15.4+). Tailwind's baseline is generally more permissive depending on which CSS features you opt into. If you have hard requirements for older browser support, check this before committing either way.&lt;/p&gt;

&lt;h2&gt;
  
  
  So, Which One?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Reach for Tailwind if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You want a pure styling primitive and full control over component architecture&lt;/li&gt;
&lt;li&gt;You're already invested in an existing component library (Radix, shadcn/ui, Headless UI)&lt;/li&gt;
&lt;li&gt;You need the widest possible ecosystem, plugin support, and community resources&lt;/li&gt;
&lt;li&gt;Older browser support is a hard constraint&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Reach for FrontAlign if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You want utility CSS &lt;em&gt;and&lt;/em&gt; a working component set out of the box&lt;/li&gt;
&lt;li&gt;Runtime theming (no rebuild) matters to your product&lt;/li&gt;
&lt;li&gt;You want attribute-driven component initialization without wiring up your own observer/mount logic&lt;/li&gt;
&lt;li&gt;You're fine targeting modern browsers only&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Architecture, not marketing, should make this call. If your project already has a component layer and you just need utilities, Tailwind's narrower scope is a feature. If you're starting fresh and want the utility layer and the components to arrive already integrated, FrontAlign's bet on a runtime is the more direct path.&lt;/p&gt;

&lt;p&gt;Both are valid answers to "how do we style modern interfaces without CSS chaos." They just start from different assumptions about where the framework's responsibility ends and your app's begins.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;FrontAlign docs: &lt;a href="https://frontalign.dev/docs" rel="noopener noreferrer"&gt;frontalign.dev/docs&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>tailwindcss</category>
      <category>frontend</category>
      <category>css</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Build NextJS Agency website in 30 seconds</title>
      <dc:creator>Eyruz Badalzada</dc:creator>
      <pubDate>Sun, 19 Jul 2026 15:18:15 +0000</pubDate>
      <link>https://dev.to/eyruz/build-nextjs-agency-website-in-30-seconds-1g7i</link>
      <guid>https://dev.to/eyruz/build-nextjs-agency-website-in-30-seconds-1g7i</guid>
      <description>&lt;p&gt;Seeing is better than hearing a hundred times! Build your own agency website in just 30 seconds. Continue with Premium if you wish, or develop on your own. &lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>agency</category>
      <category>frontend</category>
    </item>
    <item>
      <title>I Got Tired of Stitching Together Tailwind + a Component Library + a Theming Layer — So I Built FrontAlign</title>
      <dc:creator>Eyruz Badalzada</dc:creator>
      <pubDate>Fri, 17 Jul 2026 20:06:11 +0000</pubDate>
      <link>https://dev.to/eyruz/i-got-tired-of-stitching-together-tailwind-a-component-library-a-theming-layer-so-i-built-1bk3</link>
      <guid>https://dev.to/eyruz/i-got-tired-of-stitching-together-tailwind-a-component-library-a-theming-layer-so-i-built-1bk3</guid>
      <description>&lt;p&gt;Every front-end stack eventually hits the same wall.&lt;/p&gt;

&lt;p&gt;You pick a utility-first CSS framework for styling. Then you realize you still need a separate library for modals, dropdowns, and carousels. Then you need a theming solution on top of that. Then you have to wire up &lt;strong&gt;lazy-loading&lt;/strong&gt; for images yourself. And if you're using React, you're hoping someone already built the hooks for all of it.&lt;/p&gt;

&lt;p&gt;Each piece works fine on its own. Together, they're three or four dependencies that don't fully agree with each other, requiring multiple config files and context providers.&lt;/p&gt;

&lt;p&gt;That's the exact problem I set out to solve with &lt;strong&gt;&lt;a href="https://frontalign.dev" rel="noopener noreferrer"&gt;FrontAlign&lt;/a&gt;&lt;/strong&gt; — a unified UI engine that bundles utility-first CSS, a smart component runtime, a JIT compiler, and a dedicated React package into one system. &lt;strong&gt;Zero dependencies.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What makes FrontAlign different?
&lt;/h2&gt;

&lt;p&gt;FrontAlign isn't "yet another utility CSS framework." It's an attempt to bring the pieces that usually live in separate libraries under one roof without the bloat:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Utility-first CSS&lt;/strong&gt; built on a modern &lt;strong&gt;OKLCH&lt;/strong&gt; color system (no more muddy colors) and native &lt;strong&gt;CSS layers&lt;/strong&gt; (no more &lt;code&gt;!important&lt;/code&gt; wars).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart, auto-initialized components&lt;/strong&gt; (modals, drawers, smart carousels, tabs, etc.).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A built-in CSS compiler &amp;amp; JIT builder&lt;/strong&gt; to prune unused styles for production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runtime theming&lt;/strong&gt; — dynamically change your theme variables without a rebuild.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;skeleton loading system&lt;/strong&gt; that works purely with HTML attributes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero dependencies&lt;/strong&gt; under the hood.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The "Aha!" Moment: The Smart Observer Runtime
&lt;/h2&gt;

&lt;p&gt;Usually, if you inject new HTML into the DOM (via AJAX, React, HTMX, etc.), you have to manually re-initialize your JavaScript components. FrontAlign fixes this with its Smart Observer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- Add this anywhere, anytime --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;fa-component=&lt;/span&gt;&lt;span class="s"&gt;"swiper"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    ...
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- Lazy loads automatically just by using data-src --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;data-src=&lt;/span&gt;&lt;span class="s"&gt;"/image.jpg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Lazy image"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;FrontAlign watches the DOM. Render a component later? It initializes it. Add a lazy image? It loads it when it enters the viewport. No manual &lt;code&gt;init()&lt;/code&gt; calls scattered throughout your app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Form Validation... Without the JS Wiring
&lt;/h2&gt;

&lt;p&gt;One of my favorite features I built into FrontAlign is declarative form validation. You don't need to write custom JS logic for basic validation or AJAX submissions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;fa-component=&lt;/span&gt;&lt;span class="s"&gt;"form"&lt;/span&gt; &lt;span class="na"&gt;data-ajax=&lt;/span&gt;&lt;span class="s"&gt;"/api/submit"&lt;/span&gt; &lt;span class="na"&gt;novalidate&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- Validates automatically based on data-rule --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;data-rule=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Send&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It also includes complex components like dual-mode (min/max) range sliders right out of the box.&lt;/p&gt;

&lt;h2&gt;
  
  
  A JIT Compiler, Built In
&lt;/h2&gt;

&lt;p&gt;Utility-first CSS is great for velocity, but it balloons your stylesheet. FrontAlign ships with its own compiler:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx frontalign build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It scans your source files, keeps only the classes you actually reference, applies your &lt;code&gt;fa.config.js&lt;/code&gt; theme tokens, and writes a single optimized stylesheet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Runtime Theming vs Build-Time Config
&lt;/h2&gt;

&lt;p&gt;FrontAlign cleanly separates build-time (JIT) and runtime. Need a white-label dashboard where users pick their own theme? You can inject themes at runtime without rebuilding:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FrontAlign&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#6366f1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;// Updates instantly&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;
  
  
  React Support (With Actual Hooks)
&lt;/h2&gt;

&lt;p&gt;While FrontAlign works beautifully with plain HTML, Vue, Astro, or Laravel, I know React developers need component-level control. The library ships with a dedicated React package:&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;use client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&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;useForm&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="s1"&gt;frontalign/react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;FormExample&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;useForm&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;form&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;"form"&lt;/span&gt; &lt;span class="na"&gt;fa-component&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"form"&lt;/span&gt;&lt;span class="na"&gt;noValidate&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;"form-group is-floating"&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;input&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&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;"form-input"&lt;/span&gt;&lt;span class="na"&gt;data-rule&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&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;label&lt;/span&gt; &lt;span class="na"&gt;htmlFor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Email address&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&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="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"form-group"&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;input&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"range"&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;"form-range"&lt;/span&gt;&lt;span class="na"&gt;fa-component&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"range"&lt;/span&gt; &lt;span class="na"&gt;min&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt; &lt;span class="na"&gt;max&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"100"&lt;/span&gt; &lt;span class="na"&gt;defaultValue&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"40"&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;button&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"submit"&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;"button is-primary"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Submit&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&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;form&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;p&gt;You can also import specific components rather than the whole engine if you want to keep your bundle tiny:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&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;Modal&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Toast&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Skeleton&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="s1"&gt;frontalign&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;All components and the framework's core are SSR-safe. You can use FrontAlign in any environment — from Next.js to plain static HTML.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Browser Support &amp;amp; The Future
&lt;/h2&gt;

&lt;p&gt;FrontAlign leans heavily on modern platform features (&lt;code&gt;IntersectionObserver&lt;/code&gt;, &lt;code&gt;MutationObserver&lt;/code&gt;, CSS layers, OKLCH). Because of this, it targets modern browsers (Chrome 111+, Safari 15.4+). If you need to support IE11 or ancient browsers, this isn't the tool for you or you have to use fallback.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where this is going
&lt;/h3&gt;

&lt;p&gt;The primary goal right now isn't to out-utility Tailwind or out-component Bootstrap. It's to stop developers from needing both, plus a theming library, plus a lazy-load script, plus separate framework bindings, just to build a normal interface.&lt;/p&gt;

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

&lt;p&gt;You can install it via NPM:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;frontalign
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or drop in the CDN to play around instantly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.jsdelivr.net/npm/frontalign/dist/css/frontalign.min.css"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.jsdelivr.net/npm/frontalign/dist/js/frontalign.min.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;FrontAlign&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Try With Starter Template
&lt;/h3&gt;

&lt;p&gt;You can install and run starter template with one 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 create-frontalign mytemplate &lt;span class="nt"&gt;--template&lt;/span&gt; agency
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgt9n42l591pnkg4jaivf.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgt9n42l591pnkg4jaivf.png" alt=" " width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'd genuinely love your feedback. If you try it on a real project and something breaks, feels off, or works beautifully, please let me know. Critical feedback is what will help this grow.&lt;/p&gt;

&lt;p&gt;🔗 Website &amp;amp; Docs: &lt;a href="https://frontalign.dev" rel="noopener noreferrer"&gt;frontalign.dev&lt;/a&gt;&lt;br&gt;
⭐ GitHub Repo: &lt;a href="https://github.com/frontalign/frontalign" rel="noopener noreferrer"&gt;Frontalign&lt;/a&gt; — a star would mean the world to me if you like the idea.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>frontend</category>
      <category>css</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
