---
name: sito-bg-perspective
description: "Il sito bg-perspective.it (SvelteKit + Turso): come si alimenta con sito.py, cosa vede il pubblico, cosa fa il cron, dove stanno chiavi e concept"
metadata: 
  node_type: memory
  type: project
  originSessionId: d9cb587f-e008-4bf3-b0fb-b6182f56fea4
  modified: 2026-09-19T08:08:50.041Z
---

Online dal **2026-09-14**: https://bg-perspective.it (dominio preso su IONOS lo stesso giorno, 4 euro il
primo anno poi 10; DNS su Cloudflare, nameserver natasha/trace; record A 76.76.21.21 e CNAME www
verso Vercel, "Solo DNS"; www e vercel.app ridirigono al .it da `src/hooks.server.js`). Fa da
link in bio al posto di Linktree. Una scheda per gioco, testo puro con le foto originali, mai la parola "recensione".
Specifica: `_archivio/2026-09-28/docs/superpowers/specs/2026-09-14-sito-bg-perspective-design.md`. Piano eseguito:
`_archivio/2026-09-28/docs/superpowers/plans/2026-09-14-sito-bg-perspective.md`. Concept approvati in
`_archivio/2026-09-28/_instagram/sito-concept/` (D = home, E = pagina gioco).

**Deploy: dal 16/9 va online da solo a ogni push su `main`** (progetto Vercel collegato al repo GitHub,
Root Directory `_instagram/sito`, build saltata se il commit non tocca quella cartella). Vedi
[[git-e-deploy-li-faccio-io]].

