Building a No Code Second Brain That Does Not Gaslight You
1. Naming conventions that do not make you want to scream
Let me just say: if your notes are titled things like meeting_notes_final2
or follow_up_with_john??
and your tags include both #project
and #Project
, your second brain is already lying to you. Before you even touch a tool: decide how stuff gets named. It sounds boring. It is boring. But trying to automate anything without this is like writing Python with random variable names you made up in the dark.
Here’s what I settled on after three failed Notion-Airtable combos:
- Notes:
YYYY-MM-DD Project Title - Type
(e.g.2024-05-03 AI Data Audit - Meeting
) - Tags: all lowercase, no pluralization
- Databases: always
Singular Noun + Vault
(e.g.Idea Vault
,Client Vault
) to avoid me misclicking in Zapier later
This also prevented a recurring glitch I couldn’t debug for weeks: Notion API would sometimes return null for databases titled with only emojis or symbols. That was extremely fun to discover only when my weekly content board failed to populate for no reason. I only confirmed this by switching title to text-only and watching the Zap fire reliably ever since.
2. Deciding where tasks actually live and forgiving yourself
The first time I tried this, I had tasks scattered between Notion, Apple Reminders, my Slack DMs to myself, and a mysterious Dropbox Paper doc from 2022. Here’s the most important thing: decide one place where they originate. Tasks can sync or mirror elsewhere. You just need one spot that you fully trust. Mine ended up being Todoist, even though I originally mocked it for looking like a productivity blog from 2014.
Here’s how I hacked together the rest:
- Airtable database = canonical source of client-related tasks. It links to projects, people, and status fields.
- Zapier sends new entries from Airtable → Todoist with a priority, label, and link back.
- Notion gets a synced rollup of overdue tasks via make.com so I can glance from my homepage.
The weirdest bug was a delay that only happened if the task title was over 256 characters. Zapier doesn’t flag it directly — it just silently skips the step. No error message. Just… nothing happens. I only found out because I put test-start-stop-hahaha
in a stupidly long note title and realized it never showed up in Todoist. That led to one of those cursed “why is this Zap randomly flaky only one-third of the time” sessions.
3. Detecting cherry-bomb notes that blow up your structure
You know that one note you copied from a Google Doc, pasted into Notion, and suddenly your sync scripts stopped working? Yeah, meet the cherry-bombs. Mine was a note someone shared via Google Drive comment, and I guess it embedded some crap formatting or invisible character sequences. Suddenly my Rollup tables stopped updating. Couldn’t filter by tag. Webhook still fired. Everything looked fine—but the filters stopped matching. Turned out the tags had a non-breaking space somewhere in there.
Quick way to catch these:
- Add a column to surface the raw tag text rendered as JSON
- Use
CHAR(160)
orREGEX_MATCH()
in Airtable to flag invalid whitespace - Make a dummy Zap that logs if the tag string length exceeds normal bounds
- Backup your tag values via CSV before merging or reprocessing tag fields
99% of the time it’s fine. Until it’s not and your entire knowledge base silently filters out half its tasks because a tag got corrupted with a zero-width joiner. Still mad about that.
4. Building a trusted daily dashboard that does not lie
I used to have a beautiful Notion homepage full of toggles and widgets and quotes. None of it worked. My goal was this: when I open the page in the morning, it should answer four things fast:
- What do I need to do today?
- What did I forget yesterday?
- Are any notes unread or unprocessed?
- Is anything broken?
So now I load a single Notion page with these blocks:
- A filtered view of Today’s tasks from Todoist (via make.com sync)
- Airtable synced list of notes modified in the last 2 days without a tag or topic
- Zapier row status table (I built a Google Sheet to log last 10 failed runs by name)
- Client highlights pulled from a shared Obsidian vault via Github API (this one’s sketchy and probably will break again)
Every few weeks, some sync fails silently. Like last week, the Notion API token expired, but the API still returned 200s. Everything looked fine. No data moved. I only noticed because my “new notes with tag none” stayed stuck at zero too long. Now I added a red emoji indicator that turns on if no records are added within 48 hours.
5. Capturing ideas before they decay in your phone notes app
Here’s the actual flow I use to capture fleeting thoughts, like blog titles, client ideas, random metaphors about plumbing, etc:
- Drafts app on iOS → hit widget, type, swipe for action
- Action sends content to Airtable “Idea Intake” base
- Zapier watches intake base, applies an AI auto-tagger (OpenAI via webhook)
- Once tagged, sends summary to Slack channel for later browsing
- Weekly, Notion embeds that base into my dashboard with filters
The gotcha here? Drafts will sometimes send the action twice if you accidentally swipe too long. Learned that when I had identical ideas labeled “raccoon analytics” created 20 seconds apart. Airtable auto-merge rules couldn’t save me. Had to add a deduping step that checks for near-identical content within a 2-minute submission window.
Also, the Slack summaries occasionally get formatted weird because OpenAI replies with triple newlines that Slack treats as infinite space. My current solution? A formula field in Airtable to trim whitespace before sending to Zapier. Don’t love it, but I trust it slightly more than asking GPT to play nice with formatting.
6. Linking notes without turning your system into a Wikipedia chain
I love note linking. Obsession-level. But too much connection spirals into confusion fast. I used to auto-backlink everything that mentioned a common term. That broke when I realized that “growth” was connecting VC strategy notes to my literal tomato plant updates.
Where linking helps:
- Recurring meetings → link them to ongoing project files automatically
- Client notes → connect via consistent tag (not @-mentions, they break stuff)
- Topics like “RAG” or “embeddings” → link to a single canonical explainer page
Everywhere else, manual linking is better. My biggest “aha” was implementing a Litellm endpoint that lets me prompt GPT to suggest 3 notes that might relate to whatever I’m writing. Embedded that into a shortcut that runs from Obsidian. Now I click a hotkey, paste my in-progress idea, and get back suggestions with links to my existing vault.
That shortcut failed a lot until I remembered Obsidian doesn’t expose file titles via plugin API in real-time unless the file is already opened in the editor. Dumbest edge case. Took me a week of blaming the model.
7. Implementing spaced reviews without another broken task loop
Obsessed over this one for weeks. I wanted a review system that regularly surfaces notes I haven’t seen in a while. Ankified, but casual. The temptation is to rebuild spaced repetition. Don’t. The better method: soft bump logic.
Here’s how I hack it now:
- Every note in my “Knowledge Vault” has a
last_reviewed_date
- Airtable script runs daily and marks 3 notes for review (shortest time since last seen)
- Those entries get posted into a Slack DM from a bot as “Check these out again?”
- When I re-open the note in Obsidian, a plugin updates the modified date and logs a view
The first version completely failed because my script in Airtable tried to run updates while another automation updated links — the lock conflict meant some review fields never wrote. Now I batch all changes in the last step, and it’s been solid for weeks.
It still breaks if I leave Obsidian open while also running edits on mobile. The vault sync doesn’t conflict-resolve late edits in the same way. The trick has been not trusting iCloud for anything involving timestamp logic. Whenever possible, use JSON exports instead of live sync. Means everything takes 2 minutes longer, but the logs don’t lie.