Jamdesk Documentation logo

Riferimento docs.json

Riferimento completo dei campi di docs.json: temi, colori, navigazione, tab, integrazione OpenAPI, branding, SEO, analisi e chat AI.

Il file docs.json è la configurazione centrale del sito di documentazione Jamdesk.

Le impostazioni principali di docs.json vengono visualizzate nella Dashboard, in Project Settings → Configuration Highlights. Questa vista è di sola lettura e si aggiorna automaticamente dopo ogni build completata con successo.

Campi obbligatori

name

Tipo: string (obbligatorio)

Il nome del sito di documentazione. Viene visualizzato nell'intestazione e nella scheda del browser.

{ "name": "Acme API Docs" }

theme

Tipo: "jam" | "nebula" | "pulsar" | "halo" (obbligatorio)

Design pulito e moderno con il font Inter. Navigazione basata sull'intestazione.

Ideale per: la maggior parte dei siti di documentazione e dei riferimenti API

colors

Tipo: object (obbligatorio)

CampoTipoObbligatorioDescrizione
primarystring (hex)Colore principale del brand
lightstring (hex)NoAccento del tema chiaro
darkstring (hex)NoAccento del tema scuro
{
  "colors": {
    "primary": "#635BFF",
    "light": "#7C75FF",
    "dark": "#4F46E5"
  }
}

Branding

favicon

Tipo: string o object

Percorso del file favicon (SVG consigliato). Fornisci una singola immagine per entrambe le modalità oppure varianti separate light / dark.

CampoTipoDescrizione
lightstringFavicon per la modalità chiara (obbligatorio quando si usa la forma a oggetto)
darkstringFavicon per la modalità scura (facoltativo, usa light come fallback)
{ "favicon": "/images/favicon.svg" }
{
  "favicon": {
    "light": "/images/favicon.svg",
    "dark": "/images/favicon-dark.svg"
  }
}

Tipo: object

CampoTipoDescrizione
lightstringLogo per la modalità chiara
darkstringLogo per la modalità scura
hrefstringURL aperto quando si fa clic sul logo
{
  "logo": {
    "light": "/images/logo-light.webp",
    "dark": "/images/logo-dark.webp",
    "href": "https://yoursite.com"
  }
}

Tipografia

fonts

Tipo: object (facoltativo)

Sostituisci il font predefinito del tema per il testo del corpo e le intestazioni. Ogni tema include un font predefinito ottimizzato. Imposta fonts solo quando desideri un aspetto diverso.

Usa lo stesso font ovunque:

{
  "fonts": {
    "family": "Lora"
  }
}

Separa intestazioni e corpo:

{
  "fonts": {
    "heading": { "family": "Space Grotesk" },
    "body": { "family": "Inter" }
  }
}
CampoTipoDescrizione
familystringNome della famiglia di font. Sono supportati tutti i Google Font; la build li recupera automaticamente
weightnumberSingolo peso da caricare (ad esempio 400). Omettilo per caricare 400, 500, 600, 700
sourcestringURL o percorso relativo a / di un file di font self-hosted. Ignora Google Fonts
format"woff" | "woff2"Obbligatorio quando è impostato source

Sia heading sia body accettano gli stessi campi. Consulta Temi → Tipografia per indicazioni sulla scelta dei font.

Aspetto

appearance

Tipo: object (facoltativo)

Controlla il comportamento predefinito della modalità scura del sito.

{
  "appearance": {
    "default": "dark",
    "strict": true
  }
}
CampoTipoPredefinitoDescrizione
default"system" | "light" | "dark""system"Modalità iniziale per i visitatori alla prima visita
strictbooleanfalseQuando è true, nasconde il selettore della barra di navigazione, così i visitatori restano su default

Consulta Temi → Modalità scura per informazioni sul comportamento del selettore.

Metadati della pagina

metadata

Tipo: object (facoltativo)

Controlla i metadati visualizzati in ogni pagina della documentazione.

{
  "metadata": {
    "timestamp": true
  }
}
CampoTipoPredefinitoDescrizione
timestampbooleanfalseQuando è true, mostra nel piè di pagina di ogni pagina una riga nello stile di "Last updated on June 15, 2026". La data proviene dall'ultimo commit Git che ha modificato la pagina, quindi rimane automaticamente aggiornata a ogni build.

La data viene visualizzata nel sito pubblicato e in jamdesk dev. Riflette il commit più recente che ha modificato il file di ogni pagina, perciò le pagine che non hai modificato mantengono la data originale.

Mostra una barra di annuncio del sito fissata nella parte superiore di ogni pagina, sopra l'intestazione, a larghezza completa e nel colore d'accento del tema. Usala per lanci, migrazioni, finestre di manutenzione o qualsiasi messaggio che ogni visitatore debba vedere.

{
  "banner": {
    "content": "🎉 Version 2.0 is live! Read the [changelog](/changelog).",
    "dismissible": true
  }
}
CampoTipoPredefinitoDescrizione
contentstring-Obbligatorio. Testo del banner. Supporta la formattazione inline di base: link [text](url), grassetto (**text**) e corsivo (*text*). I componenti MDX personalizzati non sono supportati.
dismissiblebooleanfalseQuando è true, mostra un pulsante di chiusura. Dopo che un visitatore chiude il banner, questo rimane nascosto per quel visitatore finché non modifichi content. La modifica del messaggio lo mostra nuovamente.

Il banner viene visualizzato nel sito pubblicato e in jamdesk dev. È configurato globalmente (un solo banner per l'intero sito); i banner per singola tab e per lingua non sono attualmente supportati.

OpenAPI

api.openapi

Tipo: string | string[]

Elenca i file di specifica OpenAPI 3.x che vuoi far convalidare e utilizzare da Jamdesk per le pagine degli endpoint. Usa percorsi relativi al tuo docs.json.

docs.json
{
  "api": {
    "openapi": ["/openapi/api.yaml"]
  }
}

Dopo la configurazione, puoi generare pagine di endpoint aggiungendo un campo openapi nel frontmatter di una pagina:

---
title: Create Ticket
openapi: /openapi/api.yaml POST /tickets
---

Se hai una sola specifica elencata, puoi usare anche il formato breve:

---
title: Create Ticket
openapi: POST /tickets
---

Consulta Esempio OpenAPI per una pagina di endpoint attiva e Struttura directory per la posizione dei file.

Se il sito è multilingue, inserisci un file <spec>.<lang>.<ext> accanto a ogni specifica sorgente (ad esempio openapi/api.fr.yaml) e Jamdesk lo servirà negli URL di quella lingua. Consulta Traduzione delle specifiche OpenAPI.

Una chiave asyncapi è accettata ovunque sia accettata openapi, ma Jamdesk non esegue ancora il rendering delle specifiche AsyncAPI: non viene generato nulla. jamdesk validate mostra un avviso quando ne trova una, così una configurazione apparentemente supportata non rimane tale fino alla build del sito.

Tipo: object

Inserisci un oggetto openapi in una tab di navigazione e imposta generate: true: Jamdesk genera in fase di build una pagina di endpoint per ogni operazione della specifica, oltre ai gruppi della barra laterale che le contengono. Non devi creare né salvare alcun file.

docs.json
{
  "navigation": {
    "tabs": [
      {
        "tab": "API Reference",
        "openapi": { "source": "/openapi/api.yaml", "generate": true }
      }
    ]
  }
}
ChiaveTipoDescrizione
sourcestringPercorso della specifica, relativo al tuo docs.json
generatebooleantrue genera le pagine e la barra laterale. Senza questa chiave, la configurazione rimane inattiva

Le pagine generate si trovano sotto il nome della tab, convertito in slug, con uno slug creato dal metodo e dal percorso: la tab precedente inserisce POST /tickets in /api-reference/post-tickets. Le operazioni vengono raggruppate in base al primo tag; per le specifiche senza tag viene usato il primo segmento significativo del percorso, quindi /api/v1/auctions/{auctionId} finisce sotto Auctions. I titoli provengono da summary dell'operazione quando presente nella specifica; in caso contrario, dal metodo e dal percorso. Un'operazione relativa a una singola risorsa riceve un titolo al singolare (GET /users/{id} → "Get User").

generate è esplicitamente disattivato per impostazione predefinita. Una tab con "openapi": "/openapi/api.yaml" oppure un oggetto senza generate: true continua a comportarsi esattamente come prima: nessuna configurazione esistente aggiunge un centinaio di pagine alla build successiva.

Un file .mdx salvato ha sempre la precedenza in caso di conflitto tra slug, quindi puoi adottare gradualmente la generazione: attivala, poi elimina una alla volta le pagine di endpoint scritte manualmente quando sei pronto.

Se in seguito rinomini un percorso nella specifica, lo slug generato si sposta con esso. Jamdesk conserva una cronologia degli slug per operazione e, a ogni build, emette un redirect da ogni URL precedente a quello attuale, così i link in ingresso e i segnalibri continuano a funzionare dopo la ridenominazione. I tuoi redirect e qualsiasi pagina attiva hanno comunque la precedenza.

Limiti attuali. La generazione viene eseguita solo su navigation.tabs di primo livello, non su gruppi, ancore o tab annidate in languages o versions, e produce pagine solo per la lingua predefinita. Una chiave directory è accettata dallo schema, ma non influisce sulla posizione delle pagine.

api.mdx.server

Tipo: string

URL di base usato negli esempi di codice nelle pagine con frontmatter api: (quelle create con MDX, non le pagine openapi:, che usano i server della specifica).

{
  "api": {
    "mdx": {
      "server": "https://api.example.com"
    }
  }
}

Per compatibilità è accettato un array, ma viene utilizzata sempre e solo la prima voce: tutto ciò che segue viene scartato. jamdesk validate mostra un avviso quando ne elenchi più di una.

api.examples.languages

Tipo: string[] Predefinito: ["curl", "python", "javascript"]

Scegli quali linguaggi di programmazione visualizzare negli esempi di codice API generati automaticamente nelle pagine openapi:. L'ordine dell'array determina l'ordine di visualizzazione delle tab; il primo linguaggio viene selezionato per impostazione predefinita.

Valori supportati: curl, bash, python, javascript, go, ruby, csharp, java, rust, php

bash è un alias di curl: entrambi producono lo stesso output. Usa l'etichetta che preferisci.
All supported languages
{
  "api": {
    "examples": {
      "languages": ["curl", "python", "javascript", "go", "ruby", "csharp", "java", "rust", "php"]
    }
  }
}
Custom subset
{
  "api": {
    "examples": {
      "languages": ["python", "javascript", "go"]
    }
  }
}

api.examples.defaults

Tipo: "required" | "all" Predefinito: "all"

Controlla quali parametri vengono visualizzati negli esempi di codice generati automaticamente.

ValoreComportamento
"all"Gli esempi includono tutti i parametri con valori segnaposto
"required"Gli esempi includono solo i parametri contrassegnati come required nella specifica
{
  "api": {
    "examples": {
      "defaults": "required"
    }
  }
}

api.examples.prefill

Tipo: boolean Predefinito: false

Quando è true, API Playground precompila i campi dei parametri con i valori example della specifica OpenAPI.

{
  "api": {
    "examples": {
      "prefill": true
    }
  }
}

api.playground.display

Tipo: "interactive" | "simple" | "none" Predefinito: "interactive"

Controlla API Playground nelle pagine degli endpoint. Per impostazione predefinita, in ogni pagina openapi: e api: viene visualizzato un pulsante "Try it".

ValoreComportamento
"interactive"Playground completo: compila i parametri, genera codice e invia richieste (predefinito)
"simple"Compila i parametri e copia il codice, ma non mostra il pulsante Send
"none"Playground disattivato
{
  "api": {
    "playground": {
      "display": "interactive"
    }
  }
}

Consulta API Playground per i dettagli sull'utilizzo e sulle sostituzioni per singola pagina.

api.mdx.auth.method

Tipo: "bearer" | "basic" | "key" | "cobo"

Metodo di autenticazione utilizzato negli esempi di codice generati automaticamente. Quando è impostato, gli esempi includono l'header di autenticazione appropriato.

ValoreFormato dell'header
"bearer"Authorization: Bearer <token>
"basic"Authorization: Basic <base64>
"key"Header personalizzato (consulta api.mdx.auth.name)
"cobo"Autenticazione specifica di Cobo
{
  "api": {
    "mdx": {
      "auth": {
        "method": "bearer"
      }
    }
  }
}

api.mdx.auth.name

Tipo: string

Nome dell'header personalizzato per l'autenticazione basata su chiave. Viene utilizzato solo quando api.mdx.auth.method è "key".

{
  "api": {
    "mdx": {
      "auth": {
        "method": "key",
        "name": "X-API-Key"
      }
    }
  }
}

tabsPosition

Tipo: "top" | "left"

Controlla dove vengono visualizzate le tab di navigazione.

ValoreDescrizione
"top"Le tab vengono visualizzate nella barra delle tab dell'intestazione
"left"Le tab vengono visualizzate nella parte superiore della barra laterale

Il valore predefinito dipende dal tema:

TemaPredefinito
jam"left"
nebula"left"
pulsar"top"
halo"left"
{ "tabsPosition": "left" }

anchors

Tipo: array

Link esterni visualizzati nella parte superiore della barra laterale in tutte le pagine.

CampoTipoObbligatorioDescrizione
namestringTesto visualizzato
hrefstringURL (link esterno)
iconstringNoNome dell'icona Font Awesome
{
  "anchors": [
    { "name": "Blog", "href": "https://blog.example.com", "icon": "newspaper" }
  ]
}

Tipo: object

La struttura di navigazione della documentazione. Consulta Navigazione per la documentazione dettagliata.

Le pagine possono essere stringhe (con titolo generato automaticamente dal nome del file) oppure oggetti con un titolo personalizzato:

"pages": [
  "introduction",
  { "page": "content/mdx-basics", "title": "MDX Basics" }
]
{
  "navigation": {
    "tabs": [
      {
        "tab": "Docs",
        "icon": "book-open",
        "groups": [
          {
            "group": "Getting Started",
            "pages": ["introduction", "quickstart"]
          }
        ]
      }
    ]
  }
}

Barra di navigazione e piè di pagina

Tipo: object

CampoTipoDescrizione
linksarrayLink di navigazione
links[].labelstringTesto predefinito del pulsante
links[].labelsobjectOverride facoltativi per lingua, indicizzati per codice lingua (ad esempio fr, es). Usa label come fallback
links[].iconiconIcona facoltativa da visualizzare accanto all'etichetta
links[].hrefstringURL di destinazione
primaryobjectPulsante CTA principale
primary.labelstringTesto predefinito del pulsante
primary.labelsobjectOverride facoltativi per lingua, indicizzati per codice lingua. Usa label come fallback
{
  "navbar": {
    "links": [
      {
        "label": "Blog",
        "labels": { "fr": "Blog", "es": "Blog" },
        "href": "/blog"
      },
      {
        "label": "Pricing",
        "labels": { "fr": "Tarifs", "es": "Precios" },
        "href": "/pricing"
      }
    ],
    "primary": {
      "type": "button",
      "label": "Dashboard",
      "labels": { "fr": "Tableau de bord", "es": "Panel" },
      "href": "https://app.example.com"
    }
  }
}

labels è facoltativo. La documentazione in una sola lingua può ometterlo. Quando è impostato, la lingua dell'URL corrente (ad esempio /fr/...) seleziona l'override corrispondente.

Tipo: object

Configura il piè di pagina con link social e colonne di link personalizzate.

{
  "footer": {
    "socials": {
      "github": "https://github.com/yourorg",
      "x": "https://x.com/yourhandle",
      "discord": "https://discord.gg/yourserver"
    },
    "links": [
      {
        "header": "Resources",
        "items": [
          { "label": "Blog", "href": "https://example.com/blog" },
          { "label": "Changelog", "href": "/changelog" }
        ]
      }
    ]
  }
}
CampoTipoDescrizione
socialsobjectURL delle piattaforme social
linksarrayConfigurazioni delle colonne di link
links[].headerstringIntestazione della colonna
links[].itemsarrayArray di oggetti { label, href }

Piattaforme social supportate: github, x, twitter, linkedin, discord, slack, youtube, instagram, facebook, reddit, telegram, bluesky, threads, medium, hacker-news, website

Stile

styling.latex

Tipo: boolean

Abilita il rendering della matematica LaTeX con KaTeX. Quando è abilitato, puoi usare $...$ per la matematica inline e $$...$$ per le equazioni a blocco.

{
  "styling": {
    "latex": true
  }
}

Consulta Matematica e LaTeX per i dettagli sull'utilizzo.

styling.js

Tipo: string | string[]

File JavaScript personalizzato da includere in ogni pagina. I percorsi sono relativi alla directory della documentazione e devono iniziare con /.

{
  "styling": {
    "js": "/script.js"
  }
}

Passa un array per più file:

{
  "styling": {
    "js": ["/chat.js", "/analytics.js"]
  }
}

Senza questo campo, Jamdesk rileva automaticamente i file `.js nella radice del progetto. Consulta JavaScript personalizzato per i dettagli.

Ricerca

Tipo: object (facoltativo)

Personalizza la barra di ricerca della documentazione. La ricerca funziona immediatamente; ti serve questo campo solo per modificare il testo segnaposto o mostrare pagine popolari nello stato vuoto.

CampoTipoPredefinitoDescrizione
promptstringSearch documentation…Testo segnaposto mostrato nel campo di ricerca
popularPagesarrayQuick Start, IntroductionLink di accesso rapido mostrati prima che il visitatore inserisca una query
{
  "search": {
    "prompt": "Ask me anything…",
    "popularPages": [
      { "title": "Quick Start", "slug": "quickstart", "icon": "rocket" },
      { "title": "Authentication", "slug": "guides/authentication", "icon": "key" }
    ]
  }
}

Pagine popolari

Ogni voce in popularPages accetta:

CampoTipoObbligatorioDescrizione
titlestringEtichetta mostrata per il link
slugstringPercorso della pagina, senza slash iniziale né estensione .mdx (ad esempio quickstart o guides/authentication per il file guides/authentication.mdx)
iconstringNoNome dell'icona Font Awesome mostrata accanto al link (ad esempio rocket o bell)

Il campo icon accetta anche l'oggetto completo { "name", "style", "library" }. Consulta Formato a oggetto delle icone. Quando popularPages viene omesso, Jamdesk mostra Quick Start e Introduction per impostazione predefinita.

Chat

chat

Tipo: object (facoltativo)

Configura l'assistente integrato di chat AI. La chat è abilitata per impostazione predefinita in tutti i siti; ti serve questo campo solo per personalizzare le domande iniziali o disabilitarla.

CampoTipoPredefinitoDescrizione
enabledbooleantrueImposta false per rimuovere il pannello della chat dal sito
starterQuestionsstring[]generato automaticamenteFino a 4 domande mostrate all'apertura della chat (5-200 caratteri ciascuna). Se omesse, vengono generate automaticamente durante le build. Imposta [] per non mostrarne alcuna
{
  "chat": {
    "starterQuestions": [
      "How do I get started?",
      "What API endpoints are available?"
    ]
  }
}

Consulta Chat AI per informazioni sul funzionamento della chat e su ciò che vedono i visitatori.

contextual

Tipo: object (facoltativo)

Configura il menu a discesa Azioni AI visualizzato in ogni pagina. È abilitato per impostazione predefinita con tutte le opzioni; ti serve questo campo solo per personalizzare le opzioni visualizzate o disabilitarlo.

CampoTipoPredefinitoDescrizione
enabledbooleantrueImposta false per rimuovere il menu Azioni AI dal sito
optionsarraytutte quelle integrateElenco di chiavi di opzioni e/o oggetti di opzioni personalizzati

Chiavi delle opzioni integrate: copy, view, chatgpt, claude, perplexity, gemini, mcp, cursor, vscode

{
  "contextual": {
    "options": ["copy", "claude", "mcp", "cursor"]
  }
}

Aggiungi opzioni personalizzate insieme a quelle integrate:

{
  "contextual": {
    "options": [
      "copy",
      "claude",
      {
        "title": "Ask on Discord",
        "description": "Get help from the community",
        "icon": "discord",
        "href": "https://discord.gg/your-server"
      }
    ]
  }
}

Consulta Menu Azioni AI per l'elenco completo delle opzioni e il formato delle opzioni personalizzate.

Controllo ortografico

spellcheck

Tipo: object (facoltativo)

Configura il comando CLI jamdesk spellcheck. Ti serve questo campo solo per aggiungere parole specifiche del progetto all'elenco di esclusione.

CampoTipoDescrizione
ignorestring[]Parole da ignorare durante il controllo ortografico (nomi di prodotti, termini tecnici ecc.)
{
  "spellcheck": {
    "ignore": ["Acme", "kubectl", "Terraform"]
  }
}

La CLI include oltre 180 termini tecnici integrati (API, GraphQL, Kubernetes, React ecc.) e ignora automaticamente il nome del progetto presente nel campo name. Aggiungi solo parole specifiche del tuo progetto.

Consulta Panoramica CLI: controllo ortografico per i dettagli sull'utilizzo e sulla modalità interattiva di correzione.

Immagini

images.convertToWebp

Tipo: boolean (facoltativo, predefinito false)

Abilita la conversione automatica in WebP degli asset PNG e JPG durante le build. I file convertiti sono in genere più piccoli del 60-80% rispetto agli originali, senza perdita visibile di qualità. I riferimenti in MDX, CSS personalizzato, JavaScript personalizzato e docs.json vengono riscritti automaticamente, quindi non devi modificare alcun percorso.

Favicon, og:image e twitter:image mantengono il formato originale. Non tutti i crawler social o i client email eseguono il rendering di WebP in modo affidabile, e una scheda di anteprima danneggiata è peggiore di un JPG leggermente più grande.

{
  "images": {
    "convertToWebp": true
  }
}

Consulta Conversione automatica delle immagini per sapere cosa viene convertito, come funziona la cache e come usare l'indicatore di avanzamento della build.

Controllo degli accessi

auth.password

Tipo: object (facoltativo)

Attiva la protezione del sito tramite password condivisa. Si tratta esclusivamente di una configurazione dichiarativa. Devi comunque impostare la passphrase effettiva nella dashboard dopo l'esecuzione della build successiva.

Imposta auth.password.enabled: true per bloccare l'intero sito oppure elenca i percorsi in auth.password.private[] per proteggere solo determinate pagine. Entrambe le opzioni attivano la stessa richiesta della password nella dashboard durante la build successiva.

{
  "auth": {
    "password": {
      "enabled": true,
      "hint": "Ask your account manager",
      "public": ["/marketing/**", "/changelog"]
    }
  }
}
CampoTipoDescrizione
enabledbooleanModalità per l'intero sito. Quando è true, ogni pagina richiede la password, tranne quelle contrassegnate come pubbliche.
hintstring (max 200 caratteri)Suggerimento in testo semplice mostrato nella schermata di sblocco. Non è supportato HTML.
publicstring[]Glob dei percorsi che ignorano la password. Supporta * (un segmento) e ** (ricorsivo). Un / isolato viene rifiutato.
privatestring[]Percorsi esatti che richiedono la password. L'impostazione senza enabled attiva la modalità per pagine specifiche.

Consulta Protezione tramite password per la procedura completa, inclusi il flusso della dashboard e l'interazione tra public: true / private: true nel frontmatter e questi array.

Esempio completo

{
  "$schema": "https://jamdesk.com/docs.json",
  "name": "Acme Documentation",
  "description": "Learn how to use Acme",
  "theme": "jam",
  "colors": {
    "primary": "#635BFF"
  },
  "favicon": "/images/favicon.svg",
  "logo": {
    "light": "/images/logo-light.webp",
    "dark": "/images/logo-dark.webp"
  },
  "api": {
    "openapi": ["/openapi/api.yaml"],
    "playground": {
      "display": "interactive"
    },
    "examples": {
      "languages": ["curl", "python", "javascript"],
      "prefill": true
    }
  },
  "styling": {
    "latex": true,
    "js": "/script.js"
  },
  "chat": {
    "starterQuestions": ["How do I get started?", "What endpoints are available?"]
  },
  "contextual": {
    "options": ["copy", "claude", "chatgpt", "mcp", "cursor"]
  },
  "spellcheck": {
    "ignore": ["Acme"]
  },
  "anchors": [
    { "name": "Blog", "href": "https://blog.acme.com", "icon": "newspaper" }
  ],
  "navbar": {
    "links": [
      { "label": "Support", "href": "/support" }
    ],
    "primary": {
      "type": "button",
      "label": "Dashboard",
      "href": "https://app.acme.com"
    }
  },
  "navigation": {
    "tabs": [
      {
        "tab": "Docs",
        "icon": "book-open",
        "groups": [
          {
            "group": "Get Started",
            "pages": ["introduction", "quickstart"]
          }
        ]
      },
      {
        "tab": "API Reference",
        "icon": "code",
        "groups": [
          {
            "group": "Endpoints",
            "pages": ["api/users", "api/posts"]
          }
        ]
      }
    ]
  }
}

Prossimi passaggi

Panoramica della navigazione

Struttura la navigazione della documentazione

Menu Azioni AI

Personalizza il menu AI in ogni pagina