<?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: Mares Popa</title>
    <description>The latest articles on DEV Community by Mares Popa (@mares_popa_3990ccd18e1c5e).</description>
    <link>https://dev.to/mares_popa_3990ccd18e1c5e</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%2F3870188%2Faefc0eb7-cd5f-4204-ac82-c0f7e63f43c6.png</url>
      <title>DEV Community: Mares Popa</title>
      <link>https://dev.to/mares_popa_3990ccd18e1c5e</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mares_popa_3990ccd18e1c5e"/>
    <language>en</language>
    <item>
      <title>The Markdown Engineer</title>
      <dc:creator>Mares Popa</dc:creator>
      <pubDate>Wed, 09 Sep 2026 10:48:28 +0000</pubDate>
      <link>https://dev.to/mares_popa_3990ccd18e1c5e/the-markdown-engineer-5445</link>
      <guid>https://dev.to/mares_popa_3990ccd18e1c5e/the-markdown-engineer-5445</guid>
      <description>&lt;p&gt;My own task has been substantially altered in the last few months, and I now spend most of my time writing down my specifications in a markdown format, writing prompt constraints, defining bounds, and checking architectures. I find myself writing far less actual TypeScript and JSX than I used to. &lt;/p&gt;

&lt;p&gt;A few years ago, if you had told me that my main tool for coding would be a text file, I would have been unable to believe you. But lately I have come to see the task of coding as less a question of raw code and more of orchestration. We are becoming AI Orchestrators. &lt;/p&gt;

&lt;p&gt;But this transition comes with a hidden cost, one that nobody seems to talk about: the steady dilution of our code literacy.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Illusion of Output and the Blind Spot
&lt;/h2&gt;

&lt;p&gt;When modern AI tools are used to generate complex UI components, async hooks, and state persistence logic, the effect is almost magical. The code arrives in seconds, looking very nice, nicely formatted, and passing basic tests on the first try. &lt;/p&gt;

&lt;p&gt;But the danger comes when the generated code is accepted too quickly: the mental model is lost. If you don't have to step through the logic yourself, line by line, you miss all the subtleties that lie embedded in the implementation.&lt;/p&gt;

&lt;p&gt;How does this state hook behave during rapid offline re-renders? What happens when two writes arrive at IndexedDB at the same time? Will this component produce a sudden thrashing of the layout thread without being notified by the main thread? &lt;/p&gt;

&lt;p&gt;When you do not completely understand the program you are running, you are not an engineer; you're a gambler, gambling on production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pressure-Testing Ideas: The /quiz-me Skill
&lt;/h2&gt;

&lt;p&gt;To help me fight against this entangling attitude, I've developed several local skills for my local AI workflow. &lt;/p&gt;

&lt;p&gt;The most important one, one I call &lt;a href="https://www.marespopa.com/?skill=quiz-me#skills" rel="noopener noreferrer"&gt;/quiz-me&lt;/a&gt;, reverses the normal role of the LLM from code-generator to merciless interviewer, so when I have a proposed architectural change or refactoring, I force the model to examine it before writing any lines of code:&lt;/p&gt;

&lt;p&gt;It seeks hidden failure modes and unhandled edge cases.&lt;/p&gt;

&lt;p&gt;It challenges my state management and trade-offs.&lt;/p&gt;

&lt;p&gt;It forces me to justify why a particular abstraction makes sense.&lt;/p&gt;

&lt;p&gt;Since I have to answer and defend these questions, I must indeed build a complete mental model of the solution. The AI ceases to be a shortcut that makes me lazy and becomes a sparring partner that trains my critical thinking.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do Human Code Reviews Even Make Sense Anymore?
&lt;/h2&gt;

&lt;p&gt;The shift forced me to consider one of the most sacred practices in modern software engineering: the traditional code review on pull requests. In a world where an LLM can generate 500 lines of plausible code in ten seconds, a review in the form of a visual line-by-line examination by another human engineer is fast becoming an obsolete procedure. &lt;/p&gt;

