openvibers/openvibe.games Commits

Games: Salvage Rush and the leaderboard in the nav, footer and 404 links (#47)

OP OpenVibers committed 12 Oct 2026 · 300dfe2ad5 · 3 files, +15 −2

Salvage Rush and its leaderboard become reachable from every Games page, not just the front-page card (Games#46).

- **Frame navbar:** Games · Scraplandia · Salvage Rush · Leaderboard. On play.openvibe.games, Salvage Rush links to `/?game=salvage-rush`.
- **Footer:** adds "Play Salvage Rush" and "Leaderboard".
- **404 pages** on both hosts offer "Play Salvage Rush" (and the leaderboard on the apex).
- **Front page:** the description and og:description name both games.

`typecheck`, `lint`, Prettier and `httpServer.test.ts` (33) pass.

Changes

ddiff --git a/apps/client/index.html b/apps/client/index.html
iindex b880f37..1097691 100644
---- a/apps/client/index.html
++++ b/apps/client/index.html
@@@ -7,7 +7,7 @@
<title>OpenVibe.Games — browser games on the OpenVibe network</title>
<meta
name="description"
-- content="The games arm of the OpenVibe network. Play Scraplandia — scrappy multiplayer survival-building in Scrap City — in your browser, no download."
++ content="The games arm of the OpenVibe network. Play Scraplandia, multiplayer survival-building in Scrap City, or Salvage Rush, 90-second scrap-collecting rounds with a leaderboard, in your browser with no download."
/>
<!-- The OpenVibe Frame: the user's theme before first paint, then navbar + footer. -->
<!-- Deferred: a slow or unreachable openvibe.network never holds the first paint (the inline colours above cover it). -->
@@@ -21,7 +21,7 @@
<meta property="og:title" content="OpenVibe.Games — browser games on the OpenVibe network" />
<meta
property="og:description"
-- content="Play Scraplandia — scrappy multiplayer survival-building in Scrap City — in your browser, no download. One OpenVibe account across the whole network."
++ content="Play Scraplandia or Salvage Rush in your browser, no download: survival-building in Scrap City, or timed scrap-collecting rounds with a leaderboard. One OpenVibe account across the whole network."
/>
<meta property="og:url" content="https://openvibe.games/" />
<meta property="og:image" content="https://openvibe.games/og-image.png" />
ddiff --git a/apps/client/public/frame.js b/apps/client/public/frame.js
iindex 6719295..5d0acf8 100644
---- a/apps/client/public/frame.js
++++ b/apps/client/public/frame.js
@@@ -24,6 +24,12 @@
var PORTAL = local || !onPlayHost ? '/' : 'https://openvibe.games/'
var PLAY = local ? '/play' : onPlayHost ? '/' : 'https://play.openvibe.games/'
var EDITOR = local || !onPlayHost ? '/editor' : 'https://openvibe.games/editor'
++ var RUSH = local
++ ? '/play?game=salvage-rush'
++ : onPlayHost
++ ? '/?game=salvage-rush'
++ : 'https://play.openvibe.games/?game=salvage-rush'
++ var BOARD = local || !onPlayHost ? '/leaderboard.html' : 'https://openvibe.games/leaderboard.html'
function cookie(name) {
var m = document.cookie.match(new RegExp('(?:^|;\\s*)' + name + '=([^;]*)'))
@@@ -48,6 +54,8 @@
var links = [
{ label: 'Games', href: PORTAL },
{ label: 'Scraplandia', href: PLAY },
++ { label: 'Salvage Rush', href: RUSH },
++ { label: 'Leaderboard', href: BOARD },
]
// The shared footer's items are { name, url } (label/href rendered empty links).
var footerLinks = [
@@@ -56,6 +64,8 @@
items: [
{ name: 'All games', url: PORTAL },
{ name: 'Play Scraplandia', url: PLAY },
++ { name: 'Play Salvage Rush', url: RUSH },
++ { name: 'Leaderboard', url: BOARD },
{ name: 'Map editor', url: EDITOR },
],
},
ddiff --git a/apps/server/src/net/httpServer.ts b/apps/server/src/net/httpServer.ts
iindex bd3e6c2..f5f82d0 100644
---- a/apps/server/src/net/httpServer.ts
++++ b/apps/server/src/net/httpServer.ts
@@@ -178,10 +178,13 @@ export function createHttpServer(
const apexLinks: NotFoundLink[] = [
{ href: '/', label: 'OpenVibe.Games home' },
{ href: '/play', label: 'Play Scraplandia' },
++ { href: '/play?game=salvage-rush', label: 'Play Salvage Rush' },
++ { href: '/leaderboard.html', label: 'Leaderboard' },
{ href: '/editor', label: 'Map editor' },
]
const playLinks: NotFoundLink[] = [
{ href: '/', label: 'Play Scraplandia' },
++ { href: '/?game=salvage-rush', label: 'Play Salvage Rush' },
{ href: '/editor', label: 'Map editor' },
{ href: portalHome, label: 'OpenVibe.Games home' },
]