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 aliasedrgntorg --type mdso I never grep binaries by accident.bat for reading in the terminal with syntax highlighting.
bat clients/acme-rebrand/brief.mdwhen 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.
Top comments (0)