&lt;p&gt;Human eyes are notoriously bad at catching subtle async race conditions, missing edge-case fallbacks, or memory leaks during a superficial PR review—especially when the diff is huge. The true code review does not happen after the code has been written, in a static diff; it takes place before, at the specification and architectural level, with questioning, explicit constraints and targeted interrogation. &lt;/p&gt;

&lt;p&gt;The review has shifted from whether the syntax was written correctly to asking whether the architectural boundary is sound.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hidden Cost: Token Overhead &amp;amp; Context Bloat
&lt;/h2&gt;

&lt;p&gt;This kind of work doesn't come for free. The more context you feed into your artificial intelligence, the more your API costs will increase, and your token budget will gobble up faster. Large, unstructured contexts not only cost more money; they also degrade the intelligence of the model, which will cause hallucinations and omissions. Here are some practical tips to keep the context small and costs down:&lt;/p&gt;

&lt;p&gt;Provide an Explicit File List: Never tell an agent to look across the project if it can be avoided. Explicitly pass a targeted list of files (e.g., src/features/auth/useSession.ts, src/types/user.ts). Restriction of scope reduces input token bloat dramatically.&lt;/p&gt;

&lt;p&gt;Before invoking any high-cost model or running any complex terminal commands, I outline the context, the objectives, and the file structure locally in Markdown. Tools like my own Hermes Markdown were designed for this exact state of flux—a simple, local-first place to get ideas organized without tracking or cloud friction.&lt;/p&gt;

&lt;p&gt;Fail Fast with Pre-Flight Guards: Use small, targeted checks (like a /smart-commit check) to catch basic errors, like debug statements or broken TypeScript signatures, &lt;em&gt;before&lt;/em&gt; launching expensive, multi-file context audits.&lt;/p&gt;

&lt;h2&gt;
  
  
  Are We Ready to Be Orchestrators?
&lt;/h2&gt;

&lt;p&gt;We are, no doubt, entering the era of the Markdown engineer. Writing programs is becoming less a question of syntax and more a matter of system design, domain knowledge, and interrogation skills. The future of software engineering is not to write faster, but to ask better, more difficult questions before there is any code.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwaredevelopment</category>
      <category>softwareengineering</category>
      <category>programming</category>
    </item>
    <item>
      <title>I spent a few years building my own markdown editor</title>
      <dc:creator>Mares Popa</dc:creator>
      <pubDate>Thu, 23 Jul 2026 20:05:04 +0000</pubDate>
      <link>https://dev.to/mares_popa_3990ccd18e1c5e/yet-another-markdown-editor-33ck</link>
      <guid>https://dev.to/mares_popa_3990ccd18e1c5e/yet-another-markdown-editor-33ck</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%2Fe6vdl343rsfzck5m8rgz.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%2Fe6vdl343rsfzck5m8rgz.png" alt=" " width="800" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I started &lt;a href="https://hermesmarkdown.com" rel="noopener noreferrer"&gt;HermesMarkdown&lt;/a&gt; back in 2023 as a personal tool — I just wanted a plain Markdown editor for my own notes, nothing more ambitious than that.&lt;/p&gt;

&lt;p&gt;I'm a software engineer by trade, and this was very much a side project: something to write in during evenings, not a product.&lt;/p&gt;

&lt;p&gt;It kept changing shape as my own habits changed. I rewrote the editor engine more than once, dropped features I'd added and regretted, and settled — slowly, not in one flash of insight — on a smaller idea than I started with: &lt;strong&gt;keep everything a plain file, keep the frontmatter predictable, and don't make the app the smart thing in the loop.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's the version of HermesMarkdown that exists today, three years and a lot of rewrites later. I wanted to talk about a few of the architectural decisions and trade-offs behind it.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. It runs in the browser but never touches a server
&lt;/h2&gt;

&lt;p&gt;This was the part I was most stubborn about. The editor uses the native File System Access API (&lt;code&gt;showDirectoryPicker()&lt;/code&gt;) to read and write a folder directly from Chromium-based browsers — no upload step, no account, and no third-party sync service in the middle.&lt;/p&gt;

