24 Commits

Author SHA1 Message Date
TrochtaOndrej 88c5ffe51f feat: User/onboarding persistence — save to DB, load on startup [AITM-233] 2026-03-18 21:15:22 +01:00
TrochtaOndrej 23fcc86fd2 feat: User/onboarding persistence — save to DB, load on startup [AITM-233] 2026-03-18 21:12:33 +01:00
TrochtaOndrej 394191b573 feat: Connect AddTask to Drift DB — remove sample tasks [AITM-232] 2026-03-18 21:08:17 +01:00
TrochtaOndrej b8f1e9bdb8 feat: Connect AddTask to Drift DB — remove sample tasks [AITM-232] 2026-03-18 21:06:33 +01:00
TrochtaOndrej c425e99ecc fix: use PetMood enum in _petMessage, remove dead Routes.home
- _petMessage now accepts PetMood enum directly (was String) — exhaustive
  switch, no silent fall-through on rename
- Remove unused Routes.home = '/' constant (initialLocation uses Routes.tasks)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 20:09:09 +01:00
TrochtaOndrej ed4d9882c9 fix: resolve compile errors and fix Czech diacritics across all screens
- Merge Routes class into routes.dart, remove duplicate from app_router.dart
- Remove stale/orphaned .g.dart files (app_router.g.dart, pet_providers.g.dart,
  task_providers.g.dart) — they were generated by a mismatched Riverpod version
- Remove local PetType enum from onboarding_providers.dart, import from domain
- Add domain PetType import to onboarding_screen.dart
- Fix FAB in tasks_screen.dart to call showAddTaskSheet() instead of context.push
- Fix petMood.name → petMood.emoji in PetBubble mood parameter
- Align TaskEntity and UserEntity with DB schema: String ids, add missing fields
  (photoPath, snoozeUntil, syncedAt, localId on tasks; deviceId, createdAt,
  updatedAt on users) to fix repository compile errors
- Fix TasksNotifier methods to accept String ids
- Fix Czech diacritics in: tasks_screen, energy_badge, task_card, app_shell,
  pet_screen, profile_screen, zen_screen, pet_type, czech_date
- Regenerate all .g.dart files with build_runner

flutter analyze: No issues found

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 20:05:16 +01:00
TrochtaOndrej adc2f72a6d fix: apply review feedback — type safety, overdue logic, dead code
- _EmptyState: accept PetType enum directly; use .emoji getter
  (drops string conversion round-trip and duplicate emoji mapping)
- TaskCard: compute _isOverdue from task.deadline when task is provided
  (previously isOverdue never fired when using the task: param)
- userNameProvider: derive from userProvider.name instead of hardcoded 'Zuf'
  (name was split across two independent providers)
- _petMessage: add explicit 'neutral' branch, remove unreachable 'sleepy' branch
  (PetMood enum has no .sleepy; neutral was silently falling to _)
- EnergyBar/EnergyBadge: assert both params not null simultaneously
  (EnergyBar() / EnergyBadge() previously compiled silently with default low)
