Site web

Créer un site portfolio à défilement horizontal avec pages projet pour un architecte ou un photographe

Crée une galerie de projets épinglée qui se déplace latéralement quand on fait défiler la page sur ordinateur, avec des images révélées par clip-path et une page détail pour chaque projet. Sur mobile, sans JavaScript et avec animations réduites, la galerie devient une pile verticale ; elle fonctionne au clavier et le Lighthouse mobile est mesuré et maintenu au-dessus de 95.

Quand l'utiliser

Quand vous êtes architecte, architecte d'intérieur ou photographe et avez besoin d'un site portfolio rapide et soigné, avec une galerie à défilement horizontal et une page par projet.

Ce que vous obtenez

Un site portfolio en ligne sur votre serveur Opus Growth avec pages d'accueil, projets, agence, confidentialité et 404, balisage SEO et recherche IA en place, et un tableau de scores Lighthouse supérieurs à 95 sur mobile et ordinateur.

Modifie-t-il quelque chose dans mon compte ?

Seulement avec votre accord. L'assistant montre d'abord un aperçu de chaque modification et attend votre feu vert.

Fonctionne avec

SEO Intelligence, Search Console

À compléter avant l'envoi

[nom du serveur][nom de l'agence ou du photographe][ville, quartier][année, effectif, nom du fondateur][nom, lieu, année, une phrase][le cas échéant][e-mail][téléphone][numéro WhatsApp][adresse][domaine][nom-du-projet]
Sur mon serveur d'hébergement Opus Growth [nom du serveur], crée un site portfolio à défilement horizontal pour [nom de l'agence ou du photographe]. Mon activité : [architecture, architecture d'intérieur ou photographie ; quel type de travaux], ville : [ville, quartier], année de création et équipe : [année, effectif, nom du fondateur]. Projets : [pour chacun, nom, lieu, année, statut, surface ou type de prise de vue, résumé en une phrase, problématique, approche, processus, matériaux ou technique, au moins deux liens vers des photos]. Projets en cours : [nom, lieu, année, une phrase]. Inscription professionnelle : [le cas échéant]. Contact : [e-mail], [téléphone], [numéro WhatsApp], [adresse]. Domaine : [domaine]. Pages : accueil (/ : hero, galerie de projets horizontale, approche, FAQ), une page par projet (/projeler/[nom-du-projet]/ : image pleine largeur, fiche technique, problématique, approche, processus, matériaux, une seconde image, lien vers le projet suivant), agence et contact (/ofis/, avec la section contact à l'ancre #iletisim), confidentialité et KVKK (/gizlilik/) et 404.html. Pas de formulaire ; un e-mail, un téléphone et un lien WhatsApp avec message prérempli suffisent. Si un projet en cours n'a pas de page détail, ne transforme pas sa carte en lien. Style : un portfolio calme, à l'esprit galerie. Fond pierre calcaire, texte sombre, angles vifs et filets fins ; la couleur d'accent n'apparait qu'au survol et au focus. Une police d'affichage à empattements de Fontshare (par exemple Erode) et une police de texte grotesque sobre (par exemple Archivo). Sur ordinateur, le hero remplit l'écran, de sorte que la galerie commence sous la première vue. Règles d'animation (la partie la plus difficile, à suivre à la lettre) : 1. Bibliothèques : GSAP 3.13 core, ScrollTrigger et Lenis, sur la page d'accueil et les pages projet. SplitText et Swiper ne sont PAS chargés ; aucun script du tout sur les pages agence et confidentialité. 2. Le HTML et le CSS par défaut forment une pile verticale : une colonne sur mobile, une grille à deux colonnes sur ordinateur. Sans JS, avec animations réduites et sur mobile, la galerie reste ainsi. 3. Le CSS, et non le JS, construit la mise en page horizontale : à partir de 768 px de large et quand la classe `.anim` est présente, la piste est en `display:flex`, `width:max-content` et `height:calc(100vh - hauteur de l'en-tête)` dès le premier rendu, et le conteneur défile de lui-même avec `overflow-x:auto`. Ainsi la mise en page ne change pas à l'arrivée du JS (CLS 0), et si la bibliothèque n'arrive jamais, la galerie reste défilable latéralement. 4. Avec gsap.matchMedia, uniquement pour `(min-width: 768px)`, épingle le conteneur avec ScrollTrigger, scrub 0.8, un end égal au débordement de la piste ("+=" + (track.scrollWidth - innerWidth)) et invalidateOnRefresh activé ; ajoute une classe qui donne `overflow:hidden` au conteneur. Une fine ligne de progression avance avec scaleX. 5. Révélation des images : les images de la galerie s'ouvrent de gauche à droite avec containerAnimation, de clip-path `inset(0 100% 0 0)` à `inset(0)`. Ne masque jamais le panneau visible dans la première vue ni l'image du hero. Sur mobile et sur les pages projet, seules les images situées sous l'écran au chargement s'ouvrent vers le haut avec clip-path. 6. Clavier : quand Tab atteint une carte hors écran dans la piste, le navigateur fait défiler le conteneur en interne et la carte disparait. Au focusin, remets le scrollLeft du conteneur à 0 et fais défiler la page jusqu'à la position verticale où la carte apparait (scrollTrigger.start + (end - start) * le décalage gauche de la carte / le débordement total). Sans cette étape, la troisième carte atteinte avec Tab restait hors écran dans la démo. 7. Active Lenis uniquement sur les appareils `(pointer: fine)` et connecte-le à ScrollTrigger.update ; pour les liens internes comme #projeler, déplace le focus vers la cible après le défilement. Mise en place et pièges connus (chacun a couté des points ou cassé quelque chose lors de la mesure de la démo, n'en saute aucun) : 1. Si un site en ligne existe déjà sur le serveur, dis-le-moi d'abord, car l'installation écrase index.html et le dossier assets. Prévisualise scaffold_site avec confirm=false et appelle confirm=true après mon accord. Lis ensuite site_design_guide et site_seo_guide. Avant d'écrire du code, place la direction de design (typographie, couleur, grille, élément signature, langage de mouvement et bibliothèques qui ne seront PAS chargées) dans un court ART.md en dehors d'assets et montre-le-moi. 2. Compile Tailwind, ne le charge pas depuis le CDN. Installe `npm i -D tailwindcss@3` avec site_run_command et background=true, et surveille avec site_command_status. Les chemins content de `tailwind.config.js` doivent couvrir tous les fichiers HTML, tous les templates et tous les fichiers JS qui écrivent des classes. `_src/tw.css` contient une ligne `@import "../assets/app.css";` et les trois lignes `@tailwind` ; compile-le en un seul fichier avec `npx tailwindcss -c tailwind.config.js -i _src/tw.css -o assets/site.css --minify`. Retire le script cdn.tailwindcss.com et le tailwind.config en ligne des pages et ne lie que `/assets/site.css`. Recompile après chaque modification du HTML. 3. Héberge les polices toi-même. Vérifie d'abord que la famille Fontshare choisie contient les lettres turques (ş, ğ, ı, İ, ç, ö, ü) : dans la démo, Tanker n'avait pas de ı sans point et Outfit n'avait ni ş, ni ğ, ni İ, si bien que ces lettres retombaient sur une autre police dans les titres. Télécharge chaque graisse en woff2 séparément avec site_fetch dans `assets/fonts/`, écris les règles @font-face avec `font-display: swap` dans `assets/app.css` (design-check y cherche la police personnalisée) et vérifie le nom font-family dans le CSS téléchargé. Précharge les polices de titre et de texte utilisées au-dessus de la ligne de flottaison sur chaque page avec `<link rel="preload" as="font" type="font/woff2" crossorigin>`, avant la feuille de style ; ne précharge pas plus de deux fichiers, car précharger une troisième graisse dans la démo a allongé le LCP mobile de 0,2 seconde. La plupart des polices Fontshare n'ont pas le signe ₺, écris donc « TL » pour les prix. 4. Rends le menu et le pied de page en HTML statique. Ne charge ni chrome.js ni site.config.js sur les pages. Écris un petit `chrome-stamp.mjs` qui lit la liste de navigation depuis site.config.js et estampille `_src/header.tpl` et `_src/footer.tpl` entre les marqueurs `<!-- nav:start --><!-- nav:end -->` et `<!-- footer:start --><!-- footer:end -->` sur chaque page, en ajoutant aria-current="page" au lien actif. Les templates ne doivent pas se terminer par .html et doivent utiliser des espaces réservés comme `[[NAV]]` au lieu de `{{...}}`. Construis le menu mobile sans JS avec `<details>`. Garde le nom de l'organisation, l'adresse et le téléphone en texte brut dans le pied de page, et donne à chaque zone tactile au moins 44x44 px, y compris les liens du pied de page et du fil d'Ariane. 5. Convertis les images pendant leur téléchargement avec site_fetch : écris la même photo avec resize="480x", "800x" et "1200x", image_format="webp", quality=65 dans des fichiers séparés. site_fetch ne recadre jamais ; quand une photo Unsplash demande un autre ratio, télécharge la version recadrée en ajoutant des paramètres comme `?w=1600&h=1200&fit=crop` à son URL. Donne à chaque `<img>` srcset, sizes ainsi qu'une width et une height correspondant au ratio réel. L'image principale au-dessus de la ligne de flottaison reçoit fetchpriority="high" et n'est pas lazy ; les autres reçoivent loading="lazy" decoding="async". Si l'image principale remplit l'écran sur mobile, sers un recadrage plus petit avec `<picture>`. 6. Écris la version SVG du logo dans favicon.svg avec site_write_file et ajoute `<link rel="icon" href="/favicon.svg" type="image/svg+xml">` à chaque page. Sans favicon, le navigateur journalise une 404 et les Bonnes pratiques tombent à 96. 7. Règles du validateur HTML : commence par un `<!DOCTYPE html>` en majuscules, utilise `&nbsp;` pour les espaces dans le texte visible des liens tel:, n'utilise jamais d'attribut style="", donne à chaque bouton type="button", et ne place pas de `<details>` dans une `<figure>` après son figcaption. 8. Télécharge les bibliothèques d'animation (GSAP, ScrollTrigger, Lenis) depuis jsdelivr dans `assets/vendor/` avec site_fetch, fige la version et ne les charge que sur la page d'accueil et les pages projet. N'utilise pas `<script defer>` ; place un petit chargeur à la fin de la page qui attend l'événement load, deux appels requestAnimationFrame puis requestIdleCallback, et ajoute les scripts dans l'ordre avec async=false. Un script d'une ligne dans `<head>` ajoute la classe `js` à `<html>` et la classe `anim` sauf si prefers-reduced-motion vaut « reduce » ; sans `anim`, le chargeur ne télécharge rien. Définis les états de départ masqués uniquement sous `.anim`, et ajoute une animation CSS de sécurité qui révèle tous les éléments masqués après 2,5 secondes au cas où la bibliothèque n'arriverait jamais. Dans les démos précédentes, les bibliothèques en defer ont poussé le LCP mobile à 3,2 secondes ; avec ce chargeur, les pages ont mesuré entre 99 et 100. Nomme data-reveal l'attribut des éléments révélés au défilement ; design-check ne reconnait le mouvement que par ce nom. SEO, AEO et GEO : 1. Utilise des URL de type répertoire avec une barre oblique finale (/projeler/[nom-du-projet]/, /ofis/, /gizlilik/). Renseigne le bloc seo de site.config.js et lance `node seo-stamp.mjs`. Écris le schema propre à chaque page (accueil : WebPage et FAQPage ; chaque page projet : une WebPage avec une CreativeWork comme mainEntity, incluant dateCreated, locationCreated et image ; agence : AboutPage avec une Person pour le fondateur ; BreadcrumbList sur les pages intérieures. Pour une agence d'architecture ou de photographie avec bureau, businessType ProfessionalService) dans des blocs `<script type="application/ld+json">` séparés et relie-les au graphe de base par @id. N'imbrique pas BreadcrumbList dans @graph ; garde-le dans son propre bloc, car c'est la seule façon pour seo-check de le voir. 2. Garde les titres à 60 caractères ou moins (seo-check signale comme erreur tout ce qui dépasse 65), les descriptions entre 120 et 158 caractères, un seul h1 par page et aucun niveau de titre sauté (un h3 juste après le h1 a fait tomber l'accessibilité à 98). Chaque page a besoin d'au moins 150 mots de contenu principal ; les pages contact et confidentialité ont tendance à être trop courtes. 3. Le premier paragraphe de chaque page répond directement à la question de la page. Rédige des FAQ propres à chaque page avec `<details>` et balise-les en FAQPage. Affiche l'organisation éditrice et une date de « Dernière mise à jour » dans `<time>`. 4. Dans robots.txt, note et justifie ta décision pour GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-User, Claude-SearchBot, PerplexityBot, Perplexity-User, Google-Extended, Applebot-Extended, Bingbot et CCBot, et indique le sitemap. Donne à sitemap.xml de vraies dates lastmod. llms.txt contient un résumé exact du site en deux phrases, les faits clés et la liste des pages importantes. 5. Pas d'invention : n'écris ni avis, ni notes, ni récompenses, ni nombre de clients, ni certificats, ni horaires d'ouverture, ni coordonnées, ni prix sans me demander. Laisse totalement hors du schema tout champ que tu ne connais pas. Contrôles (dans l'ordre ; ne dis pas « terminé » tant que tous ne sont pas passés) : 1. Avec site_run_command, lance `node chrome-stamp.mjs`, la compilation Tailwind, `node seo-stamp.mjs`, `node seo-check.mjs` (0 erreur, 0 avertissement), `node design-check.mjs` (0 erreur ; justifie tout avertissement restant) et `npx html-validate "**/*.html"` (0 erreur). 2. Visualise chaque page avec site_preview en view="mobile" et view="desktop". site_preview capture la page avec les animations désactivées (reduced-motion) ; si du contenu manque dans cette capture, l'état sans animation est cassé. Les images lazy situées plus bas peuvent être vides dans la capture pleine page ; ne le compte pas comme une erreur, mais vérifie leurs chemins. 3. Lance core_web_vitals avec strategy="mobile" et strategy="desktop" pour chaque page. Critères d'acceptation : sur mobile, Performance d'au moins 95 et Accessibilité, Bonnes pratiques et SEO à 100 ; sur ordinateur, les quatre scores à 95 minimum. Pour une page qui échoue, trouve le fichier lent avec resources=true, corrige-le et mesure à nouveau. Lance ensuite seo_audit sur la page d'accueil avec strategy="mobile" et runs=2. Aucune adresse extérieure à ton propre domaine ne doit rester dans la liste des requêtes réseau. 4. Aucun défilement horizontal à 360, 390, 768 et 1440 px, des zones tactiles d'au moins 44 px et aucune erreur de console. Le site doit aussi être impeccable dans un cadre de 390x790 et un cadre de 1440x898, comme sur les pages de prompts. Contrôle du mouvement : site_preview ne peut pas montrer le mouvement ; dis-moi donc quoi observer dans mon propre navigateur. Sur ordinateur, la galerie doit se coller en haut quand on atteint la section Projets, les cartes doivent défiler vers la gauche quand on descend, les images doivent s'ouvrir de gauche à droite et la ligne de progression doit se remplir ; après la dernière carte, la page reprend son flux normal. Quand on navigue entre les cartes avec Tab, la carte focalisée doit toujours être à l'écran. Sur mobile et avec la réduction des animations activée, la galerie est une pile de cartes et rien ne reste collé. Après publication : prévisualise la règle `/assets/* Cache-Control: public, max-age=31536000, immutable` avec site_headers et applique-la après mon accord ; à partir de là, versionne le nom de fichier à chaque modification du CSS ou du JS (site-v2.css, etc.). Soumets sitemap.xml avec gsc_submit_sitemap et vérifie la page d'accueil avec gsc_url_inspect. Pour finir, donne-moi : un tableau des scores par page (page, quatre scores mobile, quatre scores ordinateur, LCP, CLS), les résultats des contrôles, le résultat des interactions testées dans un navigateur et la liste des corrections appliquées.

Exemple de résultat

Un exemple du résultat de ce prompt. Sa structure provient de la sortie réelle des outils ; les chiffres et les noms sont fictifs.

Exemple de résultat (sur une marque de démonstration fictive, pas de données clients réelles ; les scores sont les mesures réelles de la démo)

Ce prompt a été suivi à la lettre pour « Ova Mimarlık », un cabinet d'architecture fictif : fond en pierre calcaire, polices Erode et Archivo, accueil, trois pages de projet, agence et confidentialité.

PageMobile (P/A/BP/SEO)LCP mobileDesktop (P/A/BP/SEO)CLS
Accueil99/100/100/1002,3 s100/100/100/1000
Confidentialité100/100/100/1001,4 s100/100/100/1000
Agence et contact100/100/100/1001,5 s100/100/100/1000
Projet : Kıyı Ofisi97/100/100/1002,6 s100/100/100/1000
Projet : Taş Avlu98/100/100/1002,3 s100/100/100/1000
Projet : Zeytinlik Evi98/100/100/1002,3 s100/100/100/1000

Contrôles : seo-check 0 erreur 0 avertissement, design-check 0 erreur 0 avertissement, html-validate 0 erreur, aucun débordement à 360/390/768/1440 px, console propre, aucun contenu masqué et aucun téléchargement de bibliothèque avec JS désactivé ou mouvement réduit, aucune requête réseau vers un domaine autre que celui du site.

Test d'interaction : Testé dans un navigateur (Playwright, 1440x898 et 390x790 tactile) : la galerie s'est épinglée avec un pin-spacer, 900 px de défilement ont déplacé la piste de 899 px vers la gauche, le conteneur est resté à 0 px du haut, les images se sont ouvertes de inset(0% 100% 0% 0%) à inset(0%) via containerAnimation ; avec la touche Tab, chacune des trois cartes de projet était visible à l'écran lorsqu'elle recevait le focus ; sur mobile il n'y a pas d'épinglage et la mise en page est une grille ; sur une page de projet, la deuxième image s'est ouverte au défilement ; aucune erreur dans la console.

Corrections appliquées :
1. Si le JS avait construit la mise en page horizontale, celle-ci aurait changé après le chargement ; la mise en page est construite par le CSS sous .anim dès le premier rendu, et le CLS mesuré est de 0 sur toutes les pages.
2. Lorsque Tab atteignait une carte hors écran, le navigateur faisait défiler le conteneur en interne et la carte restait hors écran ; une réinitialisation de scrollLeft et un défilement de la page jusqu'à la position de la carte ont été ajoutés, après quoi les trois cartes étaient visibles à l'écran lors du focus.
3. Les pages de projet et la page de confidentialité faisaient moins de 150 mots (avertissement seo-check) ; une section Processus et un paragraphe sur le droit d'introduire une réclamation ont été ajoutés.
4. La Performance mobile des pages de projet est restée entre 97 et 98 (LCP de 2,3 à 2,6 s, principalement du délai de rendu) ; un preload d'image dans le head a été essayé, sans effet sur deux mesures, et n'a pas été conservé. On reste au-dessus du seuil d'acceptation de 95.
5. Comme site_fetch ne recadre pas, le visuel principal mobile et les autres images à ratio spécifique ont été téléchargés déjà recadrés grace aux paramètres d'URL Unsplash (fit=crop).

Un site d'exemple créé avec ce prompt

Portfolio à défilement horizontal : galerie horizontale épinglée avec ScrollTrigger, visuels révélés par clip-path, pages de détail des projets ; sur mobile et avec reduced-motion, empilement vertical

Créé pour une marque fictive en suivant ce prompt à la lettre. Les scores ont été mesurés avec Lighthouse sur chaque page.

Créer un site portfolio à défilement horizontal avec pages projet pour un architecte ou un photographe
Scores Lighthouse (page la plus faible)
MobileOrdinateur
Performance97100
Accessibilité100100
Bonnes pratiques100100
SEO100100

Contrôles réussis

  • seo check: 0 hata 0 uyarı
  • design check: 0 hata 0 uyarı
  • html validate: 0 hata
  • overflow: 360/390/768/1440 taşma yok, konsol temiz, JS kapalıyken ve reduced-motion'da gizli içerik yok (reduced-motion'da kütüphane inmiyor), kaydırma sonrası gizli kalan öğe yok, dış ağ isteği yok
  • tailwind before after: Derlenmiş Tailwind ve yerel font/betikle ölçüldü; CDN önce/sonra karşılaştırması stüdyo demosunda (webe-studyo) yapıldı
  • interactions: Tarayıcıda (Playwright, 1440x898 ve 390x790 dokunmatik) denendi: galeri pin-spacer ile sabitlendi, 900 piksel kaydırmada şerit 899 piksel sola kaydı, sarmalayıcı üstte 0 pikselde durdu, görseller containerAnimation ile inset(0% 100% 0% 0%) değerinden inset(0%) değerine açıldı; Tab ile üç proje kartı
