Skip to content

Repository files navigation

Plot

Plot is a local-first Flutter habit tracker built around a GitHub-style contribution calendar. Its responsive dashboard provides dedicated desktop and mobile layouts for recording daily progress and reviewing streaks.

Features

  • Create, edit, color-code, and delete habits
  • Mark or clear days in a 52-week contribution calendar
  • View current streak, longest streak, and days planted in the last 52 weeks
  • Use a desktop sidebar or a compact mobile habit picker
  • Keep habit data on the device in SQLite

Screenshots

Plot desktop habit list and calendar Plot desktop habit statistics and contribution calendar

Tech Stack

  • Flutter and Material 3
  • Riverpod AsyncNotifier for asynchronous application state
  • Drift and SQLite for local persistence
  • GoRouter for navigation
  • path and path_provider for the database location
  • window_manager for desktop window setup
  • flutter_test, Drift's in-memory database, and Mocktail for testing
  • very_good_analysis for static analysis

Code generation and packaging tools include build_runner, drift_dev, flutter_launcher_icons, flutter_distributor, and msix.

Project Structure

lib/
├── app/                         # App widget and router
├── core/
│   ├── database/                # Drift schema and SQLite connection
│   └── theme/                   # Material theme
├── features/
│   ├── dashboard/presentation/  # Responsive desktop/mobile dashboard UI
│   └── habits/
│       ├── application/         # Riverpod AsyncNotifier and state
│       ├── data/                # Drift-backed repository
│       └── domain/              # Habit model and streak calculations
├── widgets/                     # Contribution calendar
└── main.dart                    # Platform setup and app entry point

test/
├── features/habits/             # Domain and controller tests
├── widgets/                     # Calendar tests
└── widget_test.dart             # Desktop/mobile flows and persistence

See docs/architecture.md for the runtime data flow and layer responsibilities.

Persistence

Plot does not require an account or server. HabitsRepository stores habits, daily entries, and app settings through Drift in a local plot.sqlite database in the platform application documents directory.

Development

Install dependencies and run the app:

flutter pub get
flutter run

Run analysis and tests:

flutter analyze
flutter test

License

Plot is licensed under the GPL-3.0 license.

About

Plot — a desktop-style habit tracker built entirely around GitHub-contribution-calendar cells.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages