A Flutter app for browsing, searching, and organizing barbershop tags from barbershoptags.com.
- Search & Browse — Full-text search with filters for voicing, part count, sort order, and classics
- Tag Details — Arranger, singer, recording info, and learning resources per tag
- Audio Learning Tracks — Play tenor, lead, baritone, and bass voice parts
- Sheet Music — View PDFs and images inline
- Favorites — Bookmark tags for quick access
- Custom Lists — Create and manage personal collections of tags
- Offline Cache — Tags are synced to a local SQLite database and refreshed every 24 hours
- Flutter (Dart)
- State management: Provider / ChangeNotifier
- Navigation: GoRouter
- Database: sqflite (SQLite)
- HTTP: Dio
- Analytics: PostHog
- Code generation: Freezed, json_serializable
lib/
├── config/ # Providers, router, theme, analytics
├── domain/ # Core data models (BarbershopTag, TagList, etc.)
├── data/ # Repositories and API client
├── db/ # SQLite schema, queries, and migrations
└── presentation/ # Screens and widgets, organised by feature
flutter pub get
flutter runTo regenerate Freezed/JSON code after model changes:
dart run build_runner build --delete-conflicting-outputs- Flutter SDK (see
.fvm/fvm_config.jsonorpubspec.yamlfor version constraints) - iOS 14+ / Android API 21+
The following commands will compile a release build of the app:
# iOS
flutter build ipa --release --dart-define-from-file=.env --obfuscate --split-debug-info=out/ios
# Android
flutter build appbundle --release --dart-define-from-file=.env --obfuscate --split-debug-info=out/ios