009ea560f9
Reshape the lobby UI from a single Overview into a two-level sidebar (games · profile · DEV synthetic-reports) with four games sub-panels (active-past · recruitment · invitations · private-games). Move the `create new game` button into the private-games panel, merge the applications section into recruitment cards as status chips, and add DEV-only synthetic-report loader as a top-level screen. Add a paid-tier gate at backend `lobby.game.create`: free callers get `403 forbidden` before the lobby service is invoked. The UI hides the private-games sub-panel + create button on free tier (DEV affordances flag overrides). Update every integration test that creates a game to use a new `testenv.PromoteToPaid` helper; add a new `TestLobbyFlow_FreeUserCreateGameForbidden`. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
27 lines
631 B
TypeScript
27 lines
631 B
TypeScript
declare global {
|
|
// Build-time constant injected by Vite from package.json version.
|
|
const __APP_VERSION__: string;
|
|
|
|
namespace App {
|
|
// Shallow-routing state for the single-URL app-shell: the screen
|
|
// (and active game) live in `page.state` so browser Back/Forward
|
|
// move between screens while the address bar stays at /game/.
|
|
interface PageState {
|
|
screen?:
|
|
| "login"
|
|
| "lobby"
|
|
| "lobby-create"
|
|
| "profile"
|
|
| "game"
|
|
| "games-active-past"
|
|
| "games-recruitment"
|
|
| "games-invitations"
|
|
| "games-private-games"
|
|
| "synthetic-reports";
|
|
gameId?: string | null;
|
|
}
|
|
}
|
|
}
|
|
|
|
export {};
|