[đ ] Ajouter un calendrier et des statistiques dâactivitĂ© Ă la sidebar du blog GitHub Pages
âš RĂ©sumĂ© de GPT-5.5 ă
Un rĂ©cit sur lâajout dâun calendrier des posts et de statistiques dâactivitĂ© par catĂ©gorie dans la sidebar juste aprĂšs la reprise du blog, avec le mois de lâarticle courant et la navigation dâarchive mensuelle.
AprĂšs avoir mis de lâordre dans lâarticle de reprise du blog, le problĂšme suivant est apparu immĂ©diatement.
Jâavais recommencĂ© Ă Ă©crire des articles. Mais le blog ne donnait pas encore vraiment lâimpression dâĂȘtre vivant. Avec seulement une liste de catĂ©gories, on ne voyait pas bien quand le blog avait bougĂ©, quels jours avaient accumulĂ© des traces, ni quel flux rĂ©cent existait.
Pour réécrire Daily Review, il faut une sensation des dates.
Ce blog est finalement centrĂ© sur âce que jâai laissĂ© tel jourâ. Mais un blog GitHub Pages nâa pas naturellement une navigation par dates visible comme Naver Blog. Comme câest un blog statique, il fallait dâautant plus la construire moi-mĂȘme.
La fonctionnalitĂ© ajoutĂ©e ce soir nâĂ©tait donc pas une simple dĂ©coration.
CâĂ©tait un travail pour transformer la sidebar, dâornement secondaire dâune liste dâarticles, en outil de navigation qui montre les dates et le flux dâactivitĂ©.
La premiÚre chose ajoutée était un petit calendrier direct
Le premier commit était f6971fc.
f6971fc feat: add sidebar activity widgets
Ă ce moment-lĂ , jâai créé deux nouveaux fichiers.
_includes/sidebar-calendar.html
_includes/sidebar-nav-stats.html
Jâai ajoutĂ© lâinclude du calendrier Ă sidebar.html.
{% include sidebar-calendar.html %}
Le premier calendrier était construit uniquement avec Liquid, sans JavaScript.
Il filtrait les articles cachĂ©s hors de site.posts, puis calculait le premier jour de la semaine et le dernier jour du mois courant. MĂȘme le calcul des annĂ©es bissextiles pour fĂ©vrier Ă©tait traitĂ© dans Liquid.
{% assign calendar_posts = site.posts | where_exp: "post", "post.hidden != true" %}
{% assign calendar_year = site.time | date: "%Y" %}
{% assign calendar_month = site.time | date: "%m" %}
Dans le mois, les dates avec des articles deviennent des liens, et les dates sans article restent de simples nombres. La base initiale Ă©tait site.time. Autrement dit, Ă ce stade, le calendrier Ă©tait un widget de sidebar qui montrait âlâĂ©tat des posts du mois courantâ.
MĂȘme cela a eu un effet immĂ©diat.
Le blog a commencĂ© Ă donner de nouveau lâimpression de bouger. Contrairement Ă une simple liste de titres, un calendrier montre la densitĂ© des traces. On voit dâun coup dâoeil quels jours sont chargĂ©s en articles, quels jours sont vides, et oĂč se trouve aujourdâhui.
Jâai aussi ajoutĂ© des informations dâactivitĂ© aux catĂ©gories
Si je nâajoutais que le calendrier, le flux des dates devenait visible, mais le flux par catĂ©gorie restait terne.
Jâai donc aussi créé sidebar-nav-stats.html.
Cet include considĂšre lâURL de chaque Ă©lĂ©ment de sidebar comme un chemin de catĂ©gorie, puis filtre Ă nouveau les articles appartenant Ă cette catĂ©gorie.
{% assign stat_posts = site.posts | where_exp: "post", "post.hidden != true" %}
{% assign stat_categories = include.url | remove_first: "/" | split: "/" %}
Par exemple, /daily-review affiche le nombre dâarticles de la catĂ©gorie daily-review, et /diary/ai ne garde que les articles qui contiennent Ă la fois diary et ai.
La sortie est simple.
Nombre d'articles · Date du dernier article
Jâai aimĂ© cela parce que la sidebar sortait du simple rĂŽle de table des matiĂšres.
On voit combien dâarticles Daily Review existent, quand le dernier article AI a Ă©tĂ© publiĂ©, et si GitHub Pages Blog est rĂ©ellement actif. Pour savoir si un blog est vivant ou mort, la date la plus rĂ©cente parle souvent plus clairement que le nombre dâarticles.
Jâai immĂ©diatement ajustĂ© la densitĂ© mobile
DĂšs que jâai ajoutĂ© le calendrier, la densitĂ© mobile est devenue un problĂšme.
La sidebar a de la place sur desktop, mais sur mobile elle descend sous le corps de page ou se mĂȘle au menu. Si les cellules du calendrier sont grandes ou si les libellĂ©s de nombre dâarticles sont longs, un seul widget prend trop dâĂ©cran.
Donc dans 17d074d et b401d8b, jâai immĂ©diatement resserrĂ© les libellĂ©s dâactivitĂ© de sidebar et la densitĂ© du calendrier.
17d074d fix: tighten sidebar activity labels
b401d8b [Fix] | Sidebar calendar: Improve mobile density
Dans le SCSS, jâai fixĂ© les cellules de dates avec aspect-ratio: 1, utilisĂ© des tailles de police plus petites et un radius de 4px. Les informations dâactivitĂ© des catĂ©gories ont Ă©tĂ© rendues assez petites pour tenir sur une ligne.
Lâimportant ici Ă©tait de ne pas faire du calendrier le personnage principal.
Le calendrier est un dispositif qui aide la navigation du blog. Il ne doit pas devenir plus grand que le contenu. Surtout dans un blog de traces, la sidebar doit donner de lâinformation sans gĂȘner la lecture.
Je lâai changĂ© pour utiliser le mois de lâarticle courant
Un problĂšme plus important est apparu tout de suite.
Si le calendrier repose sur site.time, alors mĂȘme pendant la lecture dâun article de 2025, le calendrier montre mai 2026. Dans ce cas, le calendrier nâexplique pas le contexte de lâarticle courant.
Donc dans ccb58d5, jâai changĂ© la date de base.
ccb58d5 [Fix] | Sidebar: Refine calendar behavior
Le point clé est ici.
{% assign calendar_source_date = site.time %}
{% if page.date %}
{% assign calendar_source_date = page.date %}
{% endif %}
Si la page a une date, il affiche le mois de cette date. Sur les pages sans date, il utilise toujours site.time.
Cette modification a changé le caractÚre du calendrier.
Le premier calendrier montrait âlâĂ©tat du blog ce mois-ciâ. Maintenant, il montre âle temps dans lequel lâarticle courant est placĂ©â. Si je lis un ancien Daily Review, je peux voir le flux des traces de ce mois-lĂ et retrouver quels autres articles existaient dans le mĂȘme mois.
Câest beaucoup plus juste pour un blog de traces centrĂ© sur les dates.
Plusieurs articles le mĂȘme jour sont devenus une liste
Dans le mĂȘme commit, jâai aussi ajoutĂ© des listes dâarticles par date.
Sâil nây a quâun article dans une journĂ©e, envoyer le lien de la date directement vers cet article convient. Mais sâil y a plusieurs articles le mĂȘme jour, un problĂšme apparaĂźt. Rien que le premier jour de reprise, Daily Review et lâarchive de conversation IA existaient Ă la mĂȘme date.
Donc quand une date a plusieurs articles, le lien de la date ne va pas directement vers un article. Il se déplace vers la liste des articles de cette date.
<section id="sidebar-calendar-2026-05-25-posts" class="sidebar-calendar__post-list">
<h4 class="sidebar-calendar__post-list-title">Articles du 25 mai</h4>
<ul>
...
</ul>
</section>
La rÚgle à ce stade était simple.
1 article : aller vers cet article
2 articles ou plus : aller vers la liste d'articles de cette date
Ce nâest pas tant une rĂšgle parfaite quâune maniĂšre de rĂ©soudre immĂ©diatement le problĂšme des multiples articles Ă la mĂȘme date. Mais le plus important, câest que le systĂšme ne cache pas le problĂšme.
Le systĂšme doit reconnaĂźtre quâune seule date peut contenir plusieurs articles. Si un blog peut publier Daily Review, conversations IA et journaux de dĂ©veloppement le mĂȘme jour, ce traitement est nĂ©cessaire.
Jâai aussi ajoutĂ© une enhancement JavaScript
Avec seulement le calendrier Liquid, la navigation centrĂ©e sur le mois courant est possible, mais passer dâun mois Ă lâautre reste peu pratique.
Donc dans b06b6d6, jâai ajoutĂ© JavaScript.
b06b6d6 [Feat] | Sidebar calendar: Add archive navigation
Le nouveau fichier est celui-ci.
assets/js/custom/sidebar-calendar.js
Et je lâai enregistrĂ© dans after_footer_scripts de _config.yml.
after_footer_scripts:
- /assets/js/custom/dark-theme.js
- /assets/js/custom/sidebar-calendar.js
CÎté Liquid, les données des posts descendent en JSON.
<script type="application/json" data-calendar-posts>
[
{
"title": "...",
"url": "...",
"date": "2026-05-25"
}
]
</script>
JavaScript lit ces donnĂ©es et construit postsByDate, postCountByMonth, postCountByYear et latestPostMonthByYear. Ensuite, il rend les boutons mois prĂ©cĂ©dent/suivant, un month input, des boutons de nombre dâarticles par annĂ©e/mois, et des listes dynamiques dâarticles par date.
Jâaimais cette structure parce quâelle nâabandonnait pas le fallback.
Si JavaScript est disponible, le dĂ©placement entre les mois et la navigation dâarchive deviennent pratiques. MĂȘme sans JavaScript, Liquid rend dĂ©jĂ le mois de lâarticle courant et la liste fallback pour les dates avec plusieurs articles.
Cet équilibre compte dans un blog statique.
Ce qui a changĂ© aujourdâhui
Le flux de cette nuit jusquâĂ lâaube ressemblait Ă ceci.
f6971fc Ajout du calendrier de sidebar et des statistiques d'activité par catégorie
17d074d Resserrement de la densité des libellés d'activité de sidebar
b401d8b Ajustement de la densité du calendrier mobile
ccb58d5 Gestion du mois de l'article courant et des dates Ă articles multiples
b06b6d6 Ajout de l'enhancement JavaScript pour la navigation d'archive mensuelle
Les fichiers centraux sont ceux-ci.
_includes/sidebar.html
_includes/sidebar-calendar.html
_includes/sidebar-nav-stats.html
assets/js/custom/sidebar-calendar.js
_sass/custom/customOverride.scss
_config.yml
En une phrase :
Jâai ajoutĂ© Ă la sidebar du blog une couche de navigation qui montre le flux des dates et de lâactivitĂ© par catĂ©gorie.
Résultat
La sidebar du blog nâest plus une simple liste de catĂ©gories.
Elle montre le mois auquel appartient lâarticle courant, marque les dates avec des articles, et dĂ©plie en liste les journĂ©es qui ont plusieurs articles. Les entrĂ©es de catĂ©gorie affichent le nombre dâarticles et la date du dernier article. Si JavaScript est activĂ©, on peut parcourir lâarchive du blog en passant dâune annĂ©e et dâun mois Ă lâautre.
Du point de vue portfolio, lâintĂ©rĂȘt de ce travail est dâavoir amĂ©liorĂ© la navigation sans serveur.
Il nây a ni DB sĂ©parĂ©e, ni API. Avec site.posts de Jekyll, Liquid, SCSS et un petit morceau de JavaScript, jâai comblĂ© un point faible du blog statique. Les traces ont des dates. Quand ces dates apparaissent dans lâUI, le blog ressemble moins Ă un tas dâarticles quâĂ un systĂšme qui avance dans le temps.
Le calendrier ajoutĂ© aujourdâhui en est le dĂ©but.
Laisser un commentaire