Skip to content

feat: ft_transc - #165

Merged
airone01 merged 86 commits into
mainfrom
feat/ft_transc
Oct 19, 2026
Merged

airone01 merged 86 commits into
mainfrom
feat/ft_transc

Conversation

@airone01

@airone01 airone01 commented Oct 19, 2026 •

Copy link
Copy Markdown
Owner

Using filter-repo, subtrees, and interactive rebase to clean up commits and (co)-authors before merging.

@airone01
airone01 force-pushed the feat/ft_transc branch 3 times, most recently from 3922a7d to b9552ed Compare October 19, 2026 13:29
airone01 and others added 27 commits October 19, 2026 15:35
* chore: stupid file

* feat: workspaces config and turborepo

* feat: init sveltekit project

* fix(db): move compose to separated package

* fix(db): move everything to the module

* ci: add checking

* feat: add db check page in main app

* style: format
* ci: lint and build actions

* fix: patch some config problems for repo

* ci: patch some deps

* style: lint

* ci(biome): ignore some files in config

* ci: patch key in action

* ci(turbo): might be the culprit
* feat(db): create DB schema and init the DB

* feat: add openapi logic to the repo

* docs: add a DB-HELPER.md and delete comments into index.ts

* add deps and format

* fix: update dbcheck file

* chore: add pg dev dep

---------

Co-authored-by: airone01 <[email protected]>
* feat(db): create DB schema and init the DB

* feat(chess-lib): add the chess lib with some tests (others incomming)

* fix(chess-lib): fixed chess lib (rook capture let roque allowed) and add perft tests

* fix: format the branch
* feat: implement basic ui lib

* fix(ui): fix missing styling

* feat: basic main page

* style: lint

* feat: implement better landing page and sidebar

* fix(ui): patch sidebar

* feat: implement bassic dashboard

* fix(ui): patch sidebar issue

* fix: better layout

* feat: better gameplay page

* feat: kinda playable chess board

* fix: patch compilation issues

* style: lint

* chore: patch vite config to remove unplugin icons

* fix: patch multiple pieces in a single cell bug

* fix(board): remove drop animation
* fix(db): add status into users table and add packages/db/src/seed.ts to create a DB seed

* feat(db-endpoints): create some DB endpoint to handle easily requests

* chore(db-endpoints): add some others types and endpoints, and tests

* fix(db-endpoints): remove .only to a test

* chore(db-endpoints): refactor some endpoint with less DB requests, and add dbGetUser() and dbGetUserGameHistory()

* fix(db-endpoints): change games_created_at_idx by games_ended_at_idx

* chore(db-endpoints): add some services and create custom errors throw

* chore(web): fix deps

* chor(web): add pg dep

* chore(web): patch deps finally

* chore(web): deps once again

---------

Co-authored-by: airone01 <[email protected]>
* chore(chess-lib): refactor chess lib struct

* fix(chess-lib): add game history and implement isThreefoldRepetition(), and fix some lib behaviour

* chore: format

* chore: remove .only

* chore(chess-lib): add custom throw
* fix(ui): patch user item to be like figma

* fix(web): patch sidebar user info when no session

* fix(web): patch sidebar layout shifting

* feat(web): add sidebar cookie

* feat(web): more sidebar features

* fix(web): finalize sidebar

* feat: profile page

* chore: typo

* style: lint

* fix(web): patch some redirection and cookies issues

* fix: patch some db calls

* chore(db-services): add some endpoint for auth and oauth

* fix: format the repo

* feat: profile page or whatever

* chore(ui): typo

* style: lint

* fix(auth): use new db functions

* refactor(auth): move auth package to apps/web lib

* fix(web): patch some type errors

* fix(auth): force auth to be server-side

* style: lint

* fix(sec): patch security issue of saving password hash in browser data

* fix(sec): deny advanced information to unauthed users

* fix(auth): switch to safe form verification

* fix(auth): secure password input

