Why this app exists
A productivity app does not live without its engine room.
The mobile app is the visible part: what someone opens in the morning to find their goals, the day's tasks, their journal and their ideas.
Behind it, someone has to be able to follow real usage, manage accounts and their roles, send a notification to a precise audience, publish content, fix an entry in the FAQ or update legal texts in several languages. None of that should require shipping a new build to the stores.
That is what the web dashboard is for: it works on the same database as the mobile app, with permissions that cannot be worked around from a client.
The engineering challenges
A back office is judged on what it prevents.
Admin rights carried by the token, not by the database. The role is a signed claim inside the authentication token, not a field a client could write. Two server triggers set and clear that claim when an administrator is added or removed, then revoke refresh tokens so the change applies immediately rather than at the next expiry. An audit trail accompanies every change, in a collection only the server can write to.
Database rules that deny by default. The last rule in the file forbids anything not explicitly allowed. Each user is isolated on their own data tree, and the sensitive areas, audit trail, metric snapshots and budget alerts, are read-only from the client: they exist only through server writes.
Seeing the bill before it arrives. The dashboard reads infrastructure metrics, reads, writes, ninety-fifth percentile latencies and server errors, with an aggregation step matched to the requested period, then the real costs per service from the billing export. If the export table is not in place yet, the response says so explicitly instead of falling over, and a failure on one metric series returns an empty list rather than breaking the whole page. A periodic snapshot and budget alerts complete the setup.
A single-page application on shared hosting. Refreshing a deep link returned an error, since the server looked for a file that does not exist. The automated deployment now generates the server configuration before uploading: route rewriting back to the app, cache expiry, and security headers set along the way.
A back office has no business in a search engine. The dashboard declares itself non-indexable, both in the page and in the file meant for crawlers, and it signs the user out automatically after a period of inactivity, listening to real activity rather than running a plain timer.