<?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: Naji Amer</title>
    <description>The latest articles on DEV Community by Naji Amer (@n_for_all).</description>
    <link>https://dev.to/n_for_all</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%2F3775462%2F5136dc6a-f414-40b3-9216-8607889b0b41.jpg</url>
      <title>DEV Community: Naji Amer</title>
      <link>https://dev.to/n_for_all</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/n_for_all"/>
    <language>en</language>
    <item>
      <title>We Built an AI Vision Plugin That Converts Figma to Semantic Tailwind, Payload CMS, and Astro</title>
      <dc:creator>Naji Amer</dc:creator>
      <pubDate>Sun, 31 May 2026 15:34:55 +0000</pubDate>
      <link>https://dev.to/n_for_all/we-built-an-ai-vision-plugin-that-converts-figma-to-semantic-tailwind-payload-cms-and-astro-d33</link>
      <guid>https://dev.to/n_for_all/we-built-an-ai-vision-plugin-that-converts-figma-to-semantic-tailwind-payload-cms-and-astro-d33</guid>
      <description>&lt;p&gt;Most "Figma to HTML" or "Figma to React" exporters generate unmaintainable, absolute-positioned garbage. You end up spending more time stripping out the bloated code, styling overrides, and inline styles than you would have spent just writing it from scratch.&lt;/p&gt;

&lt;p&gt;We wanted to see if we could use advanced AI vision models to look at visual hierarchies, interpret Figma Auto Layouts natively, and compile them straight into pure, responsive Tailwind utilities and structured backend schemas. &lt;/p&gt;

&lt;p&gt;So we built a dedicated ecosystem to handle it at &lt;a href="https://studio.nextmark.ae" rel="noopener noreferrer"&gt;studio.nextmark.ae&lt;/a&gt;. Here is a look under the hood at how it processes frontend and backend architecture.&lt;/p&gt;




&lt;h3&gt;
  
  
  🧠 The Core Engine: AI Vision vs. Naive Code Exporters
&lt;/h3&gt;

&lt;p&gt;Traditional plugins read raw Figma node JSON trees. If a designer accidentally groups layers poorly, the exported code breaks. &lt;/p&gt;

&lt;p&gt;Our approach pairs Figma node structural data with &lt;strong&gt;state-of-the-art AI Vision models&lt;/strong&gt;. The engine physically "sees" the visual layout to accurately infer mobile constraints, alignment patterns, and spacing intents.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Flexbox &amp;amp; Grid Native:&lt;/strong&gt; Instead of absolute coordinates (&lt;code&gt;top: 42px; left: 110px;&lt;/code&gt;), the compiler identifies structural containers and converts Figma Auto Layout properties directly into robust CSS Flex and CSS Grid classes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pure Tailwind Utilities Only:&lt;/strong&gt; The system generates 100% standard Tailwind CSS classes (e.g., &lt;code&gt;flex items-center gap-4 md:grid-cols-3&lt;/code&gt;). There are zero proprietary CSS files, zero inline styles, and no configuration wrapper overrides.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-Responsive Inferences:&lt;/strong&gt; The vision model evaluates how a layout should collapse on smaller viewports, automatically injecting baseline responsive modifiers (&lt;code&gt;sm:&lt;/code&gt;, &lt;code&gt;md:&lt;/code&gt;, &lt;code&gt;lg:&lt;/code&gt;) right into the HTML output.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔌 Bridging the Full-Stack Gap (Astro &amp;amp; Payload CMS)
&lt;/h3&gt;

&lt;p&gt;Generating a basic HTML file doesn't help if you're building a modern headless website. You still have to break that HTML into components and write database schemas manually. We engineered the platform to map visual blocks straight into development setups:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Modular Astro Components:&lt;/strong&gt; The tool outputs clean component structures and reusable markup ready to drop directly into an Astro page hierarchy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Typed Payload CMS Blocks:&lt;/strong&gt; For teams running headless architectures, it converts the generated UI into reusable Payload blocks with strictly typed TypeScript fields. It skips the repetitive, manual chore of coding schemas for custom grids or sliders.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🛠️ The Interactive Iteration Loop
&lt;/h3&gt;

&lt;p&gt;AI conversions are rarely 100% perfect on the first pass. Instead of forcing developers to jump back into the IDE to fix minor discrepancies, we built an &lt;strong&gt;AI Code Refinement&lt;/strong&gt; layer directly into the dashboard.&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;!-- Example of the initial clean container output --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"flex flex-col gap-6 p-6 bg-slate-900 rounded-xl"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h3&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-xl font-bold text-white"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Interactive Component&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"text-sm text-slate-400"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Pure Tailwind utility classes with zero inline styling bloat.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If a column gap or font weight feels slightly off, you can text-prompt the internal engine (e.g., &lt;em&gt;"Change the card to a 3-column grid on desktop and fix the column gap"&lt;/em&gt;). The code updates in real-time, rewriting only the necessary utility classes without breaking the surrounding semantic structure.&lt;/p&gt;




