Website for Linux day toscana 2026
https://day.linux.prato.it
- SCSS 52.5%
- HTML 38.1%
- JavaScript 9.4%
|
|
||
|---|---|---|
| archetypes | ||
| assets | ||
| content | ||
| data | ||
| layouts | ||
| static | ||
| .gitignore | ||
| .woodpecker.yml | ||
| hugo.toml | ||
| README.md | ||
Linux Day Prato 2026 website
Sito ufficiale del Linux Day Prato 2026, generato con Hugo. Stile neobrutalista: colorato, ad alto contrasto, con ombre nette e bordi marcati.
Requisiti
- Hugo extended ≥ 0.156
(la versione extended serve per compilare lo SCSS).
Verifica con
hugo version: deve contenere+extended.
Comandi
hugo server # anteprima live su http://localhost:1313
hugo # build di produzione in public/ (HTML già minificato via config)
Struttura
.
├── hugo.toml # configurazione + parametri evento (DATA, contatti, CFP…)
├── content/_index.md # front matter della home (titolo/descrizione)
├── content/cfp.md # front matter della pagina /cfp/ (SEO)
├── data/ # ← TUTTI I CONTENUTI MODIFICABILI (YAML)
│ ├── navigation.yaml # voci di menu
│ ├── stats.yaml # numeri dell'hero
│ ├── marquee.yaml # parole della striscia scorrevole
│ ├── about.yaml # testo "Cos'è" + card
│ ├── schedule.yaml # programma + sale
│ ├── speakers.yaml # speaker
│ ├── cfp.yaml # testi della pagina Call for Papers
│ ├── partners.yaml # partner e comunità
│ ├── location.yaml # sede, mappa, indicazioni
│ ├── footer.yaml # colonne e testi del footer
│ └── social.yaml # link social
├── assets/
│ ├── scss/ # stili (compilati da Hugo Pipes)
│ │ ├── main.scss # entrypoint con gli @import
│ │ ├── _variables.scss # colori, ombre, breakpoint
│ │ ├── _fonts.scss # @font-face dei font self-hostati
│ │ ├── _base.scss _animations.scss _utilities.scss
│ │ └── components/ # uno SCSS per sezione/pagina
│ ├── icons/lucide/ # icone SVG vendorizzate (inline via partial icon.html)
│ ├── touch-icon.svg # sorgente di apple-touch-icon.png / favicon-96x96.png
│ └── js/main.js # menu mobile, countdown, filtri, pausa marquee, scroll reveal
├── layouts/
│ ├── _default/baseof.html # scheletro HTML
│ ├── _default/cfp.html # pagina Call for Papers
│ ├── index.html # home: assembla le sezioni
│ ├── 404.html
│ └── partials/ # head, header, footer, countdown, schema, scripts, icone
│ └── sections/ # hero, about, schedule, speakers, …
└── static/
├── favicon.svg apple-touch-icon.png favicon-96x96.png
└── fonts/ # woff2 self-hostati (Space Grotesk, Space Mono)
CI/CD
Pipeline Woodpecker in .woodpecker.yml: ogni push/PR compila il sito; sul
push in main fa anche il deploy con rsync sul VPS. Secret da configurare in
Woodpecker (repo → Settings → Secrets, evento push):
| Secret | Valore |
|---|---|
deploy_ssh_key |
chiave privata SSH dedicata, senza passphrase (ssh-keygen -t ed25519 -f deploy_key -N ''; la .pub va in authorized_keys sul VPS) |
deploy_known_hosts |
output di ssh-keyscan -H <host> |
deploy_host |
hostname o IP del VPS |
deploy_user |
utente SSH (non root, con scrittura sul path) |
deploy_path |
directory servita dal webserver, es. /var/www/day.linux.prato.it |
Call for Papers
La pagina /cfp/ e la "fase CFP" del sito si controllano da hugo.toml,
sezione [params.cfp]:
open = true→ pagina /cfp/ attiva. La home entra in fase CFP: nasconde programma, speaker e i numeri non ancora reali dell'hero, e mostra al loro posto le CTA "Proponi un talk" (gli elementi da nascondere in questa fase — voci di menu e footer, numeri dell'hero — sono marcaticfpHide: truenei rispettivi YAML).open = false→ /cfp/ mostra "CFP chiusa" e rimanda al programma; la home torna alla versione completa. Nessun altro intervento necessario.email,deadlineDisplay→ destinatario della mail precompilata e data mostrata;formUrl(opzionale) → se valorizzato, i bottoni aprono il form al posto della mail.- Testi della pagina →
data/cfp.yaml(hero, formati, passi, blocco d'invio col modelloproposta.md).
Come aggiornare i contenuti
Quasi tutto si modifica nei file data/*.yaml senza toccare l'HTML:
- Data dell'evento e countdown →
hugo.toml(eventStart,eventEnd,eventDateDisplay). - Call for Papers → apertura/chiusura in
hugo.toml, testi indata/cfp.yaml(vedi sezione sopra) - Programma →
data/schedule.yaml - Speaker →
data/speakers.yaml(sostituire le immagini placeholder dipicsum.photoscon foto reali, idealmente instatic/img/speakers/) - Partner →
data/partners.yaml - Mappa / indicazioni →
data/location.yaml
Note tecniche
- CSS/JS: compilati, minificati (in produzione) e fingerprinted con Subresource Integrity tramite Hugo Pipes.
- Font: self-hostati in
static/fonts/(woff2, subset latin), nessuna richiesta a Google Fonts.@font-faceinassets/scss/_fonts.scss. - Icone: set Lucide vendorizzato in
assets/icons/lucide/e inserito inline dal partialicon.html, nessun CDN a runtime. Per aggiungerne una:curl -o assets/icons/lucide/<nome>.svg "https://api.iconify.design/lucide/<nome>.svg?height=1em" - SEO: meta description, Open Graph, Twitter Card, dati strutturati
schema.org/Event(JSON-LD, sede letta dadata/location.yaml),sitemap.xmlerobots.txtgenerati da Hugo. - Accessibilità: skip-link,
aria-*su menu e filtri, focus visibile, pulsante pausa per la striscia scorrevole (preferenza ricordata in localStorage), supporto aprefers-reduced-motion. - Social card:
static/img/social-card.png(1200×630, referenziata daparams.ogImage).