Back to Lab
RAXXO Studios 8 min read No time? Make it a 1 min read

Why I Replaced Notion With 40 Markdown Files

Business
8 min read
TLDR
×
  • Migrated 600+ Notion pages to 40 markdown files in a weekend
  • ripgrep searches the whole archive in under 80 milliseconds
  • Claude Code reads the folder natively, no API or plugin
  • Total monthly cost dropped from 16 EUR to 0 EUR

I paid Notion for five years and called it my second brain. It turned out to be a rented brain, and the rent kept going up. Last weekend I exported everything, ran it through a cleanup script, and committed 40 markdown notes into a private git repo. I work faster now. Search is instant. My notes outlived the last app I trusted and they will outlive the next one.

Why Notion started failing a solo studio

The offline mode has been "coming soon" since I opened my account in 2019. On a train from Berlin to Hamburg I tried to edit a client brief and got a spinner for forty minutes. That was the first crack. The second was search. I had roughly 600 pages across six years of projects, and finding a specific paragraph took three to four seconds, assuming Notion guessed the right workspace. `ripgrep` on my laptop does the same job in 80 milliseconds against ten times the text.

The third crack was the AI rollout. I was paying 16 EUR a month and somehow I was also the beta tester. Every few weeks a new panel appeared, a toolbar shifted, a sidebar grew a button I did not ask for. I want my notes to be boring. Boring is the feature.

Export sealed it. I tried to pull a single project out as a backup and got a zip of HTML files with Notion-specific class names, broken internal links, and image URLs pointing at an S3 bucket I did not own. My data was mine in the way a hotel room is yours. You can sleep there, you cannot take the walls.

The 40-file structure that holds my markdown notes

I did not plan the number. I counted at the end. Forty files covers five active client projects, three RAXXO products, a studio operations folder, and a small personal layer. The tree looks like this.


studio/
  inbox.md
  weekly-review.md
  clients/
    acme-rebrand/
      brief.md
      notes.md
      deliverables.md
    nord-coffee/
      brief.md
      notes.md
  products/
    blueprint/
      roadmap.md
      pricing.md
      support-log.md
    center-this-div/
      ideas.md
      feedback.md
  ops/
    invoices.md
    contracts.md
    taxes-2026.md
  notes/
    reading.md
    writing.md
    tools.md

Every project gets a folder. Every folder has at most four files. The flat `inbox.md` at the root is where anything goes when I do not want to decide yet. The `weekly-review.md` is one long reverse-chronological log, one heading per week, bullets underneath. No database, no templates, no toggles. Plain headings and bullets, because that is all I ever used in Notion anyway.

The rule I follow: if a file grows past 500 lines, I split it. If a folder grows past six files, I split the project. Cheap discipline that keeps the tree readable by eye.

How I ported six years of data

Saturday morning, coffee, laptop. The process took about nine hours spread over two days.

Step one, export. Notion's markdown export is rough but usable. I selected each top-level page and hit "Export as Markdown & CSV". I ended up with a folder full of files named things like `Client Projects 8a7f2b9c.md`. Every filename carried a UUID suffix. Every linked page was a relative path with another UUID.

Step two, cleanup. I wrote a 30-line shell script that stripped the UUID suffixes, flattened the nested folders, and rewrote internal links to the new filenames. I ran it, read the diff, ran it again. No magic, just `find`, `sed`, and a text editor.

Step three, the hard part. I read every file. Yes, all of them. Six years of notes is less than you think when most of it is repeated quarterly plans and dead project ideas. I deleted roughly 70 percent of what I exported. Old meeting notes from clients I no longer work with. Draft posts that never shipped. Three separate attempts at a content calendar that lived one week each. The delete key was the real tool.

Step four, `git init`. Private repo on GitHub, one commit with the whole tree. I pushed it, pulled it to my second machine, and that was the migration. No migration service, no CSV intermediate, no paid tier.

Tools I use to read, write, and search these markdown notes

The whole stack fits on one screen.

  • **ripgrep** (`rg`) for search. `rg "invoice" ops/` finds every mention of invoices in ops files in milliseconds. I aliased `rgn` to `rg --type md` so I never grep binaries by accident.
  • **bat** for reading in the terminal with syntax highlighting. `bat clients/acme-rebrand/brief.md` when I am already in a shell.
  • **glow** for when I want the file rendered as pretty markdown without opening an editor. Mostly I use bat.
  • **VS Code** for editing, with three extensions: Markdown All in One, Paste Image, and nothing else. No Notion-style blocks, no slash commands, no AI autocomplete. Plain text in a monospace font.
  • **Claude Code** for anything that needs reasoning across files. This is the part that surprised me. Claude reads a folder of markdown files natively. No plugin, no API integration, no "connect your Notion workspace" dance. I point it at `studio/` and ask "what did I promise Acme for Q2", and it reads the brief, the notes, and the deliverables, and gives me the answer with file paths as citations.

That last one is why I will not go back. Notion's AI could only see what Notion let it see. Claude Code sees the actual files, the same way I do.

Daily workflow, one command at a time

Mornings start with the inbox. I open `inbox.md` in VS Code. It usually has six to twelve lines I dropped in the day before from my phone, my laptop, or a voice memo I transcribed. I read each line, decide which project folder it belongs to, cut and paste it into the right file, and delete it from inbox. Takes eight minutes on a normal day.

Then I run one command.


rg "TODO" studio/ --type md -n

That gives me every open TODO across every file, with line numbers. I triage. Most days I close three, add two, and move on. No dashboard, no widget, no synced database. A grep and a decision.

Fridays I open `weekly-review.md`, add a new heading for the week, and write five bullets. What shipped. What slipped. What the next week needs. I copy any unfinished TODOs forward by hand, because the friction of doing it manually is the feature. If a task is not worth retyping, it is not worth doing.

Once a quarter I archive. I create a `_archive/` folder, move any client project that is fully closed into it, and commit. The active tree stays small. The history stays complete.

What I lost, what I gained

Honest accounting matters here, so I will not pretend the move was free.

What I lost. Databases. Linked views. Calendar embeds. The "gallery" view for moodboards. The ability to share a single page with a client via a public link. Real-time collaboration, which I never used anyway because I work alone. Comments on specific blocks.

What I gained. Files I can read in 2045. Search that finishes before I finish pressing enter. Portability, because the whole studio fits in a 4 MB git repo that clones in two seconds on any machine I own. Version history through git, which is better than Notion's undo because I can diff two commits from three months apart and see exactly what I thought then versus now. No vendor lock. No subscription. No forced AI features. No load spinner on a train.

The biggest gain is one I did not expect. When my notes are files, every tool on my machine can read them. Claude Code. grep. cat. A tiny script I wrote in 20 minutes that counts words per project per month. Notion kept my data hostage to Notion's features. Markdown gives it back to every tool I will ever use.

I do miss the gallery view. About once a month. The rest of the time I do not think about Notion at all, which is the highest compliment I can pay a tool I replaced.

Bottom Line

Markdown files in git are not a productivity hack. They are the default state of text, and every SaaS app is an argument for why you should pay to escape that default. After five years I stopped paying. Forty files, one repo, zero monthly cost, and a system that will outlast whatever app is trendy in 2030.

Stay in the loop
New tools, drops, and AI experiments. No spam. Unsubscribe anytime.
Back to all articles