The case for plain-text notes in a git repo over a GUI note-taking app: one author’s daily workflow

Every six to eighteen months, a new note-taking app shows up that’s the one. Notion, Roam, Obsidian, Logseq, Mem, Reflect, Tana, Bear, Apple Notes (again, with new AI features), Craft, Capacities, the next-Notion. Some are great. None of them have helped me find the one note from three years ago I actually need this morning.

What has worked, for years now, is plain-text Markdown files in a git repo. Boring tools, boring format, no service to outlive me. This isn’t a “you should switch” piece — it’s a description of what one author’s day-to-day actually looks like and why I haven’t moved away from it. Take or leave the parts.

The structure

~/notes/
├── daily/
│   └── 2026/
│       └── 04/
│           └── 2026-04-29.md
├── projects/
│   ├── pen-ylo-one.md
│   ├── animatedcreativity-com.md
│   └── home-server.md
├── people/
│   ├── alex-cohen.md
│   └── pat-singh.md
├── reading/
│   ├── 2026.md
│   └── archive/
└── reference/
    ├── ssh-config-cheats.md
    ├── pf-rules.md
    └── docker-compose-templates.md

Five top-level folders, no deeper-than-three nesting. daily/ for journaled notes, one file per day, year-and-month subfolders so a single year’s worth of files doesn’t bog down a directory listing. projects/ for things actively in motion. people/ for context on people I’ll talk to. reading/ for what I’ve read and want to remember. reference/ for the cheat-sheet category — the SSH-options I always forget, the docker-compose template I copy from each new project.

Every file is Markdown. No frontmatter, no special metadata, no proprietary syntax. The filename and the folder ARE the metadata.

The daily file is the funnel

Every morning, the first thing I open is today’s daily file. If it doesn’t exist yet (it usually doesn’t until I write the first line), Vim creates it. The structure I always use:

# 2026-04-29

## Today
- [ ] ship the pen.ylo.one auth fix
- [ ] review the Ghostty migration thread

## Notes
- Talked to Alex about the new contract — see [[people/alex-cohen]]
- Vaultwarden vault size at 47 MB, no perf issues yet

## Links
- https://mitchellh.com/writing/ghostty-leaving-github
- https://example.com/article-i-want-to-read

## End-of-day
- shipped the auth fix, save now requires login
- skipped the migration thread, push to tomorrow

That’s literally it. Sections appear naturally as the day goes on. The unticked checkboxes from yesterday get glanced at and either get carried forward (copy-paste into today’s file) or deleted as no-longer-relevant. The “End-of-day” section is the only ritual — a 60-second wrap-up that turns a wall of partial thoughts into a status the future-me can scan.

Search beats hierarchy

I don’t categorize. I search. ripgrep across the whole notes directory finds anything in milliseconds:

# every mention of "vaultwarden" in the last year of notes
rg -i vaultwarden ~/notes/

# all the things I marked TODO this week
rg -i '\[ \]' ~/notes/daily/2026/04/

# every link I saved that contains "github"
rg -h 'https?://[^\s)]*github[^\s)]*' ~/notes/

# what was I doing on March 14?
$EDITOR ~/notes/daily/2026/03/2026-03-14.md

Most note-taking apps’ search is slower than ripgrep on flat-file Markdown. The killer feature isn’t the search syntax; it’s that there are no app-internal indexes to corrupt. If a query returns nothing, it actually doesn’t exist. That alone has saved me hours of “is this a search bug or did I never write it” debugging in proprietary tools.

Why git, specifically

Git is overkill for a personal notes folder, and that’s the point. What I get for free:

  • Time travel. “What did this file look like a year ago?” is git show HEAD~365:projects/pen-ylo-one.md. Notion has version history; Notion’s version history is locked behind a paywall and goes back 30 days unless you pay more.
  • Real backup. The repo is mirrored to two remotes (a self-hosted Forgejo and Codeberg). The threat model is “all three hard drives die simultaneously” — which means bring it on.
  • Honest sync between devices. Pull on the laptop, push from the phone (Working Copy on iOS makes this real). No proprietary sync engine, no merging-issues popup, no “your subscription has expired.”
  • Encryption is opt-in but available. A subset of files (financial notes, password hints, family stuff) live in a private/ directory that’s git-encrypted via git-crypt. The rest is plaintext, which is what I want for grep speed.

What this doesn’t do well

Honest list of where this approach falls short:

  • Wiki-style backlinks. Plain Markdown doesn’t auto-link. [[people/alex-cohen]] in my notes is a convention, not a clickable link in a renderer. Obsidian-style backlink discovery is a real productivity win and I don’t have it. The compensation: ripgrep works the same way for finding mentions, just less pretty.
  • Rich media. Pasted screenshots, audio recordings, attached PDFs — Markdown handles them awkwardly. I keep a ~/notes/_assets/ folder for images, link to them via relative paths, but it’s not a great workflow on phones.
  • Mobile editing of long documents. A 30-line daily note works fine in any iOS Markdown editor. A 500-line project document gets unwieldy on a small screen. I don’t pretend the phone is a primary editing surface.
  • Discoverability for things I’ve forgotten the name of. Without semantic tagging or AI search, I sometimes can’t find an old note because I’ve forgotten the keywords. The fallback is “open daily files from around the time I think it was.”

The case I’d make for trying it

The argument isn’t that plain text is better than every alternative. It’s that plain text outlives everything. Notion will be around in 2030, probably. I have notes from 2014 in this Git repo that I can still read, run grep against, and copy-paste from without opening any specific app. Every one of the GUI tools I tried in those years is either gone, paywalled into a different product, or has migrated its file format twice.

If you’re already happy in Obsidian or Logseq — both of which use plain Markdown under the hood — you’re already most of the way to the same posture. The only difference is whether the GUI is the core or the optional surface. For me, the absence of a required GUI is what makes the system robust. For someone else, the GUI’s polish is what makes them actually take notes. Both are valid.

Photo: Notebook with pen and pencil by Monicore on Pexels.

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.