I have been looking for the perfect note-taking app for sixteen years.
I can now tell you with certainty that it doesn’t exist, that I’ve tried all of them, and that the answer was a folder of text files the entire time. I can also tell you that knowing this would not have helped, because the folder of text files needed a search tool, and the search tool needed a blog engine, and the blog engine needed a wiki, and now I have 73,000 lines of code across two platforms and an iPhone app that tracks my grocery tasks with smart date bucketing.
This is the story of the search. And of the thing I accidentally built when I stopped searching.
The Mountain
Every PKM migration follows the same script. Month one: discovery, euphoria, seventeen YouTube videos. Month two: setup, configuration, empty perfection. Month three: friction. Month four: a new tool. Repeat for sixteen years.
My trail:
| Year | Tool | What I loved | Why I left |
|---|---|---|---|
| 2010 | Evernote | Capture everything | Never found anything |
| 2019 | Roam Research | Bidirectional links | The temple emptied |
| 2020 | Obsidian | The file is the truth | 40 plugins is not simplicity |
| 2020 | Logseq | Open source Roam | Three formats in a trenchcoat |
| 2021 | Notion | Beautiful databases | I’m a team of one |
| 2021 | Apple Notes | Zero friction | (I never actually left) |
| 2021 | Mem | AI-native vision | No dark mode (my eyes) |
| 2022 | Tana | Supertags | The supermarket closed 3 hours ago |
| 2022 | NotePlan | Almost everything | The container, the UI density |
Nine tools. Sixteen years. Hundreds of hours configuring systems that were supposed to save time. And through every single migration, 200 notes sat undisturbed in Apple Notes — the Wi-Fi password, the doctor’s number, the thing my son said that one time — surviving because I never thought to migrate them, which is the only thing that saved them.
The pattern, obvious in retrospect: every tool got one thing right and everything else wrong. Evernote nailed capture but forgot retrieval. Roam nailed linking but forgot shipping. Obsidian nailed files-as-truth but forgot simplicity. Notion nailed aesthetics but forgot that I’m not a team. And NotePlan — NotePlan got almost everything right.
NotePlan is the love letter. Tasks and notes in the same markdown file. Daily notes that open when you open the app. Calendar integration. Full-text search. Built by one developer who uses it every day. It has everything.
Almost.
The files are on disk — real markdown — but they’re inside a macOS application container. ~/Library/Containers/co.noteplan.NotePlan-setapp/Data/Library/Application Support/.... Which means Claude can’t touch them without triggering every Apple security dialog in existence. Sandbox alerts, permission prompts, full disk access requests — the kind of dialog cascade that makes you wonder if you’re installing malware on your own machine. The files were technically there. They were practically in a vault.
And the interface. NotePlan does everything — tasks, calendar, notes, reviews, tags, filters — and it shows you all of it. The screen is busy the way a cockpit is busy: everything is necessary, everything is labeled, and you still can’t find the thing you need because there are forty things you don’t. For someone with ADHD, a busy interface isn’t a feature list. It’s a distraction generator.
So NotePlan stayed. The daily notes, the tasks, the markdown — all of it. But the files needed to be reachable. A symlink from ~/Notes/ to the container. And the files needed to be findable. An index. A lens.
The answer was never a better tool. The answer was the folder that already existed — once you could get to it.
The Monday
On March 3, 2026, I stopped looking for the perfect PKM app and built a search command instead.
Not an app. Not a platform. Not a startup. A CLI tool that reads markdown files from ~/Notes/, puts them in SQLite with FTS5, and finds things. Six commits. One Monday. Two hundred milliseconds to index everything.
I named it lg. It was supposed to be grep with a database.
It was grep with a database for approximately forty-eight hours.
The Beanstalk
The thing about a working simple system is that it reveals the next need. Not the next want — the next need. And if you’re disciplined enough to only build what’s needed, each addition is small, testable, and correct. And if each addition works, it reveals the next next need.
March 3: Notes indexer ← I need to search my notes
March 3: Cover art generator ← The blog needs covers
March 5: Blog server ← The covers need a website
March 5: Wiki server ← The blog needs an encyclopedia
March 7: Content sync ← The wiki needs to deploy
March 14: NATS JetStream sync ← The HTTP sync is fragile
March 14: Git auto-commit ← The files need memory
March 15: Chat agent ← The journal needs a voice
March 17: Video generation ← The blog should move
March 17: TTS narration ← The articles should speak
March 27: iOS app ← I want to check tasks on my phone
March 27: Task date awareness ← The tasks need due dates
March 27: Task action dialog ← The tasks need rescheduling
Each line is a single need. Each need produced a working feature. Each feature revealed the next need. At no point did anyone design the final system. At no point did the final system exist as a plan. The 73,000 lines of code across Go and Swift are the accumulated output of “what’s the next thing that’s actually needed?”
This is Gall’s Law running to completion: a complex system that works, evolved from a simple system that worked. The search tool became a blog became a wiki became a sync engine became a second brain became a mobile app. Each transition was one commit. Each commit was one need.
The Irony
The irony is not subtle.
I spent sixteen years trying every PKM tool. I built elaborate systems in Notion. I configured 40 Obsidian plugins. I designed Zettelkasten workflows. I migrated data between nine applications, losing formatting at each step like a document photocopied twelve times.
Then I built a search command for a folder of markdown files, and it grew into everything I’d been looking for — organically, accidentally, in twenty-four days.
The tool I built has: full-text search, backlinks, frontmatter queries, a task manager with four states and three date types, a blog engine, a wiki, cover art generation, AI chat, and a native mobile app. It has everything I configured Obsidian to do, everything I wished Notion could do, everything Roam promised, and everything NotePlan didn’t have.
And it still thinks it’s a notes indexer.
The PKM Map of Content documents the species of PKM practitioners: the Hoarder, the Tool Migrant, the Architect, the GTD Purist. I was the Tool Migrant — nine tools in sixteen years, each migration producing a blog post titled “Why I Switched.” The Tool Migrant’s actual need was a text file. The Tool Migrant’s actual problem was the belief that the tool was the bottleneck.
The tool was never the bottleneck. The notes were always there. The notes just needed an index.
The Pocket Amendment
Zawinski’s Law says every program expands until it can read mail. The Chatbot Corollary (March 15) says they now expand until they can hold a conversation. On March 27, I propose the Pocket Amendment:
The Pocket Amendment: Every program that can hold a conversation will continue to expand until it fits in a pocket. At that point, the developer will not notice that the notes indexer has become an operating system.
lg’s trajectory: notes indexer → blog engine → publishing platform → sync engine → second brain → mobile app. In twenty-four days. From one Go binary that reads a folder.
The Caffeinated Squirrel proposed Kubernetes. The Squirrel was given SQLite.
The Lesson (If There Is One)
Stop looking for the perfect tool. The files are already there. They’ve been there the whole time — in ~/Notes/, in Apple Notes, in that one text file on your desktop you’ve been meaning to organize. The files don’t need a perfect app. They need a lens.
Build the lens when you need it. Build only what you need. Each working version will tell you what to build next. The complex system will emerge. You will not design it. You cannot design it. You can only earn it, one Monday at a time.
The Lizard has been at grep since 1976. The Lizard was right.
But the Lizard doesn’t have an iPhone app. I do.
See Also
- lg
- PKM Map of Content
- Personal Knowledge Management
- NotePlan
- Gall’s Law
- Zawinski’s Law
- The Homecoming — The Three Days a Palace Was Built From Markdown and SQLite
- The True Second Brain, or The Night the Lens Learned to Listen