From e38336890643c20b2bd2efa0ce0154bfce9c909c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9drix?= Date: Wed, 23 Sep 2026 12:26:02 +0200 Subject: [PATCH] =?UTF-8?q?Tenir=20un=20journal=20des=20nouveaut=C3=A9s=20?= =?UTF-8?q?sur=20l'accueil?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit La page annonçait l'existence des services, jamais leur arrivée : un visiteur régulier n'avait aucun moyen de voir ce qui avait bougé depuis sa dernière visite. Une section « Nouveautés » s'en charge, dessinée à partir de site/nouveautes.json — ajouter une entrée ne demande plus de toucher au HTML. Les six entrées de départ sont reconstituées depuis l'historique git, ici et dans le monorepo d'où la page vient. La page trie sur la date, l'ordre du fichier est donc libre, et n'affiche que les six plus récentes ; les anciennes restent dans le fichier comme mémoire. Fichier absent ou illisible : la section se masque, comme l'agenda et le wiki le font déjà de leur côté. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01JYfYUZRcJmmEWJwAxZb4o2 --- README.md | 26 ++++++++- site/index.html | 132 +++++++++++++++++++++++++++++++++++++++++++ site/nouveautes.json | 36 ++++++++++++ 3 files changed, 193 insertions(+), 1 deletion(-) create mode 100644 site/nouveautes.json diff --git a/README.md b/README.md index 7b84d95..855da1a 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,8 @@ Elle affiche deux choses qu'elle ne contient pas : l'**agenda**, lu dans le cale public Nextcloud, et les **dernières pages du wiki**, lues dans [`derniers-articles.json`](https://wiki.alpinux.org/derniers-articles.json) que le wiki publie à chaque build. Si l'une ou l'autre source est injoignable, la section -correspondante se masque et le reste de la page tient debout. +correspondante se masque et le reste de la page tient debout. Le **journal des +nouveautés**, lui, vit dans le dépôt : `site/nouveautes.json`. --- @@ -16,6 +17,7 @@ correspondante se masque et le reste de la page tient debout. | Ce que vous voulez faire | Ce que vous faites | |---|---| | Modifier la page | Éditer `site/index.html`, pousser sur `main` — la mise en ligne suit | +| Annoncer une nouveauté | Ajouter une entrée en tête de `site/nouveautes.json` (voir plus bas) | | Voir le rendu avant de pousser | `python3 -m http.server -d site` puis http://localhost:8000 | | Comprendre pourquoi ça n'est pas en ligne | `tail -20 /var/log/www-deploy.log` sur le serveur | | Republier sans nouveau commit | `sudo -u abonnelc /opt/www-alpinux/deploy-www.sh` | @@ -32,6 +34,7 @@ serveur, pas par `http.server`. Les articles du wiki, eux, s'affichent normaleme alpinux-www/ ├── site/ ce qui part en ligne, tel quel │ ├── index.html +│ ├── nouveautes.json le journal des nouveautés, lu par la page │ ├── robots.txt │ └── sitemap.xml └── deploiement/ la chaîne, versionnée avec le site @@ -44,6 +47,27 @@ alpinux-www/ --- +## Annoncer une nouveauté + +La section « Nouveautés » de l'accueil est dessinée à partir de `site/nouveautes.json` — +un tableau d'entrées, `url` facultative : + +```json +{ + "date": "2026-09-23", + "titre": "Listes de diffusion", + "texte": "Une phrase ou deux, à hauteur de visiteur.", + "url": "https://messagerie.alpinux.org" +} +``` + +L'ordre du fichier n'a pas d'importance : la page trie sur `date` et n'affiche que les +six entrées les plus récentes. Les plus anciennes restent dans le fichier, comme +mémoire. Une entrée sans `titre` ou sans `date` au format `AAAA-MM-JJ` est ignorée ; +si le fichier disparaît ou devient illisible, la section se masque comme les deux autres. + +--- + ## Ce qui se passe après un push ``` diff --git a/site/index.html b/site/index.html index e243f9d..5ead851 100644 --- a/site/index.html +++ b/site/index.html @@ -552,6 +552,65 @@ .wiki-more a { color: #1a6bbf; text-decoration: none; } .wiki-more a:hover { text-decoration: underline; } + /* ── Nouveautés ─────────────────────────────────────────────── */ + #news-section { margin-top: 3rem; } + + .news { + list-style: none; + border-left: 2px solid #dce8f5; + margin-left: .5rem; + padding-left: 1.5rem; + } + + .news li { + position: relative; + padding-bottom: 1.6rem; + } + + .news li:last-child { padding-bottom: 0; } + + .news li::before { + content: ''; + position: absolute; + left: calc(-1.5rem - 6px); + top: .35rem; + width: 10px; + height: 10px; + border-radius: 50%; + background: #9fc5e8; + box-shadow: 0 0 0 3px #f3f6fb; + } + + .news li:first-child::before { background: #1a6bbf; } + + .news-when { + font-size: .78rem; + font-weight: 700; + color: #7a8ba0; + letter-spacing: .06em; + text-transform: uppercase; + display: block; + margin-bottom: .2rem; + } + + .news-title { + font-size: 1rem; + font-weight: 600; + line-height: 1.35; + color: #1a1a2e; + text-decoration: none; + } + + a.news-title:hover { color: #1a6bbf; text-decoration: underline; } + + .news-text { + font-size: .92rem; + line-height: 1.6; + color: #4a5a6a; + margin-top: .25rem; + max-width: 62ch; + } + /* ── Services ───────────────────────────────────────────────── */ .services { display: grid; @@ -733,6 +792,11 @@ + +