<?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: Sanmukapriya</title>
    <description>The latest articles on DEV Community by Sanmukapriya (@sanmukapriya).</description>
    <link>https://dev.to/sanmukapriya</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%2F4025905%2Fc2e7a59e-c47a-4a46-93f6-e32ddf1b7cd1.png</url>
      <title>DEV Community: Sanmukapriya</title>
      <link>https://dev.to/sanmukapriya</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sanmukapriya"/>
    <language>en</language>
    <item>
      <title>I built two Next.js 15 + Tailwind v4 templates with zero extra dependencies — here's what I learned</title>
      <dc:creator>Sanmukapriya</dc:creator>
      <pubDate>Sun, 12 Jul 2026 09:58:17 +0000</pubDate>
      <link>https://dev.to/sanmukapriya/i-built-two-nextjs-15-tailwind-v4-templates-with-zero-extra-dependencies-heres-what-i-learned-3fn4</link>
      <guid>https://dev.to/sanmukapriya/i-built-two-nextjs-15-tailwind-v4-templates-with-zero-extra-dependencies-heres-what-i-learned-3fn4</guid>
      <description>&lt;p&gt;Earlier this month I shipped two premium templates — a SaaS landing page and a developer portfolio. Not a startup, not a SaaS, just templates. This post is about the two constraints I built them under, why they made the code better, and a few things I learned launching as a solo dev with zero audience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Constraint 1: zero dependencies beyond next, react, and tailwind
&lt;/h2&gt;

&lt;p&gt;Open the package.json of most templates and you'll find 20+ packages: icon libraries, animation libraries, carousel plugins, UI kits, utility libraries. Every one of them is a version conflict waiting to happen for the buyer, and most are replaceable with a few lines of code in 2026.&lt;/p&gt;

&lt;p&gt;What I used instead:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Icons&lt;/strong&gt; → inline SVG components. An icon component is ~10 lines. You need maybe 15 icons for a landing page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Animations&lt;/strong&gt; → plain CSS. Scroll-blur navbars, gradient glows, an animated "typing" terminal — all doable with keyframes and transitions. No framer-motion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The dashboard mockup in the hero&lt;/strong&gt; → pure CSS. Divs, borders, gradients. It looks like a product screenshot but it's ~80 lines of JSX and weighs nothing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Result: both templates land at ~100KB first-load JS, &lt;code&gt;npm install&lt;/code&gt; takes seconds, and there is nothing to break when Next.js 16 arrives.&lt;/p&gt;

&lt;h2&gt;
  
  
  Constraint 2: every piece of content in ONE typed config file
&lt;/h2&gt;

&lt;p&gt;The thing I hated most about templates I've used: content is smeared across 30 components. Changing a headline means hunting through JSX.&lt;/p&gt;

&lt;p&gt;So both templates keep all content in a single file — &lt;code&gt;lib/content.ts&lt;/code&gt; for the landing page, &lt;code&gt;site.config.ts&lt;/code&gt; for the portfolio. Headlines, nav, pricing tiers, testimonials, project lists, even the lines that animate in the fake terminal. Components are pure renderers of that config's TypeScript type.&lt;/p&gt;

&lt;p&gt;Two things surprised me here:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript becomes your content linter.&lt;/strong&gt; Forget an &lt;code&gt;alt&lt;/code&gt; text, malform a link, give a pricing tier three features when the type expects a non-empty array — the build fails. Content mistakes surface at compile time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It forces better component design.&lt;/strong&gt; When a component can only receive data shaped by the config type, you stop leaking one-off props and hardcoded strings everywhere. Every section component got simpler.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you're building anything content-heavy — a portfolio, docs, a marketing site — I'd genuinely recommend this structure even if you never sell it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tailwind v4 notes (the migration was smaller than feared)
&lt;/h2&gt;

&lt;p&gt;Both templates use Tailwind CSS v4. The headline change: there's no &lt;code&gt;tailwind.config.js&lt;/code&gt; anymore — theme tokens live in CSS via &lt;code&gt;@theme&lt;/code&gt;:&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-accent&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.72&lt;/span&gt; &lt;span class="m"&gt;0.15&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-sans&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;Custom colors become CSS variables you can also read at runtime, &lt;code&gt;@apply&lt;/code&gt; still works where you need it, and the content-scanning config is gone (v4 finds your classes itself). For a fresh project there's honestly less to learn than v3.&lt;/p&gt;

&lt;h2&gt;
  
  
  Launching with zero audience: early notes
&lt;/h2&gt;

&lt;p&gt;I have no Twitter following, no newsletter, no LinkedIn presence. Things I've done in week one:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live demos on Vercel&lt;/strong&gt; (free tier) — nothing converts interest like a clickable demo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Template directories&lt;/strong&gt; — submitted to Built At Lightspeed and Statichunt; these listings also feed AI-assistant recommendations, which is quietly becoming a real discovery channel&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reddit&lt;/strong&gt; — learned the hard way that a 0-day-old account posting links gets auto-filtered. Build comment karma first.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No sales yet as I write this — I'll do a follow-up post when there's real data, including what worked and what was a waste of time.&lt;/p&gt;

&lt;h2&gt;
  
  
  The templates
&lt;/h2&gt;

&lt;p&gt;If you want to see the constraints above in practice, both demos are live:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Nova&lt;/strong&gt; — AI/SaaS landing page: &lt;a href="https://nova-ai-saas-template.vercel.app" rel="noopener noreferrer"&gt;https://nova-ai-saas-template.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Devfolio&lt;/strong&gt; — developer portfolio: &lt;a href="https://devfolio-portfolio-template.vercel.app" rel="noopener noreferrer"&gt;https://devfolio-portfolio-template.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They're paid templates (links on the demo pages), but the ideas in this post — zero-dep icons, single-config content, &lt;code&gt;@theme&lt;/code&gt; — are free to steal for your own projects.&lt;/p&gt;

&lt;p&gt;Questions about the structure or the Tailwind v4 setup? Ask below — I'll answer everything.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>tailwindcss</category>
      <category>webdev</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