* style: lint

* fix(routing): patch annoying login component spam

* feat(web): implement avatar creation

* fix: some unsuccessful patches

* fix(web): patch settings modal not saving avatar

* fix(web): make settings modal close on save

* style: lint

* fix(web): patch stupid fixes i made

* fix(web): move settings modal to dedicated pages

* fix(web): patch settings layout

* fix(web): remove profile form component

* feat(web): implement more config pages

* style: lint

* feat(web): implement new form schemas

* feat(web): bunch of new settings

* chore(web): ignore some svelte warning

---------

Co-authored-by: Valentin BLANC <[email protected]>
* feat :empty files for the creation and gestion of websocket

* feat: finish the index.ts, deconnection

* feat(socket): initialize socket.io server with cors and transports

* feat(socket): add auth middleware for socket connections

* feat(socket): add rate limit middleware with configurable window

* feat(socket): add presence handler for online users tracking

* feat(socket): add heartbeat ping/pong for connection health

* feat(socket): add session save/restore on disconnect and reconnect

* feat(socket): add chat handlers for global and in-game messages

* feat(socket): add GameRoom class with chess engine integration

* feat(socket): add game handlers for join, move, resign, draw

* feat(socket): add matchmaking handler with queue-based pairing

* feat: SocketManager client avec stores réactifs et reconnexion auto

* docs: change all comments in english

* fix(socket): migrate to db-services for games & matchmaking

Replace direct Drizzle queries with typed service layer:
- dbCreateGame() in matchmaking handler
- dbUpdateGame() + dbEndGame() in GameRoom
- dbGetGame() in game handler

BREAKING: game:join requires dbGetGamePlayers() from DB team

* fix: add dbGetPlayers DB endpoint

* feat(socket): changing the db request for the game user

* feat(socket): db connection and tests for basic working

* fix(socket): fix tests for the sockets

* fix(socket): connection with the db and the new use of the chess lib

* fix(socket): check all the needed format

* fix(socket): changing format

---------

Co-authored-by: Valentin BLANC <[email protected]>
Co-authored-by: airone01 <[email protected]>
* chore(db-chat): add DB schema and some endpoints (not finished yet)

* chore(db-chat): add some other chat endpoints

* chore(db-chat): save

* chore(db-chat): fix seed errors and finished all chat DB endpoints

* style: lint

---------

Co-authored-by: airone01 <[email protected]>
* feat(web): Implement the logic of the front end game. allow user to play each turn with legal moves checked with the chess lib. handle drag and drop problems. For the moment everything is local must implement websockets communications

* feat(web): integrate WebSocket with game UI for real-time multiplayer

  - Add Vite plugin to run Socket.IO server on port 3001 during dev
  - Move socket.svelte.ts and socket-init.ts out of /server/ (SvelteKit
  client restriction)
  - Initialize socket connection with user credentials in root layout
  - Simplify auth middleware to use handshake auth (userId/username)
  - Rework /play page as matchmaking lobby with mode selection
  (Blitz/Rapid/Casual)
  - Create /game/[id] page with full game UI (turn indicator, resign, draw
  offer)
  - Update board.svelte to read myColor from store, flip board for black player
  - Emit myColor in game:state handler so clients know their color
  - Wire up matchmaking store to set color and navigate on match found
  - Add optimistic local move updates with server reconciliation

* fix: implement timer connected to sockets

* fix: handle timer depends on game mode

* fix: restore .env.example for db package

* fix: add ! to tell at svelte id will never be undefined

* fix: resolve lint and formatting errors
* feat(web): friendship system

* fix: patch #68

* fix(web): patch layout shift in friends page

* feat(web): implement empty component and patch circular deps in some $effect

* fix: patch some websocket import paths and lint

* fix(web): patch profile settings username rolling back

* fix(web): monir ui changes

* feat(ui): add command component

* style: lint

* feat: implement command component in app shell

