{"id":41217026,"url":"https://github.com/rahulrajsbkk/focus-quest-flutter","last_synced_at":"2026-06-11T20:00:18.179Z","repository":{"id":332900585,"uuid":"1135177366","full_name":"rahulrajsbkk/Focus-Quest-Flutter","owner":"rahulrajsbkk","description":null,"archived":false,"fork":false,"pushed_at":"2026-06-11T13:48:02.000Z","size":817,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-11T15:25:53.438Z","etag":null,"topics":["adhd","adhd-friendly","dayplanner","focus","game"],"latest_commit_sha":null,"homepage":"https://focus-quest-flutter.vercel.app/","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rahulrajsbkk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-15T18:41:05.000Z","updated_at":"2026-06-11T13:48:31.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/rahulrajsbkk/Focus-Quest-Flutter","commit_stats":null,"previous_names":["rahulrajsbkk/focus_quest","rahulrajsbkk/focus-quest-flutter"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/rahulrajsbkk/Focus-Quest-Flutter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rahulrajsbkk%2FFocus-Quest-Flutter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rahulrajsbkk%2FFocus-Quest-Flutter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rahulrajsbkk%2FFocus-Quest-Flutter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rahulrajsbkk%2FFocus-Quest-Flutter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rahulrajsbkk","download_url":"https://codeload.github.com/rahulrajsbkk/Focus-Quest-Flutter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rahulrajsbkk%2FFocus-Quest-Flutter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34215254,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["adhd","adhd-friendly","dayplanner","focus","game"],"created_at":"2026-01-23T00:05:49.890Z","updated_at":"2026-06-11T20:00:18.141Z","avatar_url":"https://github.com/rahulrajsbkk.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🎯 Focus Quest\n\n\u003cdiv align=\"center\"\u003e\n\n![Flutter](https://img.shields.io/badge/Flutter-3.0+-02569B?style=for-the-badge\u0026logo=flutter\u0026logoColor=white)\n![Dart](https://img.shields.io/badge/Dart-3.0+-0175C2?style=for-the-badge\u0026logo=dart\u0026logoColor=white)\n![License](https://img.shields.io/badge/License-MIT-green?style=for-the-badge)\n![Platform](https://img.shields.io/badge/Platform-Android%20%7C%20iOS%20%7C%20Web%20%7C%20Desktop-blue?style=for-the-badge)\n\n**A dopamine-driven productivity planner designed for users with ADHD**\n\n[Features](#-key-features) • [Installation](#-installation) • [Documentation](#-documentation) • [Contributing](CONTRIBUTING.md)\n\n\u003c/div\u003e\n\n---\n\n## 📝 About\n\nFocus Quest is a **dopamine-driven productivity planner** designed specifically for users with ADHD. It focuses on overcoming executive dysfunction, time blindness, and task initiation paralysis through gamification and low-friction interactions.\n\n### 🎯 Core Principles\n\n- **Anti-Shame Design**: No guilt trips, just progress\n- **Low Friction**: Create tasks in seconds, not minutes\n- **Gamification**: Earn XP, level up, unlock achievements\n- **Dopamine Optimization**: Visual feedback, streaks, and instant gratification\n- **Local-First \u0026 Cloud Sync**: Data lives on your device, with optional cloud backup\n\n## ✨ Key Features\n\n- **Quest Management:** Anti-shame, low-friction task creation with categories and energy levels\n- **Sub-Quests:** 5-minute micro-tasks to combat overwhelm\n- **Focus Mode:** Pomodoro-style timer with strict mode, pause tracking, and state persistence\n- **Cloud Sync:** Secure Google Sign-In with cross-device synchronization (Firestore)\n- **Progress System:** XP, leveling, streaks, and achievements\n- **Smart Notifications:** Persistent timer alerts and pause reminders\n- **Personalized Experience:** Dynamic time-based greetings and user display name\n- **Theme Support:** Light/Dark mode with persistent preference\n- **Multi-Platform:** Fully responsive design for Android, iOS, macOS, Linux, Windows, and Web\n\n📖 **[See detailed feature list →](FEATURES.md)**\n\n## 📐 Design \u0026 Architecture\n\nThe project follows a **Local-First with Cloud Sync** architecture. The local Sembast database acts as the single source of truth for the UI to ensure instant reactivity, while a background SyncService handles data synchronization with Cloud Firestore.\n\nFor a detailed breakdown of the system architecture, module breakdown, and technical stack, please refer to:\n\n- [**Features Overview**](FEATURES.md)\n- [**High-Level Design (HLD) Plan**](hld.md)\n- [**Theme System Documentation**](lib/core/theme/theme.md)\n\n## 📁 Folder Structure\n\n```\nlib/\n├── core/\n│   ├── theme/\n│   ├── constants/\n│   ├── utils/\n│   └── widgets/\n├── features/\n│   ├── auth/         # Login, Sign up, Auth State\n│   ├── tasks/        # Quests, SubQuests, Brain Dump\n│   ├── journal/      # Daily Reflection, Mood\n│   ├── timer/        # Focus Mode, Pomodoro, Session Tracking\n│   ├── profile/      # XP, Level, Stats, Heatmap\n│   └── settings/     # Sync Controller, Theme Toggle\n├── l10n/             # Localization ARB files\n├── models/           # Quest, FocusSession, JournalEntry, UserProgress\n├── providers/        # State Management\n└── services/         # Sembast, Firestore, Notifications, Audio/Haptics\n```\n\n---\n\n## 🚀 Installation\n\n### Prerequisites\n\n- **Flutter SDK** (3.0 or higher)\n- **Dart SDK** (3.0 or higher)\n- Platform-specific requirements:\n  - **Android**: Android Studio, SDK 21+\n  - **iOS**: Xcode 13+, macOS\n  - **Web**: Chrome (for development)\n  - **Desktop**: Platform-specific toolchains\n\n### Setup\n\n1. **Clone the repository**\n   ```bash\n   git clone https://github.com/yourusername/focus_quest.git\n   cd focus_quest\n   ```\n\n2. **Install dependencies**\n   ```bash\n   flutter pub get\n   ```\n\n3. **Generate localization files**\n   ```bash\n   flutter gen-l10n\n   ```\n\n4. **Run the app**\n   ```bash\n   # For development on your default device\n   flutter run\n\n   # For specific platforms\n   flutter run -d chrome          # Web\n   flutter run -d macos           # macOS\n   flutter run -d android         # Android\n   flutter run -d ios             # iOS\n   ```\n\n### Building for Production\n\n```bash\n# Android APK\nflutter build apk --release\n\n# Android App Bundle\nflutter build appbundle --release\n\n# iOS\nflutter build ios --release\n\n# macOS\nflutter build macos --release\n\n# Web\nflutter build web --release\n\n# Windows\nflutter build windows --release\n\n# Linux\nflutter build linux --release\n```\n\n---\n\n## 📖 Documentation\n\n- **[Features Overview](FEATURES.md)** - Detailed feature breakdown\n- **[High-Level Design (HLD)](hld.md)** - System architecture and technical stack\n- **[Theme System](lib/core/theme/theme.md)** - Theming implementation guide\n- **[Contributing Guidelines](CONTRIBUTING.md)** - How to contribute\n- **[Firebase Configuration](FIREBASE_CONFIG.md)** - Firebase setup (optional)\n\n---\n\n## 🌍 Internationalization (i18n)\n\nThis project uses Flutter's official localization system with ARB (Application Resource Bundle) files.\n\n### Initial Setup (Already Completed)\n\nThe following setup has been completed for this project:\n\n#### 1. Dependencies Added to `pubspec.yaml`\n\n```yaml\ndependencies:\n  flutter_localizations:\n    sdk: flutter\n  intl: ^0.20.2\n```\n\n#### 2. Enable Code Generation in `pubspec.yaml`\n\n```yaml\nflutter:\n  generate: true\n```\n\n#### 3. Configuration File `l10n.yaml`\n\n```yaml\narb-dir: lib/l10n\ntemplate-arb-file: app_en.arb\noutput-localization-file: app_localizations.dart\n```\n\n#### 4. MaterialApp Configuration in `main.dart`\n\n```dart\nimport 'package:flutter_localizations/flutter_localizations.dart';\nimport 'package:focus_quest/l10n/app_localizations.dart';\n\nMaterialApp(\n  localizationsDelegates: const [\n    AppLocalizations.delegate,\n    GlobalMaterialLocalizations.delegate,\n    GlobalWidgetsLocalizations.delegate,\n    GlobalCupertinoLocalizations.delegate,\n  ],\n  supportedLocales: const [\n    Locale('en'),\n    Locale('es'),\n  ],\n  // ...\n)\n```\n\n---\n\n### Adding New Translations\n\nFollow these steps to add new translatable strings:\n\n#### Step 1: Add the String to English ARB (Template)\n\nEdit `lib/l10n/app_en.arb`:\n\n```json\n{\n  \"@@locale\": \"en\",\n  \"appTitle\": \"FocusQuest\",\n  \"@appTitle\": {\n    \"description\": \"The application title\"\n  },\n  \"welcomeMessage\": \"Welcome to FocusQuest!\",\n  \"@welcomeMessage\": {\n    \"description\": \"Welcome message shown on the home screen\"\n  }\n}\n```\n\n\u003e **Note:** The `@\u003ckey\u003e` entries are metadata (description, placeholders) and are only needed in the template file (`app_en.arb`).\n\n#### Step 2: Add Translations to Other Locales\n\nEdit `lib/l10n/app_es.arb`:\n\n```json\n{\n  \"@@locale\": \"es\",\n  \"appTitle\": \"FocusQuest\",\n  \"welcomeMessage\": \"¡Bienvenido a FocusQuest!\"\n}\n```\n\n#### Step 3: Generate Localization Code\n\nRun Flutter build or generate command:\n\n```bash\nflutter gen-l10n\n```\n\nOr simply run your app — Flutter auto-generates on build:\n\n```bash\nflutter run\n```\n\nThe generated files will appear in `lib/l10n/`:\n\n- `app_localizations.dart`\n- `app_localizations_en.dart`\n- `app_localizations_es.dart`\n\n#### Step 4: Use the Localized String in Code\n\n```dart\nimport 'package:focus_quest/l10n/app_localizations.dart';\n\n// In your widget:\nText(AppLocalizations.of(context)!.welcomeMessage)\n```\n\n---\n\n### Using Placeholders in Translations\n\nFor dynamic values, use placeholders:\n\n#### ARB File (`app_en.arb`)\n\n```json\n{\n  \"questsCompleted\": \"You completed {count} quests today!\",\n  \"@questsCompleted\": {\n    \"description\": \"Message showing number of completed quests\",\n    \"placeholders\": {\n      \"count\": {\n        \"type\": \"int\",\n        \"example\": \"5\"\n      }\n    }\n  }\n}\n```\n\n#### Spanish Translation (`app_es.arb`)\n\n```json\n{\n  \"questsCompleted\": \"¡Completaste {count} misiones hoy!\"\n}\n```\n\n#### Usage in Code\n\n```dart\nText(AppLocalizations.of(context)!.questsCompleted(5))\n```\n\n---\n\n### Adding a New Language\n\n#### Step 1: Create a New ARB File\n\nCreate `lib/l10n/app_\u003clocale\u003e.arb` (e.g., `app_fr.arb` for French):\n\n```json\n{\n  \"@@locale\": \"fr\",\n  \"appTitle\": \"FocusQuest\",\n  \"welcomeMessage\": \"Bienvenue sur FocusQuest!\"\n}\n```\n\n#### Step 2: Add the Locale to `supportedLocales`\n\nUpdate `main.dart`:\n\n```dart\nsupportedLocales: const [\n  Locale('en'),\n  Locale('es'),\n  Locale('fr'),  // Add new locale\n],\n```\n\n#### Step 3: Regenerate Localization Files\n\n```bash\nflutter gen-l10n\n```\n\n---\n\n### Pluralization\n\nFor plural forms, use the ICU message format:\n\n#### ARB File\n\n```json\n{\n  \"itemCount\": \"{count, plural, =0{No items} =1{1 item} other{{count} items}}\",\n  \"@itemCount\": {\n    \"description\": \"Shows the number of items\",\n    \"placeholders\": {\n      \"count\": {\n        \"type\": \"int\"\n      }\n    }\n  }\n}\n```\n\n#### Usage\n\n```dart\nText(AppLocalizations.of(context)!.itemCount(items.length))\n```\n\n---\n\n### Best Practices\n\n1. **Always add descriptions** to your template ARB file (`app_en.arb`) — they help translators understand context.\n\n2. **Use meaningful keys** — prefer `welcomeMessage` over `msg1`.\n\n3. **Keep translations in sync** — when adding a key to `app_en.arb`, add it to all other locale files.\n\n4. **Test all locales** — verify translations display correctly, especially for longer text that might overflow UI elements.\n\n5. **Use placeholders for dynamic content** — never concatenate translated strings.\n\n---\n\n## Getting Started\n\nThis project is a starting point for a Flutter application.\n\nFor help getting started with Flutter development, view the [online documentation](https://docs.flutter.dev/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frahulrajsbkk%2Ffocus-quest-flutter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frahulrajsbkk%2Ffocus-quest-flutter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frahulrajsbkk%2Ffocus-quest-flutter/lists"}