How I Actually Built a Second Brain That Didn't Fall Apart

How I Actually Built a Second Brain That Didn’t Fall Apart

1. Setting up a central capture system that actually gets used

Everyone’s got a favorite tool for capture. Mine was Notion, until it wasn’t. Too many steps. Click New, pick the template, type into the right field, tag it, forget why I opened it… By the time I captured the idea, I lost the context. So I ditched the polished dashboards and just hooked up a quick note shortcut in Obsidian synced to Dropbox. On phone and desktop, I can hit one hotkey, jot a thought, and bail. No tagging. No friction. Just gets in.

The logic here is dumb on purpose. A single folder. The script adds a datetime stamp into the filename, then opens the file for me. That’s it. I later pull and sort these using Dataview queries or, if I’m not at a desk, that little Shortcuts thing on iPhone to surface yesterday’s captures based on file names.

One bug I hit: when using Obsidian’s mobile file sync plugin, new notes created via Shortcuts sometimes didn’t show up in search on desktop until I manually ran a rescan. Turns out, iOS writes the file metadata but doesn’t trigger the vault refresh unless you open the file inside Obsidian. Made a little Launch Agent script on macOS to poke the vault folder periodically so I don’t even think about it anymore.

2. Making backlinks meaningful instead of decorative

Everyone talks about note linking like it magically makes your second brain smart. But unless you build some personal rules around how your notes connect, you’ll end up with a tangled mess of the word “productivity” pointing to every vague thought you’ve ever had. I hit this when exporting some early Notion notes to Obsidian — dozens of [[Time Management]] links that went nowhere.

What I do now is only use backlinks selectively — I never link to generic concepts. If a note sparks a link, I force myself to either:

  • Reframe the link with a sentence like “This reminds me of [[When I disabled Twitter permanently]]”, or
  • Not link it at all and just mention the other idea inline

The “aha” moment was when I realized the backlink graph wasn’t useful until the relationship contained *why* one idea connected to another. I don’t want a knowledge spiderweb — I want a trail of breadcrumbs from thought to thought.

3. Fixing daily note templates that break silently

I built a daily dashboard in Obsidian that pulls tasks from files, includes in-progress writing project notes, and gives me context-specific links for recurring workflows. Every morning, I have a hotkey that spins up a new daily note with that day’s structure.

Except here’s the catch: the moment I renamed a single folder inside the templates system, the entire dashboard stopped working. No errors. Just empty blocks. It took me a full morning to find this: one YAML frontmatter tag had an indent that broke the query without showing it. I changed a line from:

tags:
  - daily

…to:

tags: [daily]

and boom, everything came back.

I’ve since added a “template test” note with the same queries I use in my real dashboards, specifically for debugging broken queries. I check this every couple of weeks. If it’s empty, I know something silently broke again.

4. Automating inbox sweep into permanent notes

Too many capture notes turn into “Someday HTML graveyards” unless you automate triage. I use a once-daily Zapier automation that runs on a schedule to export all new notes in my capture folder, pulls out the first line as the title, and dumps it into Airtable. From there, it’s easier to drag them into buckets like “Idea for writing,” “Need to test,” or “Trash it.”

The weird edge case: when you edit an old capture note briefly — heck, even just updating the title — Zapier thinks it’s new again because Dropbox updates the modified timestamp. So yes, I had multiple entries for the same idea flooding the Airtable board until I set a safe regex on filenames to ignore anything older than 24 hours post-created date. Not perfect, but good enough.

If you’re not into automating this via Dropbox, Zapier can pull from Notion databases too — but just count on breaking once a month as the API randomly changes behavior around rich text fields. I had a 5-line Zap that used to work fine until it randomly turned my paragraph fields into block arrays one day.

5. Connecting calendar notes with real context hooks

After trying “daily agenda” blocks in three separate tools, I finally got a flow that sticks. I export all my calendar events at 6am into a structured list using AppleScript on Mac. That list is then pushed into my daily note in Obsidian. Each meeting line becomes a collapsible heading like:

- 10:30am — Project sync with Taylor
  - [[Meeting notes — project sync April 4]]
  - Prep: [[Key takeaways from last OKR review]]

This made meeting prep a lot more useful — I can reference the relevant linked notes, drop new bullets live, then collapse the entire thing after. Brief moment of technical weirdness: Apple Calendar doesn’t expose some event attendees to script unless you run the automation under a full accessibility-enabled script runner. I had to build a Shortcuts → AppleScript bridge with manual code signing to get the full event details. Took longer than it sounds.

Now when a meeting shifts last-minute, I don’t regenerate the whole file — just run a little append script that updates that slot. Clean, fast, minimal duplication.

6. Surfacing my most-used notes using a janky SQLite hack

Okay, so this one’s not officially documented: Obsidian’s “recent notes” are stored in a local SQLite database inside the .obsidian hidden folder. It tracks open counts, and with a quick SQLite query, I built a custom dashboard of what I actually read.

One of the files it monitors is called `workspace.json`, but the actual note open counts are tied deeper inside the `.obsidian/workspace` store — meaning when you open a second vault, it wipes the stats. Learned this the hard way after creating a fresh test vault and accidentally overwrote all usage data. If you want to hack this, back up the folder first.

The query I use (with `sqlite3`) looks roughly like:

SELECT file, COUNT(*) as opens FROM usage_stats 
GROUP BY file ORDER BY opens DESC LIMIT 10;

…which I run on a cron job and output to a Markdown file. This gives me a rolling view of “10 most accessed notes this week” — which I pin to the top of my workspace. Honestly, more useful than the graph view. As one random forum post said: “Your second brain should show what you’re actually thinking about.”

7. Handling images and attachments without everything melting down

Every second brain system eventually faces the same problem: where do you put non-text stuff? Especially images, PDFs, or the occasional audio memo. Obsidian doesn’t love large file previews. Notion handles it better visually but slows down when you hit dozens of files per page.

I landed on this flow:

  • Snap a photo or save a file to /SecondBrain/Assets/Inbox
  • A Hazel rule on Mac auto-renames it using timestamp + OCR-detected keyword from text (using PDFPen)
  • A script runs every night moving anything untouched after 48 hours into an “Archived Assets” folder

The piece that took too long to debug: Hazel’s OCR sometimes failed silently when PDFPen hit malformed image PDFs — particularly those scanned from old books. No error, but the file name stayed generic like “scan123.pdf”. I added a fallback: if the name still starts with “scan” after OCR, it flags the file with a red tag so I know to check it manually.

8. Avoiding system rot by forcing weekly review artifacts

Let’s be honest: most second brain setups die because people stop looking at them. I made mine survive by building in something that slaps me in the face weekly. Every Friday, I generate a special note with:

  • All notes created or edited in the past 7 days
  • All tasks still incomplete
  • Three randomly selected old notes for re-review

This is auto-generated with a chain of Obsidian Templater scripts and Dataview queries. Occasionally, the script fails if I forget to wrap my YAML properly (yes, again). For example, if I have:

created: 2024/04/07

instead of:

created: 2024-04-07

…Dataview skips it silently. No log, no warning. Learned to add a fallback default date parsing rule inside my script now.

The review note then prompts me to answer: “What am I actually thinking about?” It’s corny, but honestly it works. If nothing comes to mind while reviewing recent notes, I know I’m either not noting what matters, or… it was a boring week.