An adult signs in, creates child profiles, sets up chores, learning checks, and rewards, then children earn stars for completing the day.
There are 4 areas:
- Chores: daily routines such as standard chores, eating timers, and water/toilet checks.
- Tests: lightweight learning activities for maths, place value, alphabet practice, and spelling.
- Rewards: a star shop where stars can be redeemed for configured rewards.
- Time Explorer: an interactive clock, school calendar, and day/night planet view for learning about time.
Photo attribution for the Who Am I animal and insect photographs is recorded in Who Am I photo credits, including photographers, original sources, licences, and modifications.
- React, TypeScript, Vite, and Tailwind CSS for the web app.
- Firebase Authentication, Firestore, Hosting, and Cloud Functions for backend services.
- Capacitor for Android packaging.
- Vitest, React Testing Library, and Playwright for tests.
- Three.js for the Time Explorer planet view.
src/
App.tsx App routes and protected shell
auth/ Firebase authentication context
components/ Shared UI and activity components
components/dayNightExplorer/ Time Explorer 3D and clock UI
contexts/ Active child, date, and theme state
data/ Firestore hooks and domain types
lib/ Business logic and date/solar helpers
pages/ Main tab pages and management screens
ui/ Chore/test/reward row descriptors
assets/ Theme, reward, alphabet, spelling, and clock assets
functions/
src/index.ts Scheduled and callable Firebase functions
tests/
unit/ Business logic and descriptor tests
component/ React component tests
e2e/ Playwright flows
android/ Capacitor Android project
docs/ Planning and implementation notes
public/prototypes/ Earlier visual and interaction prototypes
Use Node 24.21.0 LTS (also pinned in .nvmrc) and npm 12.1.0.
With nvm, run nvm install && nvm use, then npm install --global npm@12.1.0.
Nix users can use npx --yes npm@12.1.0 in place of npm to use the pinned
package manager without changing the read-only Nix installation.
Install dependencies:
npm ciCreate a local Firebase environment file:
VITE_FIREBASE_API_KEY=...
VITE_FIREBASE_AUTH_DOMAIN=...
VITE_FIREBASE_PROJECT_ID=...
VITE_FIREBASE_STORAGE_BUCKET=...
VITE_FIREBASE_MESSAGING_SENDER_ID=...
VITE_FIREBASE_APP_ID=...Run the app locally:
npm run devBuild for production:
npm run buildBoth the web app and Firebase Functions use Microsoft's TypeScript aliases:
@typescript/native provides TypeScript 7.0.2 and the tsc command;
typescript points to the 6.0.2 compatibility package, which supplies the
TS6 compiler API for ESLint and analysis tools (currently 6.0.3 in the
lockfiles). tsc6 remains available for comparing diagnostics. Keep both aliases
when updating dependencies so tsc continues to select the native compiler.
Sync the web build into the Android project:
npm run cap:buildAndroid uses Gradle 9.8.0, Android Gradle Plugin 9.4.1, SDK 37.2 (target API 37), and Build Tools 37.0.0. Install SDK platforms 37.0 and 37.2 for the app and Capacitor libraries. The Gradle wrapper downloads the pinned distribution and provisions a Java 25 LTS build JVM; Capacitor keeps the generated Java bytecode target at 21.
See the dependency upgrade notes for compatibility pins and validation results.
npm run lint
npm run test
npm run test:e2e
npm run format:checkThe backend includes scheduled generation and reset helpers for daily chores/tests, plus a school-calendar HTTP function. Function code lives in functions/src/index.ts.
Install function dependencies separately when working in that folder:
cd functions
npm installMyStarQuest is designed for adult-managed use. Child profiles are simple in-app records, not child accounts, and the data model is scoped under the signed-in adult's Firebase user document.