A data story by Jonathan Williams

Konnect Gaming:
built solo, measured everything

I founded a competitive gaming platform that runs tournaments with zero human intervention, then built the analytics discipline that steers it: a Python to Power BI pipeline, product analytics, and first party measurement that decides what ships next.

761players
220events run
1,746matches played
41Knotifications measured
2,947Discord members
~150cloud functions
▶ Open the live interactive dashboard
Opens the real Power BI report in a new tab, no sign in needed. Click through all seven pages, filter, and hover the charts.

The story

01 · THE PROBLEM

Fighting game communities run on volunteer organizers, and brackets die when the organizer burns out. I set out to build tournaments that run themselves: events that create, fill, run, and finalize with nobody on duty.

02 · THE BUILD

One React codebase shipping to web, iOS and Android, on Firebase and Google Cloud with roughly 150 serverless functions. Operated solo, with AI assisted engineering under my direction and an independent automated review gate on every change.

03 · THE DISCIPLINE

Every lever gets measured before the next one gets built. When the data said players vanish after small first events, I rebuilt the schedule. When it said our ads made zero accounts, I cut them. The dashboards below are how the business thinks.

The measurement pipeline

Production data lives in Firestore. A Python ETL I built exports 32 collections over the REST API, strips PII by key pattern, replaces every person with a salted HMAC pseudonym, and gates each export behind an automated privacy scanner that must report zero findings. The result loads into a Power BI semantic model, 34 tables and 41 DAX measures, rebuilt entirely from code, and a Windows scheduled task refreshes the whole thing every six hours.

Firestore

Production NoSQL database: players, events, matches, a per send notification ledger

▸

Python ETL

Allowlist extraction, field masks, PII stripping, HMAC pseudonyms, privacy scanner gate

▸

Power BI

34 table semantic model, 41 DAX measures, Power Query through one shared M function, versioned as TMDL code

▸

Every 6 hours

Scheduled refresh with disk, battery and quiet hour guards, logged outcomes

Alongside it: PostHog for client side product analytics (event taxonomy, HogQL queries, staff excluded), and first party ledgers for anything that has to be trusted, including verified click attribution through signed links and a delivery ledger across push, email, Discord and in app channels. Every surface labels server observed versus client reported numbers.

The dashboards

Live captures from the Power BI report, November 2026, running a custom Konnect theme (a hand written Power BI theme JSON: brand palette, dark canvas, themed axes, tables and cards across every page). All person level data is pseudonymized before it ever reaches the model.

Overview page: player, activation and event KPIs with growth charts

Overview

The headline: 761 players, 61.1% activation, a 75.7% check in rate, and acquisition sources traced per player.

Events page: completion rates, registrations by game, per event table

Events and brackets

220 events with a 50.2% completion rate and a 43.7% repeat entrant rate. This page exposed that over half of scheduled events never ran, which drove a full schedule redesign.

Matches page: forfeit reasons, rates by game and bracket side over time

Matches and fair play

1,746 matches, a 10.3% forfeit rate, and the chart that mattered: forfeits are dominated by no shows, not disputes. That finding reshaped the check in flow.

Growth page: DAU WAU MAU, community size, notifications by lane, retention cohorts

Growth, community and notifications

DAU, WAU and MAU tracked daily, community growth across Discord and Instagram, 41K notifications broken out by channel, and retention cohorts since August.

Features page: product feature usage, new versus returning users per feature

Features: what people use

PostHog sourced feature adoption, new versus returning per feature, with staff and test accounts excluded so one operator cannot distort the numbers.

Scene page: 2,228 discovered external tournaments mapped by month, game and state

The wider scene

Market intelligence: 2,228 real world tournaments and 49K entrants ingested from the start.gg API and mapped by game, month and state to find the communities worth partnering with.

Explore the data yourself

These charts run right here on the page from the same pseudonymized export the dashboards use, snapshot November 9, 2026. Pick a game and hover the lines below, and hover the bars — or open the full live Power BI report to click through all seven pages.

0registrations
0check ins
0events completed
Registrations Check ins
View as table
Registrations by game
Where players come from

Findings that changed the business

49% vs 27%

Players whose first event had 8 or more entrants returned at nearly double the rate. The whole schedule was consolidated into fewer, fuller nights because of this cohort analysis.

42% vs 34%

A daily versus weekly cadence experiment on Tekken nights. Daily won on retention, and fill curve analysis later right sized it again.

57% unreachable

A notification funnel audit found most invite recipients had no alerting channel at all, and opens were untracked everywhere. I built the delivery ledger, open tracking and channel capture that closed the gap.

0 signups

End to end attribution on paid Instagram and Reddit campaigns showed zero accounts created. Spend moved to owned channels and community partnerships with measured conversion.

6% to 46%

One notification badge moved friend request accepts from 6% to 46%. It institutionalized the habit of measuring the last change before building the next one.

Fake collapse caught

A metrics backfill made historical DAU look like it fell from 334 to 30. I proved it was a measurement artifact, fenced the dashboards, and re derived retention from raw events.

The stack

Analytics

Power BIDAXPower Query MTMDLPython ETLPostHogHogQLCohort analysisAttributionData privacy

Platform

React 18ViteCapacitoriOS + AndroidPWAFCM push

Cloud

FirebaseFirestoreCloud FunctionsNode.jsCloud LoggingCloud MonitoringGitHub Actions

Integrations

Discord APITwitch EventSubstart.gg APIStripeResendOBS + StreamlabsRemotion