Skip to content

Repository files navigation

Asyndence

Asyndence app icon

Sustainable deep work for people who focus in long blocks.

CI Coverage MIT License Platforms


What is Asyndence?

Asyndence is a desktop-first focus timer built around ultradian rhythms: long, focused work blocks followed by intentional recovery periods. It is designed for people who do deep work and want a tool that protects both their focus and their recovery, making breaks feel like part of the workflow rather than an interruption.

Unlike most Pomodoro timers, Asyndence does not treat rest as a failure. It treats recovery as part of the work. The result is longer, more sustainable deep work sessions without the afternoon crash.

Who is it for?

Asyndence is built for anyone whose work requires long, uninterrupted focus:

  • Developers and engineers working through complex problems.
  • Writers, researchers, and academics doing deep thinking.
  • Designers and creators protecting long creative blocks.
  • Knowledge workers who feel drained by the end of the day and want a rhythm that matches their energy.

If you have ever ignored a timer because it interrupted your flow, or skipped a break because you felt behind, Asyndence is built for the way you actually work.

Why use it?

  • Work with your biology, not against it. Ultradian rhythms mean your brain can only sustain deep focus for so long. Asyndence helps you stop before you burn out.
  • Desktop-first by design. It sits in its own window with system tray integration, taskbar status, and keyboard shortcuts, so your focus ritual stays where you work.
  • Recovery is the product. Guided breathing, ambient sound, and recovery protocols turn breaks into something restorative, not something you skip.
  • Data that stays yours. Local-first storage with optional encrypted sync. No account required for the free tier.
  • Grows with your practice. Start with the timer. Add analytics, breathing, biometric HRV, and AI-assisted recovery when you are ready.

Why I built this

I started Asyndence because I kept ignoring the breaks my brain actually needed. I would push through long sessions, skip recovery, and then wonder why my focus fell apart later in the day. The timers I tried were either too noisy or too minimal, so I built something that treats recovery as part of the work, not a failure.

It is a solo-built project, and the architecture reflects how I think about production software: clean boundaries, real tests, and a user experience that stays out of the way until it matters.

What is inside?

Feature What it does
Focus timer Customizable focus / break cycles with a clean circular display and session counter.
Session history & analytics See completed sessions, streaks, and daily focus charts.
Guided breathing Box breathing, 4-7-8, coherent breathing, and Wim Hof-style cycles with visual cues.
Recovery protocols Suggested recovery exercises based on time of day and session history.
Ambient sound layer Optional background audio while you focus or recover.
BLE / wearable support Connect a heart rate strap to see live HRV and biometric trends (Bio tier).
AI recovery suggestions Optional AI-assisted recovery prescriptions from the InsForge backend (Bio tier).
Voice guidance Spoken breathing cues and break commentary, with local and cloud TTS backends.
Cross-device sync Encrypted sync of sessions, settings, and biometric data via a custom outbox engine.

Product tiers

The app is structured around three tiers so the core experience stays free while advanced features are gated:

  • Free — Timer, settings, session counter, keyboard shortcuts, tray integration, and basic break countdown.
  • Pro — Session history, analytics, streaks, export, guided breathing exercises, and default recovery protocols.
  • Bio — BLE wearable integration, live HRV, AI recovery, and voice guidance.

Screenshots

Timer screen Breathing screen
Timer Box Breathing
Recovery wind-down screen Settings screen
Recovery (Wind Down) Settings

Engineering highlights

This project is also a showcase of how I build production-ready Flutter apps:

  • Clean architecture. Domain, application, data, and presentation layers are separated. Domain code has no Flutter or infrastructure dependencies.
  • State management with Riverpod. Notifiers, generated providers, and async data flow are handled with Riverpod v2.
  • Desktop-first Flutter. Native window management, system tray, dynamic taskbar icon, and keyboard shortcuts on Windows, macOS, and Linux.
  • Custom sync engine. A DIY outbox pattern with batched uploads, conflict resolution, and server-timestamped LWW over InsForge.
  • Privacy-first biometric handling. Encrypted Hive storage for HRV and heart rate data, secure token storage, and no logging of health data.
  • Comprehensive testing. 943 unit, widget, and integration tests covering state machines, repositories, and platform services.

Quick start

Requirements

  • Flutter SDK ^3.5.0 (stable channel)
  • A desktop C++ toolchain:
    • Windows: Visual Studio 2022 with the "Desktop development with C++" workload
    • macOS: Xcode command line tools
    • Linux: clang, cmake, ninja-build, and GTK development headers
  • Dart-compatible IDE (VS Code, Android Studio, or IntelliJ)

Install dependencies

flutter pub get

Run the desktop app

# Windows
flutter run -d windows

# macOS
flutter run -d macos

# Linux
flutter run -d linux

Build a release

flutter build windows
flutter build macos
flutter build linux

Development

Code generation

The project uses Riverpod codegen, Freezed, and Hive generators. Run the following before committing generated changes:

dart run build_runner build --delete-conflicting-outputs

Or use watch mode during active development:

dart run build_runner watch --delete-conflicting-outputs

Running tests

The project has a comprehensive unit and widget test suite. Run everything with:

flutter test

For coverage:

flutter test --coverage

Environment configuration

The InsForge backend URL and API key are injected via --dart-define so they never live in source. Example:

flutter run -d windows --dart-define=INSFORGE_URL=https://your-project.insforge.app --dart-define=INSFORGE_API_KEY=your-api-key

Project structure

lib/
├── core/              # Shared kernel: theme, failures, value objects, sync, InsForge client
├── features/          # Feature modules: timer, settings, breathing, recovery, biometric, auth, ambient sound
└── routing/           # GoRouter configuration

test/                  # Unit, widget, and integration tests
assets/                # Icons, audio, and other bundled resources
tools/                 # Utility scripts (e.g., audio cue generation)
docs/specs/            # Implementation specs and design decisions

Each feature is organized into domain, application, data, and presentation layers. Domain code has no Flutter or infrastructure imports, and repositories expose Either<Failure, T> results.

Architecture notes

  • State management: Riverpod v2 with generated providers and notifiers.
  • Routing: GoRouter with tier-based route guards.
  • Local storage: Hive for encrypted data, SharedPreferences for settings.
  • Networking: Thin REST client for InsForge with JWT injection, automatic refresh, and outbox sync.
  • Errors: Sealed failure classes and Either from fpdart.
  • Platform integration: Desktop services for window management, tray, and taskbar status are isolated behind platform interfaces.

Security & privacy

  • Biometric data (HRV, heart rate) is stored in encrypted Hive boxes and never logged to console or analytics.
  • API keys and tokens are injected at build time via --dart-define and stored in secure storage on the device.
  • Permission dialogs explain why sensor data is needed.
  • The app follows the project's enforcement gates, including no empty catch blocks, no print() statements in production paths, and no cross-feature imports.

Contributing

This project uses Jujutsu (jj) in colocated Git mode. Please check the existing PR template and architecture compliance checklist before opening a change. All new code should include tests and pass:

flutter analyze --no-fatal-infos
flutter test test/core test/features test/widget_test.dart

License

This project is licensed under the MIT License.


Built for focused work and intentional recovery.

About

Asyndence — Sustainable deep work timer for people who focus in long blocks. A Flutter app leveraging ultradian rhythm methodology with biometric health data integration for optimal focus/rest cycles.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages