Commit Graph
22 Commits
Author SHA1 Message Date
branderson a0b032bc79 fix(portal): drop the description under the mature games switch 2026-10-13 11:15:44 -07:00
branderson 45166899b8 feat(settings): default the site tagline 2026-10-12 19:25:18 -07:00
branderson 24c895e1a0 docs(portal): document the discovery portal, endpoints and mature filter 2026-10-12 18:41:40 -07:00
branderson ee6fb4e951 feat(portal): arcade portal shell and discovery homepage
Chilled color scheme as swappable tokens, Fredoka wordmark with a
configurable tagline, genre categories, search and random hotkeys.
The homepage offers a Game of the Day, a Time Machine with a date
picker, recently played games and Flashpoint playlist shelves.
Mature games are hidden unless opted in from the user menu, stored
in the browser and the account. Browse lists default to a seeded
shuffle and accept release date ranges.
2026-10-12 18:09:20 -07:00
branderson d65f25aa2a feat(discovery): mature filter, release ranges, seeded shuffle and discovery endpoints 2026-10-12 17:44:53 -07:00
branderson 6781e2ae19 Merge pull request 'Keep players' game saves on their account' (#5) from account-saves into main
Reviewed-on: branderson/flashpoint-web#5
Reviewed-by: branderson <brad@branderson.io>
2026-10-12 16:37:13 -07:00
branderson 3ab6e05a00 fix(saves): leave Selkies settings out of game saves
The streaming client in a streamed game's iframe shares the app's origin and
keeps its settings in localStorage under its page address, which includes
the session. Those keys changed during play, so they were attributed to the
game and a new batch joined its save every session. Exclude them, and drop
any already recorded when gathering a save.
2026-10-12 16:17:09 -07:00
branderson 1e098674d8 feat(saves): keep players' game saves on their account
Saves games keep in the browser now sync with the signed-in player's
account: Ruffle SharedObjects and HTML5 localStorage, IndexedDB databases
(exported and imported whole, typed arrays and blobs included), and streamed
games' save files. Games share the app's origin, so storage that changes
while a game runs is attributed to it. Before a game starts, the account's
save is loaded unless this browser has a newer one; changes upload as they
happen; and a Saves dialog in the player restores any of the last 10, keeping
the save it replaces as a backup.
2026-10-12 16:17:09 -07:00
branderson 0980b789d5 feat(saves): store game saves on the player's account
Adds game_save_snapshots and /api/game-saves for copies of the saves games
keep in a player's browser. An upload matching the current save is a no-op,
the newest 10 snapshots per user and game are kept as backups, and saves may
be up to 10 MB, so the router parses its own bodies past the app's 1 MB JSON
limit.
2026-10-12 16:17:09 -07:00
branderson 62169a4ff7 Merge pull request 'Stop the I'm Feeling Lucky button animating' (#4) from calm-lucky-button into main
Reviewed-on: branderson/flashpoint-web#4
Reviewed-by: branderson <brad@branderson.io>
2026-10-12 02:18:18 -07:00
branderson 36d1c67bb0 fix(ui): stop the I'm Feeling Lucky button animating
The button bounced and pulsed continuously, which is distracting,
especially beside a running game. It keeps its hover effects.
2026-10-12 02:14:38 -07:00
branderson d735263741 Merge pull request 'Sign in through an authenticating reverse proxy' (#3) from trusted-header-login into main
Reviewed-on: branderson/flashpoint-web#3
Reviewed-by: branderson <brad@branderson.io>
2026-10-12 02:09:00 -07:00
branderson a1f53c5d1e fix(auth): read a repeated trusted header as one value, refuse conflicts
A proxy that sets the username header twice, as when Authentik's nginx
snippet and the documented lines are both present, made Node join the values
into "brad, brad" and create an account of that name instead of signing in
brad. Read each occurrence separately: identical repeats count once, and
conflicting ones are refused. The docs now note Authentik's snippet already
sets the headers.
2026-10-12 01:59:31 -07:00
branderson 561e1e641a Merge pull request 'Stream Flash games with the original Flash Player' (#2) from flash-streaming into main
Reviewed-on: branderson/flashpoint-web#2
Reviewed-by: branderson <brad@branderson.io>
2026-10-12 01:45:39 -07:00
branderson 98b2f1a0bb docs(auth): document trusted header login 2026-10-12 01:05:40 -07:00
branderson a6adc61627 feat(auth): sign in through a trusted proxy and let those users set a password
On load, a signed-out visitor first asks the backend to sign them in as the
user an authenticating proxy vouches for, before guest mode or a login
redirect takes over; an explicit logout skips this for the rest of the tab.
Settings gains a password card for signed-in users, where a proxy-signed-in
user can set a password without the current one to log in without the
proxy.
2026-10-12 01:05:40 -07:00
branderson 057192be16 feat(auth): sign in users vouched for by a trusted proxy header
With TRUSTED_HEADER_USERNAME and TRUSTED_PROXIES set, POST
/api/auth/trusted-login signs in the user an authenticating reverse proxy
(such as Authentik forward auth) names in that header, believing it only on
connections from the proxy addresses. Users are matched by username, so an
existing account is adopted; otherwise one is created, the first as admin
as with registration. New accounts get a random password, and a user the
proxy vouches for can set their own password without the current one, to log
in when reached without the proxy.
2026-10-12 00:55:29 -07:00
branderson 1965a1392b feat(streaming): stream Flash with the original player when Ruffle falls short
Flash games Ruffle can play now also report streamable, and the player
offers a switch to the original Flash Player streamed from the server.
Flash games launched from a page, which need the browser plugin, stream
instead of loading a page that can't play, and search no longer hides them
while streaming is enabled.
2026-10-11 17:50:24 -07:00
branderson 3b4b9623f8 Merge pull request 'Stream games that can't run in a browser' (#1) from stream-sessions into main
Reviewed-on: branderson/flashpoint-web#1
Reviewed-by: branderson <brad@branderson.io>
2026-10-11 01:02:18 -07:00
branderson 5c5b11722d docs(streaming): document the session manager settings 2026-10-11 01:01:27 -07:00
branderson 4e21ec1529 feat(streaming): play streamed games in the player and keep their saves in the browser
Games the backend reports as streamable get a Play button. The player starts
a stream session, embeds the stream, and keeps the game's saves in
IndexedDB: sent when the session starts and updated as the server pushes
changes.
2026-10-11 01:01:27 -07:00
branderson f59621dc82 feat(streaming): report and start streamed sessions for games that can't run in a browser
Games on other platforms (Java applets first) can be played through a
session manager that streams them from a server-side container. When
STREAMING_API_URL and STREAMING_API_TOKEN are set, game details and launch
data report whether a game is streamable, and POST /games/:id/stream-session
starts a session.
2026-10-11 01:01:27 -07:00