Skip to content

feat(ui): redesign V4 — Liquid Glass + Ticker#1

Merged
Bastagas merged 5 commits into
mainfrom
feat/ui-v4-liquid-glass
Apr 21, 2026
Merged

feat(ui): redesign V4 — Liquid Glass + Ticker#1
Bastagas merged 5 commits into
mainfrom
feat/ui-v4-liquid-glass

Conversation

@Bastagas

Copy link
Copy Markdown
Owner

Summary

  • Migration complète de toutes les pages vers le design system V4 "Liquid Glass" (noir / rouge / accents iridescents, Space Grotesk + DM Sans, mesh gradient animé, ticker défilant).
  • Pages refaites : index, search, dashboard, offer, compare, about, unsubscribe.
  • Partials refaits : layout, offer_card, tech_badge, pagination.
  • Mockups HTML de référence ajoutés sous docs/design/ (3 variantes + V4 finale + 4 pages internes).

Design system

  • Typo : Space Grotesk (display) + DM Sans (body) + JetBrains Mono (mono)
  • Palette : #0F0F12 base, #DC2626 rouge, indigo/pink/cyan en accents
  • Effets : glass-strong, mesh, ticker-wrap, gradient-accent, iridescent, cta-red, pill, spark-bar, orb, reveal
  • Bordures iridescentes via @property --angle
  • Respect de prefers-reduced-motion

Test plan

  • Toutes les pages retournent 200 OK en local (curl sur /, /search.php, /dashboard.php, /offer.php?id=110, /compare.php, /about.php)
  • Markers V4 présents sur toutes les pages (glass-strong, mesh, ticker-wrap, gradient-accent, iridescent, cta-red)
  • Smoke test navigation manuelle (navbar, ticker, reveal, hover states)
  • Vérifier rendus Chart.js + Leaflet sur /dashboard.php
  • Vérifier modal d'alerte sur /search.php

🤖 Generated with Claude Code

Bastien ruedas and others added 5 commits April 19, 2026 19:06
Migration de toutes les pages vers le design system V4 :
- Typographie Space Grotesk + DM Sans + JetBrains Mono
- Palette noir #1E293B / rouge #DC2626 / indigo-pink-cyan accents
- Mesh gradient animé + noise overlay + orbes flottants
- Bordures iridescentes via @Property --angle
- Ticker défilant en haut (inspiré variante 1)
- Glass / glass-strong / cta-red / pill / spark-bar primitives

Pages refaites : index, dashboard, offer, search, compare, about, unsubscribe
Partials refaits : layout, offer_card, tech_badge, pagination

Mockups HTML de référence sauvegardés dans docs/design/

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1. SQL HY093 sur /search.php?keyword=...
   - PDO en mode native prepares (ATTR_EMULATE_PREPARES=false) refuse
     le ré-usage du même placeholder :kw dans (title LIKE :kw OR description LIKE :kw)
   - Fix : deux placeholders distincts :kw_title et :kw_desc

2. Comparateur inopérant après le redesign V4
   - Le JS qui gérait les .compare-checkbox + la barre flottante
     avait été perdu pendant la migration
   - Réintégration dans layout.twig avec style V4 (glass-strong,
     iridescent, cta-red, compteur gradient)
   - Sélection toujours persistée en localStorage
   - Limite 4 offres conservée

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Fondations (app.css + layout.twig)
- Cursor-glow radial sur toutes les surfaces .glass / .glass-strong
- Magnetic CTAs (translate suivant curseur, 0.2x–0.25x)
- Haptic feedback mobile (checkbox compare, submit)
- Mesh gradient parallax (CSS var --scroll piloté via rAF)
- Noise overlay animé (3 steps, 2s)
- Scroll-reveal IntersectionObserver (.reveal-io + stagger)
- Spark-bars animées à l'intersection (.spark-bar-io)
- Count-up tabulaire sur les stats (cubic ease-out 1.4s)
- View Transitions API (Chromium 126+)
- Live-dot emerald avec pulse ring