**Dove sta cosa.** Codice in `_instagram/sito/` (SvelteKit 2, Svelte 5, adapter Vercel
configurato in `vite.config.js`, non c'è `svelte.config.js`). Progetto Vercel
`bg-perspective`, database Turso `bg-perspective` (una tabella, `giochi`, schema in
`sito/schema.sql`). Chiavi in `sito/.env` (fuori dal repo) e nelle variabili del progetto
Vercel: `TURSO_DATABASE_URL`, `TURSO_AUTH_TOKEN`, `BUFFER_API_KEY`, `CRON_SECRET`,
`PUBLIC_BASE_URL`. Foto e scatole ridotte su `bgp-immagini/sito/<slug>/`.

**Come si alimenta: solo da `codice/sito.py`, al momento della messa in coda su Buffer.**
```
python3 codice/sito.py pubblica post13 --data 2026-10-02T19:00 --ig <idBufferIG> --th <idBufferTH> [--gia-uscito] [--senza-deploy]
```
Legge i testi da `slide.POST`, i numeri dal portale (senza cache), la didascalia e la chicca
da Buffer (il paragrafo che parte con 🍬; se manca, chiede quale paragrafo), riduce le
quattro foto e le scatole, fa il deploy di `bgp-immagini`, scrive la riga su Turso.
Rilanciato, aggiorna la riga. `verifica <slug>` la rilegge, `permalink <slug> --ig URL --th URL`
scrive i link a mano. La demo offline: `python3 codice/sito.py demo`.

**Regole che il sito applica da solo.** Una riga con data futura è una bozza: invisibile
ovunque e 404 sull'URL diretto, finché `pubblicato_il` non è passato (confronto in UTC con
`datetime()`, la data è salvata con l'offset di Roma). L'editore del sito è quello dei
crediti della slide 1; il testo della slide scatola ("Ghenos, annunciata") va in
`edizione_it` e si vede solo nella sezione La scatola. Gli apostrofi diventano tipografici
in rendering. Il cron `/api/permalink` gira alle 19:10 di Roma (due voci UTC) e chiede a
Buffer `externalLink` per le righe già uscite senza link; fino ad allora i bottoni
"Rispondi su Instagram/Threads" puntano al profilo.

**Buffer fuori dall'MCP.** `POST https://api.buffer.com/graphql` con
`Authorization: Bearer <chiave dell'MCP>` funziona (verificato il 2026-09-14); query con
variabile `$id: PostId!`. Il primo asset di un post (`.../postN_1.png`) dice quale `postN`
è: è così che si abbinano i post Buffer alle chiavi di `POST`.

**Stato al 2026-09-14.** Quindici righe su Turso: i cinque usciti (Draftosaurus, Dixit,
Ratti di Wistar, Wingspan Pocket, Cryptid) con i permalink, e i dieci in coda fino a
Noctiluca del 5 ottobre. I diciotto montati ma non in coda entrano quando si mettono su
Buffer. Elenco usato per lo storico in `sito/storico.tsv`.

**Posta.** `ciao@bg-perspective.it` inoltra a boardgamesperspective@gmail.com (Cloudflare Email
Routing, regola attiva, MX/SPF/DKIM in DNS dal 2026-09-14). Scelto "ciao" e non "info" per tono;
niente catch-all. Firma Gmail dell'account boardgamesperspective (14/9): foto tonda dei dadi di Noctiluca da
`https://bgp-immagini.vercel.app/firma/profilo.png` (cartella `bgp-immagini/firma/`, fuori dal repo: se si
rifà la cartella, va rimessa), nome, tagline, Instagram/Threads/sito/mail con emoji; inserita prima del
testo citato nelle risposte.

**Search Console.** Proprietà di tipo Dominio `bg-perspective.it` sull'account Google **2BYTES**
(quello con gli altri siti di Paolo, non quello di bg_perspective), verificata con record TXT su
Cloudflare il 2026-09-14; sitemap inviata lo stesso giorno. Niente Google Analytics: in Italia vuole il
banner cookie; le visite si leggono da Vercel Web Analytics (interruttore da accendere nel pannello).

**Fase 2, online dal 2026-09-14 (sera).** Specifica in
`_archivio/2026-09-28/docs/superpowers/specs/2026-09-14-sito-fase2-video-meccaniche-design.md`, piano eseguito
`_archivio/2026-09-28/docs/superpowers/plans/2026-09-14-sito-fase2-video-meccaniche.md`, anteprime in
`_archivio/2026-09-28/_instagram/sito-concept/F-post-v2.html` e `G-meccanica.html`. Colonne `video` e `collegati` in
`giochi`, riempite da `sito.py pubblica` (solo tutorial in italiano: `galleria == instructional` o
"tutorial" nel titolo, uno per id YouTube; i collegati del portale con tipo base/espansione/precedente).
Nella scheda: tag categoria e meccanica sono link, blocco "Video tutorial" chiuso (`src/lib/Video.svelte`,
rimontato a ogni scheda con `{#key g.slug}`, iframe youtube-nocookie solo al click, riga intera
cliccabile), blocco "Della stessa famiglia" (`src/lib/famiglia.js`, solo i parenti con una scheda visibile,
esclusi dai "Sul tavolo c'è anche"). Pagine `/categoria/[slug]` e `/meccanica/[slug]`: una route sola
`src/routes/[tipo=tag]/[slug]` con param matcher, filtro in memoria (`src/lib/tag.js`), in sitemap.
I quindici già online sono stati ricaricati con `pubblica --senza-deploy`. Oggi nessuno dei quindici ha un
parente sul sito: la famiglia compare da sola quando entra, per esempio, Wingspan. Da fare al prossimo
tocco: il CSS di hero/.tit è copiato in quattro pagine (spostarlo in `app.css`), `+error.svelte` dice
"scheda" anche per un tag inesistente.

**Fatto il 2026-09-14 pomeriggio.** Vercel Analytics acceso (piano Hobby). Mail `ciao@` provata:
arriva; la prima finiva in Spam, risolto con un filtro Gmail "mai in spam" per `ciao@bg-perspective.it`
e con il record DMARC (`_dmarc` TXT `v=DMARC1; p=none; rua=mailto:ciao@bg-perspective.it`). Link
`bg-perspective.it` in bio su Instagram e Threads (nel campo Link, non nel testo, se no non è cliccabile).
Search Console: la sitemap il 15/9 risulta **Riuscita, 21 pagine rilevate** (il 14 diceva "Impossibile
recuperare", era la delega .it appena fatta). Il 15/9 Paolo ha aggiunto anche la **proprietà Instagram** (`sc-creator-profile:instagram.com/bg_perspective`,
tipo nuovo di Search Console accanto a TikTok, X e YouTube, sempre sull'account 2BYTES): mostra clic, query e
contenuti di @bg_perspective **nella Ricerca Google**, non gli insight interni di Instagram. Dati dopo 48 ore:
da guardare dal 17/9 (Insight → "Query che portano ai tuoi contenuti Instagram"). Letto il 18/9:
**0 clic, nessuna query** negli ultimi 28 giorni (dati raccolti dal 13/9). Presto per dire se non
funziona o se serve solo più tempo, si ricontrolla più avanti.

**Tag e peso, dal 2026-09-14 sera.** Le categorie e le meccaniche della scheda sono **tutte quelle del
portale** (`categorieNomi`/`meccanicheNomi`), non le tre della slide: sul sito il limite di spazio
non c'è. I nomi sono stati corretti alla fonte, nel portale di Paolo, dopo la revisione in
`_instagram/dati/revisione_tag_portale.md` (confronto con BGG e con la Goblinpedia della Tana dei
Goblin, che è il riferimento per il gergo italiano). Anche il peso è cliccabile: `/peso/<slug>`
(`medio`, `leggero`, `impegnativo`, `cinghiale`), stessa route `[tipo=tag]` delle categorie.

**Vercel, spazio dei deployment.** Il 14/9 sera Vercel ha avvisato "quasi al limite Hobby": erano i
deployment di `bgp-immagini` (270 MB l'uno, uno a ogni `vercel deploy`, tenuti 30 giorni: 9,1 GB su
10). Risolto con `vercel rm bgp-immagini --safe --yes` (via tutti tranne quello in produzione) e con
"Deployment Retention" del progetto messa a **1 giorno** per la produzione. Alle 21 del 14/9 il contatore segnava ancora 9,13 GB: i
cancellati restano "ripristinabili 30 giorni" ma **non contano**: il 15/9 alle 12 il contatore segnava
**25 MB su 10 GB**. Chiuso. Tutti gli altri contatori Hobby stanno sotto il 10% (transfer 2,6 GB su 100,
functions storage 427 MB su 10 GB).

**Foto profilo.** Su Instagram è `archivio/Noctiluca (269752)/Noctiluca - 01.jpg` (il mucchio di dadi
trasparenti), ritaglio centrale quadrato; copia in `_instagram/foto/profilo.jpg` (fuori dal repo). Da lì
vengono le icone del sito in `sito/static/` (favicon tonda, le altre quadrate, rifatte il 14/9 sera) e la foto
della firma. Non è Sagrada: era un errore della prima versione.

**Da fare quando capita.** Dominio: la pagina "Chi siamo / Privacy" corta (chi scrive, foto nostre,
nessun tracciamento) ancora non c'è. Le immagini della scatola sono materiale degli editori: si
tolgono se qualcuno lo chiede.

**How to apply:** ogni volta che un post va in coda su Buffer, subito dopo si lancia
`sito.py pubblica` con i due id. Se si corregge un testo in `POST` o una didascalia, si
rilancia lo stesso comando. Vedi [[pipeline-pubblicazione]] e [[lo-stesso-dato-vive-in-piu-posti]].

**Dal 19/9 il sito è in cinque lingue** (italiano, inglese, francese, tedesco, spagnolo):
selettore nel footer, lingua rilevata dal browser di chi visita, default inglese. Vedi
[[sito-lingue]] per l'architettura, la tabella `traduzioni`, il glossario e il passo in più
da fare dopo ogni `sito.py pubblica`.


## Pagine statiche riservate, dal 23/9/2026

I file in `_instagram/sito/static/` vanno online così come sono a ogni push. Per pagine da passare a
qualcuno col link, senza farle comparire nel sito, si usa `static/x/<nome>/index.html` con
`<meta name="robots" content="noindex, nofollow">`. Prima: **`bg-perspective.it/x/vale/`**, le
proposte grafiche per Valentina (madness_vale): analisi del suo profilo, due direzioni ("Notte dello
Stregatto" dal calderone di "Cosa bolle nella scatola", "Pergamena" dalle Cronache), tavolozza
(notte #153A43, gatto #E98A3C, panna, prugna per le Cronache, pergamena e inchiostro), caratteri
Fraunces + Nunito + Caveat, copertine 4:5 di esempio con le nostre foto, un prompt per rifare il logo
con ChatGPT e uno per il suo Claude Code (un template HTML per rubrica, reso a 1080x1350 con Chrome
headless, per spendere pochi token).

## Anteprima dei link (og image), dal 28/9/2026

Home e pagine elenco (categorie, meccaniche, editori, autori) usano `static/og-bg-perspective.jpg`, 1200x630: i
dadi di Noctiluca (la foto dell'icona e della firma mail) con sfumato nero, occhiello "Giochi da tavolo, visti dal
tavolo", BG_PERSPECTIVE in Bebas Neue, bg-perspective.it. Scelta da Paolo fra quattro varianti (`out/og/`).
Prima c'era `static/og.jpg`, un ritaglio di Cryptid, ora cancellato. I tag li mette `src/lib/Anteprima.svelte`;
le schede dei giochi tengono la loro foto. Si rigenera con `codice/og.py nome "foto" [--posizione] [--sito]`
(rende con Chrome perché i font sono woff2). Se si cambia immagine, **nome di file nuovo**: WhatsApp e Facebook
tengono in cache l'anteprima per indirizzo.

## Pagina "Per gli editori", dal 28/9/2026

`bg-perspective.it/per-gli-editori` (e `/en/`, `/fr/`, `/de/`, `/es/`), idea di Paolo presa dal sito di Valentina
(madnessvale.it/per-gli-editori). Testi in `sito/src/lib/pagina-editori.js`, pagina in
`src/routes/[[lang=lang]]/per-gli-editori/`. Link nel footer e nel riquadro editori ("Cosa facciamo con un gioco"),
in sitemap. Contenuti decisi con Paolo: gruppo che gioca da oltre dieci anni, **oltre 10.000 partite** (8.800
registrate, molte non registrate: numero scelto da Paolo), durate cronometrate **dal 2020** (frasi che non invecchiano);
tempi: reel di unboxing all'apertura del pacco, post di solito entro due settimane, al massimo un mese; "come ne
parliamo": i difetti non si nascondono, si dice a chi possono piacere (esempi: gioco lungo, fortuna).
**"Hanno già collaborato con noi"**: array `COLLABORATORI` nello stesso file (nome + sito, Instagram se il sito non
c'è, si apre in una scheda nuova). **Si allunga a ogni editore che ci manda un gioco**, nello stesso giro della riga in
[[giochi-ricevuti-dagli-editori]]. Al 28/9: Masterland (Instagram), Rio Grande Games, Doomlings, Mana Project Studio.

**Loghi al posto dei nomi (Paolo, 28/9):** nella sezione dei collaboratori ci sono i loghi, in tessere bianche, file in
`sito/static/editori/`. Fonti: Masterland = avatar Instagram di @masterland_boardgame; Rio Grande = logo della scheda
editore su BGG (il sito è dietro Cloudflare); Doomlings e Mana dal loro sito (il logo di Mana è bianco, nel file la
tinta è scurita per stare su fondo chiaro). Per un editore nuovo: logo in `static/editori/`, voce in `COLLABORATORI`.
**Neverland** (28/9): la "casa editrice" di Phil per la nuova edizione di Masterland online non esiste ancora. Neverland
SNC è la sua società (i locali @neverlandstradella ecc.); "Neverland Games" di Empoli è un negozio di un altro Filippo,
non c'entra. Quando uscirà qualcosa, si aggiorna il link di Masterland.

**Search Console, 28/9/2026** (proprietà di dominio sull'account 2BYTES, in Chrome è `search.google.com/u/1/`): sitemap
rinviata (545 pagine rilevate, riuscita); richiesta di indicizzazione per `/it/per-gli-editori` e `/per-gli-editori`
(il campo "Controlla URL" si attiva cliccando **Controllo URL** nel menu, poi si scrive e Invio). Stato indicizzazione:
**8 pagine indicizzate, 416 no**: 408 "Rilevata, ma attualmente non indicizzata" e 8 "Scansionata, ma attualmente non
indicizzata", nessun errore tecnico. È Google che non ha ancora deciso di scansionarle: sito giovane (dal 13/9), poche
pagine collegate da fuori, e molte pagine elenco sottili (una categoria o meccanica con un gioco solo, per cinque lingue).
**Fatto il 28/9 con l'ok di Paolo:** le pagine elenco (editore, autore, categoria, meccanica, peso) con **un gioco solo**
hanno `noindex, follow` e restano fuori dalla sitemap (da 585 a 200 URL, 40 per lingua); quando arriva il secondo gioco
entrano da sole. Sitemap rinviata (200 pagine, riuscita). Resta il lavoro sui link dall'esterno: foto BGG col link, bio,
gruppo Facebook, link alla pagina editori nei messaggi. Ricontrollare l'indicizzazione nel punto del lunedì.
