<?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>Forem: DiegoDev</title>
    <description>The latest articles on Forem by DiegoDev (@diegodev1).</description>
    <link>https://forem.com/diegodev1</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%2F2018238%2F49541dad-f8cc-4fe9-a3fb-fcee51bcf166.png</url>
      <title>Forem: DiegoDev</title>
      <link>https://forem.com/diegodev1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/diegodev1"/>
    <language>en</language>
    <item>
      <title>Stop Asking AI to Write Your Backend Code</title>
      <dc:creator>DiegoDev</dc:creator>
      <pubDate>Tue, 03 Mar 2026 00:35:23 +0000</pubDate>
      <link>https://forem.com/diegodev1/stop-asking-ai-to-write-your-backend-code-366g</link>
      <guid>https://forem.com/diegodev1/stop-asking-ai-to-write-your-backend-code-366g</guid>
      <description>&lt;p&gt;Every time you ask an AI to generate a backend, something slightly annoying happens: it writes 200 lines of TypeScript, picks its own folder structure, names things its own way, and somewhere in the middle it hallucinates an import that doesn't exist.&lt;/p&gt;

&lt;p&gt;You then spend 20 minutes fixing what should've taken 2.&lt;/p&gt;

&lt;p&gt;The thing is, &lt;strong&gt;this isn't really the AI's fault.&lt;/strong&gt; You asked it to do too much.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Terraform figured out
&lt;/h2&gt;

&lt;p&gt;Think about how Terraform works.&lt;/p&gt;

&lt;p&gt;When you want to provision infrastructure, you don't ask an AI to write raw AWS API calls. That's complex, verbose, and easy to get wrong. Instead, you describe &lt;em&gt;what you want&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;&lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;"aws_s3_bucket"&lt;/span&gt; &lt;span class="s2"&gt;"my_bucket"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;bucket&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"my-app-storage"&lt;/span&gt;
  &lt;span class="nx"&gt;acl&lt;/span&gt;    &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"private"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And Terraform handles the rest. The AI only needs to learn a small, constrained language. The hard work is handled by the system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The same idea applies to backend generation. We've just been too slow to notice.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What we're doing wrong today
&lt;/h2&gt;

&lt;p&gt;The current AI-for-backend workflow looks like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;User → "Build me a REST API for users with JWT and Supabase" → AI → 200 lines of code → you fix the mess&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The AI is generating the &lt;em&gt;implementation&lt;/em&gt;. That's the wrong layer.&lt;/p&gt;

&lt;p&gt;It burns tokens on boilerplate. It makes architectural decisions it shouldn't. And every project ends up slightly different because the AI is improvising every single time.&lt;/p&gt;

&lt;h2&gt;
  
  
  The better way: a DSL
&lt;/h2&gt;

&lt;p&gt;What if instead, the AI's only job was to write something like this?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;&lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;   &lt;span class="nx"&gt;supabase&lt;/span&gt;
  &lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;jwt&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;table&lt;/span&gt; &lt;span class="s2"&gt;"users"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;         &lt;span class="nx"&gt;uuid&lt;/span&gt;      &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;primary&lt;/span&gt;
  &lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;      &lt;span class="nx"&gt;string&lt;/span&gt;    &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;unique&lt;/span&gt;
  &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;       &lt;span class="nx"&gt;string&lt;/span&gt;
  &lt;span class="nx"&gt;created_at&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;timestamp&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;default&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;now&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;"users"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt;
  &lt;span class="nx"&gt;endpoints&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;GET&lt;/span&gt;    &lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;users&lt;/span&gt;
    &lt;span class="nx"&gt;POST&lt;/span&gt;   &lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;users&lt;/span&gt;
    &lt;span class="nx"&gt;GET&lt;/span&gt;    &lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;
    &lt;span class="nx"&gt;PUT&lt;/span&gt;    &lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;
    &lt;span class="nx"&gt;DELETE&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;id&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;And &lt;em&gt;your system&lt;/em&gt; generates the actual TypeScript, the router, the database client, the handlers — everything.&lt;/p&gt;

&lt;p&gt;The AI doesn't write code. &lt;strong&gt;The AI speaks your language, and your language generates code.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Consistency.&lt;/strong&gt; Every project generated from the same DSL looks the same. Same folder structure, same naming conventions, same patterns. No more "why did it do it this way this time?".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Token efficiency.&lt;/strong&gt; 10 lines of DSL vs 200 lines of TypeScript. The AI's job just got 20x cheaper.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Predictability.&lt;/strong&gt; The AI can't hallucinate an import that doesn't exist in your DSL. The language is closed and constrained. If the AI writes valid DSL, the output is valid code. Period.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You own the generator.&lt;/strong&gt; Want to switch from Express to Hono? Update the generator once. Every project benefits automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Basalt: an early answer to this problem
&lt;/h2&gt;

&lt;p&gt;This is exactly what we're building with &lt;a href="https://github.com/DiegoDev2/Basalt" rel="noopener noreferrer"&gt;Basalt&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Basalt is an open source CLI written in Go. You give it a &lt;code&gt;.bs&lt;/code&gt; file describing your backend — tables, endpoints, auth — and it generates all the TypeScript you need, ready to run.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ask any AI to read the Basalt spec and write your main.bs
→ basalt generate
→ cd generated &amp;amp;&amp;amp; npm install &amp;amp;&amp;amp; npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That said — &lt;strong&gt;Basalt is just getting started&lt;/strong&gt;. We're at &lt;code&gt;v0.1.0&lt;/code&gt; and the generator is still pretty basic: Express + TypeScript + Supabase, same template structure for every project. It doesn't do magic yet.&lt;/p&gt;

