Ephemeron is a highly efficient, cross-platform calendar, habit, and task management application built with Flutter. It focuses on battery efficiency, smooth performance, and preserving privacy through a CASA-avoidant architecture.
- Unified Task & Event Management: Combines Google Calendar events and Google Tasks into a single workflow.
- Privacy-First (CASA-Avoidant): Ephemeron connects directly to Google APIs from the client. Your Google tokens and data never touch a centralized backend.
- Habit Tracking: Track daily, weekly, or interval-based habits with rich metrics and streak calculations.
- Focus Timer: Built-in Pomodoro/Stopwatch timer that seamlessly integrates with your tasks and habits.
- Countdowns: Track days remaining until holidays, birthdays, or custom events.
- Advanced Alarm Engine: Robust offline alarm scheduling utilizing native OS features for minimum battery consumption.
- Quick Add Shorthand: Quickly create tasks or events using natural shorthand (
title #tag ~list -p4).
- Framework: Flutter
- State Management & DI: Riverpod
- Routing:
go_router(Stateful nested navigation withStatefulShellRoute) - Local Database: Drift (SQLite)
- Authentication:
google_sign_in(v7) for Google APIs, independent backend auth for custom sync.
- Two Independent Connections: The app maintains two completely isolated authentication states. Google Calendar/Tasks data is synced directly with Google's servers, while the backend connection is reserved strictly for custom app data (like habits and focus sessions).
- Offline-First: Tasks, habits, and countdowns are stored locally via Drift.
- Performance & Battery:
- Uses
battery_plusto detect power-saving mode and adapt animations automatically. - Avoids background polling where possible; sync is either user-initiated or triggered by efficient background tasks.
- Bundles fonts (
FrauncesandInter) locally to prevent runtime network fetches.
- Uses
- Flutter SDK (stable channel).
- Local font assets: Download
Fraunces(Regular/SemiBold) andInter(Regular/Medium/SemiBold) from Google Fonts and place them inassets/fonts/.
- Clone the repository and navigate to the root directory.
- If you are building for desktop, ensure they are enabled:
flutter config --enable-linux-desktop --enable-windows-desktop
- Generate the required platform folders (if missing):
flutter create --org com.yourcompany.ephemeron . - Install dependencies:
flutter pub get
- Generate Drift database classes (required to compile):
(Use
dart run build_runner build --delete-conflicting-outputs
watchinstead ofbuildduring active development). - Run the app:
flutter run
To enable Google Calendar and Tasks integration:
- Create an Android OAuth client (using your package name and SHA-1 fingerprint) and a Web application OAuth client in the Google Cloud Console.
- Update
AppConfig.googleWebClientIdwith your Web client ID. - The Android client authenticates automatically based on the application signature (no client ID string required in the code).
- State Management: We use
Riverpodexclusively for both state management and dependency injection. Avoid adding separate service locators. - Alarms: Ephemeron utilizes
flutter_local_notifications. On Android,USE_EXACT_ALARMis required to ensure alarms fire precisely, even in Doze mode. - Web Limitations: Background alarm scheduling and Drift SQLite operations have specific limitations on the Web platform. These features are gracefully disabled or require WebAssembly/OPFS setups.
All code must be cross-platform (Android max priority, Linux/Web medium, Windows low). Follow the strict rule of maximizing battery efficiency and ensuring the app runs as smoothly and lightweight as possible. Run flutter analyze before submitting any changes.