Reprend le texte de /a-propos dans l'intro des 3 hubs /code : stack,
rapport au logiciel libre, biais dans le code, enseignement. Convertit
les polices Raleway en WOFF2 (52 Ko vs 180 Ko en TTF), ne charge que
le SemiBold utilisé par le h1.
Ajoute la police Raleway (charte Tiqa) pour le h1. Supprime la
section compétences, simplifie les cards d'expérience en séparateurs,
retire les encadrés glassmorphism des sections Valeurs et Communauté,
allège les liens en ligne. Plus d'espacement vertical entre sections.
Seuls Débats et DisMoi sont featured sur les hubs /code. Supprime
la vignette "Featured" du ProjectCard. Le hub filtre désormais sur
featured au lieu de prendre les 3 premiers.
Fusionne la double intro (sous-titre + bloc encadré) en un seul
paragraphe. Remplace le titre "Code" par "Artisan du logiciel" (FR),
"Software Craftsman" (EN), "حِرَفيّ البرمجيات" (AR).
Ajout du champ featured au schéma des recommandations. Les pages hub
affichent uniquement les recommandations marquées featured au lieu
des 3 plus récentes.
Remplace CSS columns (ordre vertical) par deux colonnes flex avec
distribution en zigzag : les plus récentes en haut, lecture
gauche-droite ligne par ligne, hauteur naturelle des cartes préservée.
Remplace les NavigationCards génériques par des aperçus réels :
4 expériences récentes, 3 projets featured, 3 catégories de
compétences et 3 recommandations, chacun avec lien "Voir tout".
Supprime le composant NavigationCard devenu inutile.
- Ajout de liens vers les profils des auteurs de recommandations (prop url)
- Ajout d'avatars pour 7 recommandeurs (Maxime Boudier, Matthieu Diouron, Benoit Sarda, Pascal Gentil, Benoit Talbot, Anne Marchadier, Laurent Perez)
- Simplification du champ avatar : juste le nom de fichier au lieu du chemin complet, résolution automatique via import.meta.glob
- Ajout des URLs de profil LinkedIn dans les 14 fichiers de recommandation
Remplacement de la page unique /code par un hub avec 4 sous-pages :
parcours, projets, compétences, recommandations (FR/EN/AR).
Les données statiques (experiences.json, projects.json) sont remplacées
par des collections Astro (experiences, projects, recommendations) avec
support trilingue. Les recommandations sont les vrais textes LinkedIn.
Le design utilise du glassmorphism sur fond violet avec des composants
dédiés (NavigationCard, ProjectCard, RecommendationCard, SkillBadge...).
Le CSS facet est scopé proprement pour ne plus casser les composants.
- Ajout de site: 'https://jalil.arfaoui.net' et @astrojs/sitemap avec support i18n dans astro.config.mjs
- Création de src/components/SEO.astro : meta description, canonical, Open Graph, Twitter Cards, hreflang (fr/en/ar/x-default), JSON-LD Person (11 liens sameAs) sur chaque page et JSON-LD WebSite sur les pages d'accueil
- Création de src/utils/page-translations.ts : mapping centralisé des URLs entre langues
- Fix lang="en" hardcodé dans main.astro → lang dynamique + dir="rtl" pour l'arabe
- Ajout de meta descriptions ciblées sur les 13 pages principales (FR/EN/AR)
- Refactorisation du LanguageSwitcher pour utiliser le mapping centralisé
- Ajout de la directive Sitemap dans robots.txt
Système de facettes via data-facet sur body avec CSS global pour thématiser les pages /code avec la couleur Tiqa (#4b1762). Header et footer restent blancs avec texte violet. Contenu enrichi depuis tiqa.fr et LinkedIn (parcours détaillé, points forts, valeurs, compétences, présence en ligne). Balise footer sémantique.
- Mise à jour astro@5.17, @astrojs/tailwind@6, @astrojs/check
- Remplacement des content collections legacy par des loaders glob()
- Déplacement src/content/config.ts → src/content.config.ts
- entry.slug → entry.id, entry.render() → render(entry)
- Ajout de generateId personnalisé pour préserver les points dans les IDs des fichiers multilingues (.en, .ar)
Ajout des pages code et théâtre/acting en FR, EN et AR.
Création de vraies routes localisées /en/photo et /ar/تصوير au lieu du hack ?lang=. Extraction de composants partagés (PhotoHomeContent, PhotoBlogIndexContent, PhotoBlogPostContent, PhotoAlbumContent) pour éviter la duplication entre langues. Traduction des catégories photo (16 fichiers JSON), de la navigation, du footer et des aria-labels.
Routes AR avec slugs arabes (/ar/تصوير/مدونة, /ar/تصوير/ألبومات).
Déplacement de jalil.jpg et jalil-2.jpg de public/ vers src/assets/images/ pour permettre l'optimisation automatique (webp, redimensionnement). Mise à jour des 6 pages (index et à propos en FR, EN, AR) pour utiliser <Image> au lieu de <img>.
La page /photo affiche maintenant une flèche de scroll invitant à découvrir
une section de navigation avec les catégories et le fil photo en dessous du
diaporama, avec un dégradé progressif entre les deux.
Le pattern "hero viewport + scroll indicator" est factorisé dans un composant
HeroViewport réutilisable, utilisé par /photo (mode transparent), les albums
de catégories et les posts du fil photo.
Les images et les fichiers de contenu sont maintenant organisés par année (blog/2015/enigma/ au lieu de blog/enigma/) pour mieux s'y retrouver avec un volume croissant de posts. Le coverImage dans les frontmatters ne contient plus qu'un nom de fichier, résolu dynamiquement via import.meta.glob.
- Synchronisation avec le contenu FR actuel (image jalil-2.jpg, suppression cercle animé, section théâtre mise à jour, liens photo actifs, section blog commentée, email corrigé)
Galerie photo :
- Ajout du layout photo avec slideshow plein écran
- Navigation par catégories (portraits, paysages, nature, etc.)
- Section "Fil Photo" avec posts illustrés (photoBlogPosts)
- Lightbox pour les albums de catégories
- Composants : Slideshow, CategoryNav, CategoryGrid, Lightbox, MasonryGallery
Nettoyage :
- Suppression du contenu démo du template (posts, images, about)
- Consolidation src/collections/ dans src/data/
- Suppression du config.js dupliqué (garde config.ts)
- Nettoyage des assets inutilisés (posts/, experiences/)
Corrections :
- Favicon récupéré du site actuel
- Chemins favicon corrigés dans les layouts
UI :
- Page d'accueil mise à jour
- Header/Footer simplifiés
- Nouvelle page À propos