Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
ed6e984
feat: Integrate Firebase and Crashlytics with automated configuration…
mixin27 Feb 21, 2026
88e19c8
feat: Add developer settings section with Crashlytics test functional…
mixin27 Feb 21, 2026
87559f4
refactor: Centralize dialog dismissal logic by introducing and utiliz…
mixin27 Feb 21, 2026
6c75ec3
feat: Add user-facing analytics consent and preferences management wi…
mixin27 Feb 21, 2026
8eecf55
feat: Implement offline event queuing, app lifecycle tracking, and en…
mixin27 Feb 22, 2026
0ecc029
feat: Add Firebase services package with Remote Config and Performanc…
mixin27 Feb 22, 2026
f8e4997
feat: Implement Firebase Runtime Config UI with refresh functionality…
mixin27 Feb 22, 2026
ef1a4b6
feat: Implement automatic Firebase Remote Config refreshing on app re…
mixin27 Feb 22, 2026
701fe62
feat: Implement client-side synchronization infrastructure including …
mixin27 Feb 22, 2026
cc7a305
feat: Implement initial synchronization outbox for items and tags, in…
mixin27 Feb 22, 2026
bc55cb0
feat: Extract sync backend client into a new `sync_api` package and i…
mixin27 Feb 22, 2026
bf466f0
feat: Introduce `auth_session` package for centralized authentication…
mixin27 Feb 22, 2026
c7a1d7a
feat: Introduce `backend_api` package for authentication and integrat…
mixin27 Feb 22, 2026
55acc85
feat: add authentication screen for user login/registration and imple…
mixin27 Feb 22, 2026
0bc3136
feat: Implement operational telemetry to track data transfer and sync…
mixin27 Feb 22, 2026
ce283a5
feat: Implement server-side change application within the sync proces…
mixin27 Feb 22, 2026
e514bf2
feat: Enhance auth token refresh with JWT expiration checks, refresh …
mixin27 Feb 22, 2026
3e303a3
feat: Implement network retry for sync requests and enhance server ch…
mixin27 Feb 22, 2026
e5c7289
feat: Implement scheduled sync retry with database persistence, UI di…
mixin27 Feb 22, 2026
f1df371
test: Add sync resilience and merge safety tests, and refactor SyncOr…
mixin27 Feb 22, 2026
45d38b7
feat: Allow overriding backend integration and sync features via debu…
mixin27 Feb 22, 2026
28b0bc3
docs: Restructure and expand documentation by moving detailed section…
mixin27 Feb 22, 2026
5bba2ee
build: Add new integration packages and update package order in all b…
mixin27 Feb 22, 2026
d9c5b79
refactor: Centralize workspace package lists into a new shared script…
mixin27 Feb 22, 2026
78ebed5
feat: Add `authFeatureEnabled` flag to control authentication feature…
mixin27 Feb 22, 2026
08bc5ef
build: refactor firebase_setup script to fix firebase_options.dart cr…
mixin27 Feb 23, 2026
ec0975f
feat: Integrate Firebase App Check with a dedicated service and remot…
mixin27 Feb 23, 2026
26b7c31
feat: implement Firebase Cloud Messaging for push notifications with …
mixin27 Feb 23, 2026
f7989b9
feat: Implement local notifications to handle foreground push message…
mixin27 Feb 23, 2026
427531f
feat: Implement dedicated settings screens for DevTools and Notificat…
mixin27 Feb 23, 2026
655a912
ci: fix firebase setup script
mixin27 Feb 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,14 @@ jobs:
IGDB_CLIENT_SECRET=${{ secrets.IGDB_CLIENT_SECRET }}
EOF

- name: πŸ”₯ Setup Firebase config files
env:
FIREBASE_OPTIONS_DART: ${{ secrets.FIREBASE_OPTIONS_DART }}
FIREBASE_OPTIONS_DART_BASE64: ${{ secrets.FIREBASE_OPTIONS_DART_BASE64 }}
run: |
chmod +x scripts/setup_firebase.sh
./scripts/setup_firebase.sh --require dart

- name: πŸ”¨ Generate code
run: |
chmod +x scripts/build_all.sh
Expand Down Expand Up @@ -93,6 +101,14 @@ jobs:
IGDB_CLIENT_SECRET=${{ secrets.IGDB_CLIENT_SECRET }}
EOF

- name: πŸ”₯ Setup Firebase config files
env:
FIREBASE_OPTIONS_DART: ${{ secrets.FIREBASE_OPTIONS_DART }}
FIREBASE_OPTIONS_DART_BASE64: ${{ secrets.FIREBASE_OPTIONS_DART_BASE64 }}
run: |
chmod +x scripts/setup_firebase.sh
./scripts/setup_firebase.sh --require dart

- name: πŸ”¨ Generate code
run: |
chmod +x scripts/build_all.sh
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/pr-checks.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,5 @@ jobs:

