Commit Graph

128 Commits

Author SHA1 Message Date
thibaud-leclere
2f5ba701b6 feat: wrap game in centered card, style abandon button, abandon anonymous game on login
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 19:55:32 +02:00
thibaud-leclere
96adefbb1e feat: update homepage template with start/abandon game UI
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 19:46:58 +02:00
thibaud-leclere
a6b3a93d5c refactor: use persisted games in HomepageController 2026-03-30 19:46:12 +02:00
thibaud-leclere
884168aa49 feat: add GameController with start and abandon actions 2026-03-30 19:45:39 +02:00
thibaud-leclere
ef155463ab feat: add GameGridGenerator service
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 19:44:50 +02:00
thibaud-leclere
1d7c215887 feat: add migration for game and game_row tables 2026-03-30 19:44:05 +02:00
thibaud-leclere
665233425a feat: add Game and GameRow repositories 2026-03-30 19:43:39 +02:00
thibaud-leclere
ff9a48448c feat: add GameRow entity 2026-03-30 19:43:29 +02:00
thibaud-leclere
55145c366f feat: add Game entity 2026-03-30 19:43:18 +02:00
thibaud-leclere
90ca2b946d docs: add game persistence implementation plan
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 19:41:45 +02:00
thibaud-leclere
1eb7817182 docs: add game grid persistence design spec
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 19:38:29 +02:00
thibaud-leclere
6cd6c1ed47 fix: bind vendor with host in dev instead of named volume
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 18:41:24 +02:00
thibaud-leclere
3c15c12255 update theme 2026-03-30 12:13:19 +02:00
thibaud-leclere
99abd78495 remove git action 2026-03-30 00:13:39 +02:00
thibaud-leclere
bcf6cd1a03 Add secrets
Some checks failed
Build and Push Docker Images / Build app image (push) Failing after 23s
Build and Push Docker Images / Build database image (push) Successful in 9s
Build and Push Docker Images / Build node image (push) Failing after 11s
2026-03-30 00:11:16 +02:00
thibaud-leclere
503c474461 fix: use correct env var syntax for Symfony secrets
Secrets are accessed via %env(NAME)% not %env(secret:NAME)%.
Symfony automatically resolves secrets as env vars.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-29 23:19:07 +02:00
thibaud-leclere
f42a3ba286 fix: manually register Stimulus controllers in bootstrap.js
Auto-discovery may not work reliably with vite-plugin-symfony.
Explicit registration ensures dropdown, notifications, and
import-modal controllers are loaded.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-29 23:14:16 +02:00
thibaud-leclere
23c291d2c2 fix: modal-overlay hidden attribute overridden by display:flex
The CSS display:flex on .modal-overlay was overriding the HTML hidden
attribute, making the modal always visible.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-29 23:12:15 +02:00
thibaud-leclere
201faf3789 chore: add make rule for Symfony secrets
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-29 10:37:55 +02:00
thibaud-leclere
5fc6b4a53b feat: add Messenger worker Docker service
Some checks failed
Build and Push Docker Images / Build app image (push) Failing after 37s
Build and Push Docker Images / Build node image (push) Has been cancelled
Build and Push Docker Images / Build database image (push) Has been cancelled
Reuses the app image with messenger:consume command.
Restarts automatically, with 1h time limit and 256M memory limit.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-29 10:30:23 +02:00
thibaud-leclere
6edc122ff6 fix: address code review issues
- Rename `read` column to `is_read` (PostgreSQL reserved word)
- Wrap navbar + modal in parent div for Stimulus controller scope
- Set temporary filePath before first flush in ImportController
- Use RETURNING clause for atomic incrementProcessedBatches
- Return proper empty 204 response in NotificationController

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-29 10:27:57 +02:00
thibaud-leclere
b0024bbcf5 feat: add navbar, dropdown, modal and notification styles
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-29 10:23:57 +02:00
thibaud-leclere
300699fa82 feat: add Stimulus import modal controller 2026-03-29 10:23:19 +02:00
thibaud-leclere
c9880baddb feat: add Stimulus notifications controller with polling 2026-03-29 10:22:58 +02:00
thibaud-leclere
1ea07a2438 feat: add Stimulus dropdown controller 2026-03-29 10:22:37 +02:00
thibaud-leclere
a348de01b0 feat: add navbar with user dropdown and import modal 2026-03-29 10:22:20 +02:00
thibaud-leclere
4f8eb5f3dc feat: add notification API endpoints 2026-03-29 10:21:30 +02:00
thibaud-leclere
2cfbe191cf feat: add POST /api/imports endpoint 2026-03-29 10:21:02 +02:00
thibaud-leclere
4955c5bde9 feat: add ImportFilmsBatchMessageHandler 2026-03-29 10:20:24 +02:00
thibaud-leclere
98be393e3c feat: add ProcessImportMessageHandler 2026-03-29 10:19:31 +02:00
thibaud-leclere
2d768e8b52 feat: add Messenger messages for import processing 2026-03-29 10:18:35 +02:00
thibaud-leclere
dedc41e237 refactor: extract ActorSyncer service from SyncActorsCommand 2026-03-29 10:18:00 +02:00
thibaud-leclere
bbbfb895af refactor: extract FilmImporter service from SyncFilmsCommands 2026-03-29 10:17:17 +02:00
thibaud-leclere
1bf8afd88e feat: add Notification entity 2026-03-29 10:16:29 +02:00
thibaud-leclere
7be4de6967 feat: add Import entity with batch tracking 2026-03-29 10:11:30 +02:00
thibaud-leclere
5f7ddcd3cc feat: add UserMovie join entity 2026-03-29 10:10:27 +02:00
thibaud-leclere
5d16d28c59 feat: install Flysystem S3 and configure SeaweedFS storage
Add league/flysystem-bundle and league/flysystem-aws-s3-v3 packages and
configure the default.storage adapter to use AWS S3Client pointed at the
SeaweedFS endpoint (s3.lclr.dev) with path-style endpoints and secret-based
credentials.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 10:08:56 +02:00
thibaud-leclere
def97304a9 docs: add implementation plan for user import & notifications
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-29 10:06:32 +02:00
thibaud-leclere
720e8e0cf9 docs: add design spec for user film import, navbar & notifications
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-29 10:00:46 +02:00
thibaud-leclere
9cb5c6e2a5 fix: use vite-plugin-symfony Stimulus loader and wrap react_component in div
Some checks failed
Build and Push Docker Images / Build app image (push) Failing after 17s
Build and Push Docker Images / Build database image (push) Successful in 8s
Build and Push Docker Images / Build node image (push) Failing after 17s
The @symfony/stimulus-bundle loader generates an empty controllers.js,
so Stimulus controllers from controllers.json (including ux-react) were
never registered. Switching to vite-plugin-symfony/stimulus/helpers
uses the virtual:symfony/controllers module that properly reads
controllers.json. Also wrap react_component() output in a <div> since
it only renders data-attributes, not a full HTML element.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-28 15:02:27 +01:00
thibaud-leclere
ae9b0fdba7 ci(docker): add node image build-and-push job to workflow
Some checks failed
Build and Push Docker Images / Build app image (push) Failing after 11s
Build and Push Docker Images / Build database image (push) Successful in 10s
Build and Push Docker Images / Build node image (push) Failing after 10s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-28 14:00:32 +01:00
thibaud-leclere
cb0ea949f6 chore(docker): add image for node
Some checks failed
Build and Push Docker Images / Build app image (push) Failing after 10s
Build and Push Docker Images / Build database image (push) Successful in 9s
2026-03-28 13:54:43 +01:00
thibaud-leclere
7abca03122 fix: drop react-swc plugin for esbuild JSX and add vite-bundle routes
Use esbuild's built-in JSX transform instead of @vitejs/plugin-react-swc
to fix the React Fast Refresh preamble error caused by eager glob imports.
Add missing pentatrion_vite routes to fix web debug toolbar 500 errors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-28 13:51:54 +01:00
thibaud-leclere
a6064c2bdb fix: switch to @vitejs/plugin-react-swc and manual component registration
- Replace @vitejs/plugin-react with @vitejs/plugin-react-swc to fix
  React Refresh preamble detection error in cross-origin Docker setup
