Skip to content

kamurandogan/wedlist

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

162 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Wedlist

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.

Flutter Firebase CI

Table of contents

  • 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

What is Wedlist?

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”.

Features

  • 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

Screenshots

Located under assets/images/ (replace with real app screens as desired):

Home Login Onboarding
home login onboarding

Architecture & tech stack

  • 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_purchase for IAP, google_mobile_ads for ads
  • Localization: Flutter gen_l10n (see lib/l10n), access via context.loc

Project layout

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)

Getting started

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 run

Platform 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.properties and a keystore (never commit these).

Configuration

Firebase

  • Client config is generated into lib/firebase_options.dart by 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.rules and storage.rules.
  • Optional Cloud Functions live in functions/ (Node.js). Deploy:
cd functions
npm i
firebase deploy --only functions

In‑App Purchases (IAP)

  • 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).

AdMob

  • 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.

Testing & quality

# Format check (fails on diff)
flutter format --set-exit-if-changed .

# Static analysis
flutter analyze

# Unit/widget tests
flutter test

CI/CD

  • 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 (from firebase login:ci)
    • Project ID comes from vars.FIREBASE_PROJECT_ID (default: wedlist-bb058)

Security & privacy

  • 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.dart and google-services.json contain 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

Roadmap

  • 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

Contributing

Issues and PRs are welcome. Please run format/analyze/tests locally before submitting.

License

No explicit license is defined yet. All rights reserved by the author. If you plan to reuse code, please open an issue first.

About

Çok dilli düğün/wishlist uygulaması: iş birliği, Firestore, IAP ve AdMob destekli Flutter proje.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors