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.
- Create or join household groups using a join code
- Shared task management within groups
- Create, assign, complete, unassign, and delete chores
- Deadlines with automatic overdue detection
- Task sizing with different point rewards
- Task categorization and filtering
- 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
- Firebase Authentication (email/password)
- Firestore security rules for protected access
- User account management
- Responsive mobile-first UI
- Toast notifications and user feedback
- Live updates with Firebase
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
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
- Clone the repository:
git clone https://github.com/kkivilahti/chore-quest.git
cd chore-quest
- Install dependencies:
npm install
- Set up Firebase:
- Create a Firebase project at Firebase Console
- Enable Authentication (email/password) and Firestore Database
- Create a
.envfile 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
- 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 Goapp 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.
- 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
- 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
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.


