Initial commit: Project documentation and git setup

This commit is contained in:
Tomas Dvorak
2026-01-03 18:35:35 +01:00
commit 1639de69d4
51 changed files with 5005 additions and 0 deletions
+215
View File
@@ -0,0 +1,215 @@
# LifeTimer — Flutter Project Structure
This document describes the recommended folder and file structure for the LifeTimer Flutter app, aligned with the architecture and flows.
Assumption: you will start from a standard `flutter create lifetimer` project, then adapt the `lib/` directory as follows.
---
## 1. High level layout
- `lib/`
- `main.dart` — app entrypoint, initializes Supabase and runs `LifeTimerApp`.
- `bootstrap/` — initialization helpers (Supabase client, dependency injection, env config).
- `core/` — cross cutting concerns (theme, routing, localization, widgets, utils, error handling).
- `data/` — shared data layer code (models, repositories, Supabase clients).
- `features/` — feature modules (auth, onboarding, goals, countdown, social, profile, settings, analytics).
---
## 2. lib/main.dart
Responsibilities:
- Ensure Flutter bindings are initialized.
- Initialize Supabase client (using config from `bootstrap/`).
- Run the `LifeTimerApp` widget.
File:
- `lib/main.dart`
---
## 3. Bootstrap and configuration
Folder:
- `lib/bootstrap/`
- `bootstrap.dart` — high level `bootstrap()` function called from `main.dart` (sets up Supabase, error handlers, env).
- `supabase_client.dart` — creates and exposes a configured Supabase client instance.
- `env.dart` — holds environment configuration (Supabase URL, anon key, build flavor hooks).
---
## 4. Core module
Folder:
- `lib/core/`
- `theme/`
- `app_theme.dart` — light/dark theme definitions, colors, typography.
- `routing/`
- `app_router.dart` — central route definitions and navigation helpers.
- `localization/`
- `l10n.dart` — localization setup (generated or custom wrapper).
- `widgets/`
- `primary_button.dart` — reusable CTA button.
- `app_scaffold.dart` — base scaffold with consistent background and app bar style.
- `bottom_nav_scaffold.dart` — scaffold wiring bottom navigation.
- `loading_indicator.dart` — standard loading widget.
- `empty_state.dart` — reusable empty state widget.
- `errors/`
- `failure.dart` — domain error types.
- `error_mapper.dart` — maps Supabase / network errors to user friendly messages.
- `utils/`
- `date_time_utils.dart` — countdown calculations, formatting.
- `validators.dart` — input validation helpers.
- `state/` (if using Riverpod/Provider wrappers)
- `providers.dart` — top level providers (Supabase client, theme mode, auth state).
---
## 5. Data layer
Folder:
- `lib/data/`
- `supabase/`
- `supabase_client_provider.dart` — exposes Supabase client to the app (e.g., via Riverpod/Provider).
- `models/`
- `user_model.dart` — app level User model.
- `goal_model.dart` — Goal model.
- `goal_step_model.dart` — GoalStep model.
- `activity_model.dart` — Activity model.
- `repositories/`
- `auth_repository.dart` — login, logout, token refresh.
- `user_repository.dart` — profile read/update, visibility toggle.
- `goals_repository.dart` — CRUD for goals and steps, enforce 120 limit.
- `countdown_repository.dart` — start countdown, compute remaining time.
- `social_repository.dart` — followers, feeds, leaderboards (Phase 2+).
- `notifications_repository.dart` — notification preferences and tokens.
Repositories hide Supabase queries behind a clean API, so features do not talk to Supabase directly.
---
## 6. Feature modules
Each feature lives under `lib/features/<feature_name>/` with a simple structure:
- `presentation/` — screens and widgets.
- `application/` — state management (view models, controllers, providers).
- `domain/` (optional) — feature specific entities and logic.
### 6.1 Auth feature
- `lib/features/auth/presentation/`
- `auth_gate.dart` — decides whether to show auth screens or main app based on session.
- `sign_in_screen.dart`
- `sign_up_screen.dart`
- `auth_loading_screen.dart` — transient during OAuth redirects.
- `lib/features/auth/application/`
- `auth_controller.dart` — wraps `auth_repository`, exposes current user/session state.
### 6.2 Onboarding feature
- `lib/features/onboarding/presentation/`
- `onboarding_intro_screen.dart`
- `onboarding_how_it_works_screen.dart`
- `onboarding_motivation_screen.dart`
- `lib/features/onboarding/application/`
- `onboarding_controller.dart` — tracks whether onboarding is completed.
### 6.3 Goals feature
- `lib/features/goals/presentation/`
- `goals_list_screen.dart` — list of goals, empty state, add/edit buttons.
- `goal_edit_screen.dart` — create/edit goal (title, description, location, image, milestones).
- `goal_detail_screen.dart` — view and update progress, mark as completed.
- `lib/features/goals/application/`
- `goals_controller.dart` — loads goals, enforces max 20, exposes list/state.
- `goal_detail_controller.dart` — state for a single goal.
### 6.4 Countdown feature
- `lib/features/countdown/presentation/`
- `home_countdown_screen.dart` — main world-time inspired countdown UI.
- `countdown_summary_screen.dart` — shown after countdown ends, summary stats.
- `lib/features/countdown/application/`
- `countdown_controller.dart` — calculates remaining time, exposes streams/timers.
### 6.5 Social feature (Phase 2+)
- `lib/features/social/presentation/`
- `social_feed_screen.dart`
- `leaderboards_screen.dart`
- `public_profile_screen.dart`
- `lib/features/social/application/`
- `social_feed_controller.dart`
- `leaderboards_controller.dart`
### 6.6 Profile feature
- `lib/features/profile/presentation/`
- `profile_screen.dart` — shows own profile, countdown info, stats.
- `lib/features/profile/application/`
- `profile_controller.dart` — loads and updates profile, visibility, avatar.
### 6.7 Settings feature
- `lib/features/settings/presentation/`
- `settings_home_screen.dart`
- `account_settings_screen.dart`
- `appearance_settings_screen.dart`
- `notification_settings_screen.dart`
- `privacy_settings_screen.dart` — global Public/Private toggle, blocking.
- `about_challenge_screen.dart`
- `lib/features/settings/application/`
- `settings_controller.dart` — wraps repositories for user preferences.
### 6.8 Analytics / insights (Phase 3)
- `lib/features/analytics/presentation/`
- `insights_screen.dart` — charts and stats.
- `lib/features/analytics/application/`
- `insights_controller.dart`
---
## 7. Navigation and route names
- Central router file: `lib/core/routing/app_router.dart`.
- Define named routes for key screens, grouped by feature, e.g.:
- `/``AuthGate` (decides between auth vs main app).
- `/onboarding/*` for onboarding screens.
- `/home``HomeCountdownScreen`.
- `/goals`, `/goals/:id`, `/goals/:id/edit`.
- `/social`, `/social/leaderboards`, `/u/:username`.
- `/settings/*` for settings sections.
The router uses the navigation library you choose (Navigator 2.0, go_router, etc.); this file is the single source of truth for destinations.
---
## 8. State management
If you use Riverpod or Provider:
- Global providers in `lib/core/state/providers.dart`:
- `supabaseClientProvider`
- `authControllerProvider`
- `themeModeProvider`
- Feature specific providers next to controllers in their `application/` folders.
---
## 9. Testing structure
Mirror the feature structure under `test/`:
- `test/core/` — utilities, date/time tests, error mapping tests.
- `test/data/` — repository tests with mocked Supabase client.
- `test/features/<feature_name>/` — unit and widget tests for each feature.
This structure keeps the app modular and makes it easy to grow features (e.g., adding more social or analytics functionality) without losing clarity.