Programming
Guided breathing with Breath in Flow

I wanted a breathing app that would handle the timing without making me keep track of every inhale, hold and exhale. I also wanted to be able to change the pace and repeat a routine without having to work around a fixed sequence.
I built Breath in Flow to do that. It guides a breathing practice with an animated display, sound cues and offline voice guidance. The app runs in a browser, with mobile and desktop projects built around the same Vue and TypeScript code.
Following a breathing routine
The app includes box breathing, coherent breathing, 4-7-8 and guided diaphragm training as starting points. Choose a goal and open Practice to use a recommended routine, or pick one from Presets.
During a session, the moving guide follows the current breathing phase. The timer handles the transitions, and sound or voice cues let you follow along without watching the screen the whole time. You can pause or finish the session whenever you need.
Adjusting the practice
A preset is a starting point. Configure practice lets you change the inhale and exhale timing, add holds, and choose the number of repetitions and sets. Timed recovery breaks fit between sets, so the whole sequence can run as one session.
Once you have a routine you want to repeat, save it as a preset. The next practice can use those settings without entering the timing again.
Looking back at sessions
History keeps past sessions, and Analytics shows trends and hold-time charts. Optional feeling check-ins add a note about how a session felt alongside the timing data.
I wanted the history to stay with the person using the app. There is no account or telemetry, practice works offline, and the data stays on the device. Data & support includes backup and restore so you can export a copy and bring it back later.
The browser app stores routines and sessions in localStorage and measurements in IndexedDB. It does not need a backend or database server to run.
Exploring pulse variability
The Pulse Variability Lab is a more experimental part of the project. It uses camera or motion input to explore pulse variability and breathing resonance. Physical-device validation is still pending; the device validation guide tracks those checks separately from the automated tests and builds.
Getting started
The interface uses Vue, TypeScript and Vite. Capacitor supplies the mobile projects, and Electron supplies the desktop shell. Shared packages contain the breathing timer, validation and signal analysis.
To run the browser version locally:
git clone https://github.com/doublesharp/breath-in-flow.git
cd breath-in-flow
corepack enable
pnpm install
pnpm devOpen http://localhost:7080. Use a Node.js version supported by the project and the pnpm version selected through Corepack. Installation generates the Prisma client, and the development command builds the shared package before starting the app.
There are no published GitHub releases yet. For an Android development build, download the android-build artifact from a successful Build & Release run, unzip it and install the APK. iPhone setup uses a Mac, Xcode and an Apple account. Desktop packaging targets macOS, Windows and Linux.
The README covers the practice controls and install options. The contributing guide has the platform setup and build commands, and the source is on GitHub.