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.
The marketing website has its own case study.
Today view with tasks and seasonal hints
Quest map with MapLibre and offline packs
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
Bare workflow with the New Architecture, builds run locally via Gradle instead of cloud services
File-based, typed routes across 57 screens, Expo modules used as a library instead of Expo Go
Strict mode across 337 source files in 34 feature domains
Two custom edge functions with an isolated schema and its own JWT secret, no direct database access from the client
Local state in native key-value stores, the app starts and works offline-first
1:1 video calls between friends, signaling runs over Supabase Realtime Broadcast instead of a dedicated server
Custom Expo native module for Android picture-in-picture during calls
Image labeling as a hint and an NSFW filter before any shared photo, both entirely on the device
End-to-end encrypted chats and photo sharing between friends
Exploration map with downloadable offline packs
Worklet animations, FlashList v2 for lists, film-grain texture as a Skia shader
483 unit tests across 63 test files, plus a script that checks every color pair against WCAG 2.2 AA
Three architecture decisions
No Supabase Auth, no PostgREST: all traffic runs through two custom edge functions with an isolated schema and its own JWT secret.
Image labeling (ML Kit) and NSFW checks (TFLite) run locally. No photo leaves the device for analysis.
GPS plus timestamp is the real evidence, ML only provides hints. Anti-cheat multipliers weight XP by verification level.