A compact, delightful time-tracking Flutter app for quick check-ins and history review.
Whether you want a minimal personal time logger or a clean example of Provider + Sqflite usage, HourLog is compact, readable, and easy-to-extend.
- Lightweight offline-first time tracking using
sqflite. - Simple check-in / check-out flow with history, editing, and per-day/week/month totals.
- Dependency-free UI widgets where possible; provider-based state management.
- Focused on clarity — easy to read and extend for new features.
- Includes seeded sample records for a ready-to-run demo experience on fresh installs.
Rendered smaller for quick preview in the README.
Prerequisites:
- Flutter SDK (stable)
- A connected device or simulator
Run locally:
flutter pub get
flutter runOn an untouched install, the app seeds a few sample time records automatically so you can explore the UI without manual data entry.
Run static analysis:
flutter analyzeRun tests (if any):
flutter test- The UI reads and updates data through
TimeProvider(aChangeNotifier) which wraps a tinyDatabaseHelperbuilt onsqflite. - Checking in inserts a
TimeRecordwith acheck_intimestamp; checking out writescheck_outand recomputes totals. - The History screen groups records by day and shows a compact list with editing and deletion support.
Key implementation notes:
- Stateless components: the home screen's visual parts were extracted to
lib/screens/components/home_screen_components.dartto keepHomeScreenfocused on lifecycle and animation concerns. - Chart sizing:
weekly_bar_chart.dartuses a boundedSizedBoxto prevent RenderFlex unbounded-height errors when embedded in scrollable content.
- If you see a RenderFlex error mentioning "incoming height constraints are unbounded", check the chart widget and ensure its vertical size is bounded (the project already adds a
SizedBoxto the chart). - Use
flutter analyzefrequently — the project is configured for clean analyzer output. - To add features, start by updating
TimeProviderand then surface actions in the UI via the provider.
Contributions are welcome — open an issue or create a PR. Keep changes small and focused; add tests where appropriate.
Suggested workflow:
- Create a feature branch.
- Run
flutter analyzeandflutter test. - Open a PR with a short description of the intent.
No license file is included by default. Add a LICENSE file to clarify usage and contribution terms.
If you'd like help extending the project or integrating it with a backend, open an issue or reach out in the repo.
Happy hacking! 🧡


