<?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: Meiglyph</title>
    <description>The latest articles on DEV Community by Meiglyph (@meiglyph).</description>
    <link>https://dev.to/meiglyph</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%2F4060126%2F05cec334-122b-4e7e-8fe9-e50748ea703a.png</url>
      <title>DEV Community: Meiglyph</title>
      <link>https://dev.to/meiglyph</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/meiglyph"/>
    <language>en</language>
    <item>
      <title>I Built BuildNext: A Tiny Tracker That Won't Let My Side Projects Stall</title>
      <dc:creator>Meiglyph</dc:creator>
      <pubDate>Wed, 19 Aug 2026 08:58:26 +0000</pubDate>
      <link>https://dev.to/meiglyph/i-built-buildnext-a-tiny-tracker-that-wont-let-my-side-projects-stall-3k7c</link>
      <guid>https://dev.to/meiglyph/i-built-buildnext-a-tiny-tracker-that-wont-let-my-side-projects-stall-3k7c</guid>
      <description>&lt;p&gt;I have a problem a lot of indie devs have: too many side projects, and no idea&lt;br&gt;
what to actually &lt;em&gt;do&lt;/em&gt; next on any of them. Every project had a mental backlog&lt;br&gt;
a mile long, which meant every project felt overwhelming — so I'd avoid all of them.&lt;/p&gt;

&lt;p&gt;So I built BuildNext: a small Flask app with one rule baked into the data model&lt;br&gt;
itself — &lt;strong&gt;every project gets exactly one next action.&lt;/strong&gt; Not a todo list. One thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Add projects and move them through five stages: Idea → Planning → Building →
Testing → Published (or Paused)&lt;/li&gt;
&lt;li&gt;Each project has exactly one "next action" — with an optional due date that
flags when it's due today or overdue&lt;/li&gt;
&lt;li&gt;"Mark as done" logs the completed action to that project's history, so I can
see momentum over time&lt;/li&gt;
&lt;li&gt;Optional blocker note + GitHub link per project&lt;/li&gt;
&lt;/ul&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%2Fabk2iyqrezphxljju96l.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%2Fabk2iyqrezphxljju96l.png" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;p&gt;Flask + Flask-SQLAlchemy + SQLite, server-rendered Jinja templates, no JS&lt;br&gt;
framework. Deliberately boring — this is a tool, not a demo of a framework.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;Right now it's a personal tool I run locally. No accounts, no cloud — just a&lt;br&gt;
GitHub repo I can point people to. If enough people want to actually use it&lt;br&gt;
rather than just read the code, a real deploy is the obvious next step.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/meiglyph/build-next" rel="noopener noreferrer"&gt;https://github.com/meiglyph/build-next&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>python</category>
      <category>buildinpublic</category>
      <category>flask</category>
    </item>
    <item>
      <title>Why I Kept My CLI Tool's Tags as Plain Text</title>
      <dc:creator>Meiglyph</dc:creator>
      <pubDate>Sun, 09 Aug 2026 05:59:43 +0000</pubDate>
      <link>https://dev.to/meiglyph/why-i-kept-my-cli-tools-tags-as-plain-text-eoa</link>
      <guid>https://dev.to/meiglyph/why-i-kept-my-cli-tools-tags-as-plain-text-eoa</guid>
      <description>&lt;h1&gt;
  
  
  Keeping Tags as Plain Text — Adding Features to brain-cli Without Losing the Point
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Why I Built This
&lt;/h2&gt;

&lt;p&gt;brain-cli started as a tiny CLI with exactly four commands: &lt;code&gt;add&lt;/code&gt;, &lt;code&gt;list&lt;/code&gt;, &lt;code&gt;show&lt;/code&gt;, &lt;code&gt;search&lt;/code&gt;. Under the hood, it just appends lines to Markdown files. No database, no index — a thin wrapper around plain text.&lt;/p&gt;

&lt;p&gt;After using it for a while, one thing started to bug me. The more notes piled up, the harder it got to find the one I wanted. &lt;code&gt;search&lt;/code&gt; only does substring matching, so there was no way to say "just show me the work-related notes" or "just the study log." So I added tagging.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;First, tagging on &lt;code&gt;add&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brain add &lt;span class="s2"&gt;"Built my first CLI command."&lt;/span&gt; &lt;span class="nt"&gt;--tag&lt;/span&gt; learning &lt;span class="nt"&gt;--tag&lt;/span&gt; cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;--tag&lt;/code&gt; (short form &lt;code&gt;-t&lt;/code&gt;) can be repeated, and internally each tag just gets turned into a &lt;code&gt;#tag&lt;/code&gt; string appended to the line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;-&lt;/span&gt; Built my first CLI command. #learning #cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, filtering &lt;code&gt;search&lt;/code&gt; by tag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brain search SSH &lt;span class="nt"&gt;--tag&lt;/span&gt; work
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's a simple AND condition — only lines that match both the query and the tag get shown.&lt;/p&gt;

&lt;p&gt;Finally, a &lt;code&gt;tags&lt;/code&gt; command to see everything you've been using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brain tags
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   Tags
┏━━━━━━━━━┓
┃ Tag     ┃
┡━━━━━━━━━┩
│ #python │
│ #study  │
└─────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It scans every note, collects words starting with &lt;code&gt;#&lt;/code&gt;, dedupes them, and prints them alphabetically. That's the whole implementation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Tags Stay Plain Text
&lt;/h2&gt;

&lt;p&gt;This is the part I actually spent time thinking about. When implementing tags, there were two real options:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Store tags as structured data (YAML frontmatter, JSON metadata, etc.)&lt;/li&gt;
&lt;li&gt;Keep tags as literal &lt;code&gt;#tag&lt;/code&gt; strings inside the line&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I went with option 2, without much hesitation. The core value of brain-cli, as I see it, is that the storage is transparent plain text. You can open &lt;code&gt;~/.brain-cli/notes/*.md&lt;/code&gt; in any editor, with or without the CLI, and it just works. You can hand-write &lt;code&gt;#tag&lt;/code&gt; directly in your editor and it behaves exactly the same as if you'd used &lt;code&gt;--tag&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If I'd made tags structured metadata, brain-cli would have become a tool that "breaks" the moment you bypass the CLI. That would contradict the simplicity the tool was built around in the first place. When adding a feature, keeping the existing design intact mattered more than making the feature technically "cleaner."&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Deliberately Didn't Build
&lt;/h2&gt;

&lt;p&gt;A couple of other commands came up as candidates alongside tagging. I considered both and skipped them — here's why.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;brain rm&lt;/code&gt; (delete a note)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I decided this wasn't worth building. Since storage is just Markdown files, you can already delete one with &lt;code&gt;rm ~/.brain-cli/notes/2026-08-09.md&lt;/code&gt;. A dedicated command would mostly add complexity — confirmation prompts, safety checks — for very little actual benefit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;brain edit&lt;/code&gt; (open a note in $EDITOR)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the one feature I still think might be worth adding later. Fixing a typo or adding a follow-up thought isn't something you can do by just re-running &lt;code&gt;add&lt;/code&gt; — that's a real, recurring friction point. Since it would just delegate to &lt;code&gt;$EDITOR&lt;/code&gt;, the implementation itself would stay simple. If there's a "next feature," this is probably it.&lt;/p&gt;

&lt;p&gt;The general rule I used: bias toward not adding things, but let real, recurring friction override that bias.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Actually Built It
&lt;/h2&gt;

&lt;p&gt;Each feature went through the same cycle: implement, write tests, update the README, commit. Instead of building everything at once, I finished one feature completely before starting the next. By the end, there were 10 passing tests and two commits pushed to &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;The part that actually took time wasn't writing the code — it was deciding how much to structure, and what not to build. The more a tool grows, the harder it gets to keep it simple. This time, I think that trade-off worked out.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>cli</category>
      <category>python</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Hello, DEV Community!</title>
      <dc:creator>Meiglyph</dc:creator>
      <pubDate>Tue, 04 Aug 2026 02:49:19 +0000</pubDate>
      <link>https://dev.to/meiglyph/hello-dev-community-map</link>
      <guid>https://dev.to/meiglyph/hello-dev-community-map</guid>
      <description>&lt;p&gt;Hi, I’m Meiglyph.&lt;/p&gt;

&lt;p&gt;I have a background in design, and I’m currently learning Python and exploring software development.&lt;/p&gt;

&lt;p&gt;As I build small tools and web applications, I often discover useful lessons about programming, debugging, user experience, and the development process itself.&lt;/p&gt;

&lt;p&gt;On DEV, I plan to share:&lt;/p&gt;

&lt;p&gt;・What I learn while studying Python&lt;br&gt;
・Lessons and mistakes from my projects&lt;br&gt;
・Practical tips I discover during development&lt;br&gt;
・Thoughts on combining design and programming&lt;/p&gt;

&lt;p&gt;I’m still learning, so this blog will also be a record of my progress.&lt;/p&gt;

&lt;p&gt;I hope my experiences can be useful to other beginners and people who are building their own projects.&lt;/p&gt;

&lt;p&gt;Thanks for reading. I’m looking forward to learning and sharing with the DEV community!&lt;/p&gt;

</description>
      <category>introduction</category>
      <category>python</category>
      <category>design</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
