Codice sorgente del sito personale e blog di Cristian Castellari, pubblicato su GitHub Pages all'indirizzo cristiancastellari.it.
Il tema — scritto da zero, senza framework CSS/JS di terze parti — è open source e riutilizzabile: se ti piace, puoi prenderlo come base per il tuo sito personale. I contenuti (post, CV, progetti) restano ovviamente quelli dell'autore.
- Jekyll puro, nessuna pipeline di build front-end: CSS compilato nativamente da Jekyll/Sass, zero JavaScript di terze parti (niente jQuery, niente bundler).
- Multilingua (italiano/inglese): permalink sotto prefisso
/it///en/, switcher lingua con taghreflang, tutto gestito via front matter e_data/i18n.yml— nessun plugin i18n (non compatibile con la whitelist plugin di GitHub Pages). - Tema chiaro / scuro / automatico, persistente fra le pagine (
localStorage), a scelta dell'utente o a seguito diprefers-color-scheme. - Multi-pagina: Home, CV/Esperienze, Progetti, Blog (con categorie e paginazione), Contatti — non una singola landing a scroll infinito.
- Blog con categorie configurabili (proprie per lingua), indice categorie con conteggio articoli, paginazione filtrata per lingua, ricerca client-side (fetch di
search.json, nessuna libreria esterna, risultati filtrati sulla lingua corrente), commenti Disqus, bottoni di condivisione con colori di brand. - Copertine dei post theme-adaptive: due immagini per articolo, una per tema chiaro e una per scuro, selezionate puramente via CSS.
- Statistiche GitHub live (stelle/fork) sulle card dei progetti, con cache in
localStorageper restare sotto il rate limit dell'API pubblica. - Icone via Fork Awesome, con SVG inline in
_includes/icons/per i loghi non presenti nel set (X, Bluesky) e per le bandiere dello switcher lingua. - Permalink dei post configurabili e stabili — pensato per non rompere l'indicizzazione quando si cambiano categorie o struttura del blog (vedi
jekyll-redirect-fromin_config.yml).
- Jekyll 3.10 (Ruby, via la gem
github-pagesche fissa le versioni a quelle usate in produzione), Sass nativo - Plugin:
jekyll-seo-tag,jekyll-redirect-from(la paginazione del blog è gestita a mano, non da un plugin, perché deve filtrare per lingua) - Fork Awesome per le icone
Nessuna dipendenza Node/npm: non serve alcuna build front-end.
Richiede Ruby (con Bundler).
# dipendenze Ruby (Jekyll e plugin)
bundle install
# avvia il server di sviluppo su http://127.0.0.1:4000
bundle exec jekyll serve
# per vedere anche i post con data futura (es. articoli programmati)
bundle exec jekyll serve --future_posts/it/,_posts/en/: articoli del blog (Markdown), organizzati per lingua. I post esistenti prima del multilingua restano solo init/; i nuovi si scrivono in entrambe le lingue collegandole con lo stessotranslation_keyin front matter.it/,en/: pagine statiche per lingua (Home, CV, Progetti, Contatti, pagine categoria del blog), ciascuna conpermalink:esplicito e — dove esiste una versione nell'altra lingua — lo stessotranslation_key._data/blog.yml: categorie del blog, una riga per lingua per categoria (nome visualizzato + URL); il camponameè anche la chiave con cui i post si associano alla categoria._data/i18n.yml: dizionario delle stringhe UI condivise (nav, bottoni, paginazione, ecc.),{it, en}per chiave._data/index/: contenuti strutturati di Home/CV (careers.yml,skills.yml,projects.yml), campi testo come mappa{it, en}._layouts//_includes/: template del tema;_includes/icons/per le SVG inline (loghi social, bandiere)._sass/: design system (_tokens.scssper palette/tipografia/spaziatura, un file per componente).
- Identità e social: sezione
author:/social:in_config.yml. - Lingua di default:
default_langin_config.yml— unico punto da cambiare per spostare il fallback su un'altra lingua. - Palette colori: variabili CSS in
_sass/_tokens.scss(tema chiaro di default, override automatico/esplicito per lo scuro). - CV/Esperienze:
_data/index/careers.yml(timeline) e_data/index/skills.yml(competenze per area). - Progetti:
_data/index/projects.yml. - Categorie del blog:
_data/blog.yml— aggiungere una riga per lingua e creare la pagina categoria corrispondente init//en/. - Stringhe UI:
_data/i18n.yml— una chiave per etichetta, valore per lingua.
Le modifiche più significative sono tracciate in CHANGELOG.md, inclusi la ricostruzione completa del tema (v2.0) e il sito multilingua IT/EN (v2.1).
Il repository usa due licenze distinte, dettagliate in LICENSE:
- Codice del tema (
_layouts/,_includes/,_sass/,assets/): MIT — riusabile liberamente, anche per progetti propri. - Contenuti (post del blog, testi di CV/pagine, immagini): Creative Commons BY-SA 4.0 — riuso consentito con attribuzione e stessa licenza, vedi disclaimer.