Skip to content

Repository files navigation

Graz

Graz is a mobile app that turns climate action into something you can actually do — one small, real-world act at a time.

What is this, in one minute

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:

  1. Learn — short, plain-language lessons on real climate topics (flooding, waste, clean energy, trees, water, and systems thinking — how small actions add up).
  2. 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.
  3. 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.

Why it's different

  • 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.

The big idea in one line

Learn a little, do one real thing, see it count — and repeat until small acts become real climate impact.

Download Android APK

Install Graz on your phone without building anything:

  1. Open the latest release: Download Graz APK
  2. Download graz-1.0.0-release.apk
  3. On your phone, allow install from that browser/Files app if Android asks
  4. Open the APK and install

Package id: app.graz.climate

Prefer building from source? See Android builds below.

Features

  • 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)

Stack

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.

Prerequisites (dev)

  • Node.js LTS
  • Bun
  • Expo Go, iOS Simulator, or Android device/emulator
  • A Neon project with Auth + Data API (optional for guest mode)

Getting started

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 start

Then 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

Configuration

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

Project layout

.
├── 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

Android builds

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 AAB

Local 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.apk

Install 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

Troubleshooting

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

License

Private unless otherwise stated.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages