Multilingual wedding wish & dowry list manager with real‑time collaboration, country‑aware content, in‑app purchases, and privacy‑friendly ads. Built with Flutter and Firebase.
- What is Wedlist?
- Features
- Screenshots
- Architecture & tech stack
- Project layout
- Getting started (setup and run)
- Configuration (Firebase, IAP, AdMob)
- Testing & quality
- CI/CD
- Security & privacy
- Roadmap
- Contributing
- License
Wedlist helps couples plan and track their wish/dowry lists together. It supports multiple languages and countries, lets partners collaborate in real time, and offers optional premium features such as removing ads and unlocking “partner collaboration”.
- Multilingual UI (11+ locales) via Flutter gen_l10n
- Country‑aware wish/dowry catalogs and data
- Real‑time collaboration: invite partner, manage collaborators, and share lists
- Firebase integration: Auth, Cloud Firestore, Storage, Cloud Functions (optional)
- In‑App Purchases: remove ads and unlock partner collaboration
- Ads: banner/interstitial/rewarded via a centralized AdsService (privacy‑friendly defaults)
- Modern navigation with go_router and state management with BLoC/Cubit
- Theming (light/dark), onboarding, and settings with dynamic visibility based on entitlements
Located under assets/images/ (replace with real app screens as desired):
| Home | Login | Onboarding |
|---|---|---|
![]() |
![]() |
![]() |
- Flutter (Dart), feature‑first organization
- State management: BLoC/Cubit
- Navigation: go_router
- Firebase:
firebase_core,cloud_firestore,firebase_storage, optional Cloud Functions - Monetization:
in_app_purchasefor IAP,google_mobile_adsfor ads - Localization: Flutter gen_l10n (see
lib/l10n), access viacontext.loc
High‑level folders (trimmed):
lib/
core/ # constants, services (ads, auth, purchase), utils, widgets
feature/ # feature modules (settings, wishlist, onboarding, auth, etc.)
config/ # theme and app‑level config
generated/ # l10n output (autogenerated)
l10n/ # ARB files
firebase_options.dart# FlutterFire client config (intentionally client‑side)
functions/ # optional Cloud Functions
android/, ios/, web/, macos/, windows/, linux/
.github/workflows/ # CI (Flutter checks + manual rules deploy)
Prerequisites
- Flutter SDK (stable)
- Android Studio and/or Xcode
- Firebase project configured (FlutterFire CLI generated
lib/firebase_options.dart)
Install & run
flutter pub get
# Optional: generate localizations (when ARB files change)
flutter gen-l10n
# Run on a connected device or emulator
flutter runPlatform notes
- iOS: run on macOS with Xcode. If CocoaPods fails on first run:
cd ios && pod install- Android: enable Developer mode + USB debugging. For release builds, provide
android/key.propertiesand a keystore (never commit these).
- Client config is generated into
lib/firebase_options.dartby FlutterFire CLI; this file contains client identifiers (not server secrets) and is expected to live in the app. - Firestore/Storage rules are located in
firestore.rulesandstorage.rules. - Optional Cloud Functions live in
functions/(Node.js). Deploy:
cd functions
npm i
firebase deploy --only functions- Configure products in Play Console/App Store Connect (match the product IDs used by
PurchaseService). - Entitlements are persisted to Firestore and drive UI visibility (e.g., “Remove Ads” tile is hidden when purchased).
- App/Unit IDs are centralized in
lib/core/constants/strings.dart. - Android App ID is set in
android/app/src/main/AndroidManifest.xml. - iOS App ID is set in
ios/Runner/Info.plist(e.g.,GADApplicationIdentifier). - Use Google’s test IDs during development; switch to your production IDs before release.
# Format check (fails on diff)
flutter format --set-exit-if-changed .
# Static analysis
flutter analyze
# Unit/widget tests
flutter test- GitHub Actions:
.github/workflows/flutter_ci.yml- On push/PR: format, analyze, test
- Manual: deploy Firestore/Storage rules
- Credentials for rules deploy:
- Prefer a Google Cloud Service Account JSON in
secrets.GCP_SA_KEY - Fallback:
secrets.FIREBASE_TOKEN(fromfirebase login:ci) - Project ID comes from
vars.FIREBASE_PROJECT_ID(default:wedlist-bb058)
- Prefer a Google Cloud Service Account JSON in
- Do NOT commit signing keys,
key.properties, or service account JSON. We store them in GitHub Secrets and local machines only. See.gitignore. lib/firebase_options.dartandgoogle-services.jsoncontain client identifiers by design; access to your data is governed by Firebase Security Rules and Auth, not by these keys alone.- Policies:
- Privacy Policy:
docs/privacy-policy-en.md - Terms of Service:
docs/terms-en.md
- Privacy Policy:
- Add production rewarded ad unit for iOS (if needed)
- Expand locales and improve copy
- Harden rules and add more e2e tests
- Optional: split IDs via build flavors and environment configs
Issues and PRs are welcome. Please run format/analyze/tests locally before submitting.
No explicit license is defined yet. All rights reserved by the author. If you plan to reuse code, please open an issue first.


