18 Commits
Author SHA1 Message Date
john-okeefe 315c22de65 style(theme): lighten global text-selection highlight
Release / build-and-push (push) Successful in 36s
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.
v1.0.1
2026-09-06 16:41:15 -04:00
john-okeefe 19a80d1c74 fix(filters): inherit tag color for the search-term link
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.
2026-09-06 16:41:02 -04:00
john-okeefe e85bdabf10 chore(ci): tag-triggered release workflow and helpers
Release / build-and-push (push) Successful in 50s
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).
v1.0
2026-09-06 12:49:21 -04:00
john-okeefe e2ae729a60 chore(docker): multi-stage build and registry run template
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.
2026-09-06 12:49:14 -04:00
john-okeefe 8b18dc55c8 feat(frontend): runtime backend URL via /config.js
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.
2026-09-06 12:48:58 -04:00
john-okeefe 3e0385d5d9 Merge branch 'react-19.2.8' into main
React 19 + Chakra UI v3 + router v7 migration with v2 look restoration:
deps, theme system, forms/selects, nav and dashboard chrome, details,
auth screens, dashboard hover fix, menu hover treatment, double-chevron
pagination.
2026-09-06 12:28:07 -04:00
john-okeefe 2d12372ac4 style(theme): brighten menu item hover to match select options
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.
2026-09-06 12:26:38 -04:00
john-okeefe 4786973558 fix(dashboard): use explicit open/close for hover summary slide
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
2026-09-06 12:26:21 -04:00
john-okeefe 54debe4b0a refactor(auth): migrate login, account, user and error screens to v3
- Login/forgot/reset, create/edit user, profile: Field/Dialog/Toaster
  shims, colorPalette/button renames, typed hookstate handlers
- DeleteDialogue, NotFound, SomethingWentWrong: dialog + centered
  layout on v3 tokens with legacy copy intact
2026-09-06 10:31:23 -04:00
john-okeefe 0919295843 refactor(details): migrate game details, thumbnails and menus to v3
- GameDetails/context menus: chakra context-menu dep replaced with
  MenuRoot shims, hover lift kept, FixedSelect play-status control,
  Link/Text/Separator prop renames
- Features/Summary/SystemRequirements: Jodit + modal flows moved onto
  Dialog shims, v3 Button/Tag/Link tokens, carousel slide kept as-is
- Preserves legacy dark card/menu surfaces via gray.950 -> v2 gray.700
  mapping in the theme
2026-09-06 10:30:39 -04:00
john-okeefe 45dd783964 refactor(nav): migrate header, dashboard chrome and discovery UI to v3
- Header/MobileBar: MenuRoot/Positioner/Content + Portal + Tooltip
  shims, ghost icon buttons, 2rem padded user/settings menus, hover
  token gray.700; MobileBar drawer API (open/onOpenChange/finalFocusEl)
- FilterBar/ActiveFilters: DrawerRoot/CloseTrigger, Divider -> Separator,
  Tag shim, FixedSelect with typed handlers and width-preserving
  chakraStyles, blue active-filter pills untouched
- Pagination: NumberInputRoot/Field + NativeSelect shims, first/last
  arrows back to double chevrons (LuChevronsLeft/Right), single chevrons
  kept for prev/next
- Search/SearchModal, Home, NoGames, LoadingModal, DashboardLoadingModal:
  Dialog/Toaster-era props, gap/align/textAlign renames; App.test target
  content updated accordingly
2026-09-06 10:30:21 -04:00
john-okeefe 7bdf42ac07 refactor(forms): port game form to Chakra v3 with v4-style selects
- New FixedSelect wrapper over chakra-react-select v6 restoring the v4
  look everywhere: single gray.500 control border, flush addon chevron
  zone with rounded inner corners, hidden indicator separator, v4 option
  padding/type scale, gray subtle pills, brighter unselected hover
- GameForm: FormControl/InputGroup -> Field/Flex, Button
  colorScheme/isLoading -> colorPalette/loading, Stack spacing -> gap,
  Container container.md -> 768px, Steam Scrape row rebuilt as nowrap
  Flex, select wrappers de-bordered (control owns the border)
- formFields: Field/Checkbox/Switch shims in, required asterisk dropped
  to match legacy labels, Select/Creatable wrappers de-bordered,
  TS-typed select callbacks
2026-09-06 10:29:41 -04:00
john-okeefe 4574dfb8f1 feat(theme): migrate to Chakra v3 system with v2 look restoration
- 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)
2026-09-06 10:29:04 -04:00
john-okeefe 050e72bc8a chore(deps): upgrade to React 19, Chakra UI v3, router v7 and modern tooling
- React 18 -> 19 (react, react-dom, @types), react-router 6 -> 7,
  vite 5 -> 8, typescript 5.5 -> 5.9 with Bundler module resolution,
  esModuleInterop and @/* path alias
- Chakra 2.8 -> 3.37 (+cli), chakra-react-select 4.9 -> 6.1,
  next-themes for color mode; drop @chakra-ui/icons,
  chakra-ui-contextmenu, framer-motion and react-device-detect
- axios, jodit-react, hookform, toast, testing-library, node types
  bumped alongside; bun.lockb regenerated
- web-vitals 4 -> 6: ReportHandler/getCLS/getFID removed, migrate to
  MetricType with onCLS/onINP/onFCP/onLCP/onTTFB
2026-09-06 10:28:30 -04:00
john-okeefe 406c508de0 added docker build script for deploying 2024-09-23 12:26:35 -04:00
john-okeefe af3c779b32 upgraded to router v6 2024-09-12 19:20:26 -04:00
john-okeefe 3af14dee95 moved frontend from monorepo 2024-09-12 15:55:38 -04:00
john-okeefe 0e84e37a74 Initial commit 2024-09-12 15:50:45 -04:00