Wire Unsafe Release into the arcade
Serve the beta at /arcade/unsafe-release by proxying to its own Vercel project, so the address bar never leaves scofti.
Follows SC-36, which kept the arcade's key and left the game to get its own.
The game lives in its own repo (mfowlkes1/unsaferelease) and deploys as its
own Vercel project from main, at unsaferelease.vercel.app. scofti serves it
with a rewrite, not a redirect: /arcade/unsafe-release and everything under it,
with the prefix stripped, forwarded to that domain.
The game is already built for the path. Every asset it asks for starts with
/arcade/unsafe-release/, and the game project serves those files from its
root. That is also why opening unsaferelease.vercel.app directly shows a
blank page. It is meant to, not a fault.
The change
Two rewrites in next.config.ts, under beforeFiles so they win over any page
at the same path:
/arcade/unsafe-release→https://unsaferelease.vercel.app//arcade/unsafe-release/:path*→https://unsaferelease.vercel.app/:path*
No vercel.json. The site has none, and the handoff says to use one or the
other, never both.
Where the repo stands today
next.config.tshas no rewrites yet, only the holocron headers.- Nothing exists at
/arcade/unsafe-release, so there is nothing to clear out of the way. /arcadedoes not link to the game yet. Wiring the route and putting it on the arcade floor are two separate moves.
Before it counts as working
- The game's production domain has to stay public. If Vercel Authentication or a password goes on for production there, the rewrite serves a login page. Preview-only protection is fine.
- After deploy,
/arcade/unsafe-releasereturns 200 with HTML containing "Unsafe Release", and/arcade/unsafe-release/audio/1.mp3and/arcade/unsafe-release/img/welcome.jpgreturn 200 asaudio/mpegandimage/jpeg. - In a browser: a welcome screen with Al and Chickadee and a TAP TO START button. Tapping starts the music and shows the pit lane. No 404s in the console.
After that, nothing on scofti needs touching again: a push to the game's
main redeploys it, and the rewrite always reaches the latest production
build.
What was built
The rewrite is in next.config.ts. /arcade is now a shelf of game covers
under the line "All games designed and built by Scofti." There is one cover
today. Each cover is the game's own welcome art with its title set the way the
game's splash sets it, and nothing from a game loads until its cover is
pressed.
- Wide screens: pressing a cover swaps the shelf for an upright CRT, loads the game in it and dims the room. Close or Escape removes the game, brings the shelf back and puts the lights up. Starting a game ends the jukebox.
- Phones: a cover opens its game full screen.
- The CRT is CSS, a bevel drawn with mitred borders and a glare on the glass,
added to the shared
Screenasframe="crt"alongside anaspectprop. ScofTV is unchanged. - The cast illustration came off the page. It stays as
/arcade's share image. /privacyhas an arcade section: nothing runs until a game is pressed, and the game keeps a best score and a mute setting in the browser and sends nothing.- Adding a game is a row in
GAMESinsrc/app/arcade/room.tsxand a rewrite.