{"id":50007175,"url":"https://github.com/memorasolutions/statut","last_synced_at":"2026-05-25T00:01:53.613Z","repository":{"id":358754486,"uuid":"1242913595","full_name":"memorasolutions/statut","owner":"memorasolutions","description":"Page de statut Laravel multilingue (FR/EN), WCAG 2.2 AA, multi-provider (Robotalp). Aucune dépendance Tailwind/JS, mode sombre auto, vues publiables.","archived":false,"fork":false,"pushed_at":"2026-05-19T17:13:52.000Z","size":40,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-22T22:51:07.431Z","etag":null,"topics":["blade","french","laravel","monitoring","php","robotalp","status-page","statut","uptime","wcag"],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/memorasolutions.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","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-18T21:58:34.000Z","updated_at":"2026-05-19T17:14:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/memorasolutions/statut","commit_stats":null,"previous_names":["memorasolutions/statut"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/memorasolutions/statut","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memorasolutions%2Fstatut","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memorasolutions%2Fstatut/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memorasolutions%2Fstatut/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memorasolutions%2Fstatut/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/memorasolutions","download_url":"https://codeload.github.com/memorasolutions/statut/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memorasolutions%2Fstatut/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33415020,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T22:14:44.296Z","status":"ssl_error","status_checked_at":"2026-05-23T22:14:43.778Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["blade","french","laravel","monitoring","php","robotalp","status-page","statut","uptime","wcag"],"created_at":"2026-05-19T19:00:47.288Z","updated_at":"2026-05-23T23:01:16.467Z","avatar_url":"https://github.com/memorasolutions.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Statut — page de statut Laravel multilingue\n\n[![Latest Version on Packagist](https://img.shields.io/packagist/v/memora/statut.svg)](https://packagist.org/packages/memora/statut)\n[![Total Downloads](https://img.shields.io/packagist/dt/memora/statut.svg)](https://packagist.org/packages/memora/statut)\n[![Tests](https://github.com/memorasolutions/statut/actions/workflows/tests.yml/badge.svg)](https://github.com/memorasolutions/statut/actions/workflows/tests.yml)\n[![PHP Version](https://img.shields.io/packagist/php-v/memora/statut.svg)](https://packagist.org/packages/memora/statut)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n\nUne page de statut publique pour vos applications Laravel, prête à brancher sur une plateforme de monitoring tierce (Robotalp aujourd'hui, d'autres demain), entièrement traduite (FR par défaut, EN inclus), accessible (WCAG 2.2 AA), responsive, avec mode sombre automatique et zéro dépendance frontale.\n\n## Pourquoi\n\nLes pages de statut hébergées des plateformes de monitoring sont rarement traduites, jamais à la marque de votre site, et difficiles à intégrer dans le design existant. Ce paquet vous donne une page `/statut` 100 % sous votre contrôle, qui consomme l'API de votre fournisseur de surveillance et affiche les données dans un layout intégré au reste de votre site.\n\n## Fonctionnalités\n\n- Page publique `/statut` (route configurable) qui s'intègre dans le layout Blade de votre site hôte\n- Multi-fournisseur via un contrat `MonitoringProvider` — implémentation Robotalp incluse, ajout d'autres plateformes sans toucher au reste du paquet\n- Indicateur global d'état (tous opérationnels, incident en cours, maintenance) avec compteurs détaillés\n- Cartes de moniteurs avec statut, dernier check, temps de réponse, et barre de disponibilité par fenêtre temporelle (24 h, 7 j, 30 j, 90 j)\n- Liste des incidents en cours\n- Internationalisation : français (par défaut) et anglais inclus, ajout d'autres langues trivial\n- Mode sombre automatique via `prefers-color-scheme`\n- Accessibilité WCAG 2.2 AA (contrastes, focus visibles, rôles ARIA, aria-live, cibles tactiles minimum 44×44 px)\n- Mise en cache configurable (60 s par défaut) pour limiter la charge sur l'API distante\n- Aucune dépendance JavaScript ni Tailwind requise côté hôte — un seul bloc CSS scopé sous `.statut-*` pour éviter tout conflit avec votre design\n- Vues et traductions entièrement publiables et personnalisables\n\n## Pré-requis\n\n- PHP 8.2 ou plus récent\n- Laravel 10, 11 ou 12\n- Un compte sur une plateforme de monitoring supportée (actuellement : Robotalp)\n\n## Installation\n\n```bash\ncomposer require memora/statut\n```\n\nLe service provider est auto-découvert. Publiez ensuite la configuration :\n\n```bash\nphp artisan vendor:publish --tag=statut-config\n```\n\n(Optionnel) publiez les vues et les traductions si vous voulez les personnaliser :\n\n```bash\nphp artisan vendor:publish --tag=statut-views\nphp artisan vendor:publish --tag=statut-lang\n```\n\n## Configuration\n\nAjoutez les variables d'environnement nécessaires dans votre `.env` :\n\n```env\nSTATUT_ENABLED=true\nSTATUT_PROVIDER=robotalp\nSTATUT_ROUTE_PATH=/statut\nSTATUT_LAYOUT=layouts.app\nSTATUT_SECTION=content\nSTATUT_CACHE_TTL=60\n\nSTATUT_BRAND_NAME=\"Votre marque\"\nSTATUT_BRAND_URL=https://votre-site.example\nSTATUT_BRAND_LOGO=https://votre-site.example/logo.svg\n\n# Robotalp\nSTATUT_ROBOTALP_BASE_URL=https://api.robotalp.com\nSTATUT_ROBOTALP_API_KEY=votre_clef_api\nSTATUT_ROBOTALP_WORKSPACE_ID=123456\n\n# Optionnel : moniteurs à masquer (CSV d'identifiants)\nSTATUT_HIDDEN_MONITORS=99999,88888\n```\n\n### Layout du site hôte\n\nLa page de statut étend le layout défini par `STATUT_LAYOUT` (`layouts.app` par défaut) et injecte son contenu dans la section `STATUT_SECTION` (`content` par défaut). Assurez-vous que votre layout Blade contient bien `@yield('content')` (ou ajustez `STATUT_SECTION` au nom utilisé chez vous).\n\n\u003e **Accessibilité** — la page hérite de l'attribut `\u003chtml lang\u003e` du layout hôte. Pour une lecture correcte par les lecteurs d'écran, votre layout doit déclarer `\u003chtml lang=\"fr\"\u003e` (ou la langue appropriée). Le paquet ne peut pas définir cet attribut lui-même puisqu'il s'insère à l'intérieur du layout existant.\n\n### Personnaliser les vues\n\nSi vous avez publié les vues (`statut-views`), modifiez-les dans `resources/views/vendor/statut`. Le CSS est scopé sous `.statut-page` ; vous pouvez le surcharger sans risque de conflit.\n\n### Ajouter ou modifier une langue\n\nSi vous avez publié les traductions (`statut-lang`), elles vivent dans `lang/vendor/statut/{fr,en}/messages.php` et `status.php`. Pour ajouter une nouvelle langue, copiez l'un des dossiers existants et traduisez les chaînes.\n\n## Utilisation\n\nUne fois installé et configuré, ouvrez `/statut` (ou la route que vous avez choisie). La page affichera l'état global, la liste des moniteurs et les incidents actifs, le tout rafraîchi automatiquement toutes les 60 secondes.\n\nVous pouvez aussi accéder programmatiquement au fournisseur de surveillance via la façade :\n\n```php\nuse Memora\\Statut\\Facades\\Statut;\n\n$overview = Statut::getOverview();\n$monitors = Statut::listMonitors();\n$incidents = Statut::getActiveIncidents();\n```\n\n## Étendre avec un nouveau fournisseur\n\nTous les fournisseurs implémentent l'interface `Memora\\Statut\\Contracts\\MonitoringProvider`. Pour brancher une plateforme autre que Robotalp :\n\n1. Créez une classe `MonNouveauProvider implements MonitoringProvider` dans votre application.\n2. Liez-la dans un service provider de votre application :\n\n```php\n$this-\u003eapp-\u003esingleton(\\Memora\\Statut\\Contracts\\MonitoringProvider::class, fn () =\u003e new MonNouveauProvider($config));\n```\n\n3. Définissez `STATUT_PROVIDER=mon_nouveau_provider` (la valeur informative — c'est la liaison du conteneur qui détermine la classe utilisée).\n\n## Tests\n\n```bash\ncomposer install\ncomposer test\n```\n\nLes tests utilisent Pest et Orchestra Testbench. Toutes les requêtes HTTP sont simulées via `Http::fake()`.\n\n## Sécurité\n\nSi vous découvrez une vulnérabilité, écrivez à **info@memora.ca** plutôt que d'ouvrir une issue publique. Nous accusons réception sous 72 heures.\n\n## Contribution\n\nLes contributions sont bienvenues. Ouvrez une issue avant toute PR significative pour qu'on en discute. Respectez PSR-12 et ajoutez des tests Pest pour toute fonctionnalité.\n\n## Licence\n\nDistribué sous licence MIT — voir [LICENSE](LICENSE).\n\n## Auteur\n\n**[MEMORA solutions](https://memora.solutions)** — info@memora.ca\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmemorasolutions%2Fstatut","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmemorasolutions%2Fstatut","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmemorasolutions%2Fstatut/lists"}