Repository navigation
General Backlog
| Column | Meaning |
|---|---|
| ID | Stable identifier. Sprint backlogs, GitHub issues, and the sprint reports use these same IDs. |
| Pri | MoSCoW priority: M Must · S Should · C Could · W Won't (this term) |
| Pts | Story points (Fibonacci), per platform. Initial estimate, to be re-pointed during planning. |
| Source | Traceability to the wiki: V# prototype view · F# functional scenario · Q# quality scenario · SF# smart feature · CAS# context-aware feature · BQ# business question · PAS# PAS hypothesis |
| Kotlin / Flutter | When each app implements the item: S2 Sprint 2 (current) · S3 Sprint 3 · Later · — not planned |
| Plan | Used for shared items (backend, analytics, architecture, BQs), which are built once for both apps. |
| Epic | Goal | Scope |
|---|---|---|
| E0 · Foundation | Project skeletons, persistence, background work | Per app |
| E1 · Architecture & Design | Diagrams, architectural patterns, design patterns, tactics | Shared + per app |
| E2 · Design System | Reusable UI components matching the prototype | Per app |
| E3 · Backend & Cloud Services | Firebase setup, data model, sync, security, cloud jobs | Shared |
| E4 · Authentication & Onboarding | Accounts, permissions, first-run configuration | Per app |
| E5 · Usage Tracking & Sensors | Screen time, per-app usage, pickup detection | Per app |
| E6 · Goals & Progress | Personalized adaptive goals and streaks | Per app |
| E7 · Home & Statistics | Dashboard, progress, deep stats | Per app |
| E8 · Offline Activities & Recommendations | Activity library and context-aware suggestions | Per app |
| E9 · Focus Sessions | Pomodoro-style focus sprints | Per app |
| E10 · App Shield | Challenge gate and intent prompt for flagged apps | Per app |
| E11 · Gamification | XP, levels, pet, cabin, badges | Per app |
| E12 · Context-Aware Interventions | Wind-Down, notification management, adaptive interventions | Per app |
| E13 · Social | Friends, nudges, group quests | Per app + shared backend |
| E14 · Settings & Privacy | Configuration, permissions panel, account deletion | Per app |
| E15 · Analytics Pipeline | Instrumentation, processing, storage, dashboards | Shared + per app |
| E16 · Business Questions | Implementation of the Sprint 1 BQs | Shared |
| E17 · Quality & Release | Testing, pilot study, store release | Per app |
| ID | Item | Pri | Pts | Source | Kotlin | Flutter |
|---|---|---|---|---|---|---|
| FND-01 | Repositories (Kotlin app, Flutter app, backend, analytics), wiki, branching strategy, PR template, project board. | M | 1 | — | S2 | S2 |
| FND-02 | App project setup: Kotlin with Compose M3 and a Gradle version catalog; Flutter with a pinned SDK, lints, and folder structure. | M | 2 | V1–V12 | S2 | S2 |
| FND-03 | Architecture skeleton: layered ui / domain / data, dependency injection, reactive streams (see ARC-03). |
M | 3 | — | S2 | S2 |
| FND-04 | Navigation: auth flow, onboarding flow, main flow with 5 bottom tabs and nested routes for all views. | M | 3 | V1–V12 | S2 | S2 |
| FND-05 | Local persistence: relational database (usage, pickups, goals, streaks, activities, logs) and key-value preferences. | M | 5 | Q4, Q11 | S2 | S2 |
| FND-06 | Build variants (dev / prod) and secrets handling. No keys in the repositories. | M | 2 | Q9 | S2 | S2 |
| FND-07 | CI with GitHub Actions: build, lint, and unit tests on every PR. | S | 3 | — | S2 | S2 |
| FND-08 | Shared domain model and data dictionary: entities, field names, and what stays on device vs. what is synced. Both apps must write the same schema. | M | 3 | Q9 | S2 | S2 |
| FND-09 | Background work framework: periodic jobs, foreground-service base, restart after reboot. | M | 3 | Q10, Q11 | S2 | S2 |
| ID | Item | Pri | Pts | Source | Plan |
|---|---|---|---|---|---|
| ARC-01 | Architecture overview, component diagrams (Kotlin, Flutter, backend/analytics), and deployment diagram, each with a rationale. | M | 3 | Q1–Q12 | S2 |
| ARC-02 | Sequence diagrams for key communication flows (sign-in and restore; usage tracking to analytics), each with a rationale. | M | 2 | Q4, Q9 | S2 |
| ARC-03 | Architectural patterns implemented and documented: frontend pattern per app, backend pattern, analytics pattern. Each member contributes to one. | M | 5 | — | S2 |
| ARC-04 | Design patterns: one per member (6 total), each implemented in code with a snippet and rationale. | M | 5 | — | S2 |
| ARC-05 | Architectural tactics (performance, scalability, security, reliability, privacy) implemented and mapped to quality scenarios, with owners. | M | 3 | Q1–Q12 | S2 |
| ID | Item | Pri | Pts | Source | Kotlin | Flutter |
|---|---|---|---|---|---|---|
| DS-01 | Theme: color tokens (cream, rust, dark brown, success green), pixel display font + body font, shapes. | M | 3 | All views | S2 | S2 |
| DS-02 | Components: offset-shadow card, primary / secondary buttons, filter chips, toggle, progress bar, stat card, back button. | M | 5 | All views | S2 | S2 |
| DS-03 | App header: logo, section label, Shield Test chip, streak chip. | M | 2 | V2–V12 | S2 | S2 |
| DS-04 | Bottom navigation: Hearth, Focus, Stats, Offline, Friends, with pixel icons and selected state. | M | 2 | V5–V12 | S2 | S2 |
| DS-05 | Pixel-art assets (pet stages, cabin scene, activity and badge icons), shared between both apps. | M | 5 | V1, V2, V6 | S2 | S2 |
| DS-06 | Accessibility: semantics / content descriptions, 48 dp touch targets, font scaling, contrast check. | S | 3 | — | S3 | S3 |
| DS-07 | UI state pattern (loading / empty / error / content) used by every screen. | M | 2 | Q2, Q6 | S2 | S2 |
Built once and shared by both apps. The data model and service list are detailed in Backend architecture.
| ID | Item | Pri | Pts | Source | Plan |
|---|---|---|---|---|---|
| BE-01 | Firebase projects (dev / prod); register the Kotlin app and the Flutter app (Android and, if targeted, iOS), including SHA-1 for Google Sign-In. | M | 2 | — | S2 |
| BE-02 | Firestore data model and composite indexes (see Data model). | M | 3 | Q9, Q12 | S2 |
| BE-03 | Security rules: per-user isolation, field validation, public-profile subset; rules tested in the emulator. | M | 3 | Q9 | S2 |
| BE-04 | Firebase Emulator Suite for local development and automated tests. | S | 2 | — | S2 |
| BE-05 | User provisioning on sign-up: create users/{uid} and default settings in a single transaction. |
M | 2 | — | S2 |
| BE-06 | Daily stats sync: upload dailyStats/{date} from the local database; idempotent by date, retries with backoff. |
M | 5 | Q4, Q12 | S2 |
| BE-07 | Daily close job: at local midnight (with catch-up on app open) finalize the day, evaluate goal met, update streak in progress/current via transaction. |
M | 5 | Q4, Q11 | S2 |
| BE-08 | Activity catalog in Firestore, seeding script, local cache with bundled JSON fallback. | M | 3 | Q2 | S2 |
| BE-09 | Weather service client (Open-Meteo, no API key): 30-minute cache, timeout and offline handling. | M | 3 | Q1, Q2 | S2 |
| BE-10 | Activity log sync (activityLogs). |
M | 2 | BQ6, BQ11 | S2 |
| BE-11 | Focus session sync (focusSessions). |
M | 2 | BQ4, BQ5 | S3 |
| BE-12 | Restore on login: pull goals, stats (last 30 days), progress, and logs into the local database on a new or reinstalled device. | M | 3 | Q4, Q11 | S2 |
| BE-13 | FCM token registration per device and push-sending Cloud Function (milestones, nudges, quest updates). | S | 3 | F4 | S3 |
| BE-14 | Account deletion cascade (Cloud Function on auth user delete) and data export. | M | 3 | Q9 | S3 |
| BE-15 | Remote Config for tunables: goal step %, XP values, challenge durations, recommendation weights. | S | 2 | SF3, SF5 | S3 |
| BE-16 | Monitoring: Crashlytics, Cloud Function logs and alerts, Firestore usage and budget alerts. | S | 2 | Q12 | S3 |
| BE-17 | Social backend: friend requests, status updates, nudge rate limiting (Cloud Functions). | M | 5 | V11 | Later |
| BE-18 | Quest evaluation and leaderboard aggregation (scheduled Cloud Functions, server-side trusted totals). | M | 5 | V11, V12 | Later |
| BE-19 | Server-side validation of streaks and XP (Cloud Function) to prevent client tampering. | S | 3 | Q9 | Later |
| BE-20 | Aggregated, anonymized reporting (minimum group size) for partner insights. | C | 5 | BQ11, BQ12 | Later |
| BE-21 | Backend repository as code: security rules, indexes, seed scripts, and functions deployed with the Firebase CLI. | M | 2 | — | S2 |
| ID | Item | Pri | Pts | Source | Kotlin | Flutter |
|---|---|---|---|---|---|---|
| AUTH-01 | Login and sign-up screens (email / password) with field validation. | M | 3 | — | S2 | S2 |
| AUTH-02 | Firebase Auth email / password integration and user-friendly error mapping. | M | 3 | — | S2 | S2 |
| AUTH-03 | Google Sign-In. | S | 3 | — | S2 | S2 |
| AUTH-04 | Session persistence, auto-login, auth-state routing from splash, logout that clears user-scoped local data. | M | 2 | Q9 | S2 | S2 |
| AUTH-05 | Password reset by email. | S | 1 | — | S2 | S2 |
| AUTH-06 | Email verification. | C | 1 | — | Later | Later |
| ONB-01 | Welcome screens explaining the value proposition. | S | 2 | §1.4 | S3 | S3 |
| ONB-02 | Core permission flow with rationale screens: usage access, notifications, coarse location (optional). | M | 5 | Q6 | S2 | S2 |
| ONB-03 | Advanced permission flow: display over other apps, DND access, notification listener, modify system settings, exact alarms, battery-optimization exemption. | M | 5 | Q3, Q7 | S3 | S3 |
| ONB-04 | Flag distracting apps from installed launchable apps; set a daily limit for each one. | M | 5 | F3, F6 | S2 | S2 |
| ONB-05 | Interest profile: categories (Move, Create, Relax, Socialize) and specific interests. | M | 3 | PAS2, Q8 | S2 | S2 |
| ONB-06 | Baseline and first-goal step (UI for GOAL-01 to GOAL-04). | M | 3 | SF6 | S2 | S2 |
| ONB-07 | Bedtime and preferred focus length. | M | 2 | F1, F2 | S3 | S3 |
| ONB-08 | Name your pet. | C | 1 | V2 | S3 | S3 |
| ONB-09 | Privacy consent, data-use explanation, and analytics opt-in. | M | 2 | Q9 | S2 | S2 |
| ID | Item | Pri | Pts | Source | Kotlin | Flutter |
|---|---|---|---|---|---|---|
| TRK-01 | Per-app foreground time and daily totals from Android usage events. | M | 8 | SF1, F6 | S2 | S2 |
| TRK-02 | Aggregation job writing to the local database; handles midnight rollover and time-zone changes. | M | 5 | Q10 | S2 | S2 |
| TRK-03 | Flagged-app usage vs. limit and "cushion left" against the daily goal. | M | 3 | V1 | S2 | S2 |
| TRK-04 | Pickup detection: screen-on and unlock events in a foreground service, each screen-on classified with a short accelerometer window (picked up vs. woke on table). | M | 8 | SF2, F5 | S2 | S2 |
| TRK-05 | Pickup metrics: daily count, difference vs. baseline, average interval between checks. | M | 2 | V8 | S2 | S2 |
| TRK-06 | Sensor capability check with fallback to unlock-only counting; capability recorded for telemetry. | M | 2 | BQ1 | S2 | S2 |
| TRK-07 | Permission revocation detection, degraded mode, and deep link to restore. | M | 3 | Q6 | S3 | S3 |
| TRK-08 | Battery and performance budget: sensor only active during classification windows; profiling. | M | 3 | Q10, BQ2 | S2 | S2 |
| ID | Item | Pri | Pts | Source | Kotlin | Flutter |
|---|---|---|---|---|---|---|
| GOAL-01 | Baseline computation: median daily screen time over the last 7 days of usage history, with fallback when less history exists. | M | 3 | SF6 | S2 | S2 |
| GOAL-02 | Goal suggestion algorithm: gradual weekly steps from baseline toward the −20 % target. | M | 3 | SF6, §1.1 | S2 | S2 |
| GOAL-03 | Weekly adaptive adjustment based on how many days the goal was met. | M | 5 | SF6, PAS7 | S2 | S2 |
| GOAL-04 | Goal review UI: accept or override the suggestion, with a short "why this goal" explanation. | M | 2 | SF6 | S2 | S2 |
| GOAL-05 | Streak engine: consecutive days under goal, best streak, local-first. | M | 3 | V7, F4, Q4 | S2 | S2 |
| GOAL-06 | Per-app limit suggestions from history. | S | 3 | SF1 | Later | Later |
| ID | Item | Pri | Pts | Source | Kotlin | Flutter |
|---|---|---|---|---|---|---|
| STA-01 | Home screen-time card: today's time, % vs. goal, cushion left. | M | 3 | V1 | S2 | S2 |
| STA-02 | Stats overview metric cards: today, focus minutes, current streak, best streak. | M | 3 | V7 | S2 | S2 |
| STA-03 | Weekly screen-rhythm bar chart with goal line, weekly average, and breach count. | M | 5 | V7 | S2 | S2 |
| STA-04 | "Tamed distraction loops": time saved per flagged app vs. that app's baseline. | M | 3 | V7 | S2 | S2 |
| STA-05 | Deep Stats pickup card: daily pickups, vs. baseline, average interval. | M | 2 | V8 | S2 | S2 |
| STA-06 | Deep Stats intentionality gauge (requires SHD-09). | M | 2 | V8 | S3 | S3 |
| STA-07 | Reduction-vs-baseline insight: weekly average vs. baseline week, % change, progress toward −20 %. | M | 3 | BQ3 | S2 | S2 |
| STA-08 | Day / week / month selector and per-app breakdown. | S | 3 | F6 | S3 | S3 |
| STA-09 | Focus session history (completed vs. abandoned). | S | 3 | BQ5 | S3 | S3 |
| ID | Item | Pri | Pts | Source | Kotlin | Flutter |
|---|---|---|---|---|---|---|
| OFF-01 | Local activity catalog (synced from BE-08) with category, duration, XP, prompt, and context tags. | M | 3 | Q2 | S2 | S2 |
| OFF-02 | Offline list screen with category filter chips. | M | 3 | V9 | S2 | S2 |
| OFF-03 | Activity detail with "Start & Log": timer, completion confirmation, XP recorded. | M | 3 | V10 | S2 | S2 |
| OFF-04 | Context provider: builds a snapshot of time of day, day type, available time, weather, interests, and recent history. | M | 5 | CAS1 | S2 | S2 |
| OFF-05 | Rule-based recommender: scores and ranks activities; cold-start fallback on interests only. | M | 5 | SF4, Q8 | S2 | S2 |
| OFF-06 | "Suggested for right now" card on the Offline screen with an available-time selector and a reason label. | M | 2 | CAS1, Q1 | S2 | S2 |
| OFF-07 | Weather context via BE-09 plus coarse location; clear "offline-based" label when unavailable. | M | 3 | Q1, Q2 | S2 | S2 |
| OFF-08 | Suggestion notification when a daily limit is reached. | S | 3 | F11 | S3 | S3 |
| OFF-09 | Acceptance tracking and activity streaks. | S | 2 | PAS2, BQ11, BQ13 | S2 | S2 |
| OFF-10 | Learn from accept / skip feedback by re-weighting categories. | S | 3 | SF4 | Later | Later |
| ID | Item | Pri | Pts | Source | Kotlin | Flutter |
|---|---|---|---|---|---|---|
| FOC-01 | Focus Setup screen: 25 / 45 / 60 / custom, optional goal, soundscape, shield toggle. | M | 5 | V3 | S3 | S3 |
| FOC-02 | Quick-start focus sprint from Home with the saved default length. | M | 1 | V1, F1 | S3 | S3 |
| FOC-03 | Session timer as a foreground service with ongoing notification; countdown and progress bar. | M | 5 | V4 | S3 | S3 |
| FOC-04 | DND during the session, restoring the previous state afterward; DND badge. | M | 3 | V4, Q7 | S3 | S3 |
| FOC-05 | Looping soundscapes. | S | 3 | V3 | S3 | S3 |
| FOC-06 | End session early with confirmation; partial XP logged. | M | 2 | V4 | S3 | S3 |
| FOC-07 | Summary screen: duration, % on target, XP, streak, vitality, next actions. | M | 3 | V5 | S3 | S3 |
| FOC-08 | Crash and reboot recovery of a running session. | M | 3 | Q11 | S3 | S3 |
| FOC-09 | Priority contacts allowed through during focus. | S | 5 | F7, PAS6 | Later | Later |
| FOC-10 | Hold non-urgent notifications during a session and show a summary afterward (uses INT-06). | S | 5 | F7, F12 | Later | Later |
| ID | Item | Pri | Pts | Source | Kotlin | Flutter |
|---|---|---|---|---|---|---|
| SHD-01 | Spike: detection strategy for flagged-app launches (AccessibilityService vs. usage-event polling), including Play policy impact. | M | 3 | Q3 | S3 | S3 |
| SHD-02 | Block overlay when a flagged app reaches its limit, with an "Unlock" action. | M | 5 | F3 | S3 | S3 |
| SHD-03 | 10-second breathing challenge that grants a temporary access window. | M | 5 | F3, V3 | S3 | S3 |
| SHD-04 | Additional challenge types: quick quiz, short physical task. | S | 5 | PAS1 | Later | Later |
| SHD-05 | Escalating friction: longer or harder challenge per bypass, reset daily. | M | 3 | SF5, CAS4, BQ9 | S3 | S3 |
| SHD-06 | Gate integrity: re-show if the app is reopened from recents or BreakLoop is force-closed. | M | 5 | Q3 | S3 | S3 |
| SHD-07 | App Shield toggle; header "Shield Test" launches a demo challenge. | M | 2 | V3 | S3 | S3 |
| SHD-08 | Offer an offline activity on the block screen. | S | 3 | PAS2, F11 | Later | Later |
| SHD-09 | Intent prompt (specific task / messages / just browsing) before a flagged app opens. | M | 5 | F8, V8, PAS12 | S3 | S3 |
| ID | Item | Pri | Pts | Source | Kotlin | Flutter |
|---|---|---|---|---|---|---|
| GAM-01 | XP rules engine with daily caps against farming. | M | 3 | V1, V2, V5 | S3 | S3 |
| GAM-02 | Levels and evolution thresholds. | M | 2 | V1 | S3 | S3 |
| GAM-03 | Hearth Vitality formula (0–100). | M | 3 | V1, V5 | S3 | S3 |
| GAM-04 | Pet & Cabin screen: pet state, mood from vitality, décor unlocks, "Water Sprout". | M | 5 | V2 | S3 | S3 |
| GAM-05 | Home cabin preview with level and XP bar. | M | 5 | V1 | S3 | S3 |
| GAM-06 | Badges: definitions, unlock evaluator, grid with states, unlock celebration. | M | 5 | V6 | S3 | S3 |
| GAM-07 | Streak milestone notifications (uses BE-13). | S | 2 | F4 | S3 | S3 |
| GAM-08 | Pet evolution animation. | C | 3 | V1 | Later | Later |
| ID | Item | Pri | Pts | Source | Kotlin | Flutter |
|---|---|---|---|---|---|---|
| INT-01 | Wind-Down Mode: exact-alarm schedule, reminder, lower brightness and filter notifications until morning. | M | 8 | F2, CAS2 | S3 | S3 |
| INT-02 | Wind-down activity suggestions (reuses OFF-05). | S | 2 | PAS11 | Later | Later |
| INT-03 | Spike: grayscale options on Android and detection of external display changes. | S | 5 | Q5, SF3 | Later | Later |
| INT-04 | Adaptive intervention rules engine: triggers (overuse, pickup bursts, late night) → actions. | S | 8 | SF3, CAS5 | Later | Later |
| INT-05 | Context-aware Focus Mode (selected activity and schedule adapt the phone environment). | S | 5 | CAS3 | Later | Later |
| INT-06 | Notification listener infrastructure and scheduled grouped delivery. | S | 5 | F10, Q7 | Later | Later |
| INT-07 | FOMO Journal. | C | 5 | F9, PAS4 | Later | Later |
| INT-08 | Reinstall cooldown. Not feasible for a normal store app. | W | — | PAS5 | — | — |
| ID | Item | Pri | Pts | Source | Kotlin | Flutter |
|---|---|---|---|---|---|---|
| SOC-01 | Friends: add by code or username, accept / decline, remove (uses BE-17). | M | 5 | V11 | Later | Later |
| SOC-02 | Status sharing (focusing, offline activity, resting). Status only, never raw usage. | M | 5 | V11, Q9 | Later | Later |
| SOC-03 | Buddy list with streaks and rate-limited "Nudge" push. | M | 5 | V11 | Later | Later |
| SOC-04 | Mindful-hours leaderboard (uses BE-18). | S | 3 | V11 | Later | Later |
| SOC-05 | Group quests: create / join cohort, goal, duration, daily evaluation, progress (uses BE-18). | M | 8 | V11, V12 | Later | Later |
| SOC-06 | "Send warmth & cheer" to cohort. | S | 2 | V12 | Later | Later |
| SOC-07 | Shared-cabin lanterns reward. | C | 3 | V12 | Later | Later |
| ID | Item | Pri | Pts | Source | Kotlin | Flutter |
|---|---|---|---|---|---|---|
| SET-01 | Settings screen: flagged apps and limits, goal, bedtime, focus defaults, challenge types, notifications. | M | 5 | — | S3 | S3 |
| SET-02 | Permissions status panel with fix-it links. | M | 2 | Q6 | S3 | S3 |
| SET-03 | Delete account and data; export data (uses BE-14). | M | 3 | Q9 | S3 | S3 |
| SET-04 | Notification channels (tracking service, reminders, social). | M | 1 | Q7 | S2 | S2 |
| ID | Item | Pri | Pts | Source | Plan |
|---|---|---|---|---|---|
| DAT-01 | Analytics event taxonomy shared by both apps: event names, parameters, app version, and platform on every event. | M | 3 | Analytics persona | S2 |
| DAT-02 | Instrument events in both apps (session, challenge, intent, activity suggested / accepted, pickup, goal met). | M | 5 | BQ1–BQ14 | S2 |
| DAT-03 | Device telemetry: model, OS, accelerometer present, battery impact. | S | 3 | BQ1, BQ2 | S2 |
| DAT-04 | Crashlytics and non-fatal error logging in both apps. | M | 1 | — | S2 |
| DAT-05 | Analytics pipeline design: diagram with rationale covering generation, collection, processing, storage, and analysis. | M | 2 | — | S2 |
| DAT-06 | Ingestion and storage: Firebase Analytics events and Firestore aggregates exported to the analytics store (e.g. BigQuery). | M | 5 | BQ1–BQ14 | S2 |
| DAT-07 | Processing jobs in the analytics repository: cleaning, aggregation per user / day / device, privacy filters. | M | 5 | Q9 | S2 |
| DAT-08 | Dashboards and visualizations answering the implemented BQs (e.g. Looker Studio or notebooks). | M | 3 | BQ1–BQ14 | S2 |
| DAT-09 | Data-quality checks: missing days, duplicates, app-version consistency. | S | 2 | Analytics persona | S3 |
Each member implements one BQ (6 in Sprint 2, from the Sprint 1 list). "S2 candidate" means the data needed is produced by features planned for Sprint 2. Set Responsible once the 6 are chosen, and change the other candidates to S3 / Later.
| ID | BQ | Type | Needs | Pri | Pts | Plan | Responsible |
|---|---|---|---|---|---|---|---|
| BQ-01 | Devices without an accelerometer, by model and OS | 1 | TRK-06, DAT-03 | M | 3 | S2 candidate | |
| BQ-02 | Battery consumption by device model | 1 | TRK-08, DAT-03 | S | 3 | S2 candidate | |
| BQ-03 | Weekly screen-time decrease after interventions | 2 | TRK-01, GOAL-01, STA-07 | M | 3 | S2 candidate | |
| BQ-04 | Focus Mode and uninterrupted sessions | 2 | E9 | S | 3 | S3 | |
| BQ-05 | Pomodoro completion information shown to users | 2 | E9, STA-09 | S | 3 | S3 | |
| BQ-06 | Screen time avoided after accepting an offline activity | 2 | TRK-01, OFF-03, OFF-09 | S | 3 | S2 candidate | |
| BQ-07 | Check Counter (> 4 weeks vs. < 1 week) and pickups | 3 | TRK-04, 4+ weeks of data | S | 3 | Later | |
| BQ-08 | Virtual pet and focus-session length | 3 | E9, E11 | S | 3 | S3 | |
| BQ-09 | Challenge difficulty and flagged-app access rate | 3 | E10 | S | 3 | S3 | |
| BQ-10 | Offline recommendations and flagged-app time | 3 | TRK-03, OFF-09 | S | 3 | S2 candidate | |
| BQ-11 | Activity categories with the highest acceptance | 4 | OFF-09, DAT-07 | S | 3 | S2 candidate | |
| BQ-12 | Times and locations with highest activity acceptance | 4 | OFF-07, OFF-09, BE-20 | C | 5 | Later | |
| BQ-13 | Activity acceptance vs. goal-streak length | * | OFF-09, GOAL-05 | S | 3 | S2 candidate | |
| BQ-14 | Phone checks vs. flagged-app time vs. focus completion | * | TRK-04, TRK-03, E9 | S | 5 | S3 |
| ID | Item | Pri | Pts | Source | Kotlin | Flutter |
|---|---|---|---|---|---|---|
| QA-01 | Unit tests for domain logic (goals, streaks, recommender, pickup classifier; later XP and escalation). | M | 5 | — | S2 | S2 |
| QA-02 | Database and repository tests, including day rollover and sync edge cases. | M | 3 | Q4, Q11 | S2 | S2 |
| QA-03 | UI / widget tests for key flows. | S | 5 | — | S3 | S3 |
| QA-04 | Device matrix testing, including aggressive OEM background killers (Xiaomi, Samsung, Huawei). | M | 5 | Q10, Q11 | S3 | S3 |
| QA-05 | Performance and battery profiling. | S | 3 | Q10 | S3 | S3 |
| QA-06 | Analytics validation: events arrive, aggregates match app values, BQ results reproducible. | M | 3 | BQ1–BQ14 | S2 | S2 |
| QA-07 | Usability tests with about 5 students matching the personas. | M | 3 | Personas | Later | Later |
| QA-08 | Pilot study: baseline week vs. intervention weeks to measure the −20 % target. | S | 5 | §1.1, BQ3 | Later | Later |
| QA-09 | Backend load test. | C | 3 | Q12 | Later | Later |
| REL-01 | Store release: privacy policy, Data Safety form, sensitive-permission declarations, signing, internal testing track. | S | 5 | Q9 | Later | Later |
| REL-02 | Premium subscription and partner offers. | W | — | §1.3 | — | — |
| Service | Used for | Backlog items |
|---|---|---|
| Firebase Authentication | Email / password and Google accounts | AUTH-01 – AUTH-05, BE-05 |
| Cloud Firestore | User profile, goals, daily stats, progress, logs, catalog, social data | BE-02 – BE-12, BE-17, BE-18 |
| Cloud Functions | Account deletion cascade, push sending, quest and leaderboard aggregation, server-side validation | BE-13, BE-14, BE-17 – BE-19 |
| Firebase Cloud Messaging | Milestones, nudges, quest updates | BE-13, GAM-07, SOC-03 |
| Remote Config | Tunable algorithm parameters | BE-15 |
| Firebase Analytics / Crashlytics | Event collection and stability | DAT-01 – DAT-04 |
| Analytics store and dashboards | Processing and answering the BQs | DAT-06 – DAT-08 |
| Open-Meteo API | Current weather for recommendations (free, no API key) | BE-09, OFF-07 |
| Location services | Coarse location for weather | OFF-07 |
Plan limits: Cloud Functions require the Firebase Blaze (pay-as-you-go) plan. Check the export limits of your plan before committing to the DAT-06 storage choice.
Both apps must read and write exactly this schema (FND-08).
users/{uid}
displayName, email, createdAt, timeZone, platform: "kotlin" | "flutter"
interests: [string]
flaggedApps: [{ packageName, label, dailyLimitMin }]
consent: { analytics: bool, location: bool }
users/{uid}/goals/{weekStart} # yyyy-MM-dd (Monday)
baselineMin, goalMin, targetMin, daysMet, source: "suggested" | "user"
users/{uid}/dailyStats/{date} # yyyy-MM-dd, one doc per day (idempotent)
screenTimeMin, flaggedAppMin: { packageName: minutes }
pickups, unlocks, goalMin, goalMet, closed: bool, updatedAt
users/{uid}/progress/current
currentStreak, bestStreak, lastClosedDate, xp, level, vitality
users/{uid}/activityLogs/{logId}
activityId, startedAt, completedAt, durationMin, xp
source: "recommended" | "browsed", accepted: bool
context: { timeOfDay, weather, availableMin }
users/{uid}/devices/{installationId}
model, osVersion, appVersion, platform, hasAccelerometer, fcmToken
users/{uid}/focusSessions/{sessionId} # Sprint 3
users/{uid}/badges/{badgeId} # Sprint 3
activities/{activityId} # read-only catalog
title, category, durationMin, xp, prompt
tags: { outdoor: bool, weather: [string], timeOfDay: [string] }, active
publicProfiles/{uid} # Later: shared subset only
friendships/{pairId}, quests/{questId}, quests/{questId}/members/{uid}, nudges/{nudgeId}
Privacy rule (Q9): only per-app time for flagged apps leaves the device. The full installed-app list and non-flagged usage stay local.
The items above describe what to build. This table suggests how each app can build it. The Flutter packages listed are common choices; verify that each is maintained and fits your SDK version before adopting it.
| Capability | Kotlin | Flutter |
|---|---|---|
| UI | Jetpack Compose M3 | Flutter widgets (Material 3) |
| State / architecture | ViewModel + StateFlow (MVVM) | Provider, Riverpod, or BLoC |
| Dependency injection | Hilt | Provider / Riverpod / get_it |
| Local database | Room + DataStore | drift or sqflite + shared_preferences |
| Background work | WorkManager + foreground service | workmanager + a foreground-service plugin |
| Usage stats |
UsageStatsManager / UsageEvents
|
Usage-stats plugin or a platform channel to the Android API |
| Accelerometer | SensorManager |
sensors_plus |
| Screen-on / unlock events | Dynamic BroadcastReceiver
|
Platform channel (no pure-Dart equivalent) |
| Networking | Retrofit / OkHttp | dio or http |
| Location | Fused Location Provider | geolocator |
| Charts | Compose Canvas | fl_chart |
| Firebase | Firebase Android SDKs | FlutterFire plugins |
| Phase | Focus | Main items |
|---|---|---|
| S2 (current) | Foundation, architecture, auth, tracking and sensor, smart goals, stats, context-aware recommendations, cloud sync, analytics pipeline, 6 BQs | See Sprint 2 Backlog |
| S3 | Focus sessions, App Shield and intent prompt, gamification, Wind-Down, settings, push, remaining S3 BQs | E9, E10, E11, INT-01, E14, BE-11, BE-13 – BE-16 |
| Later | Social and quests, adaptive interventions, notification management, pilot study, release | E13, INT-02 – INT-07, BE-17 – BE-20, QA-07 – QA-09, REL-01 |
| Risk | Impact | Mitigation |
|---|---|---|
| iOS does not give apps per-app usage data or screen-on events without Apple's Screen Time (Family Controls) entitlement. | Flutter app on iOS: E5, E7, E10 | Target Android for the Flutter app, or plan reduced features on iOS. |
| Some tracking features on Flutter need native Android code (platform channels). | Flutter: TRK-01, TRK-04 | Plan platform-channel work in the Flutter estimates; share knowledge with the Kotlin team. |
| Two apps writing the same Firestore data can drift apart. | BE-02, DAT-01 | One shared schema and event taxonomy (FND-08, DAT-01); security-rule validation (BE-03). |
Grayscale cannot be toggled by a normal store app (needs WRITE_SECURE_SETTINGS granted over adb). |
SF3, CAS5, Q5 | INT-03 spike; plan an alternative intervention. |
| AccessibilityService triggers extra Play policy review. | App Shield | SHD-01 spike; prefer usage-event polling if latency is acceptable. |
| OEM battery managers kill foreground services. | Pickup detection, Q3, Q11 | Battery-optimization exemption (ONB-03), restart after reboot (FND-09), QA-04. |
| Android 12+ exact alarms need a separate permission. | Wind-Down | Request in ONB-03; fall back to an inexact alarm. |
| Android 14+ requires a declared foreground-service type. | Pickup detection | Use specialUse with a justification property. |
| Cloud Functions and some analytics exports need a paid Firebase plan. | BE-13 – BE-19, DAT-06 | Sprint 2 relies on client-side jobs and security rules; verify plan limits for DAT-06. |
| "Time saved" and "Hearth Vitality" are undefined formulas; values differ between prototype screens (92/100 vs. 96 %). | V1, V5, V7 | Define formulas in STA-04 and GAM-03 before implementation. |
| Screens missing from the prototype: auth, onboarding, permissions, settings, challenge overlay, intent prompt, activity in progress, friend management. | Several epics | Design them before the sprint that implements them. |
An item is done when:
- The code is merged to
mainthrough a reviewed PR and CI passes. - It follows the agreed architectural pattern for its app.
- Domain logic has unit tests.
- Every screen handles loading, empty, error, and permission-missing states.
- Strings are externalized and no secrets are hard-coded.
- Shared data follows the schema in FND-08 and the event taxonomy in DAT-01.
- It has been tested on at least one physical device.
- Its acceptance criteria have been demonstrated to the team.
- The wiki is updated if the item changes architecture, data, or analytics.