Website for Linux day toscana 2026 https://day.linux.prato.it
  • SCSS 52.5%
  • HTML 38.1%
  • JavaScript 9.4%
Find a file
Bojacco 04434bd5cb
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Small fixes
2026-07-22 21:30:34 +02:00
archetypes First public version 2026-07-06 22:44:58 +02:00
assets Small fixes 2026-07-22 21:30:34 +02:00
content Better SEO and added llms.txt for better instant response 2026-07-11 15:22:16 +02:00
data Small fixes 2026-07-22 21:30:34 +02:00
layouts Various fixes + Laura credits 2026-07-14 21:09:01 +02:00
static Add proper og:image, thanks Laura! 2026-07-14 00:07:39 +02:00
.gitignore First public version 2026-07-06 22:44:58 +02:00
.woodpecker.yml CI deployment on woodpecker 2026-07-12 06:21:15 +02:00
hugo.toml Better SEO and added llms.txt for better instant response 2026-07-11 15:22:16 +02:00
README.md Small fixes 2026-07-22 21:30:34 +02:00

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 → SettingsSecrets, 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 marcati cfpHide: true nei 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 paginadata/cfp.yaml (hero, formati, passi, blocco d'invio col modello proposta.md).

Come aggiornare i contenuti

Quasi tutto si modifica nei file data/*.yaml senza toccare l'HTML:

  • Data dell'evento e countdownhugo.toml (eventStart, eventEnd, eventDateDisplay).
  • Call for Papers → apertura/chiusura in hugo.toml, testi in data/cfp.yaml (vedi sezione sopra)
  • Programmadata/schedule.yaml
  • Speakerdata/speakers.yaml (sostituire le immagini placeholder di picsum.photos con foto reali, idealmente in static/img/speakers/)
  • Partnerdata/partners.yaml
  • Mappa / indicazionidata/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-face in assets/scss/_fonts.scss.
  • Icone: set Lucide vendorizzato in assets/icons/lucide/ e inserito inline dal partial icon.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 da data/location.yaml), sitemap.xml e robots.txt generati da Hugo.
  • Accessibilità: skip-link, aria-* su menu e filtri, focus visibile, pulsante pausa per la striscia scorrevole (preferenza ricordata in localStorage), supporto a prefers-reduced-motion.
  • Social card: static/img/social-card.png (1200×630, referenziata da params.ogImage).