&lt;h3&gt;
  
  
  📦 Test the Live Sandbox
&lt;/h3&gt;

&lt;p&gt;We want the code quality to speak for itself. You can copy-paste components, review the output structures, and check the responsive layouts live. &lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://www.figma.com/community/plugin/1613500092742044599" rel="noopener noreferrer"&gt;Try the Plugin Interface at studio.nextmark.ae&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;How is your team currently handling the design-to-code handoff? Are you using native exporters, or are you still translating margins and typography manually? Let's discuss front-end optimization in the comments!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>design</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The Invasive Part of Sentry That No One Wants to Talk About</title>
      <dc:creator>Naji Amer</dc:creator>
      <pubDate>Sat, 16 May 2026 18:57:46 +0000</pubDate>
      <link>https://dev.to/n_for_all/the-invasive-part-of-sentry-that-no-one-wants-to-talk-about-44n1</link>
      <guid>https://dev.to/n_for_all/the-invasive-part-of-sentry-that-no-one-wants-to-talk-about-44n1</guid>
      <description>&lt;p&gt;You know the drill. You spin up a fresh project, tweak your Tailwind config until it looks just right, and get ready to push to prod. But wait! You can’t fly blind. You need an error tracker.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Types npm install @sentry/react.&lt;/em&gt; Boom. Done. You are a responsible, proactive engineer.&lt;/p&gt;

&lt;p&gt;But have you ever actually paused to look at the network tab to see what you just deployed? We like to tell ourselves that we just installed a harmless little crash logger. But if we are being completely honest, we have essentially normalized embedding &lt;strong&gt;commercial surveillance camera&lt;/strong&gt; into our users' browsers—and nobody seems to want to talk about it!&lt;/p&gt;

&lt;h3&gt;
  
  
  The "It's Just Logging Errors, Right?" Myth
&lt;/h3&gt;

&lt;p&gt;It is not just patiently sitting in the corner waiting for a TypeError to happen. It is aggressively taking notes on ... &lt;em&gt;everything&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  And... Things Got... Artificial
&lt;/h3&gt;

&lt;p&gt;This massive data collection was already a bit of a privacy tightrope, but then the AI boom happened.&lt;/p&gt;

&lt;p&gt;Sentry (like everyone else) aggressively integrated AI into their platform, launching tools like their "Seer" autofix agent and AI-generated Replay Summaries.&lt;/p&gt;

&lt;p&gt;Why does this matter? Because when an error occurs now, your user's breadcrumbs, their browser state, and the network request context are no longer just sitting quietly in a secure database log waiting for a human to review them. They are being bundled up and fed directly into an LLM’s context window so the AI can generate a helpful GitHub Pull Request or summarize why the user rage-clicked a button.&lt;/p&gt;

&lt;h3&gt;
  
  
  Privacy... Hmmm...
&lt;/h3&gt;

&lt;p&gt;Let’s be real for a second: &lt;strong&gt;we allow this commercial surveillance because debugging modern frontend apps is an absolute nightmare.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When a user submits a support ticket saying, &lt;em&gt;"The checkout button doesn't work, fix it,"&lt;/em&gt; with zero context, standard error logs are useless. We would gladly hand over our firstborn to watch a Session Replay of that exact bug instead of spending three days trying to blindly recreate a bizarre React hydration state issue.&lt;/p&gt;

&lt;h3&gt;
  
  
  The ultimate irony?
&lt;/h3&gt;

&lt;p&gt;Most of us don't even need these tools in the first place. If you are running a massive enterprise SaaS or a banking app with millions of dollars on the line, sure, the trade-off makes sense. But for the vast majority of our side projects, MVPs, and standard CRUD apps, standard server logs and a simple React error boundary are more than enough. We are blindly installing enterprise-grade surveillance just because a tutorial told us it was "best practice."&lt;/p&gt;

&lt;p&gt;&lt;em&gt;We’ve officially left the doors wide open and handed the data over to the AI overlords. Now, let’s just sit back and see exactly how hard this is going to bite us back.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>I built an open-source Shopify alternative with Next.js 16 &amp; PayloadCMS</title>
      <dc:creator>Naji Amer</dc:creator>
      <pubDate>Mon, 16 Feb 2026 10:35:40 +0000</pubDate>
      <link>https://dev.to/n_for_all/i-built-an-open-source-shopify-alternative-with-nextjs-16-payloadcms-23c1</link>
      <guid>https://dev.to/n_for_all/i-built-an-open-source-shopify-alternative-with-nextjs-16-payloadcms-23c1</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frazrprhuzyv3e3xttt6k.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frazrprhuzyv3e3xttt6k.jpg" alt="Amerta Dashboard" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the last decade, building an e-commerce site has felt like choosing between two evils:&lt;/p&gt;