* fix(web): map command entries to sidebar entries

* fix(web): patch random things

* fix(web): minor patches

* fix(web): patch silent errors in avatar upload

* feat(ui): add alert component

* fix(web): settings patches

* feat(ui): add badge

* fix(web): better oauth onboarding

* fix(web): patch many things

* fix(web): minor type fix

* fix(web): minor visual changes

* revert(db): patch one issue i introduced in a recent commit

* feat(web): landing page

* fix(web): patch a very small bug

* revert(web): "feat(web): landing page"

This reverts commit 160d279676d20a23c91b8c4a2c4c0ef76ea3176a.

* fix(social): apply good layout

* feat(web): prettier profile page

* fix(web): patch bad path
* fix(db): minor patches

* feat(web): error handling for sveltekit routing

* refactor(db): move to server actions

* feat(web): more reactivity

* style: lint
…dpoints

* feat: add elo history and achievements DB tables and endpoints

* feat: add friendship invitations DB and endpoints

* chore: format
* fix game history for front

* fix(web): replace statistics mocks with actual data

* feat(web): add statistics empty statement

* style: lint

* fix(web): patch some stats info idk

* feat(web): global app stats saving

* chore: rm useless file

* fix(web): patch some ui inconsistencies

* fix(web): patch a state bug

* fix(biome): enforce linter for svelte as well

* fix(ui): patch last biome fix

* feat(web): add leaderboard and fix some bugs

* style: lint

* chore: ignore swagger ui as it will never change

* feat(ui): spinner component

* feat(web): better-looking leaderboard page

* fix(web): change lucide loaders to the spinner component

* feat: chart in profile

* fix(web): small profile patch

* feat(db): seeding elo history

* fix(web): patch chart somewhat

* refactor(web): profile layout

