Skip to content

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.