← BackBehavioral PWA · 2026

Inner Light

Every moment of awareness is a light you give yourself

Product Design · Behavioral Science · Vanilla Build · 2026

Inner Light

Problem

Naming a thought loosens its grip. Most apps put a paragraph in the way.

David D. Burns, in Feeling Good: The New Mood Therapy, codified one of the most-replicated findings in CBT: simply naming a cognitive distortion the moment you catch it loosens its grip on mood — before any rewrite or reframe. Most journaling apps bury that single move under worksheets and forms. Inner Light strips it back to two taps, five seconds, done.

Five fixed categories. No taxonomy to design.

Five fixed categories. No taxonomy to design.

Self-criticism, Comparison, Catastrophizing, Should-ing, Doubting — the five patterns CBT clinicians return to most. Pick one. The constraint is the design: no custom tags, no setup, no decision fatigue.

One tap to catch, one to undo

One tap to catch, one to undo

Catch a thought and a particle of warm light appears, the counter climbs, an undo chip lingers for a few seconds. No save button, no commit step. The whole interaction is reversible until you scroll past it.

The reward is the constellation, not the chart

The reward is the constellation, not the chart

Each catch is a single point of light drifting at the center of an otherwise empty screen. After a few days the zero quietly becomes a cluster of stars. No streaks, no graphs — visual reinforcement for noticing itself.

Over time

The empty zero becomes a constellation

0 — Day one

0 — Day one

A few catches in

A few catches in

82 — A few weeks in

82 — A few weeks in

Key Insight

Friction kills the catch

Burns's 'Identify the Distortion' technique has decades of CBT outcome research behind it, yet most readers of Feeling Good never sustain the practice — because the recommended Daily Mood Log takes too long in the moment. Every additional surface — a save button, a tag picker, a journal field — is a place where the impulse to label dies. Inner Light strips the app to its essential interaction: notice, tap, gone. The result is closer to a tally counter than a journal, which is exactly the point.

Stack & Tools

design

Figma

code

Vanilla HTML / CSS / JSAlbert SansService WorkerWeb App Manifest

infra

Dropbox static hosting

Reflection

What I’d revisit

The five fixed categories are intentional but limiting — some users describe patterns that don't fit cleanly. A future version would add a single 'Other' bucket with a free-text label, gathered as anonymous data to surface candidate sixth/seventh categories grounded in actual user language.