&lt;p&gt;You open a folder, you're editing the actual files on your disk, and closing the tab doesn't lose anything because nothing was ever "in" the app to begin with.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The trade-off:&lt;/strong&gt; Firefox and Safari don't implement the File System Access API, so the vault picker is simply disabled there. I went back and forth on whether that was an acceptable cost for the architecture and decided it was — a tool that's local-first "most of the time" isn't really local-first.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  2. Frontmatter as a strict contract, not a feature
&lt;/h2&gt;

&lt;p&gt;The metadata schema is deliberately tiny:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Dev.to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Draft"&lt;/span&gt;
&lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;draft&lt;/span&gt;
&lt;span class="na"&gt;tags&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;architecture&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;webdev&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. No custom fields, no per-vault configuration. Every extra field is one more thing to fill in before you can start writing, and that's exactly the friction I was trying to remove.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;status&lt;/code&gt; key cycles through &lt;code&gt;draft → review → active → archived&lt;/code&gt; and stays in sync with a lifecycle tag inline in the document, so you can update it either from the frontmatter panel or by clicking the tag directly in the text.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. AI, only when you ask for it
&lt;/h2&gt;

&lt;p&gt;There's no default model baked in, and no AI running ambiently in the background. AI is an opt-in chat interface connected strictly to your own API key (Anthropic or Google Gemini) — nothing more, nothing less.&lt;/p&gt;

&lt;p&gt;A lot of modern tools default to the AI layer being always-on. For something that holds personal notes, I wanted the opposite: &lt;strong&gt;invisible until summoned.&lt;/strong&gt; Without an API key configured, zero note content ever touches a network request.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Built to never need a mouse
&lt;/h2&gt;

&lt;p&gt;The editor opens full-screen by default — no toolbar, no sidebar, and no clutter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Slash commands:&lt;/strong&gt; typing &lt;code&gt;/table&lt;/code&gt;, &lt;code&gt;/code&lt;/code&gt;, &lt;code&gt;/math&lt;/code&gt;, or &lt;code&gt;/link&lt;/code&gt; lets you insert elements quickly without touching a formatting bar&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Global palette (&lt;code&gt;CTRL+SHIFT+P&lt;/code&gt;):&lt;/strong&gt; a fuzzy-searchable list of every app-level action&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keyboard-driven tables:&lt;/strong&gt; sorting columns, inserting rows, and exporting as CSV all work purely through Tab, Shift+Tab, and arrow keys&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Dictation with a safety buffer
&lt;/h2&gt;

&lt;p&gt;Pressing &lt;code&gt;CTRL+SHIFT+V&lt;/code&gt; triggers speech input. Speech lands in an editable preview first — not directly into the note file — so you can fix misheard words before committing them.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Say "insert this" (or hit Enter) to commit text at the cursor&lt;/li&gt;
&lt;li&gt;Say "new paragraph" for line breaks, or "scratch that" to undo the last phrase&lt;/li&gt;
&lt;li&gt;It's transcription-only, keeping the focus entirely on plain text without unexpected formatting glitches&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. Minimal on purpose
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dual views:&lt;/strong&gt; switch seamlessly between rendered and source views — both editable, writing directly to the same file&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live inline rendering:&lt;/strong&gt; Mermaid diagrams and LaTeX math render live inline, but round-trip cleanly as plain fenced code and &lt;code&gt;$...$&lt;/code&gt; syntax on disk&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vault task management:&lt;/strong&gt; a centralized view aggregates every Markdown checkbox across your vault by status&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this is groundbreaking on its own — keyboard-first editors and voice dictation both exist elsewhere. What I was chasing was the combination: a clean writing surface that gets out of the way, stays a plain file on disk, and only adds AI when you explicitly ask for it.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's in your ideal Markdown setup?
&lt;/h3&gt;

&lt;p&gt;If you spend time in Markdown vaults and care about staying keyboard-first, I'd love to hear your thoughts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What shortcuts do you find missing in web-based editors?&lt;/li&gt;
&lt;li&gt;How do you handle sync or local file conflicts in your own workflow?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feel free to check out &lt;a href="https://hermesmarkdown.com" rel="noopener noreferrer"&gt;HermesMarkdown&lt;/a&gt; and let me know what you think!&lt;/p&gt;

</description>
      <category>markdown</category>
      <category>productivity</category>
      <category>tooling</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
