Commit Graph
100 Commits
Author SHA1 Message Date
lobo de199a20b7 feat(stats): add chart form pickers to dashboard and profile tiles
Build, Test & Push Frontend / quality-check (push) Successful in 31s
Build, Test & Push Frontend / docker (push) Successful in 23s
2026-10-04 21:06:21 +02:00
lobo 13b0d5e7e9 feat(admin): add user role dialog
Admins change a user's role and see the change log. The last admin
gets a clear error when deleting their own account.
2026-10-04 20:09:22 +02:00
lobo e5091de50e feat(sync): follow the visit sync on the dashboard
Show the "Syncing with Steam" badge while a visit sync runs, then
reload the sync changes banner and the library.
2026-10-04 19:05:23 +02:00
lobo 8aa3181c37 feat(stats): status donut, meters and fixed chart colors
Build, Test & Push Frontend / quality-check (push) Successful in 35s
Build, Test & Push Frontend / docker (push) Successful in 22s
Pie and donut charts use one fixed color-blind safe palette in every
skin and accent. The overview and the profile status tile show a status
donut with the total in the middle. Habits and achievements get meter
bars, top games get share bars, the pile of shame bar uses the palette.
2026-10-04 12:03:52 +02:00
lobo dabb0c941c feat(sync): show sync changes in banner and details dialog 2026-10-04 11:36:09 +02:00
lobo e054e13a59 feat(stats): add chart form selection and pie, donut, line charts
Build, Test & Push Frontend / quality-check (push) Successful in 30s
Build, Test & Push Frontend / docker (push) Successful in 22s
Tag rows with 0 games are no longer clickable.
2026-10-04 10:43:02 +02:00
lobo 8b94a25844 fix(stats): open game detail pages from stat lists, perfect games clickable
Add perfect games click-through on the dashboard. Remove Steam store
links from game lists. Stat numbers with count 0 are not clickable.
Tests cover the perfect-games click, zero guards, and owner versus
visitor behavior.
2026-10-04 10:07:27 +02:00
lobo 777ba87fd6 feat(ui): make stat numbers clickable to open games
Build, Test & Push Frontend / quality-check (push) Successful in 28s
Build, Test & Push Frontend / docker (push) Successful in 26s
StatDrill context holds one dialog for a page. StatCount wraps a number:
total and status counts link to the library filter, other numbers open
StatGamesDialog. DrillRow and DrillButton support drill-down in tag bars
(genres, platforms, moods) and other stat displays. Dialog shows 40 games
per page with bottom-sheet layout on phones, handles pagination and errors
(403 not shared, 401 expired, 400 bad argument).
2026-10-03 18:51:59 +02:00
lobo ed5df8c40d feat(effects): polish 8 effects and add 7 new engines with parallax
Build, Test & Push Frontend / quality-check (push) Successful in 32s
Build, Test & Push Frontend / docker (push) Successful in 26s
Synthwave, fireflies, snow, sakura, nebula: CSS/SVG. Matrix and
constellation: canvas. Existing engines gain depth, color, glow, and
parallax (mouse and device tilt, opt-in on iOS)
2026-10-03 17:31:19 +02:00
lobo d7810fbf94 fix(layout): fit names on phones without sideways scroll
Build, Test & Push Frontend / quality-check (push) Successful in 31s
Build, Test & Push Frontend / docker (push) Successful in 24s
Display and game names shrink to 0.875rem, then end with an ellipsis
(FitText + fit-text utility, CSS container units, full text in title).
Rows and buttons wrap at large fonts, header points chip can shrink.
Guard: scripts/check-overflow.js.
2026-10-03 12:18:31 +02:00
lobo 04387fcd0c fix(header): prevent mobile header overflow
Build, Test & Push Frontend / quality-check (push) Successful in 31s
Build, Test & Push Frontend / docker (push) Successful in 23s
Reduce responsive padding and gaps below 640 px, move nav labels to
lg breakpoint, and position the "view as" badge absolutely to prevent
horizontal scroll on narrow phones (360-414 px).
2026-10-03 10:37:35 +02:00
lobo b6f3d123fb feat(points): unlock items, progress bars and skins
Build, Test & Push Frontend / quality-check (push) Successful in 28s
Build, Test & Push Frontend / docker (push) Successful in 25s
Locked items show a progress bar until the goal is reached. Four
CSS-only skins (Pastel, Retro CRT, Cyberpunk, Steam) in skins.css,
light and dark. A skin overrides accent and corners; badges, borders,
frames, effects and game art stay on top. New Platinum shine and
Equalizer effects.
2026-10-02 15:40:46 +02:00
lobo 8598024bce feat(hint): targets, automatic hints and formatting
Target fields on the admin hints page. The dashboard shows the four
automatic hints after admin hints when their condition is true, using
data Core already serves. HintText renders **bold** and safe links (app
path or https) as React elements, never HTML, in hints and news.
Auto-close without tick hides for this session, X for 7 days, tick + X
for good.
2026-10-02 14:36:49 +02:00
lobo ae904d946a feat(audit): undo button for merges, hide manual games
Build, Test & Push Frontend / quality-check (push) Successful in 31s
Build, Test & Push Frontend / docker (push) Successful in 23s
The audit log shows Undo on a merge row for 30 days, with a confirm
dialog and clear errors. The details page follows a merged key to the
kept game. Hide and Show now work for manual games too. de/en texts.
2026-10-02 13:39:02 +02:00
lobo 0c300c455d feat(audit): game catalog search and time to beat correction
New page /audit/games: search every game and open the correction dialog
without owning it. Time to beat as hours + minutes. Audit log game links
open /audit/games?appid=. Menu entry next to the link queue.
2026-10-02 11:21:15 +02:00
lobo 6627a8db66 feat(password): add reset and change password pages
/reset-password page for the email request and the new password,
ChangePasswordCard in settings, password reset button on the admin
users page, 'Forgot password?' link on the login page, de/en texts.
2026-10-02 10:35:08 +02:00
lobo f71e8f7aff feat(library): add game links, auditor queue, audit log and filter
Build, Test & Push Frontend / quality-check (push) Successful in 25s
Build, Test & Push Frontend / docker (push) Successful in 23s
LinkGameDialog (user request or auditor link), EditionsCard on the
details page, LinkQueuePage and AuditLogPage for auditors with paging,
hideDuplicates filter and editions badge in the library, audit menu
entries, de/en texts.
2026-10-02 09:10:56 +02:00
lobo 80259cb0e9 feat(settings): remove the platform mails switch
Broadcasts go to every active user, so the settings switch and its API
call are gone. Admin broadcast texts no longer mention an opt-out.
2026-10-02 07:53:35 +02:00
lobo 6dda186bdf feat(registration): add email confirmation UI
Build, Test & Push Frontend / quality-check (push) Successful in 26s
Build, Test & Push Frontend / docker (push) Successful in 31s
New ConfirmEmailPage for users to verify their email and set password.
Resend form on registration and error pages. Registration form no
longer asks for a password. Confirmation requires a button click. The
admin list marks unconfirmed requests and offers only delete for them.
2026-10-01 16:20:51 +02:00
lobo 249973dd69 feat(points): apply worn effects on covers, details and backgrounds
Build, Test & Push Frontend / quality-check (push) Successful in 28s
Build, Test & Push Frontend / docker (push) Successful in 27s
2026-10-01 15:09:25 +02:00
lobo dd45c0b5f6 feat(points): add effect engines and effects shop 2026-10-01 15:09:25 +02:00
lobo 2ec5833f29 feat(settings): reduce animations switch 2026-10-01 15:09:25 +02:00
lobo fa0857f55d feat(broadcasts): add admin broadcast page and user opt-out switch
Admin page /admin/broadcasts to write, test and send broadcasts in both
languages; confirms the recipient count before send. History shows the
counts. A new switch in settings lets users opt out of platform mails;
account mails always come. Subject and body are plain text only.
2026-10-01 14:12:34 +02:00
lobo 0154202ddc feat(points): equipped looks on dashboard and public profile
Build, Test & Push Frontend / quality-check (push) Successful in 23s
Build, Test & Push Frontend / docker (push) Successful in 23s
Avatar borders frame the avatar on the dashboard, badges show next to the
heading, banner frames wrap the hero image, and equipped accents set the
color on both pages.
2026-10-01 13:17:23 +02:00
lobo ca3d34bad0 feat(points): balance, history and shop page
Add /points page with wallet balance, shop grouped by slot and ledger
history with game names. The wallet loads once in PreferencesContext after
login, so the header shows a balance chip and the link. Premium accents
gold and teal override the free accent while equipped. German and English.
2026-10-01 13:17:04 +02:00
lobo 22633a9e45 feat(stats): add platform statistics and landing blocks
Add PlatformStats component to stats page. Extract YearBars from
FinishedStats for reuse on landing. Add three blocks to landing: games
per platform, top genres, finished per year. Update translations.
2026-10-01 11:10:59 +02:00
lobo b129f6a6e4 feat(welcome): add welcome page for new users after first login
Shows six feature cards and two next steps (Steam, import). The dashboard
redirects to it while Auth settings.welcomeSeenAt is null; "Let's go" and
"Skip" set the stamp. Settings links to it to reopen later.
2026-10-01 10:44:22 +02:00
lobo b811255c16 feat: add What's new feature
Build, Test & Push Frontend / quality-check (push) Successful in 25s
Build, Test & Push Frontend / docker (push) Successful in 39s
Dashboard dialog shows unseen news entries. Users mark them seen with "Got it"
or revisit via the /whats-new page. Admins publish, edit, and delete entries
on /admin/news. Full i18n support and test coverage included.
2026-10-01 10:03:39 +02:00
lobo 79b086c525 feat(registration): no invite code, request text
Build, Test & Push Frontend / quality-check (push) Successful in 22s
Build, Test & Push Frontend / docker (push) Successful in 22s
2026-10-01 09:18:47 +02:00
lobo f4e69e1a94 feat(admin): accept, deny and pending count 2026-10-01 09:18:47 +02:00
lobo b8f70e7578 feat(registration): send the browser language
Build, Test & Push Frontend / quality-check (push) Successful in 22s
Build, Test & Push Frontend / docker (push) Successful in 25s
2026-10-01 08:30:24 +02:00
lobo 43968b3b7a test(import): wait for the URL without the store list 2026-10-01 08:30:24 +02:00
lobo f01ad03f6e feat(import): bookmarklet for store pages
Build, Test & Push Frontend / quality-check (push) Successful in 22s
Build, Test & Push Frontend / docker (push) Successful in 25s
2026-09-30 15:59:05 +02:00
lobo c6d76b4cb5 fix(session): keep the hash on the login round trip 2026-09-30 15:59:05 +02:00
lobo 8e31eafc06 feat(import): read the exports of GOG Galaxy, Grouvee, HowLongToBeat and Playnite 2026-09-30 15:59:05 +02:00
lobo 89d0b29698 refactor: item 29 cleanup
F16 F17 F18 F19 F20 F21: import polling backs off and pauses in a hidden tab, one date format module, fake timers in the import tests, error codes instead of raw messages, one safe storage wrapper, dead code.
2026-09-30 15:00:47 +02:00
lobo aa5832225d refactor(import): move the import parts to components/import
Build, Test & Push Frontend / quality-check (push) Successful in 23s
Build, Test & Push Frontend / docker (push) Successful in 33s
2026-09-30 08:46:51 +02:00
lobo 28ff6eae52 refactor(settings): one card per section
The name field takes its value from the page's own load, not from the user context: the context can still be empty when the form mounts.
2026-09-30 08:46:51 +02:00
lobo 6da612bebd refactor(dashboard): load in useDashboardData, welcome and most played cards 2026-09-30 08:46:51 +02:00
lobo 05f4ca42e5 refactor(game-detail): load in useGame, hero and achievements cards 2026-09-30 08:46:51 +02:00
lobo 628920a006 feat(backlog): save only the changed fields 2026-09-30 07:57:52 +02:00
lobo 9ddc50f819 fix: abort old loads, stale sync state, warn before unsaved edits are lost 2026-09-30 07:51:09 +02:00
lobo cbafa3d540 refactor(session): one session store for login, logout and 401 2026-09-30 07:36:08 +02:00
lobo 2a22789435 test: data router, one render helper, fetchRoutes in every test 2026-09-29 16:15:50 +02:00
lobo d0ea9e900d refactor(frontend): lint, one session guard, one request helper, one user context 2026-09-29 15:40:55 +02:00
lobo 111ab1e200 fix(import): readable dropdowns in dark mode, select all and none 2026-09-29 15:10:41 +02:00
lobo 24a98062ee refactor(limits): server limits in one file, own texts for unknown errors
Build, Test & Push Frontend / quality-check (push) Successful in 19s
Build, Test & Push Frontend / docker (push) Successful in 27s
2026-09-29 14:48:28 +02:00
lobo f605917874 fix(settings): keep the language and save settings one after the other 2026-09-29 13:27:31 +02:00
lobo 14dd59f9e0 feat(import): add the import page, multi-select add and the favorite platform 2026-09-29 10:20:54 +02:00
lobo aa9e83e0cb feat(tiles): let users arrange the dashboard and profile tiles
Build, Test & Push Frontend / quality-check (push) Successful in 18s
Build, Test & Push Frontend / docker (push) Successful in 28s
2026-09-28 15:03:16 +02:00
lobo b55fcfec92 feat(profile): let users design their public profile 2026-09-28 14:20:14 +02:00
lobo a5458b3f86 feat(game): play confetti for finished games 2026-09-28 13:36:36 +02:00
lobo 09e1f767d8 docs(readme): describe the local setup 2026-09-28 13:07:40 +02:00
lobo 78ba0700c8 feat(library): add the merge duplicate dialog
Build, Test & Push Frontend / quality-check (push) Successful in 18s
Build, Test & Push Frontend / docker (push) Successful in 24s
2026-09-28 11:25:45 +02:00
lobo 01ae372b2d feat(dashboard): show admin hints and add the hints admin page
Build, Test & Push Frontend / quality-check (push) Successful in 18s
Build, Test & Push Frontend / docker (push) Successful in 25s
2026-09-28 10:07:49 +02:00
lobo 6601277961 feat(library): add the game data correction dialog
Build, Test & Push Frontend / quality-check (push) Successful in 17s
Build, Test & Push Frontend / docker (push) Successful in 25s
2026-09-28 09:31:39 +02:00
lobo afe00ceae9 feat(admin): add the admin users page and view as
Build, Test & Push Frontend / quality-check (push) Successful in 17s
Build, Test & Push Frontend / docker (push) Successful in 28s
2026-09-27 12:18:10 +02:00
lobo 46587dfb5c feat(settings): let users delete their account
Build, Test & Push Frontend / quality-check (push) Successful in 16s
Build, Test & Push Frontend / docker (push) Successful in 26s
2026-09-27 11:46:22 +02:00
lobo cfceca5e5e feat(settings): show the build version of each service
Build, Test & Push Frontend / quality-check (push) Successful in 15s
Build, Test & Push Frontend / docker (push) Successful in 27s
2026-09-27 10:27:01 +02:00
lobo 9d1c7bb40d feat(stats): add stats page and pile trend
Build, Test & Push Frontend / quality-check (push) Successful in 15s
Build, Test & Push Frontend / docker (push) Successful in 22s
Show the stat groups on /stats, the pile trend on the dashboard card,
one switch per group in the settings, and the shared groups on the
public profile.
2026-09-27 07:16:10 +02:00
lobo 83bbc2730d feat(library): ask whether a game is finished
Build, Test & Push Frontend / quality-check (push) Successful in 15s
Build, Test & Push Frontend / docker (push) Successful in 23s
2026-09-26 19:00:57 +02:00
lobo 011711fe4f feat(library): hide and unhide games
Build, Test & Push Frontend / quality-check (push) Successful in 16s
Build, Test & Push Frontend / docker (push) Successful in 22s
2026-09-26 12:27:58 +02:00
lobo 42ed0afe51 feat(images): report broken covers and achievement icons
Build, Test & Push Frontend / quality-check (push) Successful in 15s
Build, Test & Push Frontend / docker (push) Successful in 22s
2026-09-26 12:07:47 +02:00
lobo ca75e6a530 feat(settings): link the Steam account through Steam
Build, Test & Push Frontend / quality-check (push) Successful in 16s
Build, Test & Push Frontend / docker (push) Successful in 25s
A Steam card in the settings links, verifies or unlinks the Steam
account through "Sign in through Steam". After the way back the page
shows the outcome and refreshes the session, so Core gets the new
Steam ID at once. Registration and settings no longer ask for a typed
Steam ID.
2026-09-26 11:20:04 +02:00
lobo 23ab5a91e7 feat(picker): add the speedrun mood and the speedrun.com link
Build, Test & Push Frontend / quality-check (push) Successful in 15s
Build, Test & Push Frontend / docker (push) Successful in 23s
"What to play next" gets a Speedrun mood. The game detail links the
game's speedrun.com page when Core found one with verified runs; only
https://www.speedrun.com/ links are shown.
2026-09-26 10:39:10 +02:00
lobo b0c78d8dca docs(readme): add the architecture overview
Build, Test & Push Frontend / quality-check (push) Successful in 14s
Build, Test & Push Frontend / docker (push) Successful in 24s
2026-09-26 07:37:44 +02:00
lobo fa1bd59509 feat(play-next): pick games by mood 2026-09-26 07:37:16 +02:00
lobo 7d9cf907fc feat(security): enforce the Content Security Policy
The report-only run showed no violation in production.
2026-09-26 07:15:14 +02:00
lobo c52c5e02d2 feat(ui): add the ToBePlayed logo and name
Build, Test & Push Frontend / quality-check (push) Successful in 14s
Build, Test & Push Frontend / docker (push) Successful in 22s
The logo is a traced SVG whose colors follow the accent color;
violet shows it as designed. Favicon, PWA and Apple icons use
it with fixed colors. The header and landing page say
ToBePlayed instead of Game Log. Below 380 px the header shows
only the logo, and the home link keeps its name for screen
readers.
2026-09-26 07:05:57 +02:00
lobo 25d2f0d0bd fix(ui): stop old translations and page shrink on Android
Build, Test & Push Frontend / quality-check (push) Successful in 14s
Build, Test & Push Frontend / docker (push) Successful in 26s
The translation files get a content version in their URL, so a
browser that cached an old file loads the new one. On touch
screens the scroll lock of menus and selects no longer adds a
right margin: Android Chrome reported one and the whole page
became narrower.
2026-09-26 06:29:57 +02:00
lobo 6edb53162e feat(security): add a report-only CSP and security headers
Build, Test & Push Frontend / quality-check (push) Successful in 14s
Build, Test & Push Frontend / docker (push) Successful in 23s
nginx.conf is now an nginx template, so connect-src takes
AUTH_HOST and API_HOST from the container env. The image
sets both to empty by default, so nginx still starts
without them. Report-only until production shows no
violation. Also nosniff, Referrer-Policy and
Permissions-Policy.
2026-09-25 15:47:23 +02:00
lobo f8e6c2c970 feat(pwa): make the app installable
Manifest, gamepad icon (also the new favicon, instead of
the Vite logo), iOS meta tags and the tab title
ToBePlayed. No service worker, so a deploy never meets
an old cached bundle. The title bar color follows
light and dark mode. The README also lists adding a
game by name.
2026-09-25 15:32:55 +02:00
lobo 444b03acee feat(library): search IGDB and add games by hand
Build, Test & Push Frontend / quality-check (push) Successful in 13s
Build, Test & Push Frontend / docker (push) Successful in 23s
2026-09-25 14:37:21 +02:00
lobo d9a39dda22 feat(auth): use the cookie session and refresh on 401
The token is no longer stored; a tbp_session flag remembers the
login. apiFetch renews the session once on a 401 and sends the
request again. Parallel requests and other tabs share one refresh,
because Auth revokes the session when a refresh token is used twice.
Only a 401 from the refresh ends the session; a 502 or no network
shows the normal error.
2026-09-25 13:45:08 +02:00
lobo 5ff8d48c53 refactor(auth): send login token through apiFetch
Build, Test & Push Frontend / quality-check (push) Successful in 13s
Build, Test & Push Frontend / docker (push) Successful in 23s
All authenticated calls now use apiFetch, and only utils/auth.js
touches the stored token. The cookie login can then change these two
files instead of every page.
2026-09-25 11:29:14 +02:00
lobo 085fcf15a4 feat(achievements): dashboard card, library badge, 100 % hint and profile stats 2026-09-25 10:13:31 +02:00
lobo 2efdf64675 feat(play-next): page that picks the next backlog game 2026-09-25 09:29:15 +02:00
lobo 8dcd03f219 feat(registration): show the wait time after too many attempts 2026-09-25 09:06:30 +02:00
lobo 2cacc88844 docs: rewrite the readme with screenshots for the public showcase
Build, Test & Push Frontend / quality-check (push) Successful in 15s
Build, Test & Push Frontend / docker (push) Successful in 26s
2026-09-25 08:22:56 +02:00
lobo 83494519f9 feat(dashboard): pick the banner game or turn the banner off
Build, Test & Push Frontend / quality-check (push) Successful in 13s
Build, Test & Push Frontend / docker (push) Successful in 24s
2026-09-24 15:35:48 +02:00
lobo 23e502bf5b feat(dashboard): Steam avatar and a banner from the most played game 2026-09-24 15:27:33 +02:00
lobo 2c360c9421 feat(appearance): accent color, corners, wide layout and game art background 2026-09-24 15:06:16 +02:00
lobo 91d5672421 feat(library): time to beat, short-games filter and backlog hours 2026-09-24 14:40:41 +02:00
lobo fd343da4be feat(profile): public profile page and the switch in settings
/u/<name> shows a public profile without login. Settings get the switch and
the link; every settings save now sends the other saved values, and removing
the display name also makes the profile private.
2026-09-24 14:18:32 +02:00
lobo aa5124ea1e feat(library): Steam wishlist tab with prices and discounts
The library page gets a Bibliothek | Wunschliste tab bar. The wishlist shows
the current store price, the discount and can show only games on sale.
2026-09-24 13:58:44 +02:00
lobo 89c5ba5253 feat(dashboard): playtime chart, recently played and a playing hint
The dashboard shows the playtime of the last 30 days and Steam's recently
played games. The detail page offers to set a backlog game to Playing when
Steam reports recent playtime; unsaved edits in the backlog card stay.
2026-09-24 13:41:37 +02:00
lobo d4c0f8d8f3 feat(auth): tell the user when the session expired
Every 401 from Auth or Core now goes through useSessionExpired: the login page
says the session expired and returns to the last page after login. App no
longer removes a token that only the browser clock calls expired, so a backend
401 is the one signal. A 403 on the profile now shows an error instead.
2026-09-24 13:29:09 +02:00
lobo 03259d0515 feat(library): sort by rating and priority 2026-09-24 13:17:12 +02:00
lobo bad11807e0 test: component tests with jsdom and Testing Library
First tests cover the library search debounce (fails on the old looping
version), the Pile of Shame states and the backlog save body. jsdom is
enabled per test file, so the plain util tests stay in the node environment.
2026-09-24 12:06:34 +02:00
lobo c24c22d5ed feat(dashboard): currently playing and pile of shame tiles
Build, Test & Push Frontend / quality-check (push) Successful in 10s
Build, Test & Push Frontend / docker (push) Successful in 22s
Pile of Shame shows the backlog count and share, a status bar and a random
backlog pick. Both tiles show the first-sync text while the initial sync runs;
a failed summary load shows a retry button.
2026-09-24 11:25:12 +02:00
lobo f94e0aff15 feat(library): backlog status, rating, notes and priority in the UI
Build, Test & Push Frontend / quality-check (push) Successful in 7s
Build, Test & Push Frontend / docker (push) Successful in 31s
Detail page gets an edit card. The library gets status badges, status filter
chips and a debounced name search, both kept in the URL.
2026-09-24 11:04:42 +02:00
lobo 7b676f0a1e feat(profile): set a display name and greet with it on the dashboard
Settings: new Profil card with display name and Steam ID. Registration: optional display name. The dashboard falls back to the email prefix when no display name is set.
2026-09-24 10:45:56 +02:00
lobo 6773040d59 fix(login): translated error messages for failed and rate-limited logins
Map INVALID_CREDENTIALS and TOO_MANY_ATTEMPTS to i18n keys. A non-JSON error body (Traefik 502/504) no longer shows as a network error.
2026-09-24 10:29:57 +02:00
lobo e480369a98 feat(ui): modern shadcn/ui theme with violet accent across all pages
Build, Test & Push Frontend / quality-check (push) Successful in 8s
Build, Test & Push Frontend / docker (push) Successful in 26s
Add shadcn/ui (Radix + Tailwind 4) components, zinc/violet theme tokens and self-hosted Inter. New header with user menu, Steam cover art, skeletons and toasts. Replace @mdi/font with lucide-react. Fix: top-owned list on the landing page only showed with top-played entries; numbers use the app language.
2026-09-24 10:07:32 +02:00
lobo 76a9ac3e6f feat(dashboard): new layout with sync button and top 5 most played
Remove the placeholder tiles and the settings tile, fix the mobile header width. iconUrl/formatPlaytime move to utils/games.js (599 min now shows 10h, not 10.0h), and the sync button logic to the useForceSync hook shared with the library.
2026-09-24 09:49:06 +02:00
lobo 84e31b23ea docs(imprint): update postal address 2026-09-24 09:49:06 +02:00
lobo 4b821b89df fix(nginx): revalidate index.html and translations on every load
i18n/*.json and index.html keep their names across deploys, so browsers kept old files and showed raw keys like NAV.DASHBOARD. Hashed /assets/ now get a one-year immutable cache.
2026-09-24 09:32:06 +02:00
lobo 95c1f54f62 chore(deps): update React to 19.3, Vite to 8.3, react-router to 7.18 and Tailwind to 4.3
Build, Test & Push Frontend / quality-check (push) Successful in 7s
Build, Test & Push Frontend / docker (push) Successful in 31s
Minor and patch updates only. zod 4, @hookform/resolvers 5 and i18next-http-backend 4 stay out because they are major versions.
2026-09-24 08:57:07 +02:00
lobo 8fa605aff0 feat(nav): add header navigation and show Steam ID on dashboard
Header links to Dashboard, Library and Settings. The logo, the login page and
the landing page lead logged-in users to the dashboard. Expired tokens are
removed, and a 403 on the dashboard logs out. Remove the dev dummy token.
2026-09-24 08:57:03 +02:00
lobo 44e23de6d6 fix(settings): keep Steam ID as string and store the new token
Number("76561198005679788") is 76561198005679790 in JavaScript, so the wrong
Steam ID was saved. The Steam ID now stays a 17-digit string. Theme and
language saves no longer send steamId 0. After a save the new token from Auth
replaces the old one.

Add Vitest and run it in CI.
2026-09-24 08:57:03 +02:00