Staff panel#
The staff panel is the web control room of the project: it lives under the fyndi.app domain, requires a staff account, and is the only place where content, players, releases and the project's knowledge are managed.
What the panel is#
- It is a web application, not a separate program: pages under
/panel/…, served by the same server as the website. An ordinary player never sees it. - After logging in, a normal user gets the landing page and
/account— the account screen has the same view for every role, without a list of users. - Staff additionally get a Panel button in the menu. Managing accounts happens in the panel's dashboard area, not on the account page.
- On a phone it can be installed like an app: open the panel in Chrome for Android, then browser menu → Add to Home screen / Install app. The
fyndiicon opens the panel without the address bar.
Inside, the shell is common to every page: a collapsible sidebar (the width and the collapsed state are remembered in the browser), a slim command bar above the content with a search field, a PRODUCTION marker and a refresh button, and a command palette under Ctrl/⌘ + K. On narrow screens the sidebar becomes a drawer and the bottom tabs behave like the app's bottom bar.
Roles and access#
| Role | What it can see |
|---|---|
user | landing page and /account only — no panel at all |
mod | the whole panel except the admin-only pages |
admin | everything, including users, crash reports, rewards, releases and the security/backup pages |
The menu is grouped into five sections — Dashboard, Content, Players, Operations and Knowledge. A menu entry without a role restriction is visible to mod and admin; an entry marked admin is hidden from mod, and a whole group disappears when none of its entries is available to you.
- Typing an admin URL while being a
moddoes not work — the page redirects to the dashboard with a message, because the access check runs before the page renders. - The API checks the same thing again. Hiding a button is convenience; the server-side role check is the actual gate, which is why a direct API call with insufficient rights answers with a refusal rather than data.
Panel pages#
| Page | Who | What it is for |
|---|---|---|
| Dashboard | staff | production status bar, KPIs, 7- and 30-day activity, security report, “needs attention”, recent events, content in the game, the app release, planning and quick actions |
| Content creator | staff | routes, stops and finds: unlock rules (GPS / puzzle / AR), media and 3D model uploads, sponsors |
| Planning | staff | the task board and shared notes: a text editor plus voice notes (the recording stays, the text is transcribed) |
| Media | staff | the file library on the server: upload, preview (including 3D), copy URL, delete |
| 3D models | staff | the object generator for the map and AR: prompt → 2D concept → 3D model, with a cost log. Characters are not made here |
| Character generator | staff | the blocky wardrobe (hair, hats, clothes, extras, colours, randomise) — the same creator as in the Android app |
| NPC bots | staff | the bot list: kind, loop, pace, gift and duty calendar; add, edit, enable, disable |
| Rewards | staff | token rules (event → amount, daily limit), the reward catalogue and redemption history |
| Wiki (project brain) | staff | the project's knowledge graph: technical notes, decisions, the work journal — staff only |
| Releases | admin | a read-only view of the APK mirror: what is in the releases and what a phone sees when updating |
| Translations | staff | overriding app and website texts in Polish and English without a new release; an empty field means “fall back to the text inside the app” |
| Users | admin | the list of accounts with filters and the guest card; the details view holds the whole account plus the character in 3D |
| Reports | admin | crash reports sent by the app: summary, row list, full stack after clicking, filters and an empty state |
| Account | logged in | the player-facing screen (/account), including the link to the character creator |
Documentation moved out of the panel: the technical and player sections that used to sit under /panel/docs are now this site — docs.fyndi.app. The address redirects here, so an old bookmark still lands in the right place.
Content creator#
The creator is one screen: map in the middle, panel on the left, details on the right. It is opened from the panel as Content creator, and the same code runs under /creator for mod and admin.
- Two tabs, not two steps. Stops and Route are independent sets of options, so they are not numbered:
1and2are shortcuts, and the route's own road section lives inside the route panel. Switching to Stops closes the open route (after saving pending edits). - The road is drawn by hand. The path between stops is not snapped to pavements, because stops are sometimes in the middle of a forest — the drawn line is what the app then follows.
- Details on the right, in a rail that can be dragged wider, collapsed or closed, with its state remembered. Selecting anything opens it.
- Order matters. Stops are reordered by dragging (or with the up/down/remove buttons), and the app completes them in that order.
- Publishing is a route-level switch: Publish in the app / Remove from the app.
| What you set on a stop | Options |
|---|---|
| Completion rule | GPS radius (45 m by default), a puzzle, or an AR view |
| Puzzle | question plus answer — the answer is stored only as a hash |
| Media | a photo, audio or a 3D model from the file library |
| Kind | an ordinary stop, a start of a route, or a find (a find is never a stop — Data model) |
Before publishing, one thing is worth remembering: the creator's own map is not the player's map. It shows draft material, while the app shows only published content, with the marker rules described in Map and markers.
Documented for app version 0.120.1 (updated 2026-09-26).
Machine translation — the Polish version prevails.