The Problem Nobody Talks About: Your Best Ideas Happen When You Can't Write Them Down
It's 2 AM. You're lying in bed, finally on the edge of sleep after staring at your phone for an hour. Then it hits—that perfect idea for a project, a solution to a problem you've been stuck on for days, or the opening line of something you've been meaning to write.
Your phone is right there. You could grab it. Pull up Notes. Type something. But you won't. Not really. Because the moment you unlock that screen, you're awake. The blue light kills the melatonin your brain was just starting to produce. Your mind suddenly remembers that work email you haven't answered. That one Slack message that's been bugging you all day. The clock glares at you: 2:47 AM.
You're not sleeping now.
This is the exact problem a screenless thought-capture device solves. And the version people are actually building right now combines a Raspberry Pi, some basic hardware, and Notion automation to create something genuinely useful—not because it's high-tech, but because it's the opposite.
You press a button. You speak. Your idea gets saved somewhere safe. You go back to sleep. That's it.
This isn't science fiction. It's something you can build yourself in an afternoon for under $60. And honestly? It might be the most useful AI gadget actually worth owning.
TL; DR
- Screenless recording device uses Raspberry Pi Zero W ($10) + microphone + physical button to capture voice memos
- No phone required - eliminates the distracting glow and notification problem of your smartphone
- AI transcription converts speech to text using services like Deepgram, Whisper API, or local models
- Notion integration automatically saves transcriptions to a structured database with tags and timestamps
- Cost under $60 for a fully functional system that works without internet after initial setup
- Solves real problem - captures inspiration at the moment it strikes without the sleep-disrupting side effects of reaching for your phone
- Customizable - you can add buttons for different categories, adjust microphone sensitivity, or change your backend database


The Deepgram API offers the fastest transcription speed at 2 seconds per file, with a cost of $0.005 per minute. Local software is slower but free, while a hybrid solution balances speed and cost. Estimated data.
Why This Actually Works: The Science Behind Distraction-Free Capture
Research on sleep disruption consistently shows the same pattern. When you reach for your phone in the dark, two things happen almost immediately. First, the blue light wavelengths suppress melatonin production by 50-70%, the most dramatic effect occurring in the 460-480nm range. Second, and arguably more damaging, your brain enters what neuroscientists call context-switching mode.
Context switching is expensive. When you shift attention from Task A to Task B, your brain doesn't instantly jump over. It leaves a residue. Studies from the University of California, Irvine found that it takes an average person 23 minutes and 15 seconds to fully return to their original task after an interruption. But when you unlock your phone at 2 AM, you're not just interrupting sleep. You're flooding your cortex with competing stimuli.
The notification red badges alone trigger dopamine release patterns similar to slot machine wins. Your brain recognizes the pattern: Check phone. Might have a message. Might not. It's variable reward, the most addictive form of reinforcement.
A screenless device removes all of this at once.
No light. No notifications. No possibility of accidentally opening an app. You have one function: capture the thought and return to sleep. Your nervous system stays in recovery mode. Your circadian rhythm stays intact. Your brain gets the feedback—idea is safe, brain can relax—without the disruption.
This also matters for idea retention. Researchers at the Max Planck Institute found that writing down an idea immediately increases recall by 42% compared to trying to remember it later. But they also found that the act of knowing an idea will be recorded increases recall by 31%, even without writing. Your brain relaxes when it trusts the system. A dedicated device that only captures ideas becomes that trust mechanism.


