A connected ESP32 Pomodoro — When a timer becomes the conductor of concentration
2025
The timer running on the ESP32 screen
A Pomodoro timer can be set up in thirty seconds on any phone. But getting the timer to configure your entire work environment — phone, Mac, notifications — without you having to think about it: that's a different story.
01.The Problem
It always starts with one distraction too many.
It was in the middle of a sprint on LINQA, my SaaS project for supplier management. The kind of day where everything piles up: a Slack notification here, a message at the worst time there, and your train of thought breaks before you even realize it.
I already used the Pomodoro method—those 25-minute blocks of intense work, separated by short breaks. It works. But something was missing: friction. Launching a timer on my phone also meant seeing a notification, mindlessly scrolling, losing thirty seconds that hide ten minutes.
The real problem wasn't a lack of discipline. It was the absence of a physical, tangible trigger that would take care of everything else on my behalf.
02.The Concept: An Object That Talks to Your Phone
The idea came naturally: build a physical Pomodoro, sitting on my desk, whose mere activation reconfigures my digital environment.
I went with an ESP32 flashed via ESPHome. The reasons were practical: native integration with Home Assistant, built-in Bluetooth and Wi-Fi, and a fully declarative YAML configuration—no C++ to maintain.
The principle is simple: — I start the timer on the ESP32's screen. The countdown begins. — On start, the module activates its Bluetooth. — My iPhone automatically detects this signal and triggers an iOS Shortcut that enables the "Reduce Interruptions" focus mode. — This mode instantly propagates to my Mac via Apple Continuity.
The result: with a single physical action, I enter focus mode. No app to open, no settings to tweak manually.
03.The Integration: The Invisible Chain
The most satisfying part of this project isn't the ESP32 itself—it's the automation it silently orchestrates.
On the ESPHome side, the configuration exposes the module's Bluetooth as a logical switch. When the timer starts, BLE activates. When the Pomodoro ends, it turns off. It's binary logic, simple, but that's exactly what you need to trigger a reliable chain.
On the iOS side, I created a shortcut that runs automatically as soon as the phone detects the ESP32's Bluetooth signal within range. It enables the "Reduce Interruptions" focus mode—a native Apple feature that silences non-priority notifications and signals to your contacts that you're busy. This focus mode is shared in real time with the Mac via iCloud—without having to touch the computer.
The loop closes at the end of the Pomodoro: Bluetooth turns off, the phone loses the connection, the reverse shortcut disables focus mode. The cycle starts over.
What I love about this architecture is that it doesn't rely on any fragile third-party service. The ESP32 talks to the iPhone, the iPhone talks to the Mac. Everything goes through standard protocols—BLE, iOS Shortcuts, Apple Continuity. The flow is discreet, robust, and completely silent.
This project was born from real frustration, during a real development sprint. It was built quickly, with tools I knew, to solve a specific problem. But it illustrates something that runs through all my projects: the belief that hardware and software, when well-orchestrated, can create behaviors that no single app can replicate. A timer that reconfigures your Mac without you touching it—that's an almost magical experience. And yet, it's just Bluetooth, YAML, and a few lines of iOS Shortcut. That's what drives me: turning an everyday constraint into an object that thinks for me.