<?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: Parimal Mahindrakar</title>
    <description>The latest articles on DEV Community by Parimal Mahindrakar (@parimalmahindrakar).</description>
    <link>https://dev.to/parimalmahindrakar</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%2F4143756%2F815dae15-34c2-42ae-944e-0358fa8a514c.png</url>
      <title>DEV Community: Parimal Mahindrakar</title>
      <link>https://dev.to/parimalmahindrakar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/parimalmahindrakar"/>
    <language>en</language>
    <item>
      <title>I spent months building a markdown notes app and finally shipped it</title>
      <dc:creator>Parimal Mahindrakar</dc:creator>
      <pubDate>Sat, 26 Sep 2026 04:01:32 +0000</pubDate>
      <link>https://dev.to/parimalmahindrakar/i-spent-months-building-a-markdown-notes-app-and-finally-shipped-it-heres-the-whole-story-3boe</link>
      <guid>https://dev.to/parimalmahindrakar/i-spent-months-building-a-markdown-notes-app-and-finally-shipped-it-heres-the-whole-story-3boe</guid>
      <description>&lt;p&gt;So I've been sitting on this project for a while now and I think it's finally time to talk about it.&lt;/p&gt;

&lt;p&gt;I wanted a place to write. Not just dump text somewhere, actually &lt;em&gt;write&lt;/em&gt;, in markdown, with my notes organized the way my brain works. Folders inside folders, tags, links between notes. And then when I write something worth sharing, I want to just... share it. Without copying it into some other platform, without reformatting it, without fighting a WYSIWYG editor.&lt;/p&gt;

&lt;p&gt;So I built it myself. It's called &lt;strong&gt;&lt;a href="https://mdstack.in" rel="noopener noreferrer"&gt;MarkdownStack&lt;/a&gt;&lt;/strong&gt; and it's been the most fun and most frustrating side project I've ever worked on.&lt;/p&gt;




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

&lt;p&gt;At its core it's a markdown vault. You sign up, you get a private workspace. You write notes. You organize them into folders. You can link notes to each other with &lt;code&gt;[[wikilinks]]&lt;/code&gt;, tag things with &lt;code&gt;#hashtags&lt;/code&gt;, and search everything with a quick switcher (double-tap &lt;code&gt;P&lt;/code&gt; anywhere, stole that idea from every IDE I've ever used).&lt;/p&gt;

&lt;p&gt;The editor has a live preview mode where the rendered output is clickable, click anywhere in the preview and it jumps your cursor to that exact spot in the source. That one feature alone took me way longer than I'm comfortable admitting.&lt;/p&gt;

&lt;p&gt;Then there's the publishing side. Hit one button and your note is live at a public URL. Anyone can read it, no account needed. They can leave comments, upvote it. You can even publish a whole folder, every note inside it gets its own page with a navigation sidebar so readers can move between them.&lt;/p&gt;

&lt;p&gt;Oh and there's an AI chat thing now. Hit &lt;code&gt;C C&lt;/code&gt;, ask it to write a note on whatever topic, and it generates proper markdown and saves it straight to your vault. You bring your own API key so I'm not paying for your GPT-4 habit.&lt;/p&gt;




&lt;h2&gt;
  
  
  The stack, since everyone always asks
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Frontend:&lt;/strong&gt; React 18, Vite, Tailwind. No Redux or Zustand or anything like that, just React Context per feature. Kept it simple and honestly didn't miss a state library once.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Backend:&lt;/strong&gt; FastAPI with async SQLAlchemy on PostgreSQL. Full-text search is just &lt;code&gt;tsvector&lt;/code&gt;, no Elasticsearch, no Algolia, just Postgres doing its thing. JWT auth, email verification through Mailgun, Alembic for migrations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Infra:&lt;/strong&gt; AWS EC2 behind nginx, Docker Compose, GitHub Actions for deployments. Nothing fancy.&lt;/p&gt;

&lt;p&gt;There's also an MCP server so Claude and other AI assistants can interact with your vault directly as a tool. That one was a rabbit hole I did not expect to go down but here we are.&lt;/p&gt;




&lt;h2&gt;
  
  
  Things that nearly broke me
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The markdown renderer.&lt;/strong&gt; I'm using remark + rehype + highlight.js for syntax highlighting. Running that whole pipeline on every single keystroke was absolutely destroying performance on any note longer than a few hundred lines. The fix was splitting the content into discrete blocks and memoizing each one individually, so when you edit a paragraph, only that paragraph re-renders, not the entire note. Obvious in hindsight, painful to arrive at.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Async SQLAlchemy.&lt;/strong&gt; If you've used it you know. If you haven't, there's this error called &lt;code&gt;MissingGreenlet&lt;/code&gt; that happens when you try to access a relationship that wasn't eagerly loaded. It doesn't give you a great error message, it just explodes at runtime. The rule I eventually internalized: always use &lt;code&gt;selectinload()&lt;/code&gt; on every query that touches a relationship, no exceptions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Theming.&lt;/strong&gt; I spent a week going back and forth on how to handle dark/light mode before landing on CSS custom properties for everything. &lt;code&gt;--bg&lt;/code&gt;, &lt;code&gt;--text&lt;/code&gt;, &lt;code&gt;--accent&lt;/code&gt;, every color is a variable. Switching themes is one &lt;code&gt;data-theme&lt;/code&gt; attribute on the root element. Should've done this from day one instead of trying to use Tailwind's dark variant.&lt;/p&gt;




&lt;h2&gt;
  
  
  The thing I'm most proud of
&lt;/h2&gt;

&lt;p&gt;Honestly? The published folder experience. You publish a folder, you get a URL, anyone can open it and read all your notes with a proper sidebar navigation. It feels like a mini documentation site that required zero setup. I use it myself to share notes with people and it just works the way I always wanted sharing to work.&lt;/p&gt;

&lt;p&gt;Just for your reference : &lt;a href="https://mdstack.in/p/s/llmevaluations" rel="noopener noreferrer"&gt;https://mdstack.in/p/s/llmevaluations&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Go try it
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://mdstack.in" rel="noopener noreferrer"&gt;mdstack.in&lt;/a&gt;&lt;/strong&gt;, free to sign up, free to use.&lt;/p&gt;

&lt;p&gt;Write something, publish it, drop the link in the comments here. I want to see what people actually use it for.&lt;/p&gt;

&lt;p&gt;And if something's broken or you have a feature idea, tell me. I read everything.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>python</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