The Raspberry Pi Zero 2 W consumes between 1.2 and 3.8 watts depending on the operation, making it an efficient choice for continuous use.
What You're Actually Building: The Hardware Breakdown
The beauty of this project is that it's deliberately simple. You need exactly four components, maybe five if you want to be fancy.
The Brain: Raspberry Pi Zero 2 W
The Raspberry Pi Zero 2 W ($10-15) is the foundation. You could technically use the original Zero W, but the 2W's quad-core processor handles speech-to-text transcription without becoming a bottleneck. The entire device is smaller than a car key fob. You don't need GPIO pins. You don't need a fan. You just need Linux, Wi Fi, and enough horsepower to run a Python script.
Why not a full Pi 4? Cost, heat, power consumption. Why not a phone? Because your phone has 47 other things fighting for your attention.
The Raspberry Pi Zero 2 W draws approximately 1.2 watts at idle, 2.5 watts during Wi Fi data transfer, and 3.8 watts during transcription processing. If you're running this 8 hours per day on a 5,000 m Ah battery, you're looking at roughly 8-12 days between charges using a standard USB power bank. Most people wall-plug it on a nightstand, so power isn't a constraint.
The Ear: A Simple USB Microphone
You need something that captures your voice clearly in a quiet room. A cheap USB condenser microphone ($15-30) does the job. Brands like Fifine, Audio-Technica AT2020, or even basic webcam mics work fine. You're not recording an album. You're capturing speech in a 1-meter range.
For a bedside device specifically, consider a boundary microphone (also called a flat condenser). These are designed to sit flat on a surface and pick up sound evenly from all angles. Some people build this into a small enclosure; others just clip a basic USB mic to the Raspberry Pi.
The Pi Zero 2 W has a USB port. Plug the mic in. Done.
Microphone specifications you care about: -40 d BFS sensitivity (roughly standard), 50-16,000 Hz frequency response (human speech is 85-255 Hz, so anything wider is fine), and USB powered (you don't want separate batteries). Most USB condensers draw 50-100 m A, well within the Pi's power budget.
The Switch: A Physical Button
You need a way to start recording without touching anything except one button. A mechanical push button ($1-5) connected to a GPIO pin is the standard approach. Solder it to pins 3.3V and GPIO pin 17. Add a 10kΩ pull-down resistor (99 cents) to prevent electrical noise from triggering false records.
Alternatively, use a USB foot pedal (people use these for transcription work) if you want hands-free operation while keeping your hands on the keyboard. Or mount a wireless button (RF or Bluetooth) if you want the device across the room.
What matters: the button should require deliberate action. You're not taking a thoughtless voice memo. You're committing to capture an idea. That friction is part of the system.
The Box: Enclosure Design
You could leave all this exposed. Many hobbyists do. But a small plastic enclosure ($8-12, available on Amazon or Etsy) makes it feel finished. Drill holes for the button and microphone. Run USB power in through a port. Route the microphone connection cleanly. Suddenly, it looks like an actual product instead of a breadboard project.
Enclosure specs: 3x 3 inches is plenty of space. ABS plastic is fine. You want something you won't be embarrassed to put on your nightstand.
Total hardware cost: $45-65 for the whole thing. Cheaper than a single month of some subscription services.

The Software Brain: How It Actually Captures and Stores Your Thoughts
This is where it gets genuinely smart. The software layer does three things: record, transcribe, and store. But here's the key—most of the heavy lifting happens asynchronously. You press the button, the device records immediately, and then it can take its time transcribing and saving.
Step 1: Local Recording and Buffering
When you press the button, a Python script using Py Audio (or Pulse Audio on Linux) starts capturing raw audio data into memory. You don't need a database for this. It's just a byte stream being accumulated into a buffer.
The script records for a default of 60 seconds (user can press the button again to stop early). After 60 seconds, it auto-stops. This prevents accidentally leaving the device recording while you sleep. Everything is saved as a WAV file to the local filesystem at /home/pi/recordings/.
The entire process is interrupt-driven. No polling. No waste. The Raspberry Pi sits idle at 0.8% CPU until you press the button, then it immediately springs to life.
Step 2: Speech-to-Text Transcription
Now you have a WAV file. You need text. You have three options, each with trade-offs.
Option 1: Deepgram API (Cloud-Based, Fastest)
Send the audio file to Deepgram's API and get back a JSON response with the transcription in under 2 seconds. Deepgram costs roughly
Code sketch:
pythonimport requests
import json
with open('/home/pi/recordings/idea_001.wav', 'rb') as audio_file:
headers = {'Authorization': f'Token {DEEPGRAM_API_KEY}'}
response = requests.post(
'https://api.deepgram.com/v 1/listen?model=nova-2&smart_format=true',
headers=headers,
data=audio_file
)
transcript = response.json()['results']['channels'][0]['alternatives'][0]['transcript']
print(transcript)
The smart_format=true parameter is key—it tells Deepgram to capitalize properly and add punctuation instead of giving you a wall of lowercase text.
Option 2: Open AI Whisper API (Reliable, Slightly Slower)
Whisper is the mature option. Open AI trained it on 680,000 hours of multilingual audio. It's nearly impossible to fool. Costs roughly $0.02 per minute of audio.
pythonimport openai
with open('/home/pi/recordings/idea_001.wav', 'rb') as audio_file:
transcript = openai. Audio.transcribe(
'whisper-1',
audio_file,
language='en'
)
print(transcript['text'])
The tradeoff: slightly slower (3-5 seconds instead of 2 seconds) but rock-solid accuracy.
Option 3: Local Model with Faster Whisper (Free, Slower)
If you want zero cloud dependency and don't mind waiting 10-15 seconds, Faster-Whisper (a quantized implementation of Open AI's model) runs locally on the Pi Zero 2 W. Your recordings never leave your house.
pythonfrom faster_whisper import Whisper Model
model = Whisper Model('base', device='cpu', compute_type='int 8')
segments, info = model.transcribe('idea_001.wav')
transcript = ' '.join([segment.text for segment in segments])
print(transcript)
First load takes 30 seconds. Subsequent transcriptions take 10-15 seconds. Storage cost is about 400 MB on your Pi's micro SD card.
The Recommendation: Use Deepgram or Whisper API for a personal device. You'll get near-instant feedback ("Transcription complete"), you'll have a backup copy of your audio in the cloud (disaster recovery), and the cost is trivial.
Step 3: Notion Automation and Organization
Now you have a transcription. You need to store it somewhere you'll actually use it. This is where Notion's API becomes magical.
Notion databases let you structure information with properties. Create a database called "Thought Captures" with these properties:
- Idea (Title): The transcribed text
- Timestamp: When it was recorded (ISO-8601 format)
- Category (Select): Optional tag like "Writing", "Work", "Product", "Personal"
- Status (Select): "New", "Reviewed", "Implemented", "Abandoned"
- Audio URL (URL): Link to the WAV file stored in cloud (Dropbox, S3, or just local)
- Confidence (Number): Speech-to-text confidence score if your API provides it
When you press the button on your device, the flow looks like:
- Record 60 seconds of audio →
idea_20250315_0243.wav - Transcribe with Deepgram → "The thought-catcher device is solving the 2 AM phone problem, and people want this."
- POST request to Notion API with that text as the title
- Notion database adds a new entry with timestamp, status = "New", category = empty
- You wake up in the morning, flip open Notion, and your thoughts are waiting with time stamps
pythonimport requests
from datetime import datetime
NOTION_TOKEN = 'secret_xxxxx'
DATABASE_ID = 'xxxxx'
def create_notion_entry(transcript, audio_url):
payload = {
'parent': {'database_id': DATABASE_ID},
'properties': {
'Idea': {'title': [{'text': {'content': transcript[:100]}}]},
'Timestamp': {'date': {'start': datetime.now().isoformat()}},
'Category': {'select': {'name': 'New'}},
'Status': {'select': {'name': 'New'}},
'Audio URL': {'url': audio_url}
}
}
headers = {
'Authorization': f'Bearer {NOTION_TOKEN}',
'Content-Type': 'application/json',
'Notion-Version': '2022-06-28'
}
response = requests.post(
'https://api.notion.so/v 1/pages',
headers=headers,
json=payload
)
return response.status_code
The entire process from button press to Notion entry takes 2-5 seconds if using Deepgram. The Raspberry Pi sends a quiet success tone (optional), and you're done. Back to sleep.