- name: πŸ” Check for outdated dependencies
run: |
cd apps/mobile
flutter pub outdated
chmod +x scripts/check_dependencies.sh
./scripts/check_dependencies.sh
10 changes: 10 additions & 0 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,16 @@ jobs:
IGDB_CLIENT_SECRET=${{ secrets.IGDB_CLIENT_SECRET }}
EOF

- name: πŸ”₯ Setup Firebase config files
env:
FIREBASE_OPTIONS_DART: ${{ secrets.FIREBASE_OPTIONS_DART }}
FIREBASE_OPTIONS_DART_BASE64: ${{ secrets.FIREBASE_OPTIONS_DART_BASE64 }}
FIREBASE_ANDROID_GOOGLE_SERVICES_JSON: ${{ secrets.FIREBASE_ANDROID_GOOGLE_SERVICES_JSON }}
FIREBASE_ANDROID_GOOGLE_SERVICES_JSON_BASE64: ${{ secrets.FIREBASE_ANDROID_GOOGLE_SERVICES_JSON_BASE64 }}
run: |
chmod +x scripts/setup_firebase.sh
./scripts/setup_firebase.sh --require dart --require android

- name: πŸ”¨ Generate code
run: |
chmod +x scripts/build_all.sh
Expand Down
25 changes: 24 additions & 1 deletion .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,30 @@
{
"configurations": [
{
"name": "Flutter",
"name": "Launch (Remote Config Flags)",
"type": "dart",
"request": "launch",
"program": "apps/mobile/lib/main.dart",
"args": [
"--dart-define=ENABLE_CRASHLYTICS_IN_DEBUG=true",
"--dart-define=BACKEND_API_BASE_URL=http://localhost:4000"
]
},
{
"name": "Launch (Force Backend ON via ENV)",
"type": "dart",
"request": "launch",
"program": "apps/mobile/lib/main.dart",
"args": [
"--dart-define=ENABLE_CRASHLYTICS_IN_DEBUG=true",
"--dart-define=BACKEND_USE_ENV_FLAG_OVERRIDES=true",
"--dart-define=BACKEND_INTEGRATION_ENABLED=true",
"--dart-define=BACKEND_SYNC_ENABLED=true",
"--dart-define=BACKEND_API_BASE_URL=http://localhost:4000"
]
},
{
"name": "Launch (Without ENV)",
"type": "dart",
"request": "launch",
"program": "apps/mobile/lib/main.dart"
Expand Down
239 changes: 28 additions & 211 deletions QUICK_START.md
Original file line number Diff line number Diff line change
@@ -1,246 +1,63 @@
# Collection Tracker - Quick Start Guide
# Quick Start

Get your Collection Tracker app up and running in minutes!
For full documentation, start at [documentation/README.md](documentation/README.md).

## ⚑ Quick Setup (5 minutes)
## Minimal Local Run

### 1. Prerequisites Check
1. Install dependencies:

```bash
# Verify Flutter is installed
flutter doctor

# You should see:
# βœ“ Flutter (Channel stable, 3.24.0 or higher)
# βœ“ Dart (3.2.0 or higher)
dart pub get
```

### 2. Install Dependencies
2. Create env file:

```bash
# From workspace root
dart pub get
cat > packages/common/env/.env <<'ENV'
GOOGLE_BOOKS_API_KEY=...
TMDB_API_KEY=...
TMDB_READ_ACCESS_TOKEN=...
IGDB_CLIENT_ID=...
IGDB_CLIENT_SECRET=...
ENV
```

### 3. Generate Code
3. Materialize Firebase config files:

```bash
# Make scripts executable
chmod +x scripts/*.sh

# Run code generation
./scripts/build_all.sh
./scripts/setup_firebase.sh --require dart
```

### 4. Run the App
4. Generate code:

```bash
cd apps/mobile
flutter run
./scripts/build_all.sh
```

That's it! πŸŽ‰ Your app should now be running.

## πŸ“± First Time Usage

### Create Your First Collection

1. Tap **"New Collection"** button
2. Enter collection name (e.g., "My Books")
3. Select collection type (Books, Games, Movies, etc.)
4. Optionally add a description
5. Tap **"Create Collection"**

### Add Your First Item

1. Tap on your collection
2. Tap **"Add Item"**
3. Enter item title (required)
4. Optionally add:
- Barcode (ISBN, UPC, etc.)
- Description
- More details coming soon!
5. Tap **"Add Item"**

### View and Manage Items

1. From collection detail, tap **"View Items"**
2. See all your items in a beautiful list
3. Tap any item to view full details
4. Use the menu to edit or delete items

## πŸ› οΈ Development Workflow

### Daily Development
5. Run app:

```bash
# Terminal 1: Watch for code changes
cd apps/mobile
flutter pub run build_runner watch --delete-conflicting-outputs

# Terminal 2: Run the app
flutter run

# Press 'r' for hot reload
# Press 'R' for hot restart
```

### Making Changes

1. **Modify code** in your IDE
2. **Hot reload** automatically (or press 'r')
3. **If you modify models/providers**, code is auto-generated
4. **Test your changes** immediately

### Common Commands
## Useful Commands

```bash
# Using Makefile (recommended)
make build # Generate code
make test # Run tests
make analyze # Check code quality
make format # Format code
make run # Run app

# Or using scripts directly
./scripts/build_all.sh
./scripts/test_all.sh
./scripts/analyze_all.sh
./scripts/test_all.sh
dart format --set-exit-if-changed .
```

## πŸ”§ Troubleshooting

### "No such file or directory" for .g.dart files

**Solution:**
```bash
./scripts/build_all.sh
```

### "The getter 'xxx' isn't defined"
## Optional: Local Backend/Sync Debug Run

**Solution:**
```bash
cd apps/mobile
flutter pub run build_runner build --delete-conflicting-outputs
```

### Import errors

**Solution:**
```bash
dart pub get
flutter pub get
```

### App won't start

**Solution:**
```bash
# Clean and rebuild
./scripts/clean_all.sh
dart pub get
./scripts/build_all.sh
flutter run
```

### Database errors

**Solution:** Database is created automatically on first run. If you see errors:
```bash
# Uninstall app and reinstall
flutter clean
flutter run
```

## πŸ“‚ Project Structure

flutter run \
--dart-define=BACKEND_USE_ENV_FLAG_OVERRIDES=true \
--dart-define=BACKEND_INTEGRATION_ENABLED=true \
--dart-define=BACKEND_SYNC_ENABLED=true \
--dart-define=BACKEND_API_BASE_URL=http://localhost:4000
```
collection_tracker/
β”œβ”€β”€ apps/mobile/ # Your Flutter app
β”‚ └── lib/
β”‚ β”œβ”€β”€ main.dart # App entry point
β”‚ β”œβ”€β”€ features/ # Features (collections, items, etc.)
β”‚ └── core/ # Core app functionality
β”‚
β”œβ”€β”€ packages/ # Reusable packages
β”‚ β”œβ”€β”€ core/
β”‚ β”‚ β”œβ”€β”€ domain/ # Business logic
β”‚ β”‚ └── data/ # Data layer
β”‚ β”œβ”€β”€ common/
β”‚ β”‚ β”œβ”€β”€ ui/ # Shared widgets
β”‚ β”‚ └── utils/ # Utilities
β”‚ └── integrations/ # Third-party integrations
β”‚
└── scripts/ # Build scripts
```

## 🎯 What's Next?

### Explore Features

- βœ… Create multiple collections
- βœ… Add items with details
- βœ… View statistics
- βœ… Dark mode (automatic)
- βœ… Beautiful Material 3 UI

### Coming Soon

- πŸ“· Barcode scanning
- πŸ–ΌοΈ Photo upload
- πŸ” Search functionality
- ☁️ Cloud sync
- πŸ“Š Advanced statistics

### Customize

- **Change theme**: Edit `packages/common/ui/lib/theme/app_theme.dart`
- **Add features**: Create new feature folders in `apps/mobile/lib/features/`
- **Modify database**: Edit tables in `packages/integrations/database/lib/tables/`

## πŸ“š Learn More

### Documentation

<!-- - [Full Setup Guide](BUILD_AND_RUN_GUIDE.md) - Detailed setup instructions -->
- [Architecture Guide](documentation/ARCHITECTURE.md) - Learn about the architecture
- [Contributing Guide](CONTRIBUTING.md) - How to contribute

### Resources

- [Flutter Documentation](https://flutter.dev/docs)
- [Riverpod Documentation](https://riverpod.dev)
- [Drift Documentation](https://drift.simonbinder.eu)

## πŸ’‘ Pro Tips

1. **Use hot reload** - Press 'r' instead of restarting the app
2. **Keep build_runner watching** - Saves time during development
3. **Use the Makefile** - Easier than remembering script paths
4. **Check analysis** - Run `make analyze` before committing
5. **Format code** - Run `make format` to maintain consistency

## πŸ†˜ Need Help?

- πŸ“– Check the [README.md](README.md)
- πŸ› Report issues on GitHub
- πŸ’¬ Ask questions in Discussions
- πŸ“§ Email: kyawzayartun.contact@gmail.com

## βœ… Checklist

Before you start coding:

- [ ] Flutter doctor shows no issues
- [ ] Dependencies installed (`dart pub get`)
- [ ] Code generated (`./scripts/build_all.sh`)
- [ ] App runs successfully (`flutter run`)
- [ ] You can create a collection
- [ ] You can add an item

You're all set! Happy coding! πŸš€

<!-- ---

**Need more details?** Check out the [full documentation](BUILD_AND_RUN_GUIDE.md). -->
See [documentation/FIREBASE_AND_FLAGS.md](documentation/FIREBASE_AND_FLAGS.md) for runtime flag details.
Loading