&lt;p&gt;But the foundation is there, it works, and the direction is clear. Upcoming versions will bring more frameworks, more databases, custom templates, and eventually a &lt;code&gt;basalt ai&lt;/code&gt; command that takes plain English and generates the &lt;code&gt;.bs&lt;/code&gt; for you.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://github.com/DiegoDev2/Basalt" rel="noopener noreferrer"&gt;github.com/DiegoDev2/Basalt&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The bigger picture
&lt;/h2&gt;

&lt;p&gt;We're at an interesting moment with AI and code generation. The first instinct was "just let the AI write everything." But the more mature approach is starting to emerge: &lt;strong&gt;design constrained languages that AI can speak fluently, then build systems that compile those languages into real artifacts.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Terraform did this for infrastructure. Prisma did this for database schemas. OpenAPI did this for API contracts.&lt;/p&gt;

&lt;p&gt;Backend generation is next — and the pieces are already there. We just need to stop handing the AI a blank canvas and start giving it a grammar.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What do you think? Is this a pattern you'd use? Drop a comment — would love to hear how others are thinking about this.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>go</category>
      <category>backend</category>
      <category>programming</category>
    </item>
    <item>
      <title>Introducing cmdr.ai: An AI-Powered Copilot for Your Terminal</title>
      <dc:creator>DiegoDev</dc:creator>
      <pubDate>Thu, 10 Jul 2025 18:28:16 +0000</pubDate>
      <link>https://forem.com/diegodev1/introducing-cmdrai-an-ai-powered-copilot-for-your-terminal-444d</link>
      <guid>https://forem.com/diegodev1/introducing-cmdrai-an-ai-powered-copilot-for-your-terminal-444d</guid>
      <description>&lt;h1&gt;
  
  
  Introducing cmdr.ai: An AI-Powered Copilot for Your Terminal
&lt;/h1&gt;

&lt;p&gt;Terminal errors are a daily reality for developers, DevOps engineers, and power users. Diagnosing and resolving these errors often means context switching, searching online, and losing valuable time.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;cmdr.ai&lt;/strong&gt; aims to streamline this process by providing instant, AI-driven suggestions directly in your terminal.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is cmdr.ai?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;cmdr.ai&lt;/strong&gt; is an open-source command-line tool that integrates seamlessly with your shell (Zsh, Bash) to detect failed commands, analyze errors using state-of-the-art AI models (OpenAI, OpenRouter, Ollama, and more), and present concise, actionable solutions—without interrupting your workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automatic error detection:&lt;/strong&gt; No need to wrap commands or change your habits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI-powered suggestions:&lt;/strong&gt; Leverages GPT and other models to provide practical fixes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Persistent logging:&lt;/strong&gt; Maintains a history of failed commands and AI suggestions in &lt;code&gt;~/.cmdr/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-provider support:&lt;/strong&gt; Compatible with OpenAI, OpenRouter, Ollama, and extensible to others.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexible configuration:&lt;/strong&gt; Supports both &lt;code&gt;.cmdrconfig&lt;/code&gt; files and environment variables.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Professional terminal output:&lt;/strong&gt; Clear, color-coded suggestions and a loading indicator.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open source:&lt;/strong&gt; MIT licensed and open to contributions.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Motivation
&lt;/h2&gt;

&lt;p&gt;In modern development environments, efficiency and rapid problem-solving are essential.&lt;br&gt;&lt;br&gt;
cmdr.ai was created to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reduce the time spent diagnosing terminal errors&lt;/li&gt;
&lt;li&gt;Provide immediate, context-aware solutions&lt;/li&gt;
&lt;li&gt;Integrate naturally into existing developer workflows&lt;/li&gt;
&lt;li&gt;Support a wide range of AI providers and configurations&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Contributing
&lt;/h2&gt;

&lt;p&gt;Contributions, feedback, and feature requests are welcome.&lt;br&gt;&lt;br&gt;
Visit the repository: &lt;a href="https://github.com/DiegoDev2/cmdr.ai" rel="noopener noreferrer"&gt;https://github.com/DiegoDev2/cmdr.ai&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cli</category>
      <category>terminal</category>
      <category>programming</category>
      <category>go</category>
    </item>
    <item>
      <title>Package manager on go(available in a few days.)</title>
      <dc:creator>DiegoDev</dc:creator>
      <pubDate>Sat, 19 Oct 2024 07:23:48 +0000</pubDate>
      <link>https://forem.com/diegodev1/package-manager-on-goavailable-in-a-few-days-4m1m</link>
      <guid>https://forem.com/diegodev1/package-manager-on-goavailable-in-a-few-days-4m1m</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/DiegoDev2/Fleet" rel="noopener noreferrer"&gt;https://github.com/DiegoDev2/Fleet&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing Fleet: A Simple Yet Powerful Package Manager for Developers 🚀
&lt;/h2&gt;

&lt;p&gt;As developers, we often spend a lot of time setting up environments and installing different tools. I created &lt;strong&gt;Fleet&lt;/strong&gt; to make this process easier and more efficient.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Fleet?
&lt;/h2&gt;

&lt;p&gt;Fleet is a simple, lightweight package manager designed to help you install and manage development tools quickly and without hassle. Instead of juggling multiple package managers or manually downloading tools, Fleet handles everything with a single command.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why You Should Use Fleet
&lt;/h3&gt;

&lt;p&gt;Fleet is perfect for developers who:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Regularly set up new environments.&lt;/li&gt;
&lt;li&gt;Work across multiple languages or tech stacks.&lt;/li&gt;
&lt;li&gt;Want a faster, unified experience for tool management.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>programming</category>
      <category>go</category>
      <category>npm</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
