Skip to content

v2 admin : en-tête recopié de la v1, et merge de main - #271

Merged
Oasis35 merged 12 commits into
env/stagingfrom
claude/project-thread-cvg7ei
Oct 7, 2026
Merged

Oasis35 merged 12 commits into
env/stagingfrom
claude/project-thread-cvg7ei

Conversation

@Oasis35

@Oasis35 Oasis35 commented Oct 7, 2026 •

Copy link
Copy Markdown
Owner

Part of #205 (suite de C3, #219)

Avant : sur dev.inseconds.cc, l'admin v2 avait 80 px vides en haut, le titre « Admin » aligné à gauche sous un identifiant centré, un seul onglet Pool en pastille orange et « Se déconnecter » en haut à droite.

Après : même en-tête qu'en v1. Le titre et l'identifiant navigateur sont centrés, le haut de page fait 32 px (l'avatar tient à côté du titre, même à 375 px). La barre affiche les 5 onglets de la v1 (Dashboard, Défis, Pool, Joueurs, Actions), avec l'onglet actif sur fond gris. « Se déconnecter » est sous le contenu. Les onglets de F2 ouvrent une page d'attente sous la barre, qui reste utilisable.

Captures (375 px et ordinateur) dans le dossier partagé du projet : captures/admin-entete-v2/.

How

  • admin-tabs.ts : la liste des onglets et TABS_TO_COME, tirés de cette liste.
  • AdminShellPage : mise en page de la v1. <router-outlet> est placé dans un bloc, sinon il compte comme un élément de la colonne flex et double l'écart.
  • TabComingSoonPage : la page d'attente d'un onglet, affichée dans la coquille. Avant, c'était la page plein écran de core.
  • i18n FR/EN : libellés des 4 onglets, repris de la v1.
  • Tests : 3 tests de la coquille en plus (ordre des onglets, déconnexion sous le contenu, onglet à venir sous la barre). 433 Vitest, Sheriff et build de prod passent en local.
  • Doc : DEVELOPPEMENT.md (« Après C3 ») explique trois points : la mise en page, l'accès à l'admin du staging (adresse tapée à la main, seul le compte STAGING_KEEP_EMAIL est admin) et pourquoi « 0 utilisé(s) » reste attendu jusqu'en E. PLAN.md § 6.5 : la garde admin lit isAdmin de /api/players/me. src/v2/front/CLAUDE.md mis à jour.
  • Merge de main : main est fusionnée dans la branche pour remettre env/staging à jour. Le reste de main était déjà dans env/staging (Merge main → env/staging (correctif audio iPhone #249, bumps NuGet #245) #250, Merge main dans env/staging (conformité Deezer) #253), donc les conflits sont résolus en gardant env/staging. Effet net : seul le package-lock.json de la v1 change (bump brace-expansion, Bump brace-expansion from 1.1.18 to 1.1.21 in /src/front/InSeconds.Client #267).

Oasis35 and others added 11 commits September 28, 2026 21:25
BrevoEmailSender remplace ResendEmailSender (API transactionnelle Brevo,
header api-key). Configuration Brevo:*, variable BREVO_API_KEY, page
confidentialité et doc mises à jour.
* Envoi des emails via Brevo au lieu de Resend (#196)

BrevoEmailSender remplace ResendEmailSender (API transactionnelle Brevo,
header api-key). Configuration Brevo:*, variable BREVO_API_KEY, page
confidentialité et doc mises à jour.

* Gel de série : retirer du compteur les gels déjà engagés sur une série protégée (#198)

La gélule du header affichait encore le stock en base (ex. 2) alors que l'accueil
annonçait qu'un gel avait sauvé la série : le stock n'est décrémenté qu'à la
complétion du défi. StreakView.Freezes déduit désormais les jours manqués en
statut protected, ce qui correspond au stock qui restera après la partie.
…ls cassé) (#239)

Tous les appareils d'un compte v1 partagent le même AuthToken : le faire
tourner à la déconnexion (M6, #179) déconnectait tous les autres appareils.
La déconnexion n'efface plus que le cookie de l'appareil courant.
… (#241)

Le bouton « Partager mon score » ne copiait parfois rien au premier clic :
navigator.clipboard.writeText rejette de façon intermittente (NotAllowedError,
« Document is not focused »). Sur rejet, ClipboardService retombe sur une copie
textarea + execCommand('copy') et remonte l'échec (sans le texte) à l'API.
* feat(admin): renommer un morceau du défi du jour depuis le pool

Retire le verrou RenameLock (409 track_locked) : le bouton ✎ est actif
sur toutes les lignes du pool, défi du jour compris. Les réponses déjà
enregistrées gardent leur verdict, les suivantes sont corrigées avec le
nouveau nom.

* feat(admin): avertissement dans la modale de renommage pour un morceau du défi du jour
Safari iOS émet `playing` dès l'appel à play(), avant que le son reparte,
sans second `playing` ensuite : le chrono d'arrêt coupait le palier à
l'aveugle (0,5s → 0,1s de son, voire aucun). Le chrono relit désormais
la position de lecture à son échéance et se reprogramme tant que le
palier n'est pas atteint ; rien ne coupe pendant un seek.
Bumps coverlet.collector from 10.0.1 to 10.1.0
Bumps WolverineFx from 6.40.0 to 6.43.0
Bumps WolverineFx.EntityFrameworkCore from 6.40.0 to 6.43.0
Bumps WolverineFx.FluentValidation from 6.40.0 to 6.43.0
Bumps WolverineFx.RuntimeCompilation from 6.40.0 to 6.43.0

---
updated-dependencies:
- dependency-name: coverlet.collector
  dependency-version: 10.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: nuget-minor-patch
- dependency-name: coverlet.collector
  dependency-version: 10.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: nuget-minor-patch
- dependency-name: WolverineFx
  dependency-version: 6.43.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: nuget-minor-patch
- dependency-name: WolverineFx.EntityFrameworkCore
  dependency-version: 6.43.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: nuget-minor-patch
- dependency-name: WolverineFx.FluentValidation
  dependency-version: 6.43.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: nuget-minor-patch
- dependency-name: WolverineFx.RuntimeCompilation
  dependency-version: 6.43.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: nuget-minor-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Conformité aux conditions de l'API Deezer

- Confidentialité : ajoute la mention obligatoire « usage strictement privé,
  dans le cadre familial » (art. IV des conditions Deezer) et corrige le
  passage qui affirmait que Deezer ne reçoit rien : le navigateur charge
  extraits et pochettes depuis les CDN Deezer, qui voient l'adresse IP.
- Stories Instagram : plus de pochette Deezer dans les images (Deezer
  interdit de stocker ses images). L'API du récap hebdo ne renvoie plus de
  coverUrl, une vignette note de musique la remplace.
- Doc : piège 47 (CLAUDE.md) et docs des stories.

Claude-Session: https://claude.ai/code/session_01B3wbknbbcPyZg2tJQRtvNX

* Spec stories : toHaveSize plutôt que length (Sonar S5906)

Claude-Session: https://claude.ai/code/session_01B3wbknbbcPyZg2tJQRtvNX

* docs(v2): lecteur audio Howler.js dans le plan et le plan de développement

AudioPort de la v2 sur Howler.js en Web Audio (décision du 01/10/2026),
CORS du CDN des extraits Deezer vérifié le 02/10/2026, CSP connect-src.
Fichiers repris de env/staging avec ces modifications.

* docs(v2): retire le plan v2 de cette PR (déplacé dans une PR vers env/staging)
Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 1.1.18 to 1.1.21.
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](juliangruber/brace-expansion@v1.1.18...v1.1.21)

---
updated-dependencies:
- dependency-name: brace-expansion
  dependency-version: 1.1.21
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…xion en bas)

- titre et identifiant navigateur centrés, haut de page à 32 px comme en v1
- barre des 5 onglets de la v1 ; ceux de F2 ouvrent une page d'attente sous la barre
- déconnexion sous le contenu de l'onglet
- plan et suivi de la refonte : mise en page, accès à l'admin du staging, usage à 0 jusqu'en E
Le reste de main était déjà dans env/staging (merges #250 et #253) : conflits résolus en gardant env/staging, seul le package-lock de la v1 change.
@Oasis35 Oasis35 added the refonte-v2 label Oct 7, 2026 — with Claude
@sonarqubecloud

sonarqubecloud Bot commented Oct 7, 2026

Copy link
Copy Markdown

@Oasis35 Oasis35 linked an issue Oct 7, 2026 that may be closed by this pull request
@Oasis35 Oasis35 self-assigned this Oct 7, 2026
@Oasis35
Oasis35 merged commit 6df6b24 into env/staging Oct 7, 2026
17 checks passed
@Oasis35
Oasis35 deleted the claude/project-thread-cvg7ei branch October 7, 2026 16:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

v2 C3 · Front admin du pool

1 participant