&lt;p&gt;The "SaaS Trap" (Shopify): You get a nice dashboard, but you pay a monthly sub + a "transaction fee" on every sale. Want to customize checkout? That’ll be $2,000/month for an Enterprise plan, please.&lt;/p&gt;

&lt;p&gt;The "Plugin Hell" (WooCommerce/Magento): You own the code, but you spend 50% of your time fighting conflicting plugins, security patches, and slow PHP server response times.&lt;/p&gt;

&lt;p&gt;I believed there had to be a third way. A way that combines the DX (Developer Experience) of Next.js with the content management power of a headless CMS—without the bloat.&lt;/p&gt;

&lt;p&gt;So, I built &lt;a href="http://amerta.io/" rel="noopener noreferrer"&gt;Amerta&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It is an MIT Licensed, open-source e-commerce standard built on PayloadCMS 3.7 and Next.js 16.&lt;/p&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.amazonaws.com%2Fuploads%2Farticles%2F70xbjh9jj54ywtbph23w.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F70xbjh9jj54ywtbph23w.jpg" alt="Amerta Product Page" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is why (and how) I built it.&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠 The Stack
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Framework:&lt;/strong&gt; Next.js 16 (App Router, Server Components)&lt;br&gt;
&lt;strong&gt;CMS:&lt;/strong&gt; PayloadCMS 3.0 (Headless, TypeScript-first)&lt;br&gt;
&lt;strong&gt;Database:&lt;/strong&gt; MongoDB&lt;br&gt;
&lt;strong&gt;Styling:&lt;/strong&gt; TailwindCSS&lt;br&gt;
&lt;strong&gt;Deployment:&lt;/strong&gt; Self-host (Docker/VPS) or Cloud (Vercel/Neon)&lt;/p&gt;

&lt;p&gt;The "Local API" Architecture (No Fetch Overhead)&lt;br&gt;
The biggest bottleneck in headless e-commerce is usually the HTTP requests between your frontend and your CMS.&lt;/p&gt;

&lt;p&gt;Because PayloadCMS 3.0 supports the Local API, Amerta doesn't need to send HTTP requests to fetch products. Since Payload runs alongside Next.js in the same server instance, we query the database directly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Traditional Headless:&lt;/strong&gt;&lt;br&gt;
Next.js (Server) -&amp;gt; HTTP Request -&amp;gt; Headless CMS -&amp;gt; DB&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Amerta (Local API):&lt;/strong&gt;&lt;br&gt;
Next.js (Server) -&amp;gt; Direct Function Call -&amp;gt; DB&lt;/p&gt;

&lt;p&gt;This means zero network latency for data fetching.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Global by Default (Not a Plugin)&lt;br&gt;
Most platforms treat Multi-Currency and Localization as expensive plugins. I treated them as requirements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;RTL Support: Native. The layout flips automatically based on the locale (great for MENA regions).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Multi-Currency: Support for dynamic pricing (AED, USD, EUR) without relying on third-party scripts that slow down the DOM.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The "SaaS Tax" is Gone&lt;br&gt;
This is the main reason I open-sourced this.&lt;br&gt;
When you use SaaS platforms, you often pay a % fee on every transaction on top of Stripe/PayPal fees.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With Amerta:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bring Your Own Keys:&lt;/strong&gt; Plug in your Stripe/Mamo keys directly.&lt;br&gt;
&lt;strong&gt;Self-Host:&lt;/strong&gt; Put it on a $5 DigitalOcean droplet or deploy to Railway.&lt;br&gt;
&lt;strong&gt;No Limits:&lt;/strong&gt; 100 products or 100,000 products. You don't pay per SKU.&lt;/p&gt;

&lt;p&gt;Built for the &lt;strong&gt;"Next" Era&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;I built this because I wanted to give developers a way to build custom, high-performance stores without being locked into a vendor's ecosystem.&lt;/p&gt;

&lt;p&gt;It’s open source. It’s free. It’s yours to break, fork, and monetize.&lt;/p&gt;

&lt;p&gt;🌟 &lt;a href="https://github.com/n-for-all/amerta" rel="noopener noreferrer"&gt;Star the Repo&lt;/a&gt;&lt;br&gt;
🚀 &lt;a href="https://demo.amerta.io" rel="noopener noreferrer"&gt;View the Demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let me know what you think in the comments! I'm actively looking for contributors.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>nextjs</category>
      <category>react</category>
      <category>shopify</category>
    </item>
  </channel>
</rss>
