<?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: Antonio Mares</title>
    <description>The latest articles on DEV Community by Antonio Mares (@luis0antonio55).</description>
    <link>https://dev.to/luis0antonio55</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%2F4029433%2Fc0af9d17-838f-4911-a94d-f58bbcd93c5e.jpg</url>
      <title>DEV Community: Antonio Mares</title>
      <link>https://dev.to/luis0antonio55</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/luis0antonio55"/>
    <language>en</language>
    <item>
      <title>I built a SaaS stack just to give away the product for free (Here is what I learned)</title>
      <dc:creator>Antonio Mares</dc:creator>
      <pubDate>Mon, 20 Jul 2026 00:12:17 +0000</pubDate>
      <link>https://dev.to/luis0antonio55/i-built-a-saas-stack-just-to-give-away-the-product-for-free-here-is-what-i-learned-3c67</link>
      <guid>https://dev.to/luis0antonio55/i-built-a-saas-stack-just-to-give-away-the-product-for-free-here-is-what-i-learned-3c67</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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6lzt5rr9xva66opeahbs.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%2F6lzt5rr9xva66opeahbs.png" alt="Syntaxshot" width="800" height="420"&gt;&lt;/a&gt;&lt;br&gt;
I built a SaaS stack just to give away the product for free (Here is what I learned)&lt;/p&gt;

&lt;p&gt;Most people build a SaaS to make money. I built one because I wanted to understand how the plumbing works.&lt;/p&gt;

&lt;p&gt;It all started with a frustrating school assignment. I had to turn in a project and include polished screenshots of my code. The standard way to do this involves copying your code, opening a website, pasting it, downloading the image, and repeating that loop for 20+ different files. It felt like a massive waste of time, so I decided to automate it.&lt;/p&gt;

&lt;p&gt;I ended up creating SyntaxShot—a CLI tool that turns your code into clean, syntax-highlighted images directly from your terminal.&lt;/p&gt;

&lt;p&gt;But instead of just keeping it as a local script, I decided to go all the way. I built a landing page, set up user documentation, and integrated a full Stripe billing system with a Pro tier—even though my free tier is so capable that I honestly don't expect anyone to pay for it.&lt;/p&gt;

&lt;p&gt;Here are my main takeaways from shipping a real dev tool from scratch:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Heavy native dependencies are a DX nightmare
Initially, looking at code-to-image tools, many rely on heavy native graphic libraries. If you've ever tried to install a Node package that requires compiling Cairo, GTK, or specific Windows Build Tools locally, you know how easily it breaks.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The fix: I built the rendering pipeline using Vite, React, Shiki (for exact syntax highlighting), and @napi-rs/canvas.&lt;/p&gt;

&lt;p&gt;The result: @napi-rs/canvas ships with prebuilt binaries for Windows, macOS, and Linux. It just works instantly out of the box with zero native compilation pain.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Recursive file structures require care
When I added the directory scanning feature (running syntaxshot ./src), the first naive attempt just dumped every single image into a flat folder. If you had index.js in three different subdirectories, they would overwrite each other.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I had to rewrite the algorithm to map and mirror the exact subfolder structure into the output directory, ensuring file names never conflict.&lt;/p&gt;

&lt;p&gt;I also learned the hard way that you need a strict exclusion list. Nobody wants screenshots of their node_modules, lockfiles, or .env configurations cluttering their space.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Shipping &amp;gt; Perfection (and the role of AI)
I'll be completely transparent: I used AI heavily to help me move fast, unblock logic, and bootstrap the boilerplate code. But my rule was strict: never copy-paste blindly. I forced myself to review, break down, and understand exactly what every function was doing. Using AI as a collaborative peer allowed me to focus on the big picture: architectural choices, deployment, and user experience.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Why go through the trouble of a Pro tier?&lt;br&gt;
SyntaxShot has a Pro tier that unlocks folder scanning, SVG exports, and extra themes. But honestly? The Free tier gives you everything you need for individual file captures.&lt;/p&gt;

&lt;p&gt;I didn't build this to get rich. I built it to learn how to hook up a Stripe payment gateway, manage API validation caching (the tool caches licenses locally for 7 days to allow offline usage), and structure production-ready code.&lt;/p&gt;

&lt;p&gt;The tool is completely live and open for testing. I’m looking for real, raw feedback. If you think the implementation is messy or want to roast my architecture, please go ahead in the comments—I'm here to learn!&lt;/p&gt;

&lt;p&gt;Check the site: &lt;a href="https://syntaxshot.dev" rel="noopener noreferrer"&gt;https://syntaxshot.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run it: npm i syntaxshot-cli&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fym09dur33ps44wx7kqe7.gif" 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%2Fym09dur33ps44wx7kqe7.gif" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&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%2F82ituvylajvmtu3yqrhm.gif" 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%2F82ituvylajvmtu3yqrhm.gif" alt=" " width="800" height="450"&gt;&lt;/a&gt; &lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How a frustrating school project led me to build my first CLI tool.</title>
      <dc:creator>Antonio Mares</dc:creator>
      <pubDate>Wed, 15 Jul 2026 02:39:22 +0000</pubDate>
      <link>https://dev.to/luis0antonio55/how-a-frustrating-school-project-led-me-to-build-my-first-cli-tool-je4</link>
      <guid>https://dev.to/luis0antonio55/how-a-frustrating-school-project-led-me-to-build-my-first-cli-tool-je4</guid>
      <description>&lt;p&gt;We’ve all been there. You have a project completely finished, beautifully structured into folders, and at the very last minute, the requirements say: "Please attach code screenshots to the final report." 🙄&lt;/p&gt;

&lt;p&gt;I went online to find a tool, and every single option required the same tedious loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open a website.&lt;/li&gt;
&lt;li&gt;Copy the code from file #1.&lt;/li&gt;
&lt;li&gt;Paste it.&lt;/li&gt;
&lt;li&gt;Generate the image.&lt;/li&gt;
&lt;li&gt;Download it.&lt;/li&gt;
&lt;li&gt;Repeat for file #2, file #3, file #4...&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Even the local tools I found simply spun up a local GUI to make you do the exact same manual copy-paste routine. It felt so incredibly inefficient that I decided to automate it.&lt;/p&gt;

&lt;p&gt;That’s how SyntaxShot was born a CLI tool that generates beautiful, syntax-highlighted code screenshots straight from your terminal. With a single command, you can capture a single file, multiple specific files, or recursively scan entire folders while preserving your directory structure.  &lt;/p&gt;

&lt;p&gt;A quick note on honesty: Yes, I used AI to help build this, but I made sure to read, understand, and double-check every single line of code it generated. Ultimately, my goal isn't to get rich (in fact, the free tier is very generous and I don't expect anyone to pay) it’s about learning how to build, launch, and maintain a real-world service.  &lt;/p&gt;

&lt;p&gt;It's built using Vite, React, Shiki, and @napi-rs/canvas (which means absolutely zero painful native dependencies to compile!). Feel free to try it out. I'm completely open to all kinds of feedback—constructive criticism, brutal honesty, or technical pointers. It all helps me learn!&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://syntaxshot.dev" rel="noopener noreferrer"&gt;https://syntaxshot.dev&lt;/a&gt;&lt;br&gt;
📦 npm i syntaxshot-cli&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftofvb197wbjlilzghwuw.gif" 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%2Ftofvb197wbjlilzghwuw.gif" alt="Single file." width="800" height="450"&gt;&lt;/a&gt;&lt;br&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%2Fsd2ih6sxv2alze5j6ryc.gif" 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%2Fsd2ih6sxv2alze5j6ryc.gif" alt="Full folder" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>productivity</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
