A pan_mundial project · In private use

Zöggele HQ

Software for three people.

Three friends have been playing EA FC tournaments against each other since 2024. Results lived in a spreadsheet, fixtures were drawn up by hand — and at some point nobody knew who had beaten whom how often. Zöggele HQ turns those evenings into a complete league with history: tournament planning, result capture, statistics across years, chat, calendar and a menu plan for the evening itself.

Android app In use since 2024 Private — 3 users

Not a product. And that is exactly the point.

Zöggele HQ is deliberately built for exactly one group — no target audience, no roadmap, no monetisation. The appeal is not scale but the fact that a small, clearly bounded domain has been thought through completely: from fixture rhythm to the question of who brings dessert.

Half of the app is, strictly speaking, unnecessary — a trophy ceremony with confetti, collectible cards for virtual heroes, tabloid match reports, six complete colour worlds. None of it solves a problem. All of it makes the evening better.

From kick-off to the trophy room.

The tech in one line: Flutter and Dart, Riverpod, Firebase directly without a server layer of its own, on-device text recognition, AI texts via API — around 25,000 lines of code, distributed outside the app stores.

Three cases where the app behaved correctly — and was still wrong.

The cold-start sign-in bug

After every full close, users had to sign in again. The cause sat deep in the auth library: on Android it discards the first native event and relies on a cache that is empty on cold start. The obvious fix — waiting for the auth state on launch — would have been useless, because it reads the same empty cache. That only became clear from reading the library's source.

Updates without an app store

Without a store, nobody updates — the group ran on different versions for months. The answer: a tiny self-built distribution. The app checks a version file on launch and offers a download; the build script publishes the announcement only after verifying the file is actually reachable. And the version check swallows every error — a failed check must never lock anyone out.

A language model that does not fail

Match reports broke when the model in use was retired. The app now tries a list of models in order and remembers the last one that worked. Three safeguards fight texts that end mid-sentence — down to cutting at the last complete sentence. Better one sentence fewer than a word fragment.

Zöggele HQ is private and stays that way.
The patterns behind it — robustness without a server, self-built distribution, AI with safety nets — flow into every client project.

Questions about the project? Get in touch via pan_mundial.