2025
Bulgarian Society Android App
My graduation project, built over the final semester at Hanze for the Bulgarian Society Netherlands, which I co-founded in November 2022 and am still part of today. The organisation was a national board and seven city branches then, each running its own Instagram, its own TikTok and its own events, and each keeping the numbers wherever that year's board happened to put them.
It is an Android app written in Unity. A board signs in with Google and sees its own branch; the national board signs in and sees all eight. Over the top of the figures sit 46 trophies.

Who sees what
Sign-in is Google OAuth through Firebase. The address that comes back is looked up against a whitelist in the Realtime Database, that lookup returns a role, and the role decides which dashboard loads. An address that is not on the list never gets past the login screen. A copy of the list ships inside the app as well, so a bad connection cannot lock out somebody the system already knows.
The national role sees every branch and gets a Cities tab to move between them. A city board signs in and there is no Cities tab at all: the four buttons along the bottom become three, and the only branch in the app is its own.

Getting Google Sign-In into Unity
Unity has no Google Sign-In of its own, so it takes two pieces working together. The Google Sign-In plugin opens the native Android account picker and hands back an ID token. Firebase Auth takes that token, exchanges it for a credential, and signs the user in.
Both plugins rely on native Android libraries that do not ship inside them, so Unity downloads those from Google when the project is built for Android.
Nobody types the numbers in
The whole point was to stop somebody gathering figures by hand every month, so nothing in it is gathered by hand. Apify runs scrapers against each branch's Instagram and TikTok every six hours. Make.com watches those runs, and when a new one finishes it writes the dataset id into a cell in a Google Sheet. An Apps Script picks that id up on the hour, pulls the JSON, matches each account back to the branch that owns it, and writes the result into the sheet the app reads.
Event figures arrive the other way round, from an endpoint the association already ran, over an API key, once a day. Every script run appends a timestamped line, so when a number looks wrong the first question, which is when did this last update, has an answer sitting next to it.
Google Sheets was the client's condition rather than my pick, and it was the right condition: it is where the boards already worked. Unity reads it through the Sheets API and keeps the last good response on the device, so the app opens on a train with no signal showing yesterday's numbers rather than an error.

46 trophies
Six things are counted: Instagram followers, TikTok followers, TikTok likes, tickets sold, average attendance and events run. Each one climbs a ladder of thresholds, bronze then silver then gold and up, 46 in total.
This is the gamified half of the brief. The trophies turn the metrics into milestones the boards actually want to chase, and give a branch something to aim at instead of a number to look at.

GDPR
The app is GDPR compliant. A privacy notice comes up on first launch, and the full policy is readable from the login screen and from the profile menu. View my data prints everything held about you. Delete my data wipes it and revokes the acknowledgement, so the notice comes back at the next launch.

Why Unity
A dashboard is not what Unity is for, which is why I built it there. I studied game design, the brief asked for gamification, and putting it in a game engine was the challenge I set myself: get the achievements, the unlocks and the animation working in the tool actually built for that, and show Unity holds up well outside a game. Unity 2022.3.41f1, charts by XCharts, shipped as an Android APK under 75MB.
Every screen holding data has pull to refresh, and the sync path behind it is the same everywhere: check the network, request, parse, cache, then update the models, the charts and the achievement system off one event.
The one that replaced it
A year later I built its successor, a web dashboard rather than an app. The organisation had grown to nine, the finance side had become the hard part, and a browser could do the Stripe work an Android build could not. What carried across is the shape of the problem: one login, one place, per branch.