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.

The marketing website has its own case study.

React Native 0.86 React 19 Supabase TypeScript
View on Google Play
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
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.

<TechStack />

Tech stack in detail

React Native 0.86 Framework

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

Expo Router Navigation

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

TypeScript strict Language

Strict mode across 337 source files in 34 feature domains

Supabase Edge Functions Backend

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

Zustand 5 + MMKV State

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

WebRTC Video

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

Kotlin PiP module Native

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

ML Kit + TFLite On-device ML

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

tweetnacl Encryption

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

MapLibre Maps

Exploration map with downloadable offline packs

Reanimated 4 + Skia UI

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

Vitest Testing

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

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.