<?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>I spent 3 years building a local-first, zero-server</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>