Command palette ⌘K (layout.twig + /api/palette.php)
- Alpine component avec clavier (↑↓⏎ ESC, ⌘/Ctrl-K)
- Navigation statique (Accueil, Offres, Dashboard, Compare, API, GitHub)
- Recherche dynamique techs + offres via nouveau endpoint
- Style glass-strong + iridescent, groupes + badges PAGE/TECH/OFFRE

Tech stats modal (partials/tech_badge + /api/tech_stats.php)
- Tech badges cliquables partout (data-canonical)
- Modal Alpine avec stats live : total offres, salaire médian, P25/P75,
  top 6 entreprises, top 6 villes, color-coding par catégorie
- CTA "Voir toutes les offres" → /search.php?tech=

Per-page enhancements
- index.twig : 5 countups (stats total/companies/cities/with_salary/tech#1),
  live-dot, spark-bar-io sur top12 technos
- about.twig : 4 KPI countups + reveal-io staggered
- dashboard.twig : 6 KPI countups, heatmap calendaire 90j (GitHub-style),
  récap avec pic + moyenne
- offer.twig : progress ring salaire vs marché (SVG 140px + gradient),
  calcul percentile linéaire P25/P50/P75, label dynamique Top X%
- offer.php + dashboard.php : market_salary + calendar 90j

Respect systématique de prefers-reduced-motion

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…polish

DATA & PIPELINE
- +4 codes ROME : M1803 DSI, M1806 conseil SI, M1801 admin SI, H1206 R&D
  → passage 678 → 6098 offres actives (1012 entreprises, 1554 villes)
- APScheduler activé (cron daily 03:00 UTC) via env_file .env.local +
  nouvelle cible `make scheduler-enable`
- ML réentraîné : salary RF sur 1214 offres (838 features, R² 0.541),
  similarity TF-IDF sur 6098 offres (5000 features)
- Nouvelle cible `make retrain`

SIMULATEUR SALAIRE (feature WOW)
- POST /simulator/salary — prédit une fourchette depuis profil libre
  (technos + ville + expérience + contrat) sans offer_id existante
- Alpine form /simulator.php : pills technos cliquables,
  résultat animé avec ring de confiance + note méthode RandomForest

SCRAPER STATUS PAGE (transparence pipeline)
- /scraper.php : historique 20 derniers runs, KPI 30j (succès/échec),
  graph offres nouvelles par jour, indicateur live scheduler

PROD POLISH
- Tailwind local minifié (30 KB) remplaçant CDN dev-only (~3 MB)
  → make frontend-build / watch, npm scripts
- Flask-Limiter : 120 req/min + 2000/h par IP
- HTTP cache : ETag W/"…" + If-None-Match → 304 Not Modified,
  Cache-Control public 60s sur /stats/* et /offers
- Rate limit headers X-RateLimit-Limit/Remaining exposés

TESTS (fermeture du gap frontend)
- 7 tests PHPUnit intégration (OfferRepository : filtres, pagination,
  timeline, cities, contracts) — 433 assertions, tous verts
- 5 tests Playwright E2E chromium headless (home, search, simulator,
  dashboard heatmap, ⌘K palette) — tous verts
- Configs phpunit.xml + playwright.config.js

FIX
- Command palette : bouton ⌘K appelait window.__cmdk.open() (data field,
  boolean) au lieu de .toggle() → modal s'ouvre enfin au clic

DOCS
- README : section sécurité+prod, chiffres clés actualisés (9x),
  commandes Makefile mises à jour, tests frontend documentés

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- scraper/cli.py : tri d'imports (I001)
- api/alerts_job.py : split if/then inline (E701)
- api/ml/salary.py : noqa N806 sur X (convention scikit-learn)
- api/ml/similarity.py : retire variable scores non utilisée (F841)
- api/app.py + routes : imports re-triés par ruff --fix

All checks passed (0 erreurs), prépare le merge de la PR #1.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@Bastagas Bastagas merged commit 27400f3 into main Apr 21, 2026
3 checks passed
@Bastagas Bastagas deleted the feat/ui-v4-liquid-glass branch April 21, 2026 09:38
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.

1 participant