DEV Community

Cover image for How I Built a CBT Thought Record in Notion (With a Free Template)
473185670
473185670

Posted on

How I Built a CBT Thought Record in Notion (With a Free Template)

Why a Developer Needs a Thought Record

Last year I hit a wall. Not a bug, not a deployment failure — a cognitive wall. The kind where you ship a fix at 2 AM, stare at the green CI check, and still feel like an impostor who got lucky.

My therapist suggested something old: a CBT thought record — a 7-column worksheet from cognitive behavioral therapy that catches distorted thinking before it spirals. It works. But paper worksheets get lost, and I already live in Notion.

So I built one. This post walks through the structure — Notion properties, relations, and rollups — so you can either copy mine or build your own.

TL;DR — I packaged this as a ready-to-use Notion template ($7). There's also a free preview here if you just want to look around.


What Is a Thought Record?

A thought record is the core homework tool of CBT. When you feel a sudden spike in anxiety, anger, or sadness, you pull it out and fill in seven columns:

# Column What you write
1 Situation What happened? (Just the facts)
2 Emotions What did you feel? Rate intensity 0-100
3 Automatic thoughts What went through your mind?
4 Cognitive distortion Which of the 10 distortions fits?
5 Evidence for What supports the thought?
6 Evidence against What contradicts it?
7 Balanced thought A fairer, alternative interpretation

The magic is in columns 4–7. Most spirals die there. You write "I'm going to get fired" (catastrophizing), look for evidence against, realize your last 3 reviews were "exceeds expectations," and land on "My manager asked for a 1:1 — that's normal, not a PIP."


The Notion Structure

I used two databases with a relation — one for thought records, one for cognitive distortions (a reference table). Here's the setup:

Database 1: Thought Records

Property Type Notes
Date Created time Sort descending
Situation Text What happened
Emotion Multi-select anxious, angry, sad, guilty, ashamed
Intensity Number 0–100 scale
Automatic Thought Text The hot thought
Distortion Relation → Distortions Pick from reference
Evidence For Text
Evidence Against Text
Balanced Thought Text The reframe
Outcome Emotion Multi-select Re-rate after
Outcome Intensity Number Should drop
Intensity Drop Rollup / Formula Intensity - Outcome Intensity

That last rollup is the satisfying part. You fill in the record, re-rate your emotion, and Notion shows you the drop. Seeing "42" in green next to a completed record is a small dopamine hit that reinforces the habit.

Database 2: Distortions (reference table)

Property Type
Name Title
Definition Text
Example Text
Common in devs Checkbox

I pre-loaded the 10 classic distortions (Burns, 1980). The ones I flagged "common in devs":

  • All-or-nothing: "If this PR isn't perfect, I'm a bad engineer."
  • Catastrophizing: "This bug in prod → I'm fired → I'm unemployable."
  • Mind reading: "My reviewer left a comment, they think I'm incompetent."
  • Should statements: "I should know this already, I'm senior."
  • Impostor "labeling": "I got lucky, I'm a fraud."

The Formula That Ties It Together

The Intensity Drop property uses a rollup + formula:

// Rollup: max of Outcome Intensity (via self-relation not needed — same row)
// Formula:
prop("Intensity") - prop("Outcome Intensity")
Enter fullscreen mode Exit fullscreen mode

If you want it to show a colored badge:

if(prop("Intensity Drop") > 30, "✅ Big win", 
  if(prop("Intensity Drop") > 10, "🙂 Helped", 
    if(prop("Intensity Drop") > 0, "🤔 Small shift", "⚠️ Revisit")))
Enter fullscreen mode Exit fullscreen mode

The 5-Minute Habit

The template includes a daily check-in view — a filtered board showing today's records. The goal isn't to fill one out every day. It's to fill one out within 90 seconds of noticing a spiral.

My rule: if I notice an intensity spike above 60, I open Notion before I open Slack. The record takes 3–5 minutes. By the time I hit "Balanced Thought," the spike is usually below 30.


Does It Work?

I'm not a clinician, and this isn't a substitute for therapy. But anecdotally, over ~80 records:

  • My average intensity drop is 34 points (start 72 → end 38).
  • The distortions I fall into most: catastrophizing (41% of records) and mind reading (23%).
  • The most effective reframe pattern: "This is a normal part of the job, not a verdict on me."

Having the data in Notion means I can see my own patterns. That meta-awareness is its own kind of therapy.


Get the Template

If you build your own from this post, I'd love to see how you extend it — drop a comment.


If you found this useful, I write about developer tools and occasionally developer wellness. Follow for more.

Top comments (0)