Our own product · Live on Google Play

Glenby Android App

The microadventure app behind glenby.de: 14,702 nature tasks with GPS verification, co-op parties, video calls and end-to-end encrypted chats. Built as a bare React Native app with local Gradle builds.

  • React Native 0.86
  • React 19
  • Supabase
  • TypeScript
14,702 Nature tasks bilingual, 8 categories, seasonal
483 Unit tests across 63 test files (Vitest)
57 Screens Expo Router, typed routes
100% On-device ML image labeling and NSFW filter without a server

Store screenshots

The App in Use

Glenby app: today view with fresh nature tasks
Today view with tasks and seasonal hints
Glenby app: map with a route to a quest
Quest map with MapLibre and offline packs
Glenby app: collection with found moments
Collection: everything you find, in one place

Feature scope

Calm gamification instead of casino mechanics. Every feature respects privacy.

  • Daily tasks with GPS proof

    Pick a task, head out, take a photo with GPS pin and timestamp. XP multipliers scale with verification level instead of blind trust.

  • 14,702 nature tasks

    Bilingual, sorted into 8 nature categories, filtered by difficulty and season. A validation script checks the content automatically.

  • Collection & memories

    Automatic photo collection grouped by category, plus monthly and weekly albums.

  • Weekly streaks & 35 badges

    Streaks count per week. Badges with visible progress instead of confetti cannons.

  • Co-op parties

    Live sessions with friends via Supabase Realtime Presence, shared scavenger lists and party chat.

  • 1:1 video calls

    WebRTC calls with native picture-in-picture. Signaling runs on the existing realtime infrastructure.

  • E2E encrypted chats

    Photo threads per friend, encrypted with tweetnacl. An on-device NSFW filter checks every image before sharing.

  • Trailmates (18+)

    Anonymous co-op matching by experience level instead of photos, with an age gate, safety flow and blocking.

  • Offline maps

    MapLibre with downloadable map packs. The app stays usable outdoors without a connection.

  • Feed with transparency

    Friends-only feed ranked by closeness, with a visible line explaining why a post is shown.

  • Subscription under German law

    Stripe subscription with the §312k cancellation button and §356a withdrawal directly in the app.

  • Accessibility as a gate

    Color tokens in OKLCH, a build script checks every pair against WCAG 2.2 AA and fails on violations.

Tech stack

in detail

  • React Native 0.86

    Bare workflow with the New Architecture, builds run locally via Gradle instead of cloud services

    Framework
  • Expo Router

    File-based, typed routes across 57 screens, Expo modules used as a library instead of Expo Go

    Navigation
  • TypeScript strict

    Strict mode across 337 source files in 34 feature domains

    Language
  • Supabase Edge Functions

    Two custom edge functions with an isolated schema and its own JWT secret, no direct database access from the client

    Backend
  • Zustand 5 + MMKV

    Local state in native key-value stores, the app starts and works offline-first

    State
  • WebRTC

    1:1 video calls between friends, signaling runs over Supabase Realtime Broadcast instead of a dedicated server

    Video
  • Kotlin PiP module

    Custom Expo native module for Android picture-in-picture during calls

    Native
  • ML Kit + TFLite

    Image labeling as a hint and an NSFW filter before any shared photo, both entirely on the device

    On-device ML
  • tweetnacl

    End-to-end encrypted chats and photo sharing between friends

    Encryption
  • MapLibre

    Exploration map with downloadable offline packs

    Maps
  • Reanimated 4 + Skia

    Worklet animations, FlashList v2 for lists, film-grain texture as a Skia shader

    UI
  • Vitest

    483 unit tests across 63 test files, plus a script that checks every color pair against WCAG 2.2 AA

    Testing

Three architecture decisions

Isolated backend

No Supabase Auth, no PostgREST: all traffic runs through two custom edge functions with an isolated schema and its own JWT secret.

ML stays on the device

Image labeling (ML Kit) and NSFW checks (TFLite) run locally. No photo leaves the device for analysis.

Honest proof

GPS plus timestamp is the real evidence, ML only provides hints. Anti-cheat multipliers weight XP by verification level.