# Quotes Rwanda
A free, phone-friendly app that turns customer reviews of Rwandan SMEs into
shareable branding tools — helping business owners grow visibility at no
cost and helping customers discover trustworthy local businesses.
## Architecture
Flutter Clean Architecture with **BLoC** (and one **Cubit** for simple
synchronous state — see `SettingsCubit`) for state management.
```
lib/
core/ # shared: theme, error types, constants, validators, DI-free widgets
settings/ # SettingsCubit + SettingsPage — theme, notifications
services/ # PreferencesService — typed SharedPreferences wrapper
features/
auth/ # REFERENCE FEATURE — email/password + Google, password reset
data/ # datasources (Firebase calls), models, repository impl
domain/ # entities, repository interface, usecases
presentation/ # bloc, pages, widgets
business/ # business listings & profiles — full CRUD (SME side)
review/ # leaving/reading/editing/deleting reviews, shareable quote cards
dashboard/ # SME owner dashboard (my businesses, ratings, review counts)
home/ # bottom-nav shell (Home / Dashboard / Settings)
injection/
injection_container.dart # get_it — register new feature deps here
main.dart
test/
unit/ # usecase / bloc / cubit tests (mocktail + bloc_test)
widget/ # widget tests
```
Each feature follows the same 3-layer split as `auth`:
domain (pure Dart, no Firebase) → data (Firebase-specific) → presentation
(BLoC + UI).
## Features implemented
- **Auth**: email/password + Google sign-in, registration with role
selection (customer / SME owner), email verification on signup,
password reset, sign-out, session restored on relaunch.
- **Business**: browse/search/filter by category, register, edit, delete,
claim an unclaimed listing — full CRUD, owner-gated writes.
- **Review**: leave/edit/delete a star rating + comment + a pull-quote
used to render a shareable `QuoteC …