- Register React components manually via window.resolveReactComponent
  since ux-react's registerReactControllerComponents uses Webpack's
  require.context API which is incompatible with Vite

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-28 13:40:16 +01:00
thibaud-leclere
04301642bc fix: add CORS and HMR config to vite for cross-origin Docker setup
The app is served on port 80 while Vite runs on 5173. The React
plugin needs proper CORS and HMR host config to inject its preamble.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-28 13:36:57 +01:00
thibaud-leclere
783a8492e9 fix: use import.meta.glob instead of require.context for Vite compatibility
require.context is Webpack-only. Vite uses import.meta.glob.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-28 13:35:57 +01:00
thibaud-leclere
d590120306 fix: register ViteBundle, add config, share vendor volume with node, add vite-plugin-symfony
- Add PentatrionViteBundle to bundles.php (Flex recipe didn't auto-register)
- Create pentatrion_vite.yaml config
- Share vendor named volume with node container (needed for file: npm deps)
- Add vite-plugin-symfony to package.json devDependencies

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-28 13:26:47 +01:00
thibaud-leclere
deb826401d style: add game grid and popover styling 2026-03-28 13:19:53 +01:00
thibaud-leclere
6290cef3fe feat: integrate GameRow into GameGrid 2026-03-28 13:19:44 +01:00
thibaud-leclere
29667f0b1e feat: add GameRow component composing LetterInput and ActorPopover 2026-03-28 13:19:37 +01:00