Web portal¶
The Splintertree web portal (splintertree-web-frontend) is the same Quasar
2 / Vue 3 SPA the launcher hosts, served from a regular HTTP server for
browsers. It runs against the public splintertree-web-api and shares the
account / shop / forum / social / database backends with the launcher.
Surface¶
The browser portal hosts the operator-facing routes the launcher chrome
deliberately hides plus the same public game database the launcher Database
dropdown points at, just under MainLayout instead of LauncherLayout.
- Public — landing page, news, game database (items / quests / NPCs / achievements / guilds / zones / armory), features pages (classes, races, professions, PvP, raids, dungeons), realm list, public character pages, public guild pages, forum, shop (read-only browse without login), changelog, download.
- Authenticated — account page (same layout as the launcher's, see Account & security for the shared model), My Mail, My Auctions, My Tickets, redemption flows.
- Admin —
/admin/*routes for the operator: accounts, characters, bots, realms, games, patches, base content, shop, gametime, database browser, build jobs, mods, tickets, world config, tunables, calendar, guild and arena admin, NPC AI, Warden logs, anti-cheat dashboards.
Sharing with the launcher¶
Both contexts boot from the exact same SPA bundle. The Vue router decides
which layout to use based on the URL prefix (/launcher/* →
LauncherLayout, everything else → MainLayout). The useAuth store +
axios instance are shared, so a token issued via the launcher works on the
portal and vice versa — and the launcher boot mirrors the Tauri-side auth
into the same store at startup so a single sign-in keeps both surfaces
authenticated.
The router guard rejects any non-/launcher path inside the Tauri shell;
the launcher therefore mounts the public game database a second time under
/launcher/db/* instead of redirecting through MainLayout.
Email-only login¶
The portal's LoginPage and RegisterPage use the same email +
splintertag flow the launcher does. Username doesn't exist as a concept on
either side; the schema dropped auth.account.username entirely.
Where it runs¶
Production: split deployment behind a CDN (Netlify/CloudFront/etc.) for
the static SPA, with /api/v1/* reverse-proxied to a clustered
splintertree-web-api. Operators usually pin the portal at the apex
domain and the launcher Tauri app uses the same api_base_url.