Native ::selection was near-invisible on dark surfaces, hiding selected
text inside inputs. Add a global ::selection using the hover-selection
treatment (gray.200 light / whiteAlpha.300 dark) and leave the text
color untouched so contrast holds everywhere.
The active search pill renders its term through a Chakra Link, which
painted link-blue while every sibling filter pill renders the tag
contrast color. Set color=inherit so the term matches the other tags;
the hover underline now draws in the tag's own color too.
Add .gitea/workflows/release.yml: on v* tag push (or manual
dispatch) build the Docker image and push
git.linuxhg.com/games-database/games-frontend:<tag> plus
:latest, then create/update the Gitea Release from the
annotated tag message. No build-args needed since the build
is env-free. Main-branch pushes do nothing.
Add cliff.toml (conventional-commit release notes), Makefile
release target, and ./release wrapper (accepts 1.0 or v1.0).
Same flow as the other repos; needs a REGISTRY_TOKEN repo
Actions secret (PAT with write:package and write:repository).
Dockerfile builds the Vite app in an oven/bun stage and serves
dist/ from the same nginx:stable-alpine-perl base as before,
plus the runtime-config entrypoint scripts. .env stays
dockerignored, so CI builds carry no backend URL and the image
is env-independent. Custom /etc/nginx/nginx.conf mounts keep
working (separate path from /docker-entrypoint.d/).
docker-compose.example.yml is a prod run template for
git.linuxhg.com/games-database/games-frontend (IMAGE_TAG,
default latest) with VITE_API_URL env (including the /api
suffix), restart policy, and a wget / healthcheck; traefik
setups drop ports for their labels/networks.
Stop baking VITE_API_URL into the Vite build so one image can
run against any backend. Container entrypoint
(docker-entrypoint.d/30-frontend-config.sh, auto-run by the
nginx image) writes /usr/share/nginx/html/config.js from the
VITE_API_URL container env at every start; index.html loads
it before the bundle, and agent.ts prefers
window.__APP_CONFIG__ with the build-time env as fallback so
local dev and vite preview behave exactly as before.
public/config.js ships an empty placeholder for non-container
builds. Changing backends is now a restart with new env, no
rebuild.
The subtle menu item highlight (bg.emphasized/60) is near-invisible on
dark surfaces, same issue the select dropdowns had. New v2MenuRecipe
overrides it to gray.200 / whiteAlpha.300, so right-click, user and
settings menus share the select-option hover treatment.
The summary sheet was driven by onMouseOver/onMouseOut both wired to
bare onToggle. Those events bubble, so moving between the image, title
and status text (or the sheet sliding in under the cursor) fired
unbalanced toggles - parity flipped and the sheet stuck open or showed
inverted. This predates the v3 migration.
- ContextMenu card Box now owns the hover zone with non-bubbling
onMouseEnter={onOpen} / onMouseLeave={onClose} from useDisclosure,
covering the whole card including the rating row instead of just the
inner link
- Drop the onToggle prop from GameThumbnail and the over/out handlers
on its Link
- Give the right-click Menu.Content p={4} for breathing room
- Replace extendTheme/ColorModeScript with createSystem Provider +
Toaster shims (components/ui, provider, color-mode) and next-themes;
index.tsx renders Provider, App reads useColorMode from the shim and
clears both chakra and legacy theme storage keys on preference change
- theme.tsx restores the v2 identity on v3 primitives: v2 gray/blue/
green/red scales, v2 solid/contrast fills, v2 text-per-size for
button/input/native-select/tag, v2 input heights, v2 heading scale
(xl->4xl etc), v2 switch track/thumb, brighter link underlines
(currentColor/60), +1px tag top padding, 17px body base font
- Default new-user theme light -> dark to match the established dark UI
- App.test rewritten around Provider + MemoryRouter + Home (old CRA
'learn react' assertion no longer applies)