- todayTasksProvider: fix comment — no date filtering in MVP

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 11:18:26 +01:00
TrochtaOndrej 371e8260ac fix: resolve widget API mismatches and build errors after merge
- EnergyBar: add energyLevel int? param, make fraction optional
- EnergyBadge: add energyLevel int? param, make level optional
- StreakDots: add streakDays int? param, make days/streakCount optional
- TaskCard: add task TaskEntity? and onComplete VoidCallback? params
- PetBubble: replace local PetType enum with domain PetType import
- TaskEntity: add isCompleted getter (status == TaskStatus.done)
- TasksNotifier: add uncompleteTask() method
- task_providers: add todayTasksProvider alias for tasksProvider
- PetStateNotifier: fix constructor (String ids, updatedAt), add onTaskCompleted()
- TasksScreen: watch userProvider + petMoodProvider, fix PetBubble/EmptyState calls

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 11:11:35 +01:00
TrochtaOndrej 652250270b Merge NDM-App-196: Onboarding flow + Add Task bottom sheet 2026-03-18 04:42:21 +01:00
TrochtaOndrej 21c431c539 feat: Onboarding flow + Add Task bottom sheet 2026-03-18 04:41:49 +01:00
TrochtaOndrej 14cd7e45a4 Merge NDM-App-191: Riverpod providers + GoRouter + AppShell (with generated code) 2026-03-18 04:41:32 +01:00
TrochtaOndrej d44230b455 feat: Riverpod providers + GoRouter + AppShell (with generated code) 2026-03-18 04:40:55 +01:00
TrochtaOndrej ae0ee8dfd4 Merge NDM-App-197: Pet Stats Screen + Zen Mode + Profile scaffolding 2026-03-18 04:40:01 +01:00
TrochtaOndrej 4147cb1e8b feat: Pet Stats Screen + Zen Mode + Profile scaffolding 2026-03-18 04:37:42 +01:00
TrochtaOndrej 7ecd1c8192 Merge NDM-App-195: Home Screen — router, providers, TasksScreen scaffold 2026-03-18 04:37:18 +01:00
TrochtaOndrej e507c92f73 feat: Home Screen — router, providers, TasksScreen scaffold 2026-03-18 04:36:29 +01:00
TrochtaOndrej 7a97e6ab9c Merge NDM-App-194: Shared Widgets — EnergyBadge, EnergyBar, PetBubble, BottomSheetScaffold 2026-03-18 04:35:56 +01:00
TrochtaOndrej eafe559d3f feat: Shared Widgets — EnergyBadge, EnergyBar, PetBubble, BottomSheetScaffold 2026-03-18 04:35:50 +01:00
TrochtaOndrej 0ed3dce0c7 Merge NDM-App-189: Domain Entities — Task, PetState, User 2026-03-18 04:35:43 +01:00
TrochtaOndrej 4ea96f0803 feat: Domain Entities — Task, PetState, User 2026-03-18 04:35:30 +01:00
TrochtaOndrej 8256e57118 fix: apply post-review fixes to Drift database layer
- Add @TableIndex on tasks.user_id and task_completions.user_id (FK scan perf)
- Wrap incrementStreak in transaction to prevent lost-update race
- Sentinel pattern in TaskEntity.copyWith and PetStateEntity.copyWith so
  nullable fields (deadline, snoozeUntil, photoPath, energyToday, etc.)
  can be explicitly cleared to null
- Remove unused TaskCompletionEntity import from task_repository.dart
- Harden completeTask: getSingleOrNull + ArgumentError instead of getSingle throw
- Add doc comment to getTodayTasks clarifying no date filter (pending = today)
- Regenerate app_database.g.dart (CREATE INDEX statements added)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 00:12:40 +01:00
TrochtaOndrej bb0dcdf83f feat: Drift local SQLite database — tables, repositories, and generated code
- Add 4 Drift table definitions (Users, Tasks, PetStates, TaskCompletions)
- Add AppDatabase with driftDatabase() connection (drift_flutter 0.2.8 API)
- Add TaskRepository, PetRepository, UserRepository with entity mappers
- Add domain entities and enums (TaskEntity, PetStateEntity, UserEntity, TaskStatus, PetType, TaskCompletionEntity)
- Run build_runner to generate app_database.g.dart
- flutter analyze: no issues

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 00:05:17 +01:00
TrochtaOndrej 03e1ab1d24 feat: Design System — colors, typography, theme 2026-03-17 23:39:48 +01:00
TrochtaOndrej 043ee213f7 chore: initial Flutter project setup
- flutter create with project-name kittie_mobile, org com.kittie, platforms ios+android
- pubspec.yaml with full dependency stack: Riverpod 3, Drift 2, Rive 0.14, go_router, google_fonts, flutter_local_notifications, http, uuid, custom_lint
- Feature-first lib/ structure: core, data, domain, pet, features (tasks/onboarding/zen_mode/daily_reset), shared
- assets/animations and assets/fonts directories with .gitkeep
- CLAUDE.md with architecture, stack, ports, naming conventions, build commands
- flutter analyze: no issues, flutter test: 1/1 passed

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 08:18:56 +01:00