Skip to the content.

description: Three Flutter apps - location sharing, hazard warnings, messaging - what they do, how they sign in, what the screenshots show, and what is not finished.

The apps: the load the platform proves itself against

Flutter Loc8 Warn Talk

Three mobile apps, each a Flutter client for Android and iOS and a Spring Boot service on the platform: Loc8 shares location inside small groups, Warn maps road hazards that people report, Talk is a messenger with channels and time-boxed live events. They were chosen because together they push a complete vertical slice through every layer of the estate: identity, ingress, database, metrics, a signed image, a mobile release.

They are not a product, and this page says so first. None of them is in an app store, and the Android release builds are signed with a debug key. The clients are built to talk to a private homelab, so a visitor cannot install one and use it. “Create account” leads to the identity provider’s registration page, which the platform’s state notes say has been switched off since 2026-09-29 (not re-checked today), so only I can make an account. The people in the screenshots are three demo accounts. The apps exist to exercise the platform, and one of the bugs they exposed is lesson 12. The repository holds five Flutter clients; these three are the ones this site describes.

Versions are read from each app’s committed pubspec.yaml by the stats generator: Loc8 1.6.1+2, Warn 1.1.1+2, Talk 0.3.1+4. That is what the repository declares, not a store release. Two of the apps’ About dialogs carry a hard-coded version string that has fallen behind (see the end of this page), which is why the numbers above come from the file and not from the app.

What they look like

Real screenshots, taken on a Samsung phone and in the iOS simulator on 2026-10-09 against the live platform, using demo accounts. The images are cropped (status bar off), resized to 420 px wide, and in one the group’s invite code is covered by a grey box, because a live invite code lets whoever reads it ask to join. Nothing else is edited.

Loc8 sign-in screen: Sign in and Create account buttons
Loc8, signed out. No password field: the app hands off to the identity provider.
Loc8 map of Denmark with two coloured member pins joined by a red trail line
Loc8 map: two members as coloured pins, a 30-minute trail. The positions are simulated, one near Aalborg and one in Copenhagen.
Loc8 group details: invite code redacted, Show QR Code button, join requests, geofences, three members
Loc8 group: invite code (covered here), a Show QR Code button, join requests, geofences, members.
Warn sign-in screen in amber: Community warning system
Warn, signed out. Same sign-in pattern, its own colour.
Talk app: a live event called Bobs Hike, with Event, Channels, Friends and Profile tabs
Talk, a live event ("Bobs Hike", a demo). The red dot means live now.

What is missing. There is no screenshot of Warn’s map with hazards on it: the simulator showed no map tiles when I tried, and a grey screen with one pin would read as broken. The Loc8 map is from a real phone for the same reason.

Loc8: who is where, in a group you chose

Private, invite-only location sharing. You make a group, and others join with an eight-character invite code or by scanning its QR code, and the owner approves each request. Members appear on a Google map as coloured pins that fade as their last fix ages (full under five minutes, faint after fifteen). A trail toggle draws where each member has been over a window from five minutes to a day. Each group has a text chat. The owner can draw circular geofences on the map.

Tracking has four modes, from High Accuracy (a fix every 30 s or 10 m) to Stay Alive (every five minutes or 500 m), and works in the background on both platforms: an Android foreground-service notification, the iOS background-location indicator.

The backend stores positions in PostGIS. For geofences it checks every uploaded position against the active zones of the uploader’s groups and records enter and exit events, for zones that have the matching notify flag switched on.

Warn: hazards near you, reported by people near you

A crowdsourced road-warning map. Speed cameras, police checkpoints, accidents, road works, animals: ten warning types, each a marker on the map, with a count of how many are within 5 km. You report one with a type and an optional description at your current position, and other people vote it up or down. In the background, the app alerts you as you come within 500 m of one. That check runs on the phone; the server only answers “what is near this point”.

Queries use PostGIS distance-on-the-globe over a spatial index, warnings expire on their own after a day, and deleting your account anonymises your reports rather than removing them, which is what a public-safety dataset wants and what store rules allow.

Talk: a messenger with a live-event mode

Direct messages, channels, forums with threads, reactions, typing indicators, and events: time-boxed sessions you join by scanning a QR code. Inside an event, members can opt in to share live location on a shared map with breadcrumb trails, a rally point, and a halo on anyone falling behind the group. Real-time messages travel over a WebSocket (STOMP) that re-authorises before every reconnect.

Join tokens are signed, stateless QR payloads, and a geofence can limit joining to people who are actually at the place. The straggler check is one spatial query on the database rather than a loop in application code.

How they sign in

All three work the same way, and none has a password field.

The bug that was real

On 2026-10-09 the question was why old devices had to sign in again “very often”. The identity provider’s timeouts were not the cause: the apps ended a session on any failure while refreshing a token, a dropped connection included. They now sign you out only when the server positively rejects the refresh token (an exact invalid_grant), and a cold start with no network keeps you in. The mechanism, and what I got wrong on the way, is in lesson 12. The realm settings that go with it (token lifespans, event logging, the demo accounts) are code in the platform’s provisioning playbook as of 2026-10-09, not something clicked into an admin console.

What they are not (yet)

Stated plainly, because the screenshots above flatter them.

Several of these are the kind of gap the lessons page is about: the README and the code disagreed, and the code was right. The apps’ own READMEs still describe features, such as push notifications, that the code does not have.

Where this fits

The apps are the workload, and the platform is the point. They are why the database failover mattered, why the incident had somewhere to land, and why the synthetic traffic that the estate page describes has real endpoints to hit. Source for the apps is in the private platform repository, with the rest of the estate.