Skip to content

nitindavegit/Karma-Split

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

80 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ’° Karma Split

A social expense tracker with a karma point system.
Track expenses, split bills, and earn karma points for your contributions.

Topics Topics Topics Topics

Karma Split

πŸŽ₯ Watch Demo Video Β Β Β |Β Β Β  πŸ“₯ Download APK


✨ Features

πŸ‘₯ Group Management

  • Create & Join Groups: Easily create expense groups for trips, apartments, or friend circles
  • Member Management: Add/remove members, track their contributions
  • Group Settings: Configure group details and preferences

πŸ’Έ Expense Tracking

  • Add Expenses: Record expenses with descriptions, amounts, and proof images
  • Proof Images: Attach photos as proof for each expense
  • Smart Splitting: Split bills equally or by specific amounts
  • Tag People: Assign expenses to specific group members

πŸ“Š Karma Points System

  • Karma Score: Earn karma points for spending money on the group
  • Leaderboards: Compete with friends on who contributes most
  • Medals & Rankings: Visual rankings with gold, silver, bronze medals
  • Real-time Updates: Karma scores update automatically

πŸ”’ Demo Credentials & Limits

Note: To prevent abuse, this app has a global daily limit of 10 OTP requests.

⚠️ If OTP Limit Exceeds

If you see the "Limit Reached" message, please use the following Demo Credentials to access the app in "View Only" mode:

πŸ“± Phone Number πŸ”‘ OTP
7233665588 625285

Other Limits

  • Daily Expenses: Max 10 expenses per user per day.

πŸ—οΈ Architecture

lib/
β”œβ”€β”€ main.dart                 # App entry point & Firebase initialization
β”œβ”€β”€ models/                   # Data models
β”‚   β”œβ”€β”€ expense.dart         # Expense model with properties
β”‚   β”œβ”€β”€ group.dart           # Group model with members
β”‚   β”œβ”€β”€ groupmember.dart     # Group member model
β”‚   └── user.dart            # User profile model
β”œβ”€β”€ pages/                    # App screens
β”‚   β”œβ”€β”€ auth_choice_page.dart      # Login/Signup choice
β”‚   β”œβ”€β”€ login_page.dart            # Login screen
β”‚   β”œβ”€β”€ signup_page.dart           # Registration screen
β”‚   β”œβ”€β”€ main_page.dart             # Main navigation
β”‚   β”œβ”€β”€ groups_page.dart           # Groups list
β”‚   β”œβ”€β”€ add_group_page.dart        # Create group
β”‚   β”œβ”€β”€ group_detail_page.dart     # Group expenses & details
β”‚   β”œβ”€β”€ add_expense_page.dart      # Add new expense
β”‚   └── profile_page.dart          # User profile & stats
β”œβ”€β”€ providers/                # State management (Riverpod)
β”‚   └── group_providers.dart  # Group data providers
β”œβ”€β”€ theme/                    # App theming
β”‚   └── app_theme.dart        # Theme configuration
β”œβ”€β”€ utils/                    # Utility functions
β”‚   β”œβ”€β”€ karma_calculator.dart     # Karma point calculations
β”‚   β”œβ”€β”€ leaderboard_utils.dart    # Leaderboard sorting
β”‚   β”œβ”€β”€ number_formatter.dart     # Number formatting
β”‚   └── image_compressor.dart     # Image compression
└── widgets/                  # Reusable UI components
    β”œβ”€β”€ group_card.dart           # Group preview card
    β”œβ”€β”€ expense_card.dart         # Expense display
    β”œβ”€β”€ leaderboard_card.dart     # Leaderboard entry
    β”œβ”€β”€ stat_card.dart            # Statistics display
    β”œβ”€β”€ proof_image.dart          # Expense proof image
    └── ...

πŸ› οΈ Tech Stack

Category Technology
Framework Flutter 3.8+
Language Dart
Backend Firebase (Firestore, Auth, Storage)
State Management Riverpod
Authentication Firebase Auth
Database Cloud Firestore
Storage Firebase Storage (images)
Analytics Firebase Analytics
Crash Reporting Firebase Crashlytics
Image Handling image_picker, flutter_image_compressor
Camera camera
Permissions permission_handler

πŸ“¦ Dependencies

Core

  • flutter - UI framework
  • firebase_core - Firebase initialization
  • flutter_riverpod - State management
  • intl - Internationalization & formatting

Firebase Services

  • firebase_auth - Authentication
  • cloud_firestore - Database
  • firebase_storage - File storage
  • firebase_analytics - Analytics
  • firebase_crashlytics - Crash reporting

Media & Camera

  • image_picker - Image selection
  • camera - Camera capture
  • flutter_image_compress - Image compression
  • cloudinary_flutter - Cloud image hosting

Utilities

  • permission_handler - Runtime permissions
  • shared_preferences - Local storage
  • uuid - Unique ID generation
  • http - HTTP requests
  • flutter_dotenv - Environment variables

πŸš€ Getting Started

Prerequisites

  • Flutter SDK 3.8.1 or higher
  • Firebase project set up
  • Dart SDK 3.0+

Installation

  1. Clone the repository

    git clone https://github.com/yourusername/karma_split.git
    cd karma_split
  2. Install dependencies

    flutter pub get
  3. Set up Firebase

    • Create a Firebase project at Firebase Console
    • Add Android and iOS apps
    • Download google-services.json (Android) and GoogleService-Info.plist (iOS)
    • Enable Authentication (Email/Password)
    • Create Firestore database
    • Set up Storage bucket
  4. Configure environment

    # Create .env file
    cp .env.example .env
    # Add your Firebase config keys
  5. Run the app

    flutter run

πŸ“± App Screens

Screen Description
Auth Choice Choose between login and signup
Login Email/password authentication
Signup Create new account
Groups List of all your groups
Group Detail Expenses, members, and karma leaderboard
Add Expense Record new expense with proof
Profile User stats and karma points

🎯 Karma System Explained

The karma point system rewards members who contribute financially to the group:

  • Earning Karma: Each β‚Ή1 spent earns 1 karma point
  • Leaderboard: Members ranked by total karma earned
  • Medals: Top 3 get gold πŸ₯‡, silver πŸ₯ˆ, bronze πŸ₯‰ medals
  • Reset: Karma resets monthly for fresh competition

πŸ”§ Configuration

App Version

Update version in pubspec.yaml:

version: 1.0.0+1
# major.minor.patch+buildNumber

App Name

Change app name in:

  • android/app/src/main/AndroidManifest.xml (android:label)
  • ios/Runner/Info.plist (CFBundleDisplayName)

Theme Colors

Modify in lib/theme/app_theme.dart:

static const Color primary = Color(0xFF6200EE);
static const Color secondary = Color(0xFF03DAC6);

🀝 Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit changes (git commit -m 'Add amazing feature')
  4. Push to branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.


πŸ‘¨β€πŸ’» Creator

Nitin Dave


πŸ™ Acknowledgments


Made with ❀️ by Nitin Dave

About

A social expense tracker built with Flutter & Firebase that gamifies splitting bills using a Karma point system and feed to watch.

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors