Graz is a mobile app that turns climate action into something you can actually do — one small, real-world act at a time.
Climate change can feel too big to do anything about. Most people want to help but don't know what actually makes a difference, or assume their small actions are pointless. Graz answers that.
It's a phone app (iOS and Android) that works in a simple loop:
- Learn — short, plain-language lessons on real climate topics (flooding, waste, clean energy, trees, water, and systems thinking — how small actions add up).
- Act — the app gives you a real "mission" to do in the physical world: clear a drain, sort plastic for a day, plant or water a tree, map a flood risk in your area. You snap a photo as proof.
- Grow — every action earns points, badges, and levels, so progress feels visible and rewarding — like a game, but the results are real.
It's built for young people in Ghana and communities facing real climate impacts — Accra's seasonal flooding, coastal erosion at Keta and Ada, water shortages — so the content names real local problems, not abstract global ones.
- Real actions, not just reading. You don't just learn about floods; the app asks you to go clear a drain and prove it.
- Teaches the "why," not just the "what." A systems-thinking course explains why small acts matter — fixing the cause (a blocked drain) instead of the symptom (a flooded street).
- Built to include everyone. During setup, Graz asks about accessibility needs (seeing, hearing, moving, reading, motion sensitivity) and adapts the whole app — bigger text, larger buttons, calmer screens, simpler wording — so people with disabilities can use it too.
- Honest by design. No fake leaderboards or made-up stats — it only counts what you actually did.
Learn a little, do one real thing, see it count — and repeat until small acts become real climate impact.
Install Graz on your phone without building anything:
- Open the latest release: Download Graz APK
- Download
graz-1.0.0-release.apk - On your phone, allow install from that browser/Files app if Android asks
- Open the APK and install
Package id: app.graz.climate
Prefer building from source? See Android builds below.
- Learn - multi-chapter climate courses, quizzes, related YouTube clips. Includes a systems-thinking course (root causes, feedback loops, leverage points) and Ghana-grounded topics like coastal erosion at Keta/Ada
- Missions - real-world actions with photo proof
- Quest / Green Rush - 2D lane runner with music, SFX, clear win/lose
- Daily claim and lucky spin - light reward loops
- Accessibility - onboarding asks about access needs (vision, hearing, motor, reading, motion); the app adapts with bigger text, larger touch targets, reduced motion, simple-language pacing, and screen-reader labels. Editable anytime in Profile → Accessibility
- Auth - email/password via Neon Auth, or continue as guest (local only)
- Cloud sync - signed-in progress in Neon Postgres (
user_progress)
| Layer | Tech |
|---|---|
| App | Expo SDK 54, Expo Router, React Native |
| State | React context + AsyncStorage |
| Auth | Neon Auth (managed Better Auth) |
| Database | Neon Postgres + Data API |
| Design | Soft Consumer tokens (brand.md) |
There is no local backend server. Neon is the backend.
- Node.js LTS
- Bun
- Expo Go, iOS Simulator, or Android device/emulator
- A Neon project with Auth + Data API (optional for guest mode)
git clone https://github.com/fozagtx/GRAZZ.git
cd GRAZZ
bun i
cp .env.example .env
# Add Neon URLs to .env if you want cloud auth/sync
bunx expo startThen press i (iOS), a (Android), or scan the QR with Expo Go.
bun run start # Expo Dev Server
bun run start-ios # iOS simulator
bun run start-android # Android
bun run start-web # web
bun run lint # ESLint| Variable | Required | Purpose |
|---|---|---|
EXPO_PUBLIC_NEON_AUTH_URL |
For cloud auth | Neon Auth base URL |
EXPO_PUBLIC_NEON_DATA_API_URL |
For sync | Neon Data API base URL |
Without these, the app still runs in guest / local mode.
Neon setup details: docs/BACKEND.md
SQL schema: docs/neon-schema.sql
.
├── app/ # Expo Router screens
├── components/ # UI + Green Rush
├── constants/ # lessons, colors, videos
├── docs/ # Neon + Android notes
├── lib/neon.ts # Auth + Data API client
├── providers/ # Auth + progress sync
├── assets/ # images, audio, rive
├── brand.md # design tokens / voice
└── .env.example
Native project: package app.graz.climate. Full notes in docs/ANDROID.md.
EAS (recommended for CI):
bunx eas-cli login
bun run android:eas # preview APK
bun run android:eas:prod # Play Store AABLocal release APK (Android SDK required):
export ANDROID_HOME="$HOME/Library/Android/sdk"
export JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home"
bun run android:prebuild
bun run android:apk
# Output: android/app/build/outputs/apk/release/app-release.apkInstall on a USB device:
adb push android/app/build/outputs/apk/release/app-release.apk /data/local/tmp/graz.apk
adb shell pm install -r -t /data/local/tmp/graz.apk
adb shell am start -n app.graz.climate/.MainActivity| Problem | What to try |
|---|---|
| APK won’t install | Enable “Install unknown apps” for your browser/Files |
| App opens then closes | Install the latest release APK (older builds had a Secure Store crash) |
| “Neon is not configured” | Fill .env, restart bunx expo start |
| Progress not in Neon | Sign up/in (not guest); wait a couple seconds after an action |
| Gradle download timeouts | Retry or use bun run android:eas |
Private unless otherwise stated.