<?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: Isaac AR</title>
    <description>The latest articles on DEV Community by Isaac AR (@isaac_ar).</description>
    <link>https://dev.to/isaac_ar</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%2F3533392%2Fdaef905e-9dda-4ee5-8302-08cfd4737ed1.jpg</url>
      <title>DEV Community: Isaac AR</title>
      <link>https://dev.to/isaac_ar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/isaac_ar"/>
    <language>en</language>
    <item>
      <title>Create fully complete .gitignore files from the cli</title>
      <dc:creator>Isaac AR</dc:creator>
      <pubDate>Sat, 30 May 2026 10:21:35 +0000</pubDate>
      <link>https://dev.to/isaac_ar/create-fully-complete-gitignore-files-from-the-cli-3jgd</link>
      <guid>https://dev.to/isaac_ar/create-fully-complete-gitignore-files-from-the-cli-3jgd</guid>
      <description>&lt;p&gt;There are a gazillion packages in pypi.org that "build" your .gitignore files.&lt;/p&gt;

&lt;p&gt;The problem is, all download templates from a repository or another, and you need to instruct them to do so.&lt;/p&gt;

&lt;p&gt;You could also ask your LLM to do it &lt;code&gt;claude -p "update the .gitignore make it complete"&lt;/code&gt; or &lt;code&gt;codex -p "update the .gitignore make it complete"&lt;/code&gt; but why would you waste tokens on something so simple?&lt;/p&gt;

&lt;p&gt;So as far as I can tell we all still do it pretty much manually, piercing things from here and then, and then reusing them.&lt;/p&gt;

&lt;p&gt;I build &lt;a href="https://pypi.org/project/gitignorio-cli/" rel="noopener noreferrer"&gt;gitignorio-cli&lt;/a&gt; (command: gi) which does the .gitignore for your system, your project languages and the editor you are using automatically.&lt;/p&gt;

&lt;p&gt;You don't need to do anything other than installing it with:&lt;br&gt;
&lt;code&gt;pipx install gitignorio-cli&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Once installed, you run:&lt;br&gt;
&lt;code&gt;gi create&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;or if you are updating the file for a project that already has one&lt;br&gt;
&lt;code&gt;gi update&lt;/code&gt;&lt;br&gt;
This leaves all your changes in, and appends in the end.&lt;/p&gt;

&lt;p&gt;Or if you are adding something else, and you want to feel like you are contributing to it (but it is unnecessary) you can run &lt;code&gt;gi add LANG/SYSTEM/EDITOR&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The way this works is:&lt;br&gt;
(1) It uses Linguist which is the same thing Github uses to show you the languages in a package.&lt;br&gt;
(2) Then runs magika in case Linguist has missed anything.&lt;br&gt;
(3) Creates the .gitignore for the languages it has found, the system it is in, and any other files/folders that should be ignored.&lt;/p&gt;

&lt;p&gt;And that is it. &lt;/p&gt;

&lt;p&gt;Now you can also pass it into a tool caller as a default for your project setup, so if an LLM is building the whole project just needs to use the tool-call with gi as the parameter and can do this with using almost no tokens.&lt;/p&gt;

&lt;p&gt;As a last note, the package also ships with hooks you can install so it runs automatically and your .gitignore is always up to date.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://pypi.org/project/gitignorio-cli/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpypi.org%2Fstatic%2Fimages%2Ftwitter.abaf4b19.webp" height="300" class="m-0" width="300"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://pypi.org/project/gitignorio-cli/" rel="noopener noreferrer" class="c-link"&gt;
            gitignorio-cli · PyPI
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Create and update .gitignore files using gitignore.io with automatic language detection
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpypi.org%2Fstatic%2Fimages%2Ffavicon.35549fe8.ico" width="32" height="30"&gt;
          pypi.org
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Happy (less annoying) coding/prompting!&lt;/p&gt;

</description>
      <category>cli</category>
      <category>git</category>
      <category>python</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Seeding folder structures</title>
      <dc:creator>Isaac AR</dc:creator>
      <pubDate>Thu, 22 Jan 2026 11:45:48 +0000</pubDate>
      <link>https://dev.to/isaac_ar/seeding-folder-structures-3lnd</link>
      <guid>https://dev.to/isaac_ar/seeding-folder-structures-3lnd</guid>
      <description>&lt;h2&gt;
  
  
  the problem
&lt;/h2&gt;

&lt;p&gt;I have been using LLMs a lot lately. &lt;/p&gt;

&lt;p&gt;And as part of working with claude, chatgpt, etc., is I get a lot of ideas, and most of those ideas produce folders with structures.&lt;/p&gt;

