QuestForge is a React Native quest tracker that turns everyday tasks into an RPG-style progression loop. It uses a local Node backend as the source of truth for quests, hero progress, theme settings, suggestions, and board configuration.
- Create, edit, start, complete, fail, and delete quests
- Track XP, levels, ranks, achievements, and daily streaks
- Browse a dedicated quest history and streak calendar
- Search, filter, and sort the active quest board
- Pull daily quest suggestions from the backend
- Switch between light and dark mode plus backend-driven theme packs
- Show due-soon and overdue reminder prompts, with Android notifications for timed quests
- React Native
- TypeScript
- Local Node backend in
backend/server.js - Android native notification bridge for reminder alerts
- Node.js
- Android Studio with an Android emulator
- JDK 17
npm installnpm run backendThe backend runs on http://localhost:4000.
npm startIf you want a clean reload:
npm start -- --reset-cachenpm run androidFor the Android emulator, the app automatically tries emulator-safe backend hosts such as 10.0.2.2.
QuestForge supports reminder-based deadlines for in-progress quests.
- All-day deadline format:
YYYY-MM-DD - Timed deadline format: full date-time such as
2026-04-03T18:00
When a timed quest is close to its deadline:
- the quest is highlighted on the board
- Android can show a local reminder notification
- if the quest becomes overdue, the app shows an in-app prompt asking whether the quest was completed
On Android 13 and above, the app may ask for notification permission the first time a reminder needs to be shown.
Quest Board: active quests, daily suggestions, filter/sort controls, and the main hero overviewQuest Forge: create or edit a questProfile: XP, ranks, progress, achievements, and reset flowHistory: completed and failed quests with day, month, and year filtersStreak Calendar: active-day view of streak progressQuest Details: deeper view for one selected questTheme Sanctum: backend-driven theme pack selectionRealm Codex: backend summary screen
The backend stores data in backend/data/.
game-state.json: saved app stateapp-config.json: backend-driven board and screen copy
If the app shows the backend as offline:
- Make sure
npm run backendis still running - Check
http://localhost:4000/game-state - Restart Metro with
npm start -- --reset-cache - Relaunch the Android app
Useful project checks:
npx tsc --noEmit
npx eslint App.tsx backend/server.js src/api/gameStateApi.ts src/notifications/questNotifications.ts __tests__/App.test.tsx
npm test -- --runInBandThis app was built to understand how a backend-driven app works.