Skip to content

Repository files navigation

🎅 Secret Santa

A modern, feature-rich mobile application for organizing Secret Santa gift exchanges. Built with Flutter and Firebase, this app makes coordinating gift exchanges easy and fun!

Flutter Dart Firebase License


✨ Features

  • 🔐 Secure Authentication - Email and Password login powered by Firebase Authentication
  • 👥 Create & Manage Groups - Organize Secret Santa groups with friends and family
  • 🎁 Smart Matching - (Upcoming) Automatic Secret Santa pair matching algorithm
  • 💬 Real-time Updates - Instant synchronization across devices using Firestore
  • 🌍 Multi-language Support - Support for multiple languages (i18n)
  • 🎨 Dark & Light Themes - Adaptive UI with system theme support
  • 📱 Cross-platform - Available on iOS, Android, Web, Windows, macOS, and Linux
  • 🚀 State Management - Clean architecture with BLoC pattern
  • 📦 Component Library - Pre-built UI components with Widgetbook documentation

🛠️ Tech Stack

Frontend

  • Framework: Flutter 3.7+
  • Language: Dart 3.7+
  • State Management: BLoC Pattern with flutter_bloc
  • Routing: GoRouter for navigation
  • UI Components: Widgetbook for component documentation

Backend & Services

  • Backend: Firebase
    • Authentication: Firebase Auth (Email/Password)
    • Database: Cloud Firestore
    • Realtime: Real-time synchronization

Development Tools

  • Localization: intl & flutter_localizations
  • Dependency Injection: GetIt
  • Functional Programming: fpdart (Functional Programming Dart)
  • Code Generation: build_runner

📋 Project Structure

lib/
├── main.dart                 # Application entry point
├── firebase_options.dart     # Firebase configuration
├── injection_container.dart  # Dependency injection setup
├── core/                     # Core functionality
│   ├── enums/               # Enums used across app
│   ├── errors/              # Error handling
│   ├── extensions/          # Dart extensions
│   ├── l10n/                # Localization
│   ├── router/              # Navigation routes
│   ├── theme/               # App theming
│   └── utils/               # Utility functions
├── features/                # Feature modules
│   ├── auth/               # Authentication feature
│   ├── groups/             # Groups management
│   └── home/               # Home screen
└── assets/                 # Images, fonts, etc.

🚀 Getting Started

Prerequisites

Installation

  1. Clone the repository

    git clone https://github.com/yourusername/secret-santa.git
    cd secret-santa
  2. Get Flutter dependencies

    flutter pub get
  3. Configure Firebase

    • Create a Firebase project on Firebase Console
    • Download your google-services.json (Android) and GoogleService-Info.plist (iOS)
    • Place them in the appropriate directories:
      • Android: android/app/
      • iOS: ios/Runner/
  4. Run code generation

    flutter pub run build_runner build
  5. Run the app

    flutter run

🎯 Usage

Running on Different Platforms

iOS

flutter run -d iphone

Android

flutter run -d android

Web

flutter run -d chrome

Windows/macOS/Linux

flutter run -d windows   # or macos, linux

Development Commands

Watch for changes and rebuild

flutter run

Build APK (Android)

flutter build apk

Build IPA (iOS)

flutter build ios

Build release

flutter build web

Widgetbook - Component Library

cd widgetbook
flutter run -d chrome

📐 Architecture

This project follows Clean Architecture principles with clear separation of concerns:

Feature Module
├── Data Layer
│   ├── datasources (local, remote)
│   ├── models
│   └── repositories
├── Domain Layer
│   ├── entities
│   ├── repositories (interfaces)
│   └── usecases
└── Presentation Layer
    ├── bloc
    ├── pages
    └── widgets

Key Patterns:

  • BLoC Pattern for state management
  • Dependency Injection with GetIt
  • Functional Programming with fpdart for error handling
  • Repository Pattern for data access
  • Equatable for value equality

📱 Firebase Setup

  1. Go to Firebase Console
  2. Create a new project or use existing one
  3. Enable Authentication methods:
    • Email/Password
  4. Create Firestore Database:
    • Collections: groups, users, pairings
    • Set appropriate security rules
  5. Download config files and add to project

Code Style

  • Follow Dart Style Guide
  • Run flutter analyze to check code quality
  • Use dart format to format code

🔗 Links

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages