<?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: Miguel Angel Sosa Menchaca</title>
    <description>The latest articles on DEV Community by Miguel Angel Sosa Menchaca (@mikezan2024).</description>
    <link>https://dev.to/mikezan2024</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%2F1610465%2Fce8e6fb7-434c-44e8-8bf9-ba832445babf.jpg</url>
      <title>DEV Community: Miguel Angel Sosa Menchaca</title>
      <link>https://dev.to/mikezan2024</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mikezan2024"/>
    <language>en</language>
    <item>
      <title>How I Built a Production-Ready Dashboard Template with Tailwind CSS 4.0</title>
      <dc:creator>Miguel Angel Sosa Menchaca</dc:creator>
      <pubDate>Sat, 14 Mar 2026 12:15:05 +0000</pubDate>
      <link>https://dev.to/mikezan2024/how-i-built-a-production-ready-dashboard-template-with-tailwind-css-40-187n</link>
      <guid>https://dev.to/mikezan2024/how-i-built-a-production-ready-dashboard-template-with-tailwind-css-40-187n</guid>
      <description>&lt;p&gt;Every time I started a new project, the same thing happened: I'd spend the first two or three weeks just building the dashboard UI. Sidebar, navigation, tables, charts, forms, dark mode — the same components over and over again. After 17 years as a developer, I finally decided to solve this for good.&lt;/p&gt;

&lt;p&gt;I built AkaDash, a production-ready admin dashboard template available in React, Vue, Angular, and plain HTML. All styled with Tailwind CSS 4.0. In this post, I want to share the technical decisions behind it and what I learned along the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Tailwind CSS 4.0
&lt;/h2&gt;

&lt;p&gt;I started this project with Tailwind v3, but halfway through, v4.0 dropped and I decided to migrate. It was worth it.&lt;/p&gt;

&lt;p&gt;The biggest change is the CSS-first configuration. Instead of a JavaScript config file, you now define your design tokens directly in CSS with the &lt;code&gt;@theme&lt;/code&gt; directive:&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="k"&gt;@import&lt;/span&gt; &lt;span class="s1"&gt;"tailwindcss"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;@theme&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="n"&gt;oklch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0.84&lt;/span&gt; &lt;span class="m"&gt;0.18&lt;/span&gt; &lt;span class="m"&gt;117.33&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="py"&gt;--color-surface&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;oklch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0.97&lt;/span&gt; &lt;span class="m"&gt;0.01&lt;/span&gt; &lt;span class="m"&gt;260&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="py"&gt;--font-display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;"Inter"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&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;This made theming much simpler for the template. Users can customize colors, fonts, and spacing by editing CSS variables — no need to touch a JavaScript config file. Dark mode becomes a matter of swapping CSS custom properties.&lt;/p&gt;

&lt;p&gt;The other big win was performance. The new Oxide engine (built in Rust) makes full builds up to 5x faster and incremental builds over 100x faster. For a template with 50+ components, this makes development feel instant.&lt;/p&gt;

&lt;p&gt;Other v4.0 features I used heavily:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Container queries&lt;/strong&gt; for components that adapt to their parent size, not just the viewport&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The &lt;code&gt;@starting-style&lt;/code&gt; variant&lt;/strong&gt; for enter/exit transitions without JavaScript&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic utility&lt;/strong&gt; values so users aren't limited to predefined spacing scales&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The modernized P3 color palette&lt;/strong&gt; for more vivid colors on modern displays&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Template Architecture
&lt;/h2&gt;

&lt;p&gt;I organized the template around a few principles:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Every component is self-contained.&lt;/strong&gt; Each component lives in its own file with its own styles. You can drop a chart card, a stats widget, or a data table into any layout without side effects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No unnecessary abstractions.&lt;/strong&gt; There's no custom component framework on top. It's standard React (or Vue, or Angular) with Tailwind classes. If you know the framework, you know how to customize this template.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accessibility is not optional.&lt;/strong&gt; Every interactive element has proper ARIA attributes, keyboard navigation support, and sufficient color contrast in both light and dark modes. Tables have proper headers and scope attributes. Modals trap focus. Dropdowns are navigable with arrow keys.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The folder structure follows a pattern that scales:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/components
  /charts      → Line, Bar, Pie, Area charts
  /tables      → Data tables with sorting, pagination
  /forms       → Input &lt;span class="nb"&gt;groups&lt;/span&gt;, selects, &lt;span class="nb"&gt;date &lt;/span&gt;pickers
  /navigation  → Sidebar, breadcrumbs, tabs
  /feedback    → Alerts, toasts, modals
  /layout      → Grid wrappers, page shells
/pages
  /dashboard   → Main overview
  /analytics   → Charts and metrics
  /users       → User management
  /settings    → App configuration
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Dark mode that actually works.&lt;/strong&gt; I implemented dark mode using CSS custom properties tied to a data-theme attribute on the root element. This means the toggle is instant (no flash of unstyled content) and every component respects it without extra classes.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What I'd Do Differently
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Start with a design system, not components.&lt;/strong&gt; I jumped straight into building components and had to go back and extract a consistent token system later. If I started over, I'd define my spacing scale, color palette, and typography system first.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test on real data earlier.&lt;/strong&gt; My first table component looked great with 5 rows. It broke visually with 500. Testing with realistic data volumes from day one would have saved me rework.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ship fewer components, but better.&lt;/strong&gt; I started with the goal of "50+ components" because it sounds good on a marketing page. But some of those components would have been better if I'd spent more time polishing 30 really solid ones instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Result
&lt;/h2&gt;

&lt;p&gt;AkaDash now includes 50+ components across charts, tables, forms, navigation, and layout. It's fully responsive, accessible, and available in four flavors: React, Vue, Angular, and plain HTML.&lt;/p&gt;

&lt;p&gt;If you want to see it in action, here's the live demo:&lt;br&gt;
&lt;a href="https://akalabtech.com/products/akadash/demo/dashboard.html" rel="noopener noreferrer"&gt;https://akalabtech.com/products/akadash/demo/dashboard.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And the store page with all the details:&lt;br&gt;
&lt;a href="https://akalabtech.com/products/akadash" rel="noopener noreferrer"&gt;https://akalabtech.com/products/akadash&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm offering a launch discount, use code &lt;code&gt;LAUNCH20&lt;/code&gt; for 20% off (limited to the first 50 customers).&lt;/p&gt;

&lt;p&gt;I'd love to hear your feedback. What components do you always need in a dashboard? What would make a template like this more useful for your projects? Let me know in the comments.&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>showdev</category>
      <category>tailwindcss</category>
      <category>ui</category>
    </item>
  </channel>
</rss>