&lt;p&gt;I'm sure you will recognize this type of output instantly...&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%2Fe97yifeg46o6z0uqp4ou.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.amazonaws.com%2Fuploads%2Farticles%2Fe97yifeg46o6z0uqp4ou.png" alt=" " width="629" height="1009"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm sure you get them too.&lt;/p&gt;

&lt;p&gt;But now this is a problem. If I want to try these structures, I have to go and create all these files and folders manually.&lt;/p&gt;

&lt;p&gt;And if I later decide on another structure, I need to go back and delete some files and folders, then go back and create, move or do whatever is needed to get the llm's suggested structure. And so on and so forth over and over again.&lt;/p&gt;

&lt;p&gt;I have a project called WhatzNew.ai, which has been through 5 complete rewrites in 2025. It has been through 12 or so different top-level structures and then 20 or so different structures for different paths...set now at around 300K lines of code. &lt;br&gt;
This last year, I have written one way or another close to 1M for this project alone.&lt;/p&gt;

&lt;p&gt;And this is not the first time I have built SW, I have built systems used in the military, the government, small startups that became large companies and so on. Usually from the ground up, as a tech lead or CTO. Which is to say I should know.&lt;/p&gt;

&lt;p&gt;But what LLMs have done is show the wider picture, and allowed a lot more iteration that yields better software in general.&lt;/p&gt;

&lt;p&gt;What I realised during all this activity is that I don't have a way to document a structure (programatically) and enforce it at a later date.&lt;/p&gt;

&lt;p&gt;Which is #bad&lt;/p&gt;

&lt;p&gt;But not anymore. As Alan Kay says, (paraphrasing) &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"If you can roll your own tools, do so"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  the solution
&lt;/h2&gt;

&lt;p&gt;A cli package that does exactly that - seeds projects from tree-like specs.&lt;/p&gt;

&lt;p&gt;The package &lt;a href="https://pypi.org/project/seed-cli/1.0.4/" rel="noopener noreferrer"&gt;seed-cli&lt;/a&gt; installs in your terminal via &lt;code&gt;pip install seed-cli&lt;/code&gt;, and you can use it by just calling &lt;code&gt;seed&lt;/code&gt; thereafter.&lt;/p&gt;

&lt;p&gt;Why is it useful?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(1) Allows you to test multiple project structures&lt;/li&gt;
&lt;li&gt;(2) It lets you move from one project structure to the next (and back if you want to)&lt;/li&gt;
&lt;li&gt;(3) Allows you to lock a structure&lt;/li&gt;
&lt;li&gt;(4) Shows what differs from the desired structure (hint: useful on deployments to enforce consistency)&lt;/li&gt;
&lt;li&gt;(5) Allows you to create subfolders with the same structure from your programs; e.g.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;.src
├── &amp;lt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
|   ├── A/
|   ├── B/
|   ├── C/
|   ├── D/
|   └── E/
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also, it solves deployment consistency and infrastructure consistency:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No more files that shouldn't be on the server.&lt;/li&gt;
&lt;li&gt;No more manually modifying CI/CD pipelines to match new structures.&lt;/li&gt;
&lt;li&gt;Locked structures to match the spec.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But I am not trying to sell you anything, is free to use (MIT license) and in beta &lt;a href="https://pypi.org/project/seed-cli/1.0.4/" rel="noopener noreferrer"&gt;for you to try&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why does it matter?
&lt;/h2&gt;

&lt;p&gt;Because a project structure is important.&lt;/p&gt;

&lt;p&gt;A structure can optimise the codebase&lt;br&gt;
Make it easier to understand (if semantically organised)&lt;br&gt;
Make it easier to get on with (for contributors, developers, etc.)&lt;/p&gt;

&lt;p&gt;And maintaining it is even more important.&lt;/p&gt;

&lt;p&gt;Because any project that grows, grows in complexity.&lt;br&gt;
And complexity is all good and well to solve something.&lt;br&gt;
But becomes a hindrance as a project grows, and our capacity as humans to process complexity doesn't grow with it.&lt;/p&gt;

&lt;p&gt;The more new functionality being added (easier these days with ai!), the more difficult it is to keep a project lean&lt;br&gt;
And even more so that the project still makes sense after a few sessions of codex, or claude code, or whatever other LLMs you use.&lt;/p&gt;

&lt;p&gt;And that you can navigate to the right place by just following the logical structure is even more rare and more difficult to get to.&lt;/p&gt;

&lt;p&gt;So - to make this rarity a commonality, and this to not be a problem anymore - seed-cli was born.&lt;/p&gt;




&lt;p&gt;Isaac AR&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