* fix(db): endpoints (#79)

* fix: dbGetRandomUsers(), dbGetEloHistory()
feat: dbGetPeakElo()

* fix(db-seed): change db seeding for global channel

* feat(web): achievement progress on profile

* style: lint

* fix(web): patch achievements display

* feat(web): separate profile page components

* perf(web): optimize requests

* feat(web): peak elo in profile

* fix(web): patch command style issue

* fix(web): title is clickable

* fix(web): minor socialpage fixes

* feat(ewb): friend requests

* fix(web): patch bugs in social page

* fix(web): patch online presence

* feat(web): implement hover card and simplify avatar

* fix(db): endpoints (#83)

* fix: friendships_invitations schema with pk on IDs

* fix: dbGetRandomUsers() don't show friendships invitations users

* fix: add current elo to Suggested Players on Social page

* fix: dbRequestFriendship() error

* fix: dbRequestFriendship()

* chore: format

* feat: fix profile/[id] Add Me button, try to help :)

* feat: add dbGetUsersWithPrefix()

* feat: add script to handle easily DB setup/seed/etc...

* style: lint

* fix(web): patch ui bug in profile

* feat(web): diverse changes (#84)

* fix: elo-history magic number

* fix: update Suggested Players section on changes

* feat: add sent friend requests into Friend Requests section

* fix: dbGetUsersWithPrefix() and add it to index.ts

---------

Co-authored-by: Valentin BLANC <[email protected]>
* feat :empty files for the creation and gestion of websocket

* feat: finish the index.ts, deconnection

* feat(socket): initialize socket.io server with cors and transports

* feat(socket): add auth middleware for socket connections

* feat(socket): add rate limit middleware with configurable window

* feat(socket): add presence handler for online users tracking

* feat(socket): add heartbeat ping/pong for connection health

* feat(socket): add session save/restore on disconnect and reconnect

* feat(socket): add chat handlers for global and in-game messages

* feat(socket): add GameRoom class with chess engine integration

* feat(socket): add game handlers for join, move, resign, draw

* feat(socket): add matchmaking handler with queue-based pairing

* feat: SocketManager client avec stores réactifs et reconnexion auto

* docs: change all comments in english

* fix(socket): migrate to db-services for games & matchmaking

Replace direct Drizzle queries with typed service layer:
- dbCreateGame() in matchmaking handler
- dbUpdateGame() + dbEndGame() in GameRoom
- dbGetGame() in game handler

BREAKING: game:join requires dbGetGamePlayers() from DB team

* fix: add dbGetPlayers DB endpoint

* feat(socket): changing the db request for the game user

* feat(socket): db connection and tests for basic working

* fix(socket): fix tests for the sockets

* fix(socket): connection with the db and the new use of the chess lib

* fix(socket): check all the needed format

* fix(socket): changing format

* feat(chat): chat db(need tests)

* feat(chat): creat chat:global, game, friends

* fix: format

---------

Co-authored-by: Valentin BLANC <[email protected]>
* fix: localhost!

* feat(db): add users.bio, add elo_history.id (pk) and removed users.status and games.fen

* fix(status): adapte status handling to new DB schema

* feat: let user update his biography

* fix(settings): current biography was not displayed

* feat: add biography into profile/[id] and also fixed Online/Offline badge

* style: lint

* fix: delete games.fen

* Fix/bug report (#111)

* fix(match-history): Fixes #95

* chore(nav): switch Leaderboard and Play Now in nav

* feat: little win-ratio-card rework

* fix: previous commit
* fix(web): patch weird layout partly

* chore(web): rename friend-requests-card to requests-card

* fix(web): patch layout for mobile

* style: lint
* fix(web): patch empty compontent in profile

* fix(web): the same fpr recent matches

* fix(web): patch the actual bug that was reported

* style: lint
* feat(web): Implement the logic of the front end game. allow user to play each turn with legal moves checked with the chess lib. handle drag and drop problems. For the moment everything is local must implement websockets communications

* feat(web): integrate WebSocket with game UI for real-time multiplayer

  - Add Vite plugin to run Socket.IO server on port 3001 during dev
  - Move socket.svelte.ts and socket-init.ts out of /server/ (SvelteKit
  client restriction)
  - Initialize socket connection with user credentials in root layout
  - Simplify auth middleware to use handshake auth (userId/username)
  - Rework /play page as matchmaking lobby with mode selection
  (Blitz/Rapid/Casual)
  - Create /game/[id] page with full game UI (turn indicator, resign, draw
  offer)
  - Update board.svelte to read myColor from store, flip board for black player
  - Emit myColor in game:state handler so clients know their color
  - Wire up matchmaking store to set color and navigate on match found
  - Add optimistic local move updates with server reconciliation

* fix: implement timer connected to sockets

* fix: handle timer depends on game mode

* fix: restore .env.example for db package

* fix: add ! to tell at svelte id will never be undefined

* fix: resolve lint and formatting errors

* fix: The dnd svelte library delete the dom when the drop occurs but the program rebuild the board after an illegal move resulting in vanish pieces. The rebuild is now after the cleanupPostDrop functiun of the svelte library to avoid conflicts

* remove previsualisation whon a piece is grabbed and you hover a legal case

* handle game disconnection when we reload the page

* handle game restore when we leave the game page before ending the game

* avoid last moove after gameover

* fix: adapt sizes of the panels depending on page size

* fix: traduction from freench to english

* feat: add history game need to handle scroll

* fix: merge error fixing

* fix: fix lint errors
* fix(web): better avatar component

* feat: simple backend for user profile fetching

* fix: patch finally

* fix: patch user item

* fix(ws): patch in-game status

* chore: typo
SimonCottenet and others added 26 commits October 19, 2026 15:35
* fix: handle quite game bot in mobile mode

* fix same bug with spec mode handled

* fix: lint
* chore(web): remove some useless form schemas

* chore: oauth types
* fix(ws): validate session server-side in WebSocket auth middleware

* fix(oauth): reject unverified Discord accounts on email-collision login

* fix(auth): add IP-based rate limiting to login and register endpoints

* fix(ws): enforce max message length and key rate limiter by user ID

* fix(upload): validate avatar magic bytes before passing to sharp

* fix(ws): enforce bot game ownership check on bot:quit

* feat(doc): documentation security test

* fix(format)

* fix(oauth): avoid logging sensitive data on token exchange failure

* fix(auth): invalidate existing sessions on login to prevent session fixation

* fix(ws): verify game membership before allowing game chat messages

* fix(ws): restrict presence events to friends only

* fix(presence): presence broadcast fix don't creat map hitch time

* fix(ws): deconnection reconnection or kill server in middle of a game and dont reconnect to the finish game

* fix(ws): deconnection reconnection or kill server in middle of a game and dont reconnect to the finish game

* fix(limit): Rate limit apply to all functionnality that use ws or route, or DB

* fix(image): magic number

* fix(format)

* fix(bruh): whatever the fuck this commit is

(God save the Queen)

* fix: https work properly

* fix: handle game bot without game:error

* fix: finished game status check before join:game

* fix: name in pop up end game

* fix(format)
* fix: please god of merges help me

* fix: get all i18n keys (resolve merge again)

* chore: save for tomorrow

* chore: add some more translation

* chore: handle toast resolve issue

* chore: fix others toast i18n issues

* chore: finished i18n toast

* style: lint

* fix: placeholder ctrl+k

* style: lint

* fix: merge issues due to package.json

* FIX: BECAUSE GITHUB MERGE RESOLVE CONFLICT IS SHITTY AF, REMINDE ME TO LEARN TO USE GH TO MERGE

* feat: add i18n and lint
* feat: i18n image cropper

* style: lint
* fix: chat and game overflow path id

* fix(format)

* fix: profile page overflow page and 404 not found

* fix(format)

* style: lint
* fix: handle quite game bot in mobile mode

* fix same bug with spec mode handled

* fix: lint

* fix: merge error restore leave game bot button

* fix:lint
* fix(infra): replace hardcoded DB credentials with env vars

docker-compose.prod.yml contained hardcoded passwords and secrets
committed to version control. Replace all static values with
${VAR} references and add .env.example documenting the required
variables. Actual credentials must be supplied via a .env file
(already gitignored).

* fix: dislocate the docker compose config into env file

* fix(http): namespace rate limiter keys per endpoint

The shared IP counter meant traffic on one route consumed quota for all
others. Add a mandatory `ns` parameter to checkHttpRateLimit() and pass
distinct namespaces at every call site (login, register, oauth, api,
settings, social) so limits are scoped independently per route group.

* fix(ws): track draw offers server-side to prevent forced draws

game:accept_draw previously had no state tracking, allowing any player
to unilaterally end a game as a draw without the opponent offering one.

Add drawOfferedBy field to GameRoom with offerDraw() / acceptDraw()
methods. game:offer_draw now records the offering player; game:accept_draw
validates that a pending offer exists and is from the opponent. Making a
move clears any pending draw offer.

* chore: i18n comments

* chore: rm sec audit

* fix: micro fix of small magnitude
* doc(readme): start the README

* doc(readme): keep writing the README

* doc(readme): add other sections

* docs(README): add more info

* docs: more README

* docs: more details for some modules

* docs(readme): more limitations

* feat: pimp my README.nd

* doc: fucking 42 curriculum line

* docs(readme): launch details

* docs: more readme

* docs: more readme

* docs(readme): clarification

---------

Co-authored-by: Valentin BLANC <[email protected]>
* feat: i18n lib/

* feat: FINALLY FINISHED THIS i18n

* chore: save .json to see diff with translation

* feat: add final translations

* style: lint
@airone01
airone01 merged commit 720e63a into main Oct 19, 2026
1 check failed
@airone01
airone01 deleted the feat/ft_transc branch October 19, 2026 13:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants