L'app
Pagine di contenuto
Le pagine legali come file markdown che monti (CONTENT_DIR): la cartella, il formato dei file, cosa viene rifiutato e le sezioni con nome delle pagine dei due pulsanti obbligatori per legge
Questa pagina è tradotta automaticamente dalla documentazione in inglese.
openplate carica le pagine legali dai file markdown che monti nel container. Il repository non contiene testi legali propri. Scrivi tu i termini di servizio, l'informativa sulla privacy, il colophon e le pagine per i due pulsanti obbligatori per legge. Descrivono la tua istanza e indicano te come gestore.
Come attivarla
Imposta CONTENT_DIR su una cartella che l'app può leggere:
CONTENT_DIR=/srv/openplate-contentCon un container, monta la cartella in sola lettura e punta la variabile al punto di montaggio:
services:
openplate:
environment:
CONTENT_DIR: /content
volumes:
- ./content:/content:roUn valore che non indica alcuna cartella blocca l'avvio. Un montaggio non riuscito si nota subito. L'app non può avviarsi e presentarsi come un'istanza priva di pagine legali.
Con CONTENT_DIR non impostata
Questa è la configurazione predefinita ed è adatta a un'istanza a uso domestico che non vende nulla.
- Ogni route di contenuto risponde 404:
/terms,/privacy,/privacy/website,/imprint,/withdrawal,/kuendigung,/kuendigung/bestaetigt,/widerrufene/widerrufen/bestaetigt. - Il piè di pagina pubblico mostra solo Sorgente, Licenza e Preferenze. I cinque link legali (Privacy, Termini, Note legali e i due pulsanti previsti per legge) non vengono mostrati.
- Impostazioni, Info non include la voce Note legali. Montando la cartella, quella pagina elenca i medesimi cinque link sotto l'intestazione Note legali, così un utente autenticato, che non vede il piè di pagina, raggiunge comunque i dati societari.
- La nota che un visitatore non autenticato vede su una pagina personale rimanda alla home page e all'accesso, senza link al colophon o alla privacy.
- Il modulo della newsletter, se lo hai abilitato, omette la riga sulla privacy.
I link ricompaiono quando la cartella contiene un imprint.md, nella lingua del lettore o in inglese. Il colophon è la verifica usata perché la legge tedesca lo richiede per ogni istanza che pubblica una qualunque delle altre pagine.
La cartella
<CONTENT_DIR>/
en/
terms.md
privacy.md
imprint.md
...
de/
terms.md
...Una cartella per lingua: en, de, fr, it, es o tr. Un file per pagina, con il nome del suo slug:
| Slug | Percorso nell'app |
|---|---|
terms | /terms |
privacy | /privacy |
privacy-website | /privacy/website |
imprint | /imprint |
withdrawal | /withdrawal |
kuendigung | /kuendigung |
kuendigung-bestaetigt | /kuendigung/bestaetigt |
widerrufen | /widerrufen |
widerrufen-bestaetigt | /widerrufen/bestaetigt |
Una pagina mancante nella lingua del lettore viene servita in inglese. Una pagina mancante anche in inglese restituisce un 404. L'app legge solo questi slug. Non costruisce mai un percorso a partire da un URL.
L'app legge ogni file su richiesta e conserva la pagina analizzata in memoria. Rilegge il file quando cambiano data di modifica o dimensioni. Una modifica a un file montato compare alla richiesta successiva senza bisogno di riavviare.
Il formato dei file
UTF-8, fine riga LF, nessun byte order mark. Ogni file inizia esattamente con questo front matter:
---
title: Terms of service
updated: 2026-09-21
---title è l'intestazione della pagina. updated è una data di calendario, e l'app la mostra sotto l'intestazione come "Ultimo aggiornamento", nella lingua del lettore. Non ripetere nessuno dei due elementi nel corpo del testo.
Il corpo del testo usa solo questo sottoinsieme:
- Intestazioni
##e###.#è il titolo e non si scrive mai. - Paragrafi, separati da una riga vuota.
- Elenchi con
-o1., a un solo livello, senza rientro. **strong**e*emphasis*.- I link
[text](target). La destinazione è un percorso nell'app (/imprint),https://,mailto:oppuretel:. Un percorso nell'app si apre senza ricaricare la pagina. - Un'interruzione di riga forzata: una barra rovesciata come ultimo carattere di una riga, seguita dalla riga successiva dello stesso paragrafo. Usala per un indirizzo postale.
- Un elenco di definizioni: una riga con il termine seguita da una o più righe
: definition, senza alcuna riga vuota tra le voci. - Un carattere di escape: una barra rovesciata prima di
\,*,[o]lo rende letterale.
I paragrafi prima della prima intestazione costituiscono l'introduzione della pagina e vengono visualizzati con un carattere più grande.
Cosa viene rifiutato
HTML grezzo di qualsiasi tipo (un < seguito da una lettera, /, ! o ?), riferimenti a caratteri HTML come &, immagini, tabelle, codice, citazioni a blocchi, intestazioni # o ####, elenchi annidati o rientrati e qualsiasi segnaposto {{.
Un file che non rispetta il formato viene rifiutato, non corretto. L'app registra ogni problema indicando il numero di riga, una volta per ogni versione del file. La pagina risponde con 503 mostrando la schermata di errore generica. Una pagina legale che omettesse silenziosamente una tabella, o mostrasse un tag come testo normale, pubblicherebbe un documento che nessuno ha scritto. Correggi il file, e la richiesta successiva lo servirà.
Sezioni con nome
Due pagine mantengono un modulo nel codice dell'app: /kuendigung (disdetta di un contratto) e /widerrufen (recesso da un contratto). Le loro pagine di conferma mantengono la ricevuta nel codice. Le etichette dei moduli, i pulsanti, i messaggi di convalida e le righe della ricevuta fanno parte dell'app. Il testo circostante proviene dal file. Una sezione con nome contiene ciascuna parte che l'app posiziona intorno al modulo:
:::section unavailable
Text of the section, in the same subset.
:::Ciascuna di queste pagine deve contenere esattamente le sezioni indicate sotto, una volta ciascuna. Una sezione mancante o una di troppo viene rifiutata come qualsiasi altro errore.
| Slug | Sezione | Dove viene mostrata dall'app |
|---|---|---|
kuendigung | (corpo) | L'introduzione, sopra il modulo di disdetta. |
kuendigung | unavailable | Al posto del modulo quando CORE_URL non è impostata, e sotto il pulsante di invio quando una richiesta non riesce a raggiungere il servizio per le dichiarazioni. |
kuendigung-bestaetigt | (corpo) | Di solito vuota. |
kuendigung-bestaetigt | mail-notice | Dopo le righe della ricevuta, prima del pulsante di stampa. |
widerrufen | (corpo) | L'introduzione, sopra il modulo di recesso. |
widerrufen | unavailable | Come per kuendigung. |
widerrufen-bestaetigt | (corpo) | Di solito vuota. |
widerrufen-bestaetigt | mail-notice | Come per kuendigung-bestaetigt. |
Tutte le altre pagine non hanno sezioni: l'intero corpo costituisce la pagina.
Il titolo di kuendigung corrisponde alla dicitura richiesta dalla legge tedesca per quella pagina, e lo stesso vale per widerrufen. Il piè di pagina dell'app e i pulsanti di invio riportano essi stessi le diciture stabilite per legge.
Da dove le istanze di openplate ottengono i file
Le istanze in hosting montano i file conservati in un repository privato, una struttura ad albero per istanza. Quel repository verifica ogni file rispetto a questo formato prima di distribuirlo. Una pagina rifiutata viene intercettata prima che raggiunga un server.