{"id":14483618,"url":"https://github.com/SocialGouv/template","last_synced_at":"2025-08-30T04:31:32.687Z","repository":{"id":37055130,"uuid":"453022588","full_name":"SocialGouv/template","owner":"SocialGouv","description":"NextJS template de la Fabrique des ministères sociaux","archived":true,"fork":false,"pushed_at":"2024-04-04T20:04:16.000Z","size":95893,"stargazers_count":17,"open_issues_count":20,"forks_count":3,"subscribers_count":4,"default_branch":"main","last_synced_at":"2024-12-27T05:30:25.748Z","etag":null,"topics":["cypress","dsfr","frontend","jest","matomo","next-seo","nextjs","react","sentry","starter","static-site","storybook","template","testing-library"],"latest_commit_sha":null,"homepage":"https://template.fabrique.social.gouv.fr/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SocialGouv.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-01-28T10:16:33.000Z","updated_at":"2024-10-21T20:23:45.000Z","dependencies_parsed_at":"2023-10-02T01:22:10.785Z","dependency_job_id":"d1718294-3408-41c6-82a1-e02021248916","html_url":"https://github.com/SocialGouv/template","commit_stats":null,"previous_names":[],"tags_count":103,"template":true,"template_full_name":null,"purl":"pkg:github/SocialGouv/template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SocialGouv%2Ftemplate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SocialGouv%2Ftemplate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SocialGouv%2Ftemplate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SocialGouv%2Ftemplate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SocialGouv","download_url":"https://codeload.github.com/SocialGouv/template/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SocialGouv%2Ftemplate/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272805343,"owners_count":24995909,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-30T02:00:09.474Z","response_time":77,"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":["cypress","dsfr","frontend","jest","matomo","next-seo","nextjs","react","sentry","starter","static-site","storybook","template","testing-library"],"created_at":"2024-09-03T00:01:54.900Z","updated_at":"2025-08-30T04:31:32.187Z","avatar_url":"https://github.com/SocialGouv.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"# template\n\n![GitHub last commit (branch)](https://img.shields.io/github/last-commit/socialgouv/template/main)\n![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/socialgouv/template/preproduction.yaml)\n![Libraries.io dependency status for GitHub repo](https://img.shields.io/librariesio/github/socialgouv/template)\n\nTemplate minimal de la [Fabrique des ministères sociaux](https://www.fabrique.social.gouv.fr/) qui intègre nos [recommandations tech](https://socialgouv.github.io/support/docs/standards/developpement). Une présentation complète [est visible ici](https://docs.google.com/presentation/d/1DQMVxy87BEQ-VDF1tJ03jpPBbQnZtTfcDucfoMwVSM0/edit#slide=id.p).\n\n\u003e ⚠️ Le [Système de Design de l'État](https://www.systeme-de-design.gouv.fr/) s'adresse **uniquement** aux développeurs et aux concepteurs, qu'ils soient agents publics ou prestataires pour des sites Internet de l'État (Ministères, Administrations centrales, Préfectures, Ambassades, etc.). cf [conditions d'utilisation](https://www.systeme-de-design.gouv.fr/utilisation-et-organisation/perimetre-d-application).\n\n## Description\n\n- 🇫🇷 Basé sur [codegouv/react-dsfr](https://github.com/codegouvfr/react-dsfr)\n- ⚖️ Pages de \"conformité\" (CGU, RGPD, stats..)\n- 📦 Testing, lint, CI \u0026 release automatisés\n- 🔒 Image docker `rootless`, [header CSP](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP)\n- 🔑 prévention de fuite de secrets avec [talisman](https://github.com/thoughtworks/talisman/)\n- 📊 Intégration de sentry \u0026 matomo\n- ⚡️ Basé sur [Next](https://nextjs.org/) et TypeScript\n\n## Dans le détail\n\n### D'un point de vue fonctionnel\n\n- Page principale\n- Politique de confidentialité\n- Mentions légales\n- Conditions générales d'utilisation\n- Statistiques d'utilisation (fonctionnant avec matomo)\n- Déclaration d'accessibilité\n- Healthz\n- Page 404\n\n#### En plus dans la branche `hasura` :\n\n- Page d'authentification\n- Page d'inscription\n- Page profil\n- Interactions avec la base de données\n\n### D'un point de vue technique\n\n- [storybook](https://storybook.js.org/) permettant de réaliser des stories pour les composants\n- [@testing-library](https://testing-library.com/) pour tester de manière unitaire les composants\n- [jest](https://jestjs.io/) pour tester de manière unitaire le code\n- [cypress](https://www.cypress.io/) pour tester en e2e le frontend\n- [talisman](https://github.com/thoughtworks/talisman/) qui permet de prévenir la publication de secrets dans votre code\n- un [Dockerfile](./Dockerfile) rootless de production basé sur nginx\n- des [Content Security Policy et headers de sécurité de base](https://developer.mozilla.org/fr/docs/Web/HTTP/CSP)\n\n- Côté Next.js:\n  - intégration de [@codegouvfr/react-dsfr](https://github.com/codegouvfr/react-dsfr/) pour le [design système de l'état](https://www.systeme-de-design.gouv.fr/)\n  - intégration de [sentry](https://sentry.io/) pour gérer les erreurs\n  - intégration de [matomo](https://matomo.org/) pour les statistiques d'utilisation\n\n#### En plus dans la branche `hasura` :\n\n- [keycloak](https://www.keycloak.org/) qui est un serveur d'authentification (exclusive à `main`)\n- [next-auth](https://next-auth.js.org/) qui est un wrapper pour gérer l'authentification au sein de l'application (exclusive à `main`)\n- [hasura](https://hasura.io) qui permet d'exposer une API GraphQL sur votre Postgres et de gérer les authorisations (RBAC)\n\n## Lancer le code\n\nAprès avoir cloné le projet :\n\n### Développement\n\n:warning: Avant de lancer le projet, vous devez installer `gomplate`\n\n```bash\nyarn # to install dependencies\nyarn dev # to run in dev mode\n```\n\n### Gestion des environnements\n\nLes variables issues des docker build-args, sont à utiliser dans `next.config.js`, pour les autres, il faut les définir dans les différents [`.env.*`](https://nextjs.org/docs/basic-features/environment-variables#environment-variable-load-order).\n\nLe fichier `.env.staging` est utilisé pour les environnements de review et de pré-production.\n\nLe fichier `.env.development` est utilisé pour l'environnement de développement.\n\n:warning: Les variables d'environnement sont publiques (utilisées durant le build), ne commitez donc pas de variables privées dans ces fichiers.\n\n#### Variables d'env\n\ncf .env.development\n\nen production, les secrets sont chiffrés dans GIT avec sealed-secrets.\n\n### Branche `Hasura`\n\nCette branche propose des composants backends de référence.\n\n---\n\n```mermaid\ngraph LR\nBrowser{Browser}--\u003e|JWT|Frontend[Frontend/API Next.js]\nBrowser--\u003eKeyCloak\nFrontend--\u003e|JWT|Hasura\nKeyCloak--\u003ePG1[PostgreSQL]\nKeyCloak--\u003e|JWT|Browser\nHasura--\u003e|RBAC|PG2[PostgreSQL]\nKeyCloak--\u003eFranceConnect\n```\n\n---\n\nLancer les serveurs Postgres, hasura et keycloak avec `docker-compose up`.\n\n##### Hasura\n\nLancer les seeds :\n\n```sh\nyarn hasura seed apply --file books.sql --project ./hasura --database-name default --endpoint http://127.0.0.1:8082 --admin-secret myadminsecretkey\n```\n\nMettre à jour les metadatas et migrations :\n\nLancer la console avec `yarn hasura console --project ./hasura --endpoint http://127.0.0.1:8082 --admin-secret myadminsecretkey`. Les modifs faites dans l'UI seront reportées dans les dossiers `hasura/metadata` et `hasura/migrations`\n\nCf [migrations documentation](https://hasura.io/docs/latest/migrations-metadata-seeds/manage-migrations/)\n\n##### KeyCloak\n\nLe template intègre [Next-auth](https://next-auth.js.org/) et [KeyCloak 20](https://www.keycloak.org/) qui assure tous les workflows d'authentification.\n\nLe `realm` par défaut est dans [.kontinuous/files/realm-export.json](.kontinuous/files/realm-export.json). Pour générer realm utilisable par `docker-compose` à partir de celui-ci, utilisez `yarn keycloak`.\n\nLe thème keycloak est basé sur le design-système de l'état, cf [keycloak de sill-web](https://github.com/codegouvfr/sill-web/tree/main/src/keycloak-theme).\n\n##### FranceConnect\n\nCf https://partenaires.franceconnect.gouv.fr/fcp/fournisseur-service\n\nDans les URLs de callback définies [sur le compte FranceConnect](), utiliser `https://[votre-hostname]/realms/app-realm/broker/franceconnect-particulier/endpoint` et `https://[votre-hostname]/realms/app-realm/broker/franceconnect-particulier/endpoint/logout_response`.\n\n## Déploiement sur kubernetes\n\nTemplate utilise [kontinuous](https://github.com/socialgouv/kontinuous) pour définir et déployer ses ressources kubernetes.\n\nLancer `npx kontinuous build --env dev -o` pour obtenir les manifests de votre environment (`dev`, `preprod` ou `prod`).\n\nLa version dev est déployée sur OVH.\n\n## Liens\n\n- \u003chttps://template.fabrique.social.gouv.fr/\u003e : Version en production du projet\n- \u003chttps://socialgouv.github.io/template/\u003e : Storybook liés à la branche principale du projet\n- \u003chttps://github.com/socialgouv/keycloak-dsfr\u003e : Thème keycloak-DSFR\n- \u003chttps://socialgouv.github.io/support\u003e : Documentation technique SocialGouv\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSocialGouv%2Ftemplate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FSocialGouv%2Ftemplate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSocialGouv%2Ftemplate/lists"}