Les applications santé et sécurité de Machines Roger International : prévention, formation et forage en mine.
Translation pending
HealthTypeScript · CSSGitHub @Frankyray21Availability needs another checkOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Le Hub : un portail pour retrouver les applications de prévention, de forage et de vie pratique.
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Boutique publique des applications santé et sécurité de Machines Roger International. Chaque application a sa fiche : présentation, ce qu’elle contient, captures d’écran, et un bouton pour l’ouvrir. Le portail ne copie ni les données ni les comptes des applications. Deux onglets : Découvrir (les cinq applications) et Applications (le catalogue par collection). La recherche est un champ du bandeau, présent sur toutes les pages : elle filtre sur le nom, les thèmes et le contenu des fiches.Read the full README ↗
Boutique publique des applications santé et sécurité de Machines Roger International. Chaque application a sa fiche : présentation, ce qu’elle contient, captures d’écran, et un bouton pour l’ouvrir. Le portail ne copie ni les données ni les comptes des applications.
Deux onglets : Découvrir (les cinq applications) et Applications (le catalogue par collection). La recherche est un champ du bandeau, présent sur toutes les pages : elle filtre sur le nom, les thèmes et le contenu des fiches.
Aucune note, aucune étoile, aucun avis, aucun compteur de téléchargement, aucun classement : rien de tout cela n’existe, donc rien de tout cela n’est affiché. Un test du catalogue et le validateur d’export le vérifient à chaque construction.
Les URL publiques des cinq applications ont été vérifiées le 5 septembre 2026. Aucun dépôt privé n’est affiché. Pas de mesure d’audience, de compte ou de stockage partagé ajouté au portail. Chaque application garde son fonctionnement.
Deux couleurs et deux caractères, rien d’autre.
#d22325 sur noir. Le noir (--noir) porte la
coquille (bandeau, onglets) ; le rouge (--rouge) porte l’action
(bouton « Ouvrir », liens, onglet courant, barre sous les titres). Les
neutres sont franchement gris : la couleur vient du rouge et du noir, de
rien d’autre.#b81b1d pour le texte et éclairci à #ef5a5c sur le noir. Le
rouge exact reste celui des aplats. Chaque valeur d’app/globals.css
porte son ratio de contraste en commentaire.app/fonts/, sous licence OFL (app/fonts/OFL.txt) ;
la construction les copie dans _next/static/media/ avec le chemin de
base. Sans eux, le site retombe sur la police système et reste lisible.localStorage). Un
petit script en tête de page le rétablit avant le premier affichage, donc
sans clignotement ; sans JavaScript le bouton ne s'affiche pas, puisqu'il
ne ferait rien.node scripts/build-icones.mjs.npm ci
npm run dev -- --host 127.0.0.1 --port 8790
npm test
npm run lint
npm run build
La page locale se trouve sous /Portail-Applications/.
Le projet utilise React, Vinext et le socle de composants du générateur Sites, adaptés à la destination demandée : export statique pour GitHub Pages. Aucun serveur Cloudflare, projet Sites hébergé ou service d’authentification n’est nécessaire. Les dépendances du socle sont conservées ; les correctifs de sécurité ont été appliqués.
Le contrôle de qualité porte sur le code du portail ; les composants fournis par le générateur et non modifiés ne sont pas réécrits. La génération vérifie aussi l’export final et ses ressources. Sous Windows, un délai de sortie de 150 ms évite le problème de fermeture Node/Undici rencontré après le prérendu ; les codes d’erreur restent inchangés.
Le contenu est centralisé dans lib/catalogue.ts : nom, description, résumé de
fiche, liste « ce que ça contient », nombre de captures, collection, adresse
publique, dépôt et icône. Ajouter une application explicitement après avoir
vérifié son accès public. Ne pas importer automatiquement tous les dépôts du
compte. Les textes sont descriptifs ; ils ne valident pas le contenu médical,
réglementaire ou technique des applications liées.
Le résumé et la liste « ce que ça contient » se relèvent dans l’application elle-même, pas ailleurs. Rien ne doit y être inventé.
Les captures vivent dans public/captures/<id>-<n>.jpg, au format téléphone
(390 × 844, densité 1,5, JPEG qualité 82). Elles sont prises en faisant tourner
l’application localement, pas récupérées ailleurs. Le champ captures du
catalogue dit combien il y en a ; un test échoue si un fichier manque.
Adresse du portail : https://frankyray21.github.io/Portail-Applications/.
Le code source est fusionné dans main. Après les tests, la vérification du code
et la construction, seul le contenu de dist/client/Portail-Applications/ est
publié à la racine de la branche gh-pages, avec un fichier .nojekyll pour
préserver les ressources _next. Dans les réglages Pages, sélectionner
Deploy from a branch, branche gh-pages, dossier / (root).
La publication est explicite : une fusion dans main ne reconstruit pas le site
automatiquement. Aucun workflow personnalisé ni droit OAuth workflow n’est
nécessaire. Si le nom du dépôt change, modifier basePath dans next.config.ts,
le lien GitHub du pied de page et l’adresse du favicon.
Le portail existe aussi en APK : le site entier, embarqué, qui s'ouvre sans réseau dès l'installation. Le fichier est toujours à la même adresse :
https://github.com/Frankyray21/Portail-Applications/releases/download/apk-latest/portail-sst-mri.apk
Capacitor enveloppe l'export existant. Le préfixe /Portail-Applications
n'existe pas dans une WebView, donc scripts/build-apk-www.mjs rebâtit
l'export avec PORTAIL_BASE vide, dans apk/www.
npm run apk:sync # reconstruit apk/www, puis npx cap sync android
node scripts/build-icones.mjs # seulement si le motif de l'icône change
La compilation elle-même demande le SDK Android : elle se fait dans
.github/workflows/build-apk.yml, à chaque poussée sur main.
Android n'installe qu'un APK signé, et n'accepte une mise à jour que si elle porte la même clé que la version déjà installée. Cette clé ne doit jamais entrer dans le dépôt : elle vit dans les secrets, sous Settings → Secrets and variables → Actions.
| Secret | Contenu |
|---|---|
ANDROID_KEYSTORE_BASE64 | le fichier .keystore, encodé en base64 |
ANDROID_KEYSTORE_PASSWORD | le mot de passe du magasin |
ANDROID_KEY_ALIAS | le nom de la clé dans le magasin (portailsst) |
ANDROID_KEY_PASSWORD | le mot de passe de la clé |
Il faut keytool, qui vient avec Java. S'il est introuvable, installer un JDK
(https://adoptium.net) ; Android Studio en embarque un aussi.
keytool -genkeypair -v -keystore portail-sst-release.keystore \
-alias portailsst -keyalg RSA -keysize 2048 -validity 10950 \
-dname "CN=Portail SST MRI, O=Machines Roger International, C=CA"
La commande demande un mot de passe, deux fois, puis celui de la clé : appuyer sur Entrée pour reprendre le même. Les deux secrets de mot de passe auront donc la même valeur. Choisir un mot de passe et le noter quelque part de sûr.
Le secret ne contient pas le fichier mais son encodage. Selon le système, une seule ligne, qui met le résultat dans le presse-papiers :
# Windows, dans PowerShell
[Convert]::ToBase64String([IO.File]::ReadAllBytes("portail-sst-release.keystore")) | Set-Clipboard
# macOS
base64 -i portail-sst-release.keystore | pbcopy
# Linux
base64 -w0 portail-sst-release.keystore | xclip -selection clipboard
Sur https://github.com/Frankyray21/Portail-Applications/settings/secrets/actions,
bouton New repository secret, une fois par ligne du tableau ci-dessus.
ANDROID_KEY_PASSWORD reprend la même valeur que ANDROID_KEYSTORE_PASSWORD
si on a appuyé sur Entrée à l'étape 1.
La compilation part toute seule à la poussée suivante sur main, ou
immédiatement depuis l'onglet Actions → Build Android APK → Run workflow.
Garder le fichier .keystore en lieu sûr, hors du dépôt : le perdre oblige
à désinstaller l'application sur chaque appareil avant de pouvoir publier
une mise à jour. Sans les secrets, le workflow s'arrête avec un message
clair plutôt que de publier un APK que personne ne pourrait installer.
Le bouton de téléchargement du site ne s'affiche que si le fichier existe. Avant de déployer, relever la release :
node scripts/relever-apk.mjs # écrit version, taille et date dans lib/telechargement.ts
h1 de la page, et les noms de tuiles passent en h2 pour que la
hiérarchie des titres reste continue.A_LA_UNE disparaît du catalogue avec la section qu'il servait, ainsi que
les styles de la carte rouge et ses jetons de couleur.public/marque.png passe à 224 px, pour rester nette à 72 px sur
un téléphone à trois pixels par point.beforeinstallprompt ne concerne que sa propre origine, navigator.install
n'existe pas encore, et navigator.getInstalledRelatedApps() ne voit que la
PWA du site qui l'appelle. C'est une protection contre le pistage, sans
contournement : le portail ne peut donc pas basculer entre « Installer » et
« Ouvrir » comme le ferait une boutique.installable du catalogue
est vrai.beforeinstallprompt
ne concerne que sa propre origine et navigator.install n'existe pas encore.
Le bouton ouvre donc l'application, et c'est le navigateur qui propose de
l'ajouter. Le portail le dit dans son chapeau et sur chaque fiche, avec le
geste iPhone (Partager, puis Sur l'écran d'accueil).installable du catalogue est relevé dans chaque application
publiée : manifeste lié, display: standalone, icônes 192/512/masquable et
service worker. Les cinq les ont, vérifié le 21 septembre 2026. Une
application qui ne les aurait pas garderait « Ouvrir ».assets/logo-portail.png est la seule
source : node scripts/build-icones.mjs en tire le favicon, la marque du
bandeau, les icônes du manifeste, celles du lanceur Android et l'écran de
lancement de l'APK. Le fichier source n'est pas servi.app/globals.css.com.machinesroger.portailsst)
et nom du fichier APK.scripts/build-icones.mjs : favicon d'application, icônes de lanceur
Android et écran de lancement ne peuvent plus diverger..github/workflows/build-apk.yml), sous un tag fixe : l'adresse de
téléchargement ne change jamais. Voir « Application Android » plus bas.scripts/relever-apk.mjs relève la release avant chaque
déploiement.scripts/build-qr.mjs) : une adresse qui change se répercute toute seule,
et un code ne peut pas mener ailleurs que le bouton « Ouvrir ».public/logos/.logo du catalogue dit laquelle en a un.scripts/build-sw.mjs écrit le service worker après la construction, pour
qu’il connaisse le nom réel des actifs. Le validateur vérifie le manifeste,
les icônes, la présence d’un gestionnaire fetch et chaque fichier
préchargé.