WarpEngine Client: the whole catalog, and a build that can point elsewhere
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/tag/woodpecker Pipeline was successful

**The app is called WarpEngine Client.** "Store" named the thing it opens rather than the
thing you run, and the store is a catalog on a site, not a window on your machine. The
window title, the bundle, the packages and the menu entry follow; the repository already
did. The store being driven is named in the side menu, so the bar stopped repeating it as
a badge — the element stays in the page, hidden, because the window check reads it.

**Every title is listed, including the ones this machine cannot install.** They arrive
from the engine with `installable: false` and a reason, and they are drawn dimmed, with an
*unsupported platform* or *no build for this machine* badge, the engine's own sentence
underneath, and nothing to press: a disabled Install would invite a click that can never
work. They get a category of their own — *Not for this machine* — and they are kept out of
the native/hosted categories and counts, because a title with no build has no mode to be
counted under. An engine older than desktop 1.2.0 is unaffected: a missing `installable`
field reads as installable, which is what those engines mean.

**A build can be pointed at another site's registry:**

    make dist STORES_API=https://games.example.org/api/stores

BuildConfiguration reads the packaged package.json, where electron-builder's
extraMetadata writes that address, so a client for somebody else's catalog needs no source
change and nothing set on the user's machine. Precedence is runtime environment, then
build, then ours — three audiences, most specific first.

Also: the scrollbars are the window's own, because the platform's light track down the
side menu of a dark window looked like a mistake.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-18 19:45:54 +02:00
co-authored by Claude Opus 5
parent a364a5ce5f
commit 8511ccbef8
23 changed files with 292 additions and 118 deletions
+7
View File
@@ -1,6 +1,9 @@
/** How a title runs: unpacked on this machine, or served as a web build. */
export type GameModeDto = 'app' | 'web'
/** Why a title cannot be installed on this machine. */
export type UnavailableReasonDto = 'platformOff' | 'hostAsset' | 'noAsset' | 'vetoed'
/**
* A catalog entry as the window needs it.
*
@@ -23,4 +26,8 @@ export interface GameDto {
readonly updateAvailable: boolean
readonly installedVersion: string | null
readonly launchable: boolean
/** False for a title this machine cannot install; it is listed all the same. */
readonly installable: boolean
readonly unavailableReason: UnavailableReasonDto | null
readonly unavailableDetail: string | null
}
+4 -1
View File
@@ -5,7 +5,7 @@
* translation is a compile error rather than a blank label at runtime.
*/
export const ENGLISH_MESSAGES = {
appName: 'WarpEngine Store',
appName: 'WarpEngine Client',
refresh: 'Refresh',
install: 'Install',
update: 'Update',
@@ -18,6 +18,8 @@ export const ENGLISH_MESSAGES = {
hostedHint: 'Opens in your browser — needs the network',
nativeHint: 'Installed on this machine — works offline',
updateAvailable: 'update available',
unsupportedPlatform: 'unsupported platform',
unsupportedBuild: 'no build for this machine',
log: 'Log',
menu: 'Menu',
stores: 'Stores',
@@ -29,6 +31,7 @@ export const ENGLISH_MESSAGES = {
catInstalled: 'Installed',
catUpdates: 'Updates',
catAvailable: 'Not installed',
catUnsupported: 'Not for this machine',
catPlatform: 'Platform',
catMode: 'Kind',
language: 'Language',
+4 -1
View File
@@ -5,7 +5,7 @@ import type { MessageBundle } from './MessageBundle'
* arrives from the store as it was published.
*/
export const HUNGARIAN_MESSAGES: MessageBundle = {
appName: 'WarpEngine Store',
appName: 'WarpEngine Client',
refresh: 'Frissítés',
install: 'Telepítés',
update: 'Frissítés',
@@ -18,6 +18,8 @@ export const HUNGARIAN_MESSAGES: MessageBundle = {
hostedHint: 'A böngészőben nyílik meg — internet kell hozzá',
nativeHint: 'Erre a gépre telepítve — internet nélkül is megy',
updateAvailable: 'frissítés elérhető',
unsupportedPlatform: 'nem támogatott platform',
unsupportedBuild: 'ehhez a géphez nincs build',
log: 'Napló',
menu: 'Menü',
stores: 'Store-ok',
@@ -29,6 +31,7 @@ export const HUNGARIAN_MESSAGES: MessageBundle = {
catInstalled: 'Telepítve',
catUpdates: 'Frissítés',
catAvailable: 'Nincs telepítve',
catUnsupported: 'Erre a gépre nem',
catPlatform: 'Platform',
catMode: 'Fajta',
language: 'Nyelv',