Thought Catcher excels in organization, AI integration, and context awareness, while Phone Memos are more available and cost-effective. Estimated data based on feature descriptions.
Power and Connectivity: The Unglamorous Details That Actually Matter
This device needs internet to send transcriptions to Notion and (if cloud-based) to transcribe audio. But here's the genius part: it doesn't need internet immediately.
The workflow can be:
- Offline mode (ideal): Device records locally while you sleep
- Sync on boot (next morning): As soon as you turn on Wi Fi or the device connects to your network, it uploads recordings and transcriptions
- Real-time mode (optional): If you want instant Notion updates, keep Wi Fi on
For nighttime use, you have options:
- Wi Fi on, Pi in sleep mode except for GPIO interrupt: The microprocessor sleeps at 50 m A, wakes only when you press the button. Wi Fi card stays on. Total idle draw: ~150 m A. A 5,000 m Ah battery lasts 33 hours.
- Wi Fi off, local recording only: Device draws just ~30 m A. Uploads transcriptions in the morning when you turn Wi Fi back on. A 5,000 m Ah battery lasts 166 hours (7 days).
- Wall power (most practical): Plug it into a USB outlet on your nightstand. Problem solved.
For connectivity, use 802.11ac Wi Fi on the Pi Zero 2 W. Latency is typically 50-100ms. That's fast enough for API calls but not fast enough to cause lag in the recording start, so you're not losing audio at the beginning of your idea.
If you want cellular backup (truly remote), you could add a Sixfab Cellular Io T HAT ($35-60) with LTE capability. Most people don't need this, but it's available.
Assembly: From Breadboard to Finished Device in 2 Hours
Let's assume you're soldering. If you're breadboarding, it takes 30 minutes.
What You Need
- Soldering iron ($15-50 if you don't have one)
- Solder ($3)
- Wire (22 AWG hookup wire, $2)
- Heat shrink tubing ($2)
- Multimeter ($10) to test connections
- Raspberry Pi Zero 2 W ($15)
- Microphone ($20-30)
- Button ($1)
- Resistor (10kΩ) ($0.10)
- Power bank or USB power supply ($15-25)
- Enclosure ($8-12)
The Process
Step 1: Prepare the Enclosure
Measure and mark hole locations on your enclosure. You need:
- One hole for the button (6mm diameter for a standard push button)
- One hole for the microphone (if using a Fifine with a clip, you can just clip it to the outside or drill a hole for the cable)
- One hole for a USB power jack to feed 5V and GND in
- One cable gland or sealed hole for the USB microphone cable
Drill carefully. Use a step drill bit if possible to avoid cracking plastic.
Step 2: Wire the Button to the Raspberry Pi
The button connects between GPIO 17 and GND. Add a 10kΩ pull-down resistor between GPIO 17 and GND (soldered together) so the pin reads LOW when the button is not pressed and HIGH when pressed.
Wire sketch:
Button Pin 1 → GPIO 17 (pin 11 on the Pi Zero header)
Button Pin 2 → 10kΩ resistor → GND
10kΩ resistor → GPIO 17
Use a multimeter in continuity mode to verify no shorts.
Step 3: Connect Power
The Raspberry Pi Zero 2 W needs 5V @ ~1A. Connect your power source (USB power bank or wall adapter) to the Micro USB port on the Pi.
If using a custom power jack in the enclosure, wire it to the Micro USB connector inside the case. Solder: +5V to the center pin, GND to the outer shield.
Step 4: Install the Microphone
Plug the USB microphone into the USB port on the Raspberry Pi Zero 2 W. Most USB mics work immediately with zero configuration on Raspberry Pi OS.
Test: Connect via SSH, run:
basharecord -l
You should see the microphone listed. Record a test file:
basharecord -D hw:1,0 -f S16_LE -r 16000 -c 1 test.wav
Hit Ctrl+C after 5 seconds. Play it back:
bashaplay test.wav
You should hear your own voice.
Step 5: Mount Everything in the Enclosure
Use double-sided foam tape to secure the Raspberry Pi to the inside of the enclosure. Tape the microphone somewhere it points toward you (if bedside, tilt it slightly toward your mouth). Attach the button to the top of the enclosure with its leads routed inside.
Mount a small speaker (optional) next to the microphone if you want audio feedback.
Step 6: Test the Whole Chain
Before deployment, walk through the full flow:
- Boot the Raspberry Pi
- Connect to Wi Fi
- Run the Python script that listens for button presses
- Press the button
- Speak for 10 seconds ("Testing, one, two, three")
- Release the button or wait 60 seconds
- Check that the WAV file appears in
/home/pi/recordings/ - Verify that Deepgram transcribed it correctly
- Check your Notion database for the new entry
If all three checkpoints pass, you're done.


Estimated data suggests high interest in privacy-centric sync and voice command features for future device expansions.
The Code: A Complete Python Implementation
Here's a production-ready Python script that does everything. Install dependencies first:
bashpip install pyaudio requests python-dotenv
Create a .env file:
DEEPGRAM_API_KEY=your_key_here
NOTION_TOKEN=secret_xxxxx
NOTION_DATABASE_ID=xxxxx
Then the main script:
pythonimport pyaudio
import wave
import threading
import requests
import os
from datetime import datetime
from dotenv import load_dotenv
import RPi. GPIO as GPIO
load_dotenv()
# Configuration
BUTTON_PIN = 17
RECORDING_DURATION = 60
CHUNK = 1024
FORMAT = pyaudio.pa Int 16
CHANNELS = 1
RATE = 16000
RECORDING_DIR = '/home/pi/recordings'
# API keys
DEEPGRAM_API_KEY = os.getenv('DEEPGRAM_API_KEY')
NOTION_TOKEN = os.getenv('NOTION_TOKEN')
NOTION_DATABASE_ID = os.getenv('NOTION_DATABASE_ID')
# GPIO setup
GPIO.setmode(GPIO. BCM)
GPIO.setup(BUTTON_PIN, GPIO. IN, pull_up_down=GPIO. PUD_DOWN)
# Ensure recording directory exists
os.makedirs(RECORDING_DIR, exist_ok=True)
def record_audio(filename, duration=RECORDING_DURATION):
"""Record audio from microphone for specified duration."""
print(f"Recording for {duration} seconds...")
audio = pyaudio. Py Audio()
stream = audio.open(
format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK
)
frames = []
for _ in range(0, int(RATE / CHUNK * duration)):
data = stream.read(CHUNK)
frames.append(data)
stream.stop_stream()
stream.close()
audio.terminate()
# Save WAV file
with wave.open(filename, 'wb') as wf:
wf.setnchannels(CHANNELS)
wf.setsampwidth(audio.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
print(f"Saved: {filename}")
return filename
def transcribe_with_deepgram(audio_file):
"""Send audio to Deepgram for transcription."""
print(f"Transcribing with Deepgram...")
with open(audio_file, 'rb') as audio_data:
headers = {
'Authorization': f'Token {DEEPGRAM_API_KEY}',
'Content-Type': 'audio/wav'
}
response = requests.post(
'https://api.deepgram.com/v 1/listen?model=nova-2&smart_format=true',
headers=headers,
data=audio_data
)
result = response.json()
transcript = result['results']['channels'][0]['alternatives'][0]['transcript']
confidence = result['results']['channels'][0]['alternatives'][0]['confidence']
print(f"Transcript: {transcript}")
print(f"Confidence: {confidence}")
return transcript, confidence
def create_notion_entry(title, timestamp, audio_url=None):
"""Create a new entry in Notion database."""
print(f"Creating Notion entry...")
payload = {
'parent': {'database_id': NOTION_DATABASE_ID},
'properties': {
'Idea': {
'title': [{
'text': {'content': title[:100]}
}]
},
'Timestamp': {
'date': {'start': timestamp}
},
'Status': {
'select': {'name': 'New'}
}
}
}
if audio_url:
payload['properties']['Audio URL'] = {'url': audio_url}
headers = {
'Authorization': f'Bearer {NOTION_TOKEN}',
'Content-Type': 'application/json',
'Notion-Version': '2022-06-28'
}
response = requests.post(
'https://api.notion.so/v 1/pages',
headers=headers,
json=payload
)
if response.status_code == 200:
print("✓ Entry created in Notion")
return True
else:
print(f"✗ Failed: {response.status_code} - {response.text}")
return False
def button_pressed(channel):
"""Callback when button is pressed."""
timestamp = datetime.now()
filename = os.path.join(
RECORDING_DIR,
f"idea_{timestamp.strftime('%Y%m%d_%H%M%S')}.wav"
)
# Record audio in a separate thread so GPIO doesn't block
thread = threading. Thread(
target=process_recording,
args=(filename, timestamp)
)
thread.daemon = True
thread.start()
def process_recording(filename, timestamp):
"""Process a single recording: record → transcribe → save to Notion."""
try:
# Record
record_audio(filename, RECORDING_DURATION)
# Transcribe
transcript, confidence = transcribe_with_deepgram(filename)
# Save to Notion
create_notion_entry(
title=transcript,
timestamp=timestamp.isoformat()
)
except Exception as e:
print(f"Error processing recording: {e}")
def main():
"""Main loop: wait for button press."""
print("Thought Catcher initialized. Waiting for button press...")
print("Press Ctrl+C to exit.")
GPIO.add_event_detect(
BUTTON_PIN,
GPIO. RISING,
callback=button_pressed,
bouncetime=200
)
try:
while True:
pass
except Keyboard Interrupt:
print("\n Shutting down...")
GPIO.cleanup()
if __name__ == '__main__':
main()
Run it:
bashcd /home/pi
python 3 thought_catcher.py
To run on boot, add to crontab:
bashcrontab -e
Add:
@reboot sleep 10 && cd /home/pi && python 3 thought_catcher.py > /home/pi/thought_catcher.log 2>&1 &
The sleep 10 gives the Pi time to fully boot and connect to Wi Fi before the script starts.

Real-World Usage: What Actually Happens When You Use This
Week 1: You set it up. You test it obsessively. You press the button 10 times in the first night just to confirm it works.
Week 2: You actually use it. You wake up at 2:47 AM with an idea for a feature you've been stuck on for days. You reach for the device instead of your phone. You speak for 30 seconds. You hear a confirmation beep. You're asleep again by 2:50 AM.
In the morning, you open Notion. There's your exact thought, timestamped, waiting. You add a tag. Mark it for later review. Move on.
Week 3: You've captured 8 ideas. One of them turns into a side project you've been thinking about starting. You actually start it.
Week 4: Your colleagues ask where you're getting these ideas. You tell them about the device. Two of them build their own.
This is the pattern. People don't use devices for the concept. They use devices because they solve friction points. This solves the specific friction of "I have an idea when my phone would be counterproductive."
The Data Side
After a month of using this, your Notion database has become a searchable archive. You can:
- Filter by date: "Show me all ideas from 11 PM to 4 AM" (your peak time)
- Filter by status: "Show me all ideas marked as 'Implemented'"
- Full-text search: "Find every idea that mentions 'React'"
- Group by category: Group all "writing" ideas together
You start seeing patterns. Maybe you get ideas in clusters around certain topics. Maybe you notice that your best ideas come at a specific time of day. This data doesn't exist for most people because they never capture it.
Variations and Customizations
The Multi-Button Version
Instead of one button, wire up four buttons—one for each category: Work, Writing, Product, Personal. Wire them to GPIO 17, 27, 22, and 23. When you press a button, the device not only records but also tags the entry in Notion with that category.
The Time-Limited Version
Some people don't want a 60-second limit. They want the device to record as long as they're talking and stop when they pause for 3+ seconds. Use a voice activity detection library like Web RTC VAD to detect silence and auto-stop.
The Internet-Free Version
If you want zero cloud dependency, skip Deepgram and use local Faster-Whisper. Skip Notion and save to a local SQLite database. Sync to Notion only when you explicitly ask for it.
The Multi-Device Sync
Build three of these (bedroom, home office, backpack). They all sync to the same Notion database. Ideas from anywhere end up in one central place.


Using a screenless device at night eliminates melatonin suppression and task resumption delays, while enhancing idea recall by 42%. Estimated data for melatonin suppression and task resumption.
Troubleshooting: What Goes Wrong and How to Fix It
Problem: "Py Audio won't install"
Solution: Py Audio requires some system libraries on Raspberry Pi OS. Install dependencies first:
bashsudo apt-get install python 3-dev portaudio 19-dev
pip 3 install pyaudio
Problem: "Microphone not detected"
Solution: List audio devices:
bashpython 3 -c "import pyaudio; p = pyaudio. Py Audio(); [print(f'{i}: {p.get_device_info_by_index(i)['name']}') for i in range(p.get_device_count())]"
Note the index of your USB microphone (usually 1 or 2). Update the script to use it:
pythonstream = audio.open(
format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
input_device_index=1, # Change this number
frames_per_buffer=CHUNK
)
Problem: "Deepgram API returns 401 Unauthorized"
Solution: Your API key is invalid or expired. Generate a new one at https://console.deepgram.com/ and update your .env file.
Problem: "Button doesn't trigger recording"
Solution: Test the GPIO pin directly:
bashpython 3 << EOF
import RPi. GPIO as GPIO
import time
GPIO.setmode(GPIO. BCM)
GPIO.setup(17, GPIO. IN, pull_up_down=GPIO. PUD_DOWN)
for i in range(10):
print(f"GPIO 17: {GPIO.input(17)}")
time.sleep(0.5)
GPIO.cleanup()
EOF
With nothing connected, it should read 0. When you touch the GPIO 17 pin to 3.3V (the power pin), it should read 1. If not, there's a wiring issue.
Problem: "Audio cuts off at the beginning"
Solution: There's a small delay between button press and audio capture. Add a 0.5-second pre-recording buffer:
python# Start recording 0.5 seconds before the button press event
backbuffer = []
for _ in range(int(RATE / CHUNK * 0.5)): # 0.5 seconds
data = stream.read(CHUNK)
backbuffer.append(data)
Problem: "Notion entries show up with truncated text"
Solution: The title field in Notion is limited to 2,000 characters, but the UI only shows the first 100. This is normal. Create a separate Description property for the full transcript:
python'Description': {
'rich_text': [{
'text': {'content': transcript}
}]
}

Security and Privacy: Storing Your Private Thoughts
Let's be honest: you're recording ideas in the middle of the night. Some of them might be sensitive. Here's how to keep them safe.
Encryption in Transit
All communication to Deepgram and Notion APIs happens over HTTPS (TLS 1.3 standard). Your recordings are encrypted at rest.
But if you want belt-and-suspenders encryption, encrypt the audio file before uploading:
pythonfrom cryptography.fernet import Fernet
# Generate a key once
key = Fernet.generate_key()
cipher = Fernet(key)
# Encrypt the WAV file
with open(filename, 'rb') as f:
encrypted = cipher.encrypt(f.read())
with open(f"{filename}.encrypted", 'wb') as f:
f.write(encrypted)
os.remove(filename) # Delete the unencrypted version
Store the encryption key in a separate, secure location (password manager, hardware key, etc.).
Local-Only Alternative
If you don't want cloud storage at all, use local Whisper and SQLite:
pythonfrom faster_whisper import Whisper Model
import sqlite 3
model = Whisper Model('base', device='cpu', compute_type='int 8')
segments, info = model.transcribe(filename)
transcript = ' '.join([segment.text for segment in segments])
# Save to local SQLite database
conn = sqlite 3.connect('/home/pi/thoughts.db')
cursor = conn.cursor()
cursor.execute(
'INSERT INTO thoughts (timestamp, transcript) VALUES (?, ?)',
(datetime.now().isoformat(), transcript)
)
conn.commit()
conn.close()
Your thoughts never leave the Pi. Perfect privacy. You sync manually to Notion only when you want to.
Notion Workspace Security
If using Notion:
- Create a dedicated Notion workspace for this database (not shared with others)
- Use a strong API token (treat it like a password)
- Enable Notion's two-factor authentication on your Notion account
- Rotate your API token every 3-6 months


Building a thought-catcher device costs between
Comparison to Alternative Solutions
You could just use your phone voice memos, right? Let's compare.
Phone Voice Memos vs. Thought Catcher
| Feature | Phone Memos | Thought Catcher |
|---|---|---|
| Sleep disruption | High (blue light, notifications) | None (no screen) |
| Friction to use | Unlock phone → find app → press record | Press button |
| Organization | Chronological list (chaos) | Notion database (searchable, tagable) |
| Privacy | Cloud backup to Apple i Cloud | Your choice (cloud or local) |
| Cost | Free (built-in) | $45-65 hardware + optional API costs |
| AI integration | Limited (Siri transcription) | Full transcription pipeline |
| Context awareness | None | Full database of your ideas over time |
| Availability | Always (part of phone) | Bedside only (or multi-device) |
Phone memos are good for quick capture on the go. This device is specifically for the use case where reaching for your phone is counterproductive.
Dedicated Voice Recording Devices
There are products like the Soma Luna and Bullet Journal apps that claim to solve this. They cost
You could also buy a basic digital voice recorder ($20-40) and manually upload recordings. But you'd lose all the automation and Notion integration that makes this useful.

Automating Notion Organization with AI
Here's where it gets genuinely smart. Once you have a database of transcribed thoughts, you can use AI to automatically categorize and tag them.
Auto-Tagging with Claude API
After a recording is transcribed and added to Notion, send it to Claude for classification:
pythonimport anthropic
client = anthropic. Anthropic(api_key=os.getenv('CLAUDE_API_KEY'))
def classify_thought(transcript):
message = client.messages.create(
model='claude-3-5-sonnet-20241022',
max_tokens=100,
messages=[
{
'role': 'user',
'content': f"""Analyze this thought and classify it. Return ONLY a JSON object with:
- category: one of [Work, Writing, Product, Personal, Health, Learning]
- priority: High, Medium, or Low
- actionable: true or false
Thought: {transcript}"""
}
]
)
# Parse the JSON response
import json
result = json.loads(message.content[0].text)
return result
Then update the Notion entry:
pythonclassification = classify_thought(transcript)
# Update the existing entry
headers = {
'Authorization': f'Bearer {NOTION_TOKEN}',
'Content-Type': 'application/json',
'Notion-Version': '2022-06-28'
}
requests.patch(
f'https://api.notion.so/v 1/pages/{page_id}',
headers=headers,
json={
'properties': {
'Category': {'select': {'name': classification['category']}},
'Priority': {'select': {'name': classification['priority']}},
'Actionable': {'checkbox': classification['actionable']}
}
}
)
Now every thought is automatically categorized. No manual tagging. Zero friction.
Extracting Action Items
Some thoughts are actionable. Some are brainstorms. AI can detect the difference:
pythondef extract_action_items(transcript):
message = client.messages.create(
model='claude-3-5-sonnet-20241022',
max_tokens=200,
messages=[
{
'role': 'user',
'content': f"""Extract any action items from this thought. Return a JSON array:
[
{{
"action": "specific, concrete action",
"due": "days from now (number only)",
"depends_on": "other action IDs or null"
}}
]
Thought: {transcript}"""
}
]
)
import json
return json.loads(message.content[0].text)
Create a linked "Action Items" database in Notion that pulls from this.

Future Expansions: What This Could Become
Voice Commands Beyond Recording
Right now, your device does one thing: record. But it could do more. Add voice commands:
- Long press: Record to one category
- Double tap: Record to another category
- Hold + say a command: Create an action item directly
- Say a keyword: Search your past thoughts and read the best ones back to you
This requires local wake-word detection using a library like Porcupine ($50-200/year for commercial use, free for personal projects).
Multi-Modal Input
Expand beyond voice:
- Physical journal camera: Attach a small camera. When you press a button, it photographs a written note, OCRs the text, and saves it to Notion alongside the timestamp.
- Wearable version: Build a wrist-mounted device with a button and speaker. Capture ideas anywhere.
- Voice typing on keyboard: Use Bluetooth HID profile to turn the device into a dictation input for your computer.
Privacy-Centric Sync
Instead of uploading to Notion, sync to a personal cloud:
- Run Syncthing on the Pi and a home server. Thoughts sync automatically to your own infrastructure.
- Use Vaultwarden (self-hosted Bitwarden) to store encrypted thought backups.
- Never trust third parties with your ideas.
Community Insights
Imagine if you had 100 of these devices running across a community. You'd have a corpus of thousands of ideas, all timestamped, all tagged. AI could find patterns:
- "Here's a trend emerging in your community: 47% of ideas at 3 AM are about the same project"
- "People in your group have similar problems. Consider collaboration."
- "Your idea from 6 months ago is relevant to something being discussed today."
This would require privacy protections and ethical considerations, but it's possible.

Why This Matters: The Bigger Picture on Attention and Creativity
We're living through an attention crisis. The average person checks their phone 144 times per day according to a Nottingham University study. That's once every 6.43 minutes. For creative work, this fragmentation is devastating.
Neuro Science research shows that deep focus requires 15-20 minutes of uninterrupted flow state to kick in. Most of us never get there. We check the phone. Our dopamine resets. We have to restart.
A thought-capture device solves one part of this: the late-night anxious check. It's 2 AM, you have an idea, you're starting to wake up because your brain won't let it go. Instead of escalating to a full phone check (which triggers the cascade of notifications), you speak into the device. Your brain gets the confirmation: idea is safe. You sleep.
This is a small intervention in a massive system. But small interventions that work consistently are how change happens.
The device isn't replacing phones or computers. It's adding a tool designed specifically for the 2 AM use case, just as a kitchen knife is designed for cutting, not for everything.
That's the design philosophy that's missing from modern tech: purpose-built tools for specific jobs.

FAQ
What is a thought-catcher device?
A thought-catcher is a screenless device designed to capture voice-recorded ideas and automatically transcribe and organize them, usually using a Raspberry Pi, microphone, and button connected to a backend service like Notion. It solves the problem of capturing inspiration without the sleep-disrupting effects of picking up your phone.
How does a Raspberry Pi thought-catcher work?
When you press a physical button, the device begins recording audio through a USB microphone. The audio is sent to a transcription service like Deepgram or Whisper, which converts it to text. That transcription is automatically added to a Notion database with metadata like timestamp and category. The entire process takes 2-5 seconds, and requires no screen interaction from you.
What are the benefits of a screenless thought-catcher?
The primary benefit is zero sleep disruption. There's no blue light, no notifications, no temptation to check other apps. Your brain gets confirmation that the idea is safely recorded without the context-switching cost of using a phone. Secondary benefits include automatic searchable organization in Notion, timestamped idea archives, and the ability to spot patterns in your creative output over time. Additionally, the friction-free design (one button press, no unlocking) means you're more likely to actually capture ideas when they happen, rather than trying to remember them later.
How much does it cost to build one?
Total hardware cost is typically **
Can I use this without cloud services like Notion?
Yes. You can skip Notion entirely and save transcriptions to a local SQLite database on the Raspberry Pi. Use local Faster-Whisper for transcription (free, but slower—10-15 seconds per recording instead of 2-5 seconds). Your thoughts stay entirely on the Pi with zero cloud dependency. You'd manually sync to Notion only when you choose to.
What if the microphone doesn't work?
First, check if the Pi recognizes it using arecord -l. If it shows up but isn't being used by your script, explicitly specify the device index in Py Audio's input_device_index parameter. If it's not showing up at all, verify the USB connection, try a different USB port, and check for driver issues. Some cheap USB mics need specific kernel modules on Raspberry Pi OS; installing portaudio 19-dev usually solves this.
How do I keep my recorded thoughts private?
If using cloud services, encrypt audio files before uploading using the cryptography.fernet library. If you want zero cloud exposure, use local Faster-Whisper and SQLite. You can also create a dedicated Notion workspace that's not shared with anyone, enable two-factor authentication, and rotate your API tokens every 3-6 months. Treat your API keys like passwords—never commit them to version control.
Can I add multiple buttons for different categories?
Yes. Wire additional buttons to different GPIO pins (17, 27, 22, 23 are common choices). In your Python script, detect which button was pressed and tag the Notion entry accordingly. You could have buttons for Work, Writing, Product, Personal, etc. The script can auto-tag based on which button triggered the recording.
What happens if Wi Fi is down?
The Pi will record audio locally and buffer it in /home/pi/recordings/. When Wi Fi comes back, the script can automatically process the queued recordings—transcribing them and uploading to Notion in the background. You won't lose any ideas. Add a queue/retry mechanism to the main script to handle this.
How long does a recording take to appear in Notion?
Using Deepgram, the full pipeline (record → transcribe → upload) takes 2-5 seconds. With local Faster-Whisper, it takes 10-15 seconds. With the Whisper API, it's 3-7 seconds. In all cases, you get a confirmation beep immediately after recording, so you know it worked even before Notion updates.

The Bottom Line
The thought-catcher device is proof that the best tech often looks like the worst tech. It's screenless. It has one button. It makes a beep sound. It looks more like a 1990s device than a 2025 innovation.
But it solves a real problem that expensive AI gadgets miss: you don't need more features. You need fewer distractions. You need a tool designed specifically for the moment when you have an idea and your phone would be counterproductive.
For under $60, you can build something that captures your thoughts automatically, organizes them with AI, and never causes you to lose sleep over a notification you didn't ask for.
That's not a gadget. That's a productivity system. And it's built from parts that cost less than a coffee subscription.
If you build one, test it for two weeks before dismissing it. The value isn't in the hardware. It's in the absence of friction. And absent friction has a way of changing habits.
Your 2 AM self will thank you.

Key Takeaways
- Screenless thought-capture device eliminates the 2 AM phone problem that disrupts sleep and kills creativity
- Complete hardware setup costs $45-65 using Raspberry Pi Zero 2 W, USB microphone, button, and enclosure
- Deepgram or Whisper API transcribes voice to text in 2-5 seconds with >95% accuracy for English speech
- Notion API integration creates searchable, tagged database of ideas with timestamps and metadata automatically
- Local-only alternative using Faster-Whisper and SQLite provides complete privacy with zero cloud dependency
- Multi-button version allows automatic categorization (Work, Writing, Product, Personal) based on which button pressed
- AI classification using Claude API further automates tagging, priority assignment, and actionability detection
Related Articles
- Philips Hue Bridge Update Makes Smart Light Automations Easier [2025]
- Best Water Leak Detectors [2026]: Complete Guide & Reviews
- Raspberry Pi AI HAT+ 2: Running Gen AI Models on $130 Board [2025]
- 25+ Best Gadgets to Achieve Your New Year's Resolutions [2025]
- OlloBot Cyber Pet Robot: The Future of AI Companions [2025]
- Ecovacs Robot Vacuums: Game-Changing Smart Home Innovation [2025]
![DIY Thought Catcher: Raspberry Pi + Notion AI Inspiration Device [2025]](https://tryrunable.com/blog/diy-thought-catcher-raspberry-pi-notion-ai-inspiration-devic/image-1-1769440183690.jpg)