Captures d'écran
Créer un site portfolio à défilement horizontal avec pages projet pour un architecte ou un photographe: Mobile
Mobile
Créer un site portfolio à défilement horizontal avec pages projet pour un architecte ou un photographe: Ordinateur
Ordinateur

Mesuré le: 2026-10-11

Recherches associées

Ces prompts donnent le meilleur résultat quand votre assistant IA est connecté à vos comptes avec Opus Growth.

Connecter vos comptes gratuitement

Autres prompts

Site webModifie après votre accordDémo en direct

Créer un site d'expert éditorial avec rubrique guides et schema auteur

Demandez à votre assistant de construire un site d'expert avec une page d'accueil façon une de magazine, des guides longs et un profil d'auteur. Typographie à empattements, schema Article et Person, articles datés et sourcés : une publication que l'on lit et que les réponses d'IA peuvent citer.

Quand l'utiliserQuand vous êtes expert, consultant ou indépendant et voulez un site qui prouve votre expertise par des guides détaillés et que les moteurs de recherche et les réponses d'IA peuvent citer.

SEO Intelligence, Search Console
Site webModifie après votre accordDémo en direct

Un site d'entreprise familiale au style patrimonial, aux standards modernes

Demandez à votre assistant de construire un site dans l'esprit d'une vieille étiquette et d'une enseigne de boutique, pour un producteur en troisième génération : cadre et texture papier. Le style est ancien, la fabrication est moderne : mobile first, sans JavaScript, polices auto-hébergées, WebP, schémas Product et HowTo.

Quand l'utiliserQuand vous dirigez une entreprise familiale et voulez un site au look classique, façon vieille étiquette, qui se charge vite et respecte les standards actuels de SEO et d'accessibilité.

SEO Intelligence, Search Console
Site webModifie après votre accordDémo en direct

Un site de cabinet juridique ou comptable en minimalisme suisse, riche en signaux de confiance

Demandez à votre assistant de construire un site de cabinet statique, sur une grille stricte, où la hiérarchie repose sur une seule famille typographique. Il place sur la page les signaux de confiance qu'exige un domaine YMYL : profils des praticiens, note d'information datée et sourcée, formulations conformes aux règles de publicité professionnelle et schema Person.

Quand l'utiliserQuand vous dirigez un cabinet d'avocats ou d'expertise comptable et qu'il vous faut un site crédible et rapide, qui inspire confiance sans enfreindre les règles de publicité professionnelle.

SEO Intelligence, Search Console
Site webModifie après votre accordDémo en direct

Créer un site corporate multipage sans JavaScript et le livrer à 100

Demande à votre assistant de construire un site statique, rapide et accessible pour une activité corporate : architecture, ingénierie, conseil. Menu et pied de page sont en HTML statique, polices et CSS sont hébergées sur le site, et chaque page est mesurée avant la livraison.

Quand l'utiliserQuand tu as besoin d'un nouveau site d'entreprise de plusieurs pages (architecture, ingénierie, conseil) qui se charge instantanément, fonctionne sans JavaScript et réussit les audits d'accessibilité et de SEO.

SEO Intelligence, Search Console