{"id":51195556,"url":"https://github.com/trendev/gh26","last_synced_at":"2026-06-27T20:01:12.552Z","repository":{"id":360998031,"uuid":"1252633898","full_name":"trendev/gh26","owner":"trendev","description":null,"archived":false,"fork":false,"pushed_at":"2026-05-28T18:52:11.000Z","size":29806,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-28T20:17:52.983Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://trendev.github.io/gh26/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/trendev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-28T18:05:43.000Z","updated_at":"2026-05-28T18:52:16.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/trendev/gh26","commit_stats":null,"previous_names":["trendev/gh26"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/trendev/gh26","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trendev%2Fgh26","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trendev%2Fgh26/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trendev%2Fgh26/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trendev%2Fgh26/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/trendev","download_url":"https://codeload.github.com/trendev/gh26/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trendev%2Fgh26/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34866118,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-27T02:00:06.362Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-27T20:00:33.285Z","updated_at":"2026-06-27T20:01:12.546Z","avatar_url":"https://github.com/trendev.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GH26 - Site vitrine\n\nSite vitrine one-page pour **GH26**, entreprise B2B spécialisée dans le chauffage industriel, la climatisation, la maintenance d'installations techniques et les solutions énergétiques pour les professionnels.\n\nLe projet est construit avec **React 18**, **Vite**, **TypeScript** et **Tailwind CSS**. Il est prévu pour un déploiement statique sur **GitHub Pages**.\n\n## Aperçu\n\nLe site présente :\n\n- une navigation par ancres sans routeur ;\n- un hero avec CTA et chiffres clés ;\n- une section statistiques ;\n- une grille de services ;\n- des réalisations / cas clients ;\n- un bloc à propos ;\n- une section contact avec formulaire de demande de devis ;\n- un footer complet.\n\nLe formulaire ne dépend d'aucun back-end : il génère un e-mail pré-rempli via `mailto:contact@gh26.fr`.\n\n## Design\n\nLa source de vérité du design est le fichier Figma :\n\n- Fichier : \u003chttps://www.figma.com/design/7nsGbPcP6M11KXu99boIjO\u003e\n- Desktop : node `14:2`, largeur 1440 px\n- Mobile : node `22:2`, largeur 390 px\n\nLes assets issus de la maquette sont placés dans `gh26-images/` en PNG source, puis convertis en WebP dans `public/img/`.\n\n## Stack\n\n- React `18`\n- Vite `5`\n- TypeScript\n- Tailwind CSS `3`\n- Inter via `@fontsource/inter`\n- Sharp pour la conversion des images\n\n## Prérequis\n\n- Node.js récent compatible avec Vite 5\n- npm\n\n## Installation\n\n```bash\nnpm install\n```\n\n## Commandes\n\n```bash\nnpm run dev\n```\n\nLance le serveur de développement Vite.\n\n```bash\nnpm run build\n```\n\nCompile TypeScript puis génère le build de production dans `dist/`.\n\n```bash\nnpm run preview\n```\n\nPrévisualise le build de production localement.\n\n```bash\nnpm run lint\n```\n\nLance la vérification TypeScript sans générer de fichiers.\n\n```bash\nnpm run convert-images\n```\n\nConvertit les PNG de `gh26-images/` en WebP optimisés dans `public/img/`.\n\n## Structure\n\n```text\n.\n├── public/img/              # Images WebP servies statiquement\n├── gh26-images/             # Images PNG sources extraites de Figma\n├── scripts/\n│   └── convert-images.mjs   # Conversion PNG -\u003e WebP\n├── src/\n│   ├── components/\n│   │   ├── sections/        # Sections principales de la page\n│   │   └── ui/              # Composants UI réutilisables\n│   ├── content/             # Textes, liens, données et coordonnées\n│   ├── App.tsx              # Composition de la page\n│   ├── index.css            # Tailwind + styles globaux\n│   └── main.tsx             # Entrée React\n├── tailwind.config.ts       # Tokens de design\n├── vite.config.ts           # Config Vite et base GitHub Pages\n└── CLAUDE.md                # Brief projet détaillé\n```\n\n## Sections\n\nLes sections sont composées dans `src/App.tsx` :\n\n1. `UtilityBar`\n2. `Navbar`\n3. `Hero`\n4. `Stats`\n5. `Services`\n6. `Realisations`\n7. `APropos`\n8. `Contact`\n9. `Footer`\n\nLa page utilise des ancres HTML (`#accueil`, `#services`, `#realisations`, `#a-propos`, `#contact`) et un scroll fluide configuré dans `src/index.css`.\n\n## Modifier le contenu\n\nLa majorité des textes et données sont centralisés dans `src/content/` :\n\n- `nav.ts` : navigation, marque, logo\n- `stats.ts` : chiffres clés\n- `services.ts` : cartes services et CTA\n- `realisations.ts` : réalisations et métriques\n- `apropos.ts` : texte, image et points différenciants\n- `contact.ts` : téléphone, e-mail, couverture et options du formulaire\n- `footer.ts` : colonnes de liens et mentions\n\nPour remplacer les coordonnées client, modifier principalement :\n\n```ts\n// src/content/contact.ts\nexport const contact = {\n  phone: '01 23 45 67 89',\n  phoneHref: 'tel:+33123456789',\n  email: 'contact@gh26.fr',\n  emailHref: 'mailto:contact@gh26.fr',\n  coverage: 'Intervention partout en France',\n};\n```\n\n## Images\n\nLes images utilisées par l'application sont :\n\n- `public/img/logo.webp`\n- `public/img/hero.webp`\n- `public/img/real1.webp`\n- `public/img/real2.webp`\n- `public/img/real3.webp`\n- `public/img/apropos.webp`\n\nPour mettre à jour les images :\n\n1. remplacer les PNG sources dans `gh26-images/` ;\n2. vérifier le mapping dans `scripts/convert-images.mjs` ;\n3. lancer `npm run convert-images` ;\n4. contrôler le rendu en local.\n\nAttention : le projet est configuré avec `base: '/gh26/'`, donc les chemins d'images dans `src/content/*` et certains composants pointent vers `/gh26/img/...`.\n\n## Formulaire de devis\n\nLe formulaire de contact est implémenté dans `src/components/sections/Contact.tsx`.\n\nAu submit, il construit :\n\n- un sujet d'e-mail avec le type de besoin ;\n- un corps contenant nom, société, e-mail, besoin et message ;\n- une URL `mailto:` vers l'adresse définie dans `src/content/contact.ts`.\n\nCette approche est compatible avec GitHub Pages, mais dépend du client mail configuré sur le poste de l'utilisateur.\n\n## Tokens de design\n\nLes principaux tokens sont définis dans `tailwind.config.ts` :\n\n- `navy`, `navy-deep`, `navy-900`\n- `azure`, `azure-dark`\n- `copper`\n- `slate`, `mist`, `pill`, `border`\n- rayons `card`, `btn`, `pill`\n- ombres `card`, `float`\n- gradients `btn-primary`, `hero-navy`\n- largeur max de contenu `1200px`\n\nLe design doit rester aligné avec Figma. En cas d'écart, la maquette Figma prévaut.\n\n## Déploiement GitHub Pages\n\nLa configuration Vite actuelle cible un dépôt publié sous :\n\n```ts\n// vite.config.ts\nbase: '/gh26/'\n```\n\nCe réglage correspond à une URL de type :\n\n```text\nhttps://\u003cuser\u003e.github.io/gh26/\n```\n\nSi le site passe sur un domaine personnalisé ou un dépôt `\u003cuser\u003e.github.io`, remplacer la base par :\n\n```ts\nbase: '/'\n```\n\nAvant déploiement :\n\n```bash\nnpm run build\n```\n\nLe dossier généré est `dist/`.\n\n## Points à confirmer côté client\n\n- coordonnées définitives ;\n- textes définitifs ;\n- mentions légales, confidentialité et CGV ;\n- chiffres clés réels ;\n- métriques des réalisations ;\n- éventuel domaine personnalisé ;\n- mode de déploiement GitHub Pages ou autre hébergeur statique.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrendev%2Fgh26","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftrendev%2Fgh26","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrendev%2Fgh26/lists"}