Skip to content

About

Gamified household chore tracking app built with React Native and Expo

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

🏠 Chore Quest

Gamified household task management app

Chore Quest is a mobile app that turns household chores into a collaborative game. Users earn points by completing tasks and track progress through a round-based leaderboard system.

The goal is to make everyday chores more structured, fair, and motivating through lightweight gamification.

This project was developed as a final assignment for the Mobile Programming course at Haaga-Helia University of Applied Sciences over a period of 5 weeks.

✨ Key features

👥 Groups

  • Create or join household groups using a join code
  • Shared task management within groups

✅ Tasks

  • Create, assign, complete, unassign, and delete chores
  • Deadlines with automatic overdue detection
  • Task sizing with different point rewards
  • Task categorization and filtering

🏆 Gamification

  • Earn points by completing chores
  • Group leaderboard showing current rankings and latest winners within the group
  • Lap/round system for competition cycles and winner tracking
  • Point reduction for overdue tasks

🔐 Authentication

  • Firebase Authentication (email/password)
  • Firestore security rules for protected access
  • User account management

📱 User Experience

  • Responsive mobile-first UI
  • Toast notifications and user feedback
  • Live updates with Firebase

🧰 Tech stack

TypeScript React Native Expo Firebase

📂 Project structure

chore-quest/
├── src/
│   ├── app/              # screens and navigation
│   ├── components/       # reusable UI components
│   ├── contexts/         # React contexts
│   ├── hooks/            # custom hooks
│   ├── services/         # Firebase operations
│   └── utils/            # helper functions and styles
│
├── assets/               # images and static assets
│
├── app.json
├── package.json
├── README.md
├── tsconfig.json
└── oppimispäiväkirja.md  # learning diary

📸 Preview

🌐 Firestore data model

erDiagram
  direction LR

  USER {
    string uid
    string displayName
    string email
    timestamp createdAt
    string groupId
    number points
    string[] tasks
  }

  GROUP {
    string id
    string name
    number joinCode
    number lapNumber
    timestamp lapStartedAt
    array lastLapStatistics
  }

  TASK {
    string id
    string name
    string size
    string assignedTo
    string assignedToName
    date deadline
    string status
    number points
    string groupId
    timestamp completedAt
  }

  GROUP ||--o{ USER : contains
  GROUP ||--o{ TASK : contains
  USER ||--o{ TASK : assigned
Loading

🚀 Getting started

  1. Clone the repository:
git clone https://github.com/kkivilahti/chore-quest.git
cd chore-quest
  1. Install dependencies:
npm install
  1. Set up Firebase:
  • Create a Firebase project at Firebase Console
  • Enable Authentication (email/password) and Firestore Database
  • Create a .env file in the root of the project and add your Firebase configuration:
EXPO_PUBLIC_FIREBASE_API_KEY=your_api_key
EXPO_PUBLIC_FIREBASE_AUTH_DOMAIN=your_auth_domain
EXPO_PUBLIC_FIREBASE_PROJECT_ID=your_project_id
EXPO_PUBLIC_FIREBASE_STORAGE_BUCKET=your_storage_bucket
EXPO_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id
EXPO_PUBLIC_FIREBASE_APP_ID=your_app_id
  • Define Firestore security rules. An example will be updated here later
  1. Run the app:
npx expo start
  • Follow the instructions in the terminal to run the app on an emulator or physical device
  • You can also use the Expo Go app on your mobile device to scan the QR code and run the app directly

Please note that the app has been developed using Android, so some features may not fully work on iOS or web.

🤔 Known issues

  • Real-time Firebase updates can occasionally cause race conditions or timing issues
  • Winner announcements are only shown for the user that resets the lap, so even if another user in the group is using the app at the moment, they won't see the announcement. This is because the announcement is currently only triggered by the lap reset action, and there is no real-time listener for lap changes in the app. Fixing this would ensure a more smooth and realistic user experience, since without it, users might not notice when a new lap starts
  • Task assignment is currently limited to self-assignment, so users cannot assign tasks to other group members. This is a significant limitation that affects the collaborative aspect of the app. It was initially left out due to issues with Firestore security rules, but it is definitely a key feature that should be implemented in the future
  • Some features may not fully work on iOS or web (developed using Android)
  • UI still needs polish in certain views

💡 Future improvements and ideas

  • task assignment between different users (currently limited to self-assignment)
  • join request / approval flow for new group members
  • automatic weekly or monthly laps/rounds (currently laps are handled manually)
  • calendar view to see upcoming chores and deadlines
  • push notifications and reminders
  • completion verification (e.g. photo proof)
  • recurring chores with automated creation
  • statistics or history of completed chores and points
  • animations and other visual effects to make the app more engaging
  • better iOS and web support

🔒 License

This project is publicly available for educational and portfolio purposes only.

You may view and study the source code, but commercial use, redistribution, or reuse of substantial parts of the project is not permitted without explicit permission from the author.

About

Gamified household chore tracking app built with React Native and Expo

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages