{
  "schemaVersion": "1.0",
  "generatedAt": "2026-11-02T16:23:31.788Z",
  "site": {
    "name": "dev.eneawork.it",
    "url": "https://dev.eneawork.it",
    "description": "Forty focused developer tools: UUID, JSON, TypeScript, regex, cron, JWT, timestamps and more. No signup, no uploads, no tracking. Everything runs in your browser.",
    "author": {
      "name": "Enea Zani",
      "url": "https://eneawork.it"
    },
    "license": "MIT",
    "price": "0 EUR",
    "languages": [
      "en",
      "it"
    ],
    "toolCount": 40,
    "privacy": "client-side; no cookies, analytics or uploads",
    "offline": true,
    "lastUpdated": "2026-11-02"
  },
  "categories": [
    {
      "id": "generate",
      "name": {
        "en": "Generators",
        "it": "Generatori"
      }
    },
    {
      "id": "json",
      "name": {
        "en": "JSON & data",
        "it": "JSON e dati"
      }
    },
    {
      "id": "encode",
      "name": {
        "en": "Encode & secure",
        "it": "Codifica e sicurezza"
      }
    },
    {
      "id": "text",
      "name": {
        "en": "Text",
        "it": "Testo"
      }
    },
    {
      "id": "web",
      "name": {
        "en": "Web & time",
        "it": "Web e tempo"
      }
    },
    {
      "id": "systems",
      "name": {
        "en": "Systems",
        "it": "Sistemi"
      }
    }
  ],
  "tools": [
    {
      "id": "uuid",
      "name": {
        "en": "UUID Generator",
        "it": "Generatore UUID"
      },
      "url": {
        "en": "https://dev.eneawork.it/uuid",
        "it": "https://dev.eneawork.it/it/uuid"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/uuid.md",
        "it": "https://dev.eneawork.it/md/it/uuid.md"
      },
      "category": "generate",
      "summary": {
        "en": "Generate v4 and v7 UUIDs, in batches. One click to copy.",
        "it": "Genera UUID v4 e v7, anche in batch. Copia con un click."
      },
      "description": {
        "en": "Generate cryptographically random UUID v4 and time-sortable UUID v7 in batches. Copy or download instantly. Free, no signup, everything stays in your browser.",
        "it": "Genera UUID v4 casuali e UUID v7 ordinabili per tempo in batch. Copia o scarica subito. Gratis, senza registrazione, tutto nel browser."
      },
      "howTo": {
        "en": [
          "Pick v4 for random IDs or v7 for time-sortable ones.",
          "Choose how many you need, up to 100.",
          "Copy the batch or download it as a text file."
        ],
        "it": [
          "Scegli v4 per ID casuali o v7 per ID ordinabili nel tempo.",
          "Decidi quanti generarne, fino a 100.",
          "Copia il batch o scaricalo come file di testo."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "v4 or v7: which should I use?",
            "a": "Use v4 for opaque session IDs and tokens. Use v7 for database primary keys: it stores the creation time in the first bits, so inserts stay index-friendly and you can sort by ID."
          },
          {
            "q": "Are these UUIDs cryptographically secure?",
            "a": "Yes. They are generated with crypto.getRandomValues and follow RFC 9562 for v7 and RFC 4122 for v4."
          },
          {
            "q": "Can I use them in production?",
            "a": "Yes. The formats are standard, collision odds are negligible, and no registration or attribution is required."
          }
        ],
        "it": [
          {
            "q": "v4 o v7: quale uso?",
            "a": "v4 per session ID e token opachi. v7 per chiavi primarie: salva il tempo di creazione nei primi bit, quindi gli inserimenti restano efficienti sull'indice e puoi ordinare per ID."
          },
          {
            "q": "Gli UUID sono sicuri a livello crittografico?",
            "a": "Sì. Sono generati con crypto.getRandomValues e seguono RFC 9562 per v7 e RFC 4122 per v4."
          },
          {
            "q": "Posso usarli in produzione?",
            "a": "Sì. I formati sono standard, la probabilità di collisione è trascurabile e non serve registrazione o attribuzione."
          }
        ]
      },
      "related": [
        "password-generator",
        "hash-generator",
        "base64"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "password-generator",
      "name": {
        "en": "Password Generator",
        "it": "Generatore password"
      },
      "url": {
        "en": "https://dev.eneawork.it/password-generator",
        "it": "https://dev.eneawork.it/it/password-generator"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/password-generator.md",
        "it": "https://dev.eneawork.it/md/it/password-generator.md"
      },
      "category": "generate",
      "summary": {
        "en": "Strong random passwords with a real entropy meter.",
        "it": "Password forti e casuali con entropia reale."
      },
      "description": {
        "en": "Create strong random passwords with custom length and character sets. Entropy meter, ambiguous-character filter, and nothing sent to a server.",
        "it": "Crea password casuali forti con lunghezza e set di caratteri personalizzati. Misuratore di entropia, filtro caratteri ambigui, niente inviato a un server."
      },
      "howTo": {
        "en": [
          "Set the length and the character sets you want.",
          "Generate and check the entropy score.",
          "Copy it straight into your password manager."
        ],
        "it": [
          "Imposta lunghezza e set di caratteri.",
          "Genera e controlla il punteggio di entropia.",
          "Copiala direttamente nel password manager."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "How is password strength calculated?",
            "a": "Entropy is length × log2(pool size), assuming a uniform random draw. It measures unpredictability, not whether the site hashes passwords properly."
          },
          {
            "q": "Are generated passwords stored?",
            "a": "No. They exist only in this page's memory. Reloading the page discards them."
          },
          {
            "q": "Do I need symbols?",
            "a": "Length matters most. Symbols enlarge the pool, so a shorter password can reach the same entropy — but some legacy systems reject them."
          }
        ],
        "it": [
          {
            "q": "Come viene calcolata la forza?",
            "a": "Entropia = lunghezza × log2(dimensione del set), assumendo estrazione casuale uniforme. Misura l'imprevedibilità, non se il sito gestisce bene gli hash."
          },
          {
            "q": "Le password generate vengono salvate?",
            "a": "No. Restano solo nella memoria della pagina. Ricaricando vengono perse."
          },
          {
            "q": "Servono i simboli?",
            "a": "La lunghezza conta di più. I simboli ampliano il set, quindi una password più corta può raggiungere la stessa entropia, ma alcuni sistemi legacy li rifiutano."
          }
        ]
      },
      "related": [
        "uuid",
        "hash-generator",
        "jwt"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "hash-generator",
      "name": {
        "en": "Hash Generator",
        "it": "Generatore hash"
      },
      "url": {
        "en": "https://dev.eneawork.it/hash-generator",
        "it": "https://dev.eneawork.it/it/hash-generator"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/hash-generator.md",
        "it": "https://dev.eneawork.it/md/it/hash-generator.md"
      },
      "category": "encode",
      "summary": {
        "en": "SHA-1, SHA-256, SHA-384 and SHA-512 of any text.",
        "it": "SHA-1, SHA-256, SHA-384 e SHA-512 di qualsiasi testo."
      },
      "description": {
        "en": "Compute SHA-1, SHA-256, SHA-384 and SHA-512 hashes of any text directly in your browser. UTF-8 aware, instant, nothing uploaded.",
        "it": "Calcola hash SHA-1, SHA-256, SHA-384 e SHA-512 di qualsiasi testo direttamente nel browser. UTF-8, istantaneo, niente upload."
      },
      "howTo": {
        "en": [
          "Paste or type the text.",
          "Pick an algorithm and case format.",
          "Copy the digest."
        ],
        "it": [
          "Incolla o scrivi il testo.",
          "Scegli algoritmo e formato.",
          "Copia il digest."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "Is hashing the same as encryption?",
            "a": "No. Hashing is one-way: you cannot decrypt a digest. Encryption is reversible with the right key."
          },
          {
            "q": "Why does my hash differ from another tool?",
            "a": "Check encoding, line endings and hidden spaces. This tool hashes the exact UTF-8 text, without adding a trailing newline."
          },
          {
            "q": "Can I hash files?",
            "a": "This tool hashes text. For files use your OS: sha256sum, shasum -a 256 or Get-FileHash."
          }
        ],
        "it": [
          {
            "q": "Hash ed encryption sono la stessa cosa?",
            "a": "No. L'hash è a senso unico: non puoi decifrare un digest. La cifratura è reversibile con la chiave giusta."
          },
          {
            "q": "Perché l'hash differisce da un altro tool?",
            "a": "Controlla encoding, fine riga e spazi nascosti. Qui viene calcolato l'esatto testo UTF-8, senza aggiungere newline finali."
          },
          {
            "q": "Posso calcolare l'hash di file?",
            "a": "Questo tool gestisce testo. Per i file usa il sistema: sha256sum, shasum -a 256 o Get-FileHash."
          }
        ]
      },
      "related": [
        "base64",
        "password-generator",
        "jwt"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "lorem-ipsum",
      "name": {
        "en": "Lorem Ipsum Generator",
        "it": "Generatore Lorem Ipsum"
      },
      "url": {
        "en": "https://dev.eneawork.it/lorem-ipsum",
        "it": "https://dev.eneawork.it/it/lorem-ipsum"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/lorem-ipsum.md",
        "it": "https://dev.eneawork.it/md/it/lorem-ipsum.md"
      },
      "category": "generate",
      "summary": {
        "en": "Placeholder text by paragraph, sentence or word count.",
        "it": "Testo segnaposto in paragrafi, frasi o parole."
      },
      "description": {
        "en": "Generate clean Lorem ipsum placeholder text by paragraph, sentence or word count. Copy or download as plain text. No ads, no uploads.",
        "it": "Genera testo segnaposto Lorem ipsum in paragrafi, frasi o parole. Copia o scarica come testo semplice. Niente pubblicità, niente upload."
      },
      "howTo": {
        "en": [
          "Choose what to generate: paragraphs, sentences or words.",
          "Set the amount and keep or remove the classic opening.",
          "Copy the text or download it as .txt."
        ],
        "it": [
          "Scegli cosa generare: paragrafi, frasi o parole.",
          "Imposta la quantità e decidi se partire dall'incipit classico.",
          "Copia il testo o scaricalo come .txt."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "Can I use Lorem ipsum on a live site?",
            "a": "No, replace it before publishing. Placeholder text hurts accessibility, translation and SEO, and search engines may treat it as thin content."
          },
          {
            "q": "Is it real Latin?",
            "a": "It is loosely derived from a passage by Cicero, but the words are scrambled and not grammatically meaningful."
          }
        ],
        "it": [
          {
            "q": "Posso usare Lorem ipsum su un sito live?",
            "a": "No, sostituiscilo prima di pubblicare. Il testo segnaposto danneggia accessibilità, traduzione e SEO, e i motori possono trattarlo come contenuto povero."
          },
          {
            "q": "È vero latino?",
            "a": "Deriva liberamente da un testo di Cicerone, ma le parole sono rimescolate e non hanno un significato grammaticale."
          }
        ]
      },
      "related": [
        "case-converter",
        "text-diff",
        "json-formatter"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "json-formatter",
      "name": {
        "en": "JSON Formatter",
        "it": "Formattatore JSON"
      },
      "url": {
        "en": "https://dev.eneawork.it/json-formatter",
        "it": "https://dev.eneawork.it/it/json-formatter"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/json-formatter.md",
        "it": "https://dev.eneawork.it/md/it/json-formatter.md"
      },
      "category": "json",
      "summary": {
        "en": "Format, validate and minify JSON with precise errors.",
        "it": "Formatta, valida e minifica JSON con errori precisi."
      },
      "description": {
        "en": "Format, validate and minify JSON in your browser. Clear error positions, optional key sorting, 2/4-space or tab indentation. Nothing is uploaded.",
        "it": "Formatta, valida e minifica JSON nel browser. Posizione errori chiara, ordinamento chiavi opzionale, indentazione 2/4 spazi o tab. Niente upload."
      },
      "howTo": {
        "en": [
          "Paste the JSON into the input panel.",
          "Choose indentation or hit Minify.",
          "Copy the cleaned result."
        ],
        "it": [
          "Incolla il JSON nel pannello di input.",
          "Scegli l'indentazione o premi Minifica.",
          "Copia il risultato pulito."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "Does it accept comments or trailing commas?",
            "a": "No. It follows standard JSON, so comments and trailing commas are errors. JSON5 needs a different parser."
          },
          {
            "q": "What does sorting keys do?",
            "a": "It sorts object keys alphabetically at every level. Useful to make two JSON documents comparable in a diff."
          },
          {
            "q": "Is there a size limit?",
            "a": "No fixed limit, but very large documents depend on your browser's memory and may take a moment."
          }
        ],
        "it": [
          {
            "q": "Accetta commenti o virgole finali?",
            "a": "No. Segue lo standard JSON: commenti e trailing comma sono errori. JSON5 richiede un parser diverso."
          },
          {
            "q": "Cosa fa l'ordinamento chiavi?",
            "a": "Ordina alfabeticamente le chiavi degli oggetti a ogni livello. Utile per rendere confrontabili due JSON in un diff."
          },
          {
            "q": "C'è un limite di dimensione?",
            "a": "Nessun limite fisso, ma documenti enormi dipendono dalla memoria del browser e possono richiedere qualche istante."
          }
        ]
      },
      "related": [
        "json-to-typescript",
        "json-diff",
        "csv-to-json"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "json-to-typescript",
      "name": {
        "en": "JSON to TypeScript",
        "it": "JSON → TypeScript"
      },
      "url": {
        "en": "https://dev.eneawork.it/json-to-typescript",
        "it": "https://dev.eneawork.it/it/json-to-typescript"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/json-to-typescript.md",
        "it": "https://dev.eneawork.it/md/it/json-to-typescript.md"
      },
      "category": "json",
      "summary": {
        "en": "Turn any JSON sample into clean TypeScript interfaces.",
        "it": "Da JSON a interfacce TypeScript pulite, automaticamente."
      },
      "description": {
        "en": "Convert any JSON sample into clean TypeScript interfaces. Nested objects, arrays, unions and optional fields. Runs entirely in your browser.",
        "it": "Converti qualsiasi JSON in interfacce TypeScript pulite. Oggetti annidati, array, union e campi opzionali. Tutto nel browser."
      },
      "howTo": {
        "en": [
          "Paste a representative JSON sample.",
          "Set the root interface name and options.",
          "Copy the generated TypeScript."
        ],
        "it": [
          "Incolla un esempio JSON rappresentativo.",
          "Imposta il nome dell'interfaccia root e le opzioni.",
          "Copia il TypeScript generato."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "Does it call my API?",
            "a": "No. You paste a JSON sample; no request is made and no URL is needed."
          },
          {
            "q": "How are arrays handled?",
            "a": "Object items are merged into a single interface. Primitive arrays become string[], number[] and so on; mixed values become unions."
          },
          {
            "q": "Why are some fields optional?",
            "a": "A key missing from at least one object in an array is optional in the merged type, because it is not guaranteed in every item."
          }
        ],
        "it": [
          {
            "q": "Chiama la mia API?",
            "a": "No. Incolli tu il JSON; non viene fatta nessuna richiesta e non serve un URL."
          },
          {
            "q": "Come gestisce gli array?",
            "a": "Gli oggetti vengono uniti in una sola interfaccia. Gli array primitivi diventano string[], number[] e così via; i valori misti diventano union."
          },
          {
            "q": "Perché alcuni campi sono opzionali?",
            "a": "Una chiave assente in almeno un oggetto dell'array diventa opzionale nel tipo unito, perché non è garantita in ogni elemento."
          }
        ]
      },
      "related": [
        "json-formatter",
        "json-diff",
        "csv-to-json"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "json-diff",
      "name": {
        "en": "JSON Diff",
        "it": "Diff JSON"
      },
      "url": {
        "en": "https://dev.eneawork.it/json-diff",
        "it": "https://dev.eneawork.it/it/json-diff"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/json-diff.md",
        "it": "https://dev.eneawork.it/md/it/json-diff.md"
      },
      "category": "json",
      "summary": {
        "en": "Compare two JSON documents and see every change by path.",
        "it": "Confronta due JSON e vedi ogni modifica per path."
      },
      "description": {
        "en": "Compare two JSON objects and see added, removed and changed values by path. Structural comparison, instant report, nothing uploaded.",
        "it": "Confronta due oggetti JSON e vedi valori aggiunti, rimossi e modificati per path. Confronto strutturale, report immediato, niente upload."
      },
      "howTo": {
        "en": [
          "Paste the original and the changed JSON.",
          "Run the comparison.",
          "Read the path-level report or copy it as text."
        ],
        "it": [
          "Incolla il JSON originale e quello modificato.",
          "Avvia il confronto.",
          "Leggi il report per path o copialo come testo."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "Does key order matter?",
            "a": "No. Objects are compared by key, regardless of the order in which they appear."
          },
          {
            "q": "How are arrays compared?",
            "a": "By index. Moving an item from position 0 to 1 shows two changes rather than one move."
          },
          {
            "q": "Can I copy the report?",
            "a": "Yes. The copy button produces a plain-text list that pastes cleanly into a ticket or chat."
          }
        ],
        "it": [
          {
            "q": "L'ordine delle chiavi conta?",
            "a": "No. Gli oggetti sono confrontati per chiave, indipendentemente dall'ordine."
          },
          {
            "q": "Come confronta gli array?",
            "a": "Per indice. Spostare un elemento da 0 a 1 mostra due modifiche, non uno spostamento."
          },
          {
            "q": "Posso copiare il report?",
            "a": "Sì. Il pulsante copia produce un elenco testuale che si incolla bene in un ticket o in chat."
          }
        ]
      },
      "related": [
        "json-formatter",
        "text-diff",
        "json-to-typescript"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "csv-to-json",
      "name": {
        "en": "CSV to JSON",
        "it": "CSV → JSON"
      },
      "url": {
        "en": "https://dev.eneawork.it/csv-to-json",
        "it": "https://dev.eneawork.it/it/csv-to-json"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/csv-to-json.md",
        "it": "https://dev.eneawork.it/md/it/csv-to-json.md"
      },
      "category": "json",
      "summary": {
        "en": "Convert CSV or TSV to JSON with headers and delimiter control.",
        "it": "Converti CSV o TSV in JSON con intestazioni e delimitatore."
      },
      "description": {
        "en": "Convert CSV or TSV to JSON in the browser. Detect commas, semicolons or tabs, use the first row as headers, copy or download.",
        "it": "Converti CSV o TSV in JSON nel browser. Rileva virgole, punti e virgola o tab, usa la prima riga come intestazione, copia o scarica."
      },
      "howTo": {
        "en": [
          "Paste the CSV or TSV content.",
          "Choose the delimiter and whether the first row is a header.",
          "Copy the JSON or download it as a file."
        ],
        "it": [
          "Incolla il contenuto CSV o TSV.",
          "Scegli delimitatore e se la prima riga è un'intestazione.",
          "Copia il JSON o scaricalo come file."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "Are numbers converted to JSON numbers?",
            "a": "Yes. Values that parse as finite numbers become numbers; leading-zero sequences such as postal codes stay strings."
          },
          {
            "q": "What happens with duplicate headers?",
            "a": "The later column overwrites the earlier key. Rename duplicate headers before converting."
          },
          {
            "q": "Is my spreadsheet uploaded?",
            "a": "No. Parsing happens in this tab; nothing is sent."
          }
        ],
        "it": [
          {
            "q": "I numeri diventano numeri JSON?",
            "a": "Sì. I valori interpretabili come numeri finiti diventano numeri; sequenze con zeri iniziali come i CAP restano stringhe."
          },
          {
            "q": "Cosa succede con intestazioni duplicate?",
            "a": "La colonna successiva sovrascrive la chiave precedente. Rinomina i duplicati prima di convertire."
          },
          {
            "q": "Il mio foglio viene caricato?",
            "a": "No. Il parsing avviene in questa scheda; nulla viene inviato."
          }
        ]
      },
      "related": [
        "json-formatter",
        "json-to-typescript",
        "number-base"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "base64",
      "name": {
        "en": "Base64 Encoder",
        "it": "Base64"
      },
      "url": {
        "en": "https://dev.eneawork.it/base64",
        "it": "https://dev.eneawork.it/it/base64"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/base64.md",
        "it": "https://dev.eneawork.it/md/it/base64.md"
      },
      "category": "encode",
      "summary": {
        "en": "Encode and decode Base64 with UTF-8 and URL-safe output.",
        "it": "Codifica e decodifica Base64 in UTF-8, anche URL-safe."
      },
      "description": {
        "en": "Encode and decode Base64 text with full UTF-8 support and URL-safe output. Instant, private, runs in your browser.",
        "it": "Codifica e decodifica testo Base64 con pieno supporto UTF-8 e output URL-safe. Istantaneo, privato, nel browser."
      },
      "howTo": {
        "en": [
          "Choose encode or decode.",
          "Paste the text and toggle URL-safe if needed.",
          "Copy the result or swap it back into the input."
        ],
        "it": [
          "Scegli codifica o decodifica.",
          "Incolla il testo e attiva URL-safe se serve.",
          "Copia il risultato o inverti input e output."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "Is Base64 encryption?",
            "a": "No. It is reversible encoding, not protection. Anyone can decode it; use real encryption for secrets."
          },
          {
            "q": "Why do emoji work?",
            "a": "Text is converted to UTF-8 bytes before encoding, so multi-byte characters round-trip correctly."
          },
          {
            "q": "What is URL-safe Base64?",
            "a": "It swaps + and / for - and _, and often drops padding, so the string can be used in URLs without escaping."
          }
        ],
        "it": [
          {
            "q": "Base64 è cifratura?",
            "a": "No. È una codifica reversibile, non una protezione. Chiunque può decodificarla; per i segreti serve vera cifratura."
          },
          {
            "q": "Perché le emoji funzionano?",
            "a": "Il testo è convertito in byte UTF-8 prima della codifica, quindi i caratteri multibyte tornano corretti."
          },
          {
            "q": "Cos'è Base64 URL-safe?",
            "a": "Sostituisce + e / con - e _, e spesso toglie il padding, così la stringa sta negli URL senza escaping."
          }
        ]
      },
      "related": [
        "url-encoder",
        "hash-generator",
        "jwt"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "url-encoder",
      "name": {
        "en": "URL Encoder",
        "it": "URL Encoder"
      },
      "url": {
        "en": "https://dev.eneawork.it/url-encoder",
        "it": "https://dev.eneawork.it/it/url-encoder"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/url-encoder.md",
        "it": "https://dev.eneawork.it/md/it/url-encoder.md"
      },
      "category": "encode",
      "summary": {
        "en": "Percent-encode or decode URLs and query-string values.",
        "it": "Codifica o decodifica URL e parametri query."
      },
      "description": {
        "en": "Percent-encode or decode URLs and query-string components correctly. UTF-8 aware, full-URI or component mode, free and local.",
        "it": "Codifica o decodifica URL e componenti query correttamente. UTF-8, modalità URI completa o componente, gratis e locale."
      },
      "howTo": {
        "en": [
          "Choose encode or decode.",
          "Pick component mode for a parameter, full URI for a complete URL.",
          "Copy the result."
        ],
        "it": [
          "Scegli codifica o decodifica.",
          "Usa componente per un parametro, URI completa per un URL intero.",
          "Copia il risultato."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "encodeURIComponent or encodeURI?",
            "a": "Use encodeURIComponent for each parameter value. Use encodeURI for a complete URL, because it keeps :, /, ? and & intact."
          },
          {
            "q": "Why does + become %20?",
            "a": "+ is a form-encoding convention. Percent-encoding represents a space as %20."
          },
          {
            "q": "What happens with malformed input?",
            "a": "Decoding reports an error instead of silently producing an incorrect string."
          }
        ],
        "it": [
          {
            "q": "encodeURIComponent o encodeURI?",
            "a": "encodeURIComponent per ogni valore di parametro. encodeURI per un URL completo, perché mantiene :, /, ? e &."
          },
          {
            "q": "Perché + diventa %20?",
            "a": "+ è una convenzione dei form. Il percent-encoding rappresenta lo spazio come %20."
          },
          {
            "q": "Cosa succede con input malformato?",
            "a": "La decodifica segnala un errore invece di produrre una stringa sbagliata in silenzio."
          }
        ]
      },
      "related": [
        "base64",
        "html-entities",
        "jwt"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "jwt",
      "name": {
        "en": "JWT Decoder",
        "it": "Decoder JWT"
      },
      "url": {
        "en": "https://dev.eneawork.it/jwt",
        "it": "https://dev.eneawork.it/it/jwt"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/jwt.md",
        "it": "https://dev.eneawork.it/md/it/jwt.md"
      },
      "category": "encode",
      "summary": {
        "en": "Read JWT headers, claims and expiry. No signature verification.",
        "it": "Leggi header, claim e scadenza di un JWT. Firma non verificata."
      },
      "description": {
        "en": "Decode JWT header and payload instantly, inspect claims and expiry. No signature verification, no token sent anywhere. Free and private.",
        "it": "Decodifica subito header e payload di un JWT, controlla claim e scadenza. Nessuna verifica della firma, nessun token inviato. Gratis e privato."
      },
      "howTo": {
        "en": [
          "Paste the token.",
          "Inspect the decoded header, payload and time claims.",
          "Copy the payload if you need it."
        ],
        "it": [
          "Incolla il token.",
          "Leggi header, payload e claim temporali decodificati.",
          "Copia il payload se ti serve."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "Does it verify the signature?",
            "a": "No. Verification needs the issuer's public key or secret and must happen server-side. This tool only decodes."
          },
          {
            "q": "Is it safe to paste production tokens?",
            "a": "Avoid real secrets. Tokens are displayed in the page and could be visible to browser extensions or someone looking at your screen. Use test tokens."
          },
          {
            "q": "Why is my token invalid?",
            "a": "A JWT needs three dot-separated Base64URL segments whose first two decode to JSON. Encrypted JWE tokens are not readable this way."
          }
        ],
        "it": [
          {
            "q": "Verifica la firma?",
            "a": "No. La verifica richiede la chiave pubblica o il segreto dell'issuer e deve avvenire lato server. Qui si decodifica soltanto."
          },
          {
            "q": "È sicuro incollare token di produzione?",
            "a": "Evita segreti reali. I token sono mostrati nella pagina e potrebbero essere visibili a estensioni o a chi guarda lo schermo. Usa token di test."
          },
          {
            "q": "Perché il mio token è invalido?",
            "a": "Un JWT richiede tre segmenti Base64URL separati da punti, con i primi due che decodificano in JSON. I token JWE cifrati non si leggono così."
          }
        ]
      },
      "related": [
        "base64",
        "hash-generator",
        "url-encoder"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "regex",
      "name": {
        "en": "Regex Tester",
        "it": "Regex Tester"
      },
      "url": {
        "en": "https://dev.eneawork.it/regex",
        "it": "https://dev.eneawork.it/it/regex"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/regex.md",
        "it": "https://dev.eneawork.it/md/it/regex.md"
      },
      "category": "text",
      "summary": {
        "en": "Test patterns live with flags, groups and replacement.",
        "it": "Testa espressioni regolari live con flag, gruppi e replace."
      },
      "description": {
        "en": "Test regular expressions live with flags, highlighted matches, capture groups and replacement preview. Includes common patterns. Private, in-browser.",
        "it": "Testa espressioni regolari live con flag, match evidenziati, gruppi di cattura e anteprima sostituzione. Pattern comuni inclusi. Privato, nel browser."
      },
      "howTo": {
        "en": [
          "Enter the pattern and flags.",
          "Paste the test string and inspect highlighted matches.",
          "Add a replacement to preview the transformed text."
        ],
        "it": [
          "Inserisci pattern e flag.",
          "Incolla il testo e controlla i match evidenziati.",
          "Aggiungi una sostituzione per vedere il testo trasformato."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "Which regex flavor is used?",
            "a": "JavaScript (ECMAScript). Most syntax is shared with PCRE, Java and Python, but lookbehind and Unicode property escapes vary."
          },
          {
            "q": "Why do zero-length matches appear?",
            "a": "Patterns such as ^, $ or word boundaries match a position, not characters. The tester advances one character to avoid an infinite loop."
          },
          {
            "q": "Is my text sent anywhere?",
            "a": "No. Matching happens in this page."
          }
        ],
        "it": [
          {
            "q": "Quale flavor di regex usa?",
            "a": "JavaScript (ECMAScript). Molta sintassi è condivisa con PCRE, Java e Python, ma lookbehind e property escape Unicode cambiano."
          },
          {
            "q": "Perché compaiono match a lunghezza zero?",
            "a": "Pattern come ^, $ o i word boundary corrispondono a una posizione, non a caratteri. Il tester avanza di un carattere per evitare loop infiniti."
          },
          {
            "q": "Il mio testo viene inviato?",
            "a": "No. Il matching avviene in questa pagina."
          }
        ]
      },
      "related": [
        "text-diff",
        "case-converter",
        "url-encoder"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "cron",
      "name": {
        "en": "Cron Generator",
        "it": "Generatore Cron"
      },
      "url": {
        "en": "https://dev.eneawork.it/cron",
        "it": "https://dev.eneawork.it/it/cron"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/cron.md",
        "it": "https://dev.eneawork.it/md/it/cron.md"
      },
      "category": "web",
      "summary": {
        "en": "Build cron expressions and preview the next runs.",
        "it": "Costruisci espressioni cron e vedi le prossime esecuzioni."
      },
      "description": {
        "en": "Build five-field cron expressions with presets, a plain-language description and the next scheduled runs. Validate syntax instantly.",
        "it": "Costruisci espressioni cron a cinque campi con preset, descrizione in linguaggio naturale e prossime esecuzioni. Validazione immediata."
      },
      "howTo": {
        "en": [
          "Start from a preset or edit the five fields.",
          "Read the plain-language description.",
          "Check the next runs, then copy the expression."
        ],
        "it": [
          "Parti da un preset o modifica i cinque campi.",
          "Leggi la descrizione in linguaggio naturale.",
          "Controlla le prossime esecuzioni e copia l'espressione."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "Does it include seconds?",
            "a": "No, this uses classic five-field cron. Some schedulers require a sixth seconds field at the start."
          },
          {
            "q": "How do day-of-month and day-of-week combine?",
            "a": "In classic cron, when both are restricted, the job runs if either matches. Some modern schedulers use AND instead."
          },
          {
            "q": "Which timezone is used?",
            "a": "Your browser's local timezone for the preview. Cron itself runs in the server's timezone, which may be UTC — check before deploying."
          }
        ],
        "it": [
          {
            "q": "Include i secondi?",
            "a": "No, usa il cron classico a cinque campi. Alcuni scheduler richiedono un sesto campo per i secondi all'inizio."
          },
          {
            "q": "Come si combinano giorno del mese e giorno della settimana?",
            "a": "Nel cron classico, quando entrambi sono limitati, il job parte se uno dei due corrisponde. Alcuni scheduler moderni usano AND."
          },
          {
            "q": "Quale fuso orario usa?",
            "a": "Per l'anteprima, il fuso locale del browser. Il cron gira nel fuso del server, spesso UTC: controlla prima del deploy."
          }
        ]
      },
      "related": [
        "timestamp",
        "http-status",
        "regex"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "timestamp",
      "name": {
        "en": "Timestamp Converter",
        "it": "Convertitore timestamp"
      },
      "url": {
        "en": "https://dev.eneawork.it/timestamp",
        "it": "https://dev.eneawork.it/it/timestamp"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/timestamp.md",
        "it": "https://dev.eneawork.it/md/it/timestamp.md"
      },
      "category": "web",
      "summary": {
        "en": "Unix timestamp to readable date, UTC and local time.",
        "it": "Unix timestamp ↔ data leggibile, UTC e fuso locale."
      },
      "description": {
        "en": "Convert Unix timestamps to readable dates and back. Auto-detects seconds or milliseconds, shows UTC, local time and relative time.",
        "it": "Converti timestamp Unix in date leggibili e viceversa. Rileva secondi o millisecondi, mostra UTC, ora locale e tempo relativo."
      },
      "howTo": {
        "en": [
          "Paste a timestamp or a readable date.",
          "Check the auto-detected unit.",
          "Copy the format you need."
        ],
        "it": [
          "Incolla un timestamp o una data leggibile.",
          "Controlla l'unità rilevata automaticamente.",
          "Copia il formato che ti serve."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "How does unit auto-detection work?",
            "a": "Values with 10 digits are treated as seconds and 13 digits as milliseconds. Ambiguous values can be forced with the unit selector."
          },
          {
            "q": "Why is local time different from UTC?",
            "a": "Local time includes your timezone offset and daylight-saving rules. UTC is the stable reference used by APIs and logs."
          },
          {
            "q": "What is the 2038 problem?",
            "a": "Systems storing Unix seconds in a signed 32-bit integer overflow on 19 January 2038. Use 64-bit time or millisecond values."
          }
        ],
        "it": [
          {
            "q": "Come funziona il rilevamento automatico?",
            "a": "I valori a 10 cifre sono trattati come secondi, quelli a 13 come millisecondi. I casi ambigui si forzano dal selettore unità."
          },
          {
            "q": "Perché l'ora locale differisce da UTC?",
            "a": "L'ora locale include offset e ora legale. UTC è il riferimento stabile usato da API e log."
          },
          {
            "q": "Cos'è il problema del 2038?",
            "a": "I sistemi che salvano secondi Unix in un intero signed a 32 bit vanno in overflow il 19 gennaio 2038. Usa tempo a 64 bit o millisecondi."
          }
        ]
      },
      "related": [
        "cron",
        "http-status",
        "json-formatter"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "text-diff",
      "name": {
        "en": "Text Diff",
        "it": "Diff testo"
      },
      "url": {
        "en": "https://dev.eneawork.it/text-diff",
        "it": "https://dev.eneawork.it/it/text-diff"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/text-diff.md",
        "it": "https://dev.eneawork.it/md/it/text-diff.md"
      },
      "category": "text",
      "summary": {
        "en": "Compare two texts line by line and copy the diff.",
        "it": "Confronta due testi riga per riga e copia il diff."
      },
      "description": {
        "en": "Compare two texts and highlight added, removed and unchanged lines. Ignore whitespace or case, copy the diff. Runs locally.",
        "it": "Confronta due testi ed evidenzia righe aggiunte, rimosse e invariate. Ignora spazi o maiuscole, copia il diff. Tutto in locale."
      },
      "howTo": {
        "en": [
          "Paste the original and the new text.",
          "Set the ignore options if needed.",
          "Compare and copy the report."
        ],
        "it": [
          "Incolla il testo originale e quello nuovo.",
          "Imposta le opzioni di ignoramento se serve.",
          "Confronta e copia il report."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "Does it handle very large files?",
            "a": "It caps comparison work to keep the tab responsive. For large codebases use git diff, which is faster and smarter."
          },
          {
            "q": "Why do similar lines show as replaced?",
            "a": "The comparison is line-based; each line is a unit. A tiny change inside a long line shows the whole line as changed."
          },
          {
            "q": "Is my text uploaded?",
            "a": "No. Both texts stay in this page."
          }
        ],
        "it": [
          {
            "q": "Gestisce file molto grandi?",
            "a": "Limita il lavoro di confronto per tenere la scheda reattiva. Per codebase grandi usa git diff, più veloce e intelligente."
          },
          {
            "q": "Perché righe simili risultano sostituite?",
            "a": "Il confronto è per riga: ogni riga è un'unità. Una piccola modifica dentro una riga lunga mostra tutta la riga come cambiata."
          },
          {
            "q": "Il mio testo viene caricato?",
            "a": "No. Entrambi i testi restano in questa pagina."
          }
        ]
      },
      "related": [
        "json-diff",
        "case-converter",
        "regex"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "case-converter",
      "name": {
        "en": "Case Converter",
        "it": "Convertitore maiuscole"
      },
      "url": {
        "en": "https://dev.eneawork.it/case-converter",
        "it": "https://dev.eneawork.it/it/case-converter"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/case-converter.md",
        "it": "https://dev.eneawork.it/md/it/case-converter.md"
      },
      "category": "text",
      "summary": {
        "en": "camelCase, PascalCase, snake_case, kebab-case and more.",
        "it": "camelCase, PascalCase, snake_case, kebab-case e altro."
      },
      "description": {
        "en": "Convert text to camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE and more. Handles acronyms and numbers, copies each format.",
        "it": "Converti testo in camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE e altro. Gestisce acronimi e numeri, copia ogni formato."
      },
      "howTo": {
        "en": [
          "Paste or type the phrase.",
          "Pick the convention you need.",
          "Copy the result from its row."
        ],
        "it": [
          "Incolla o scrivi la frase.",
          "Scegli la convenzione.",
          "Copia il risultato dalla sua riga."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "How are words split?",
            "a": "On spaces, punctuation, underscores and hyphens, plus lower-to-upper transitions. Existing camelCase is understood."
          },
          {
            "q": "What happens to acronyms?",
            "a": "Grouped capitals are treated as one word: HTTPResponse becomes http-response in kebab case."
          },
          {
            "q": "Does it change accented letters?",
            "a": "No. Letters are preserved; only case and separators change."
          }
        ],
        "it": [
          {
            "q": "Come divide le parole?",
            "a": "Su spazi, punteggiatura, underscore e trattini, più le transizioni minuscola-maiuscola. Il camelCase esistente viene riconosciuto."
          },
          {
            "q": "Cosa succede agli acronimi?",
            "a": "Le maiuscole raggruppate sono una parola: HTTPResponse diventa http-response in kebab case."
          },
          {
            "q": "Cambia le lettere accentate?",
            "a": "No. Le lettere restano; cambiano solo maiuscole e separatori."
          }
        ]
      },
      "related": [
        "lorem-ipsum",
        "text-diff",
        "regex"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "color-converter",
      "name": {
        "en": "Color Converter",
        "it": "Convertitore colori"
      },
      "url": {
        "en": "https://dev.eneawork.it/color-converter",
        "it": "https://dev.eneawork.it/it/color-converter"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/color-converter.md",
        "it": "https://dev.eneawork.it/md/it/color-converter.md"
      },
      "category": "web",
      "summary": {
        "en": "HEX, RGB, HSL and OKLCH plus WCAG contrast checks.",
        "it": "HEX, RGB, HSL e OKLCH, con controllo contrasto WCAG."
      },
      "description": {
        "en": "Convert colors between HEX, RGB, HSL and OKLCH, and check WCAG contrast against black and white. Live, exact, no uploads.",
        "it": "Converti colori tra HEX, RGB, HSL e OKLCH e controlla il contrasto WCAG su bianco e nero. Live, preciso, nessun upload."
      },
      "howTo": {
        "en": [
          "Pick a color or paste a HEX value.",
          "Read the four color formats.",
          "Check contrast before using the color for text."
        ],
        "it": [
          "Scegli un colore o incolla un valore HEX.",
          "Leggi i quattro formati.",
          "Controlla il contrasto prima di usarlo per il testo."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "What is OKLCH?",
            "a": "A perceptual color space with lightness, chroma and hue. Equal lightness steps look equal, which makes palette work more predictable."
          },
          {
            "q": "Which contrast standard is used?",
            "a": "WCAG 2.1: AA requires 4.5:1 for normal text and 3:1 for large text; AAA requires 7:1 and 4.5:1."
          },
          {
            "q": "Why is HSL not perceptual?",
            "a": "In HSL, equal lightness values do not look equally bright across hues — yellow and blue at 50% lightness look very different."
          }
        ],
        "it": [
          {
            "q": "Cos'è OKLCH?",
            "a": "Uno spazio colore percettivo con luminosità, croma e tinta. Passi di luminosità uguali appaiono uguali, rendendo le palette più prevedibili."
          },
          {
            "q": "Quale standard di contrasto usa?",
            "a": "WCAG 2.1: AA richiede 4.5:1 per testo normale e 3:1 per testo grande; AAA richiede 7:1 e 4.5:1."
          },
          {
            "q": "Perché HSL non è percettivo?",
            "a": "In HSL, valori di luminosità uguali non appaiono ugualmente chiari tra tinte diverse: giallo e blu al 50% sono molto diversi."
          }
        ]
      },
      "related": [
        "html-entities",
        "number-base",
        "http-status"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "number-base",
      "name": {
        "en": "Number Base Converter",
        "it": "Convertitore basi numeriche"
      },
      "url": {
        "en": "https://dev.eneawork.it/number-base",
        "it": "https://dev.eneawork.it/it/number-base"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/number-base.md",
        "it": "https://dev.eneawork.it/md/it/number-base.md"
      },
      "category": "json",
      "summary": {
        "en": "Binary, octal, decimal and hex with BigInt precision.",
        "it": "Binario, ottale, decimale ed esadecimale con BigInt."
      },
      "description": {
        "en": "Convert integers between binary, octal, decimal and hexadecimal with BigInt precision. Auto-detects prefixes and shows bit length.",
        "it": "Converti interi tra binario, ottale, decimale ed esadecimale con precisione BigInt. Rileva i prefissi e mostra la lunghezza in bit."
      },
      "howTo": {
        "en": [
          "Paste the number.",
          "Leave the base on auto or choose one.",
          "Copy any format from the result rows."
        ],
        "it": [
          "Incolla il numero.",
          "Lascia la base su automatico o scegline una.",
          "Copia il formato che ti serve dalle righe di risultato."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "Are negative numbers supported?",
            "a": "Yes. The sign is preserved in every base; two's complement is not implied."
          },
          {
            "q": "Why BigInt instead of Number?",
            "a": "JavaScript Number loses integer precision above 2^53. BigInt keeps arbitrary-size integers exact."
          },
          {
            "q": "What does bit length mean?",
            "a": "The minimum number of binary digits needed for the absolute value. A value needing 9 bits does not fit in an unsigned byte."
          }
        ],
        "it": [
          {
            "q": "I numeri negativi sono supportati?",
            "a": "Sì. Il segno è preservato in ogni base; il complemento a due non viene applicato."
          },
          {
            "q": "Perché BigInt invece di Number?",
            "a": "Number perde precisione intera sopra 2^53. BigInt mantiene esatti interi di qualsiasi dimensione."
          },
          {
            "q": "Cosa significa lunghezza in bit?",
            "a": "Il numero minimo di cifre binarie per il valore assoluto. Un valore da 9 bit non entra in un byte unsigned."
          }
        ]
      },
      "related": [
        "color-converter",
        "hash-generator",
        "html-entities"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "html-entities",
      "name": {
        "en": "HTML Entities",
        "it": "Entità HTML"
      },
      "url": {
        "en": "https://dev.eneawork.it/html-entities",
        "it": "https://dev.eneawork.it/it/html-entities"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/html-entities.md",
        "it": "https://dev.eneawork.it/md/it/html-entities.md"
      },
      "category": "encode",
      "summary": {
        "en": "Escape and unescape HTML entities safely.",
        "it": "Codifica e decodifica entità HTML in modo sicuro."
      },
      "description": {
        "en": "Escape or unescape HTML entities for safe output. Named and numeric entities, UTF-8, instant and private.",
        "it": "Codifica o decodifica entità HTML per un output sicuro. Entità nominate e numeriche, UTF-8, istantaneo e privato."
      },
      "howTo": {
        "en": [
          "Choose encode or decode.",
          "Pick minimal escaping or all non-ASCII.",
          "Copy the result or swap it back."
        ],
        "it": [
          "Scegli codifica o decodifica.",
          "Scegli escape minimo o tutti i non-ASCII.",
          "Copia il risultato o inverti input e output."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "Is escaping enough to prevent XSS?",
            "a": "Not always. Context matters: HTML text, attributes, URLs and JavaScript need different escaping. Use a reputable sanitizer for rich HTML."
          },
          {
            "q": "Named vs numeric entities?",
            "a": "Named entities use mnemonics such as &amp; or &euro;; numeric entities use decimal or hex code points. Browsers understand both."
          },
          {
            "q": "Does it alter emoji?",
            "a": "In all mode, emoji become numeric entities; decoding restores them exactly."
          }
        ],
        "it": [
          {
            "q": "Basta l'escaping per prevenire XSS?",
            "a": "Non sempre. Il contesto conta: testo HTML, attributi, URL e JavaScript richiedono escape diversi. Per HTML ricco usa un sanitizer affidabile."
          },
          {
            "q": "Entità nominate o numeriche?",
            "a": "Le nominate usano mnemonici come &amp; o &euro;; le numeriche usano code point decimali o hex. I browser capiscono entrambe."
          },
          {
            "q": "Le emoji vengono alterate?",
            "a": "In modalità completa diventano entità numeriche; la decodifica le ripristina esattamente."
          }
        ]
      },
      "related": [
        "url-encoder",
        "base64",
        "text-diff"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "http-status",
      "name": {
        "en": "HTTP Status Codes",
        "it": "Codici di stato HTTP"
      },
      "url": {
        "en": "https://dev.eneawork.it/http-status",
        "it": "https://dev.eneawork.it/it/http-status"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/http-status.md",
        "it": "https://dev.eneawork.it/md/it/http-status.md"
      },
      "category": "web",
      "summary": {
        "en": "Searchable reference for 1xx to 5xx status codes.",
        "it": "Riferimento ricercabile ai codici da 1xx a 5xx."
      },
      "description": {
        "en": "Searchable reference of HTTP status codes: meaning, category and common use. 1xx to 5xx, plain language, free.",
        "it": "Riferimento ricercabile ai codici di stato HTTP: significato, categoria e uso comune. Da 1xx a 5xx, linguaggio semplice, gratis."
      },
      "howTo": {
        "en": [
          "Search a code or a keyword.",
          "Filter by class if you want a broad view.",
          "Read the meaning and pick the right code."
        ],
        "it": [
          "Cerca un codice o una parola chiave.",
          "Filtra per classe per una vista ampia.",
          "Leggi il significato e scegli il codice giusto."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "401 vs 403?",
            "a": "401 means unauthenticated — the server does not know who you are. 403 means authenticated but not allowed to access this resource."
          },
          {
            "q": "200 vs 201?",
            "a": "200 is a generic success, used for reads and updates. 201 says a resource was created and should include its Location."
          },
          {
            "q": "Are custom status codes allowed?",
            "a": "Clients understand the class from the first digit, but inventing codes hurts interoperability. Use a standard code and explain details in the body."
          }
        ],
        "it": [
          {
            "q": "401 vs 403?",
            "a": "401 significa non autenticato: il server non sa chi sei. 403 significa autenticato ma non autorizzato a questa risorsa."
          },
          {
            "q": "200 vs 201?",
            "a": "200 è un successo generico per letture e aggiornamenti. 201 indica che una risorsa è stata creata e dovrebbe includere Location."
          },
          {
            "q": "Si possono inventare codici?",
            "a": "I client capiscono la classe dalla prima cifra, ma inventare codici danneggia l'interoperabilità. Usa un codice standard e spiega i dettagli nel body."
          }
        ]
      },
      "related": [
        "cron",
        "timestamp",
        "url-encoder"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "json-to-csv",
      "name": {
        "en": "JSON to CSV",
        "it": "JSON → CSV"
      },
      "url": {
        "en": "https://dev.eneawork.it/json-to-csv",
        "it": "https://dev.eneawork.it/it/json-to-csv"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/json-to-csv.md",
        "it": "https://dev.eneawork.it/md/it/json-to-csv.md"
      },
      "category": "json",
      "summary": {
        "en": "Turn an array of JSON objects into clean CSV.",
        "it": "Trasforma un array di oggetti JSON in CSV pulito."
      },
      "description": {
        "en": "Convert a JSON array to CSV with headers, custom delimiters and correct quoting. Copy or download the result. Runs entirely in your browser.",
        "it": "Converti un array JSON in CSV con intestazioni, delimitatori personalizzati e quoting corretto. Copia o scarica il risultato. Tutto nel browser."
      },
      "howTo": {
        "en": [
          "Paste a JSON array of objects.",
          "Choose the delimiter and whether to include a header.",
          "Copy the CSV or download it as a file."
        ],
        "it": [
          "Incolla un array JSON di oggetti.",
          "Scegli delimitatore e se includere l'intestazione.",
          "Copia il CSV o scaricalo come file."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "What happens to nested objects?",
            "a": "They are serialised as compact JSON inside the cell. Flatten them first if you need separate columns."
          },
          {
            "q": "Can I convert a single object?",
            "a": "Yes. A single object becomes a one-row CSV; an array of primitives becomes a single value column."
          }
        ],
        "it": [
          {
            "q": "Cosa succede agli oggetti annidati?",
            "a": "Vengono serializzati come JSON compatto nella cella. Appiattiscili prima se ti servono colonne separate."
          },
          {
            "q": "Posso convertire un singolo oggetto?",
            "a": "Sì. Un oggetto singolo diventa un CSV da una riga; un array di primitivi diventa una colonna value."
          }
        ]
      },
      "related": [
        "csv-to-json",
        "json-formatter",
        "line-tools"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "json-schema",
      "name": {
        "en": "JSON Schema Generator",
        "it": "Generatore JSON Schema"
      },
      "url": {
        "en": "https://dev.eneawork.it/json-schema",
        "it": "https://dev.eneawork.it/it/json-schema"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/json-schema.md",
        "it": "https://dev.eneawork.it/md/it/json-schema.md"
      },
      "category": "json",
      "summary": {
        "en": "Infer a JSON Schema 2020-12 document from a sample.",
        "it": "Deduci uno schema JSON 2020-12 da un esempio."
      },
      "description": {
        "en": "Generate a JSON Schema from any JSON sample. Nested objects, arrays, required fields and strict additionalProperties. Runs in your browser.",
        "it": "Genera uno schema JSON da qualsiasi esempio. Oggetti annidati, array, campi obbligatori e additionalProperties strict. Tutto nel browser."
      },
      "howTo": {
        "en": [
          "Paste a representative JSON sample.",
          "Set the root title and choose strict objects if needed.",
          "Copy or download the generated schema."
        ],
        "it": [
          "Incolla un esempio JSON rappresentativo.",
          "Imposta il titolo root e, se serve, gli oggetti strict.",
          "Copia o scarica lo schema generato."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "Which JSON Schema version is generated?",
            "a": "Draft 2020-12. The $schema field is included at the root."
          },
          {
            "q": "What does “strict objects” change?",
            "a": "It sets additionalProperties to false on every object, so unknown keys fail validation."
          },
          {
            "q": "How are mixed arrays handled?",
            "a": "Different item shapes are collected in an anyOf list; identical shapes are merged."
          }
        ],
        "it": [
          {
            "q": "Quale versione di JSON Schema genera?",
            "a": "Draft 2020-12. Il campo $schema è incluso alla radice."
          },
          {
            "q": "Cosa cambia “oggetti strict”?",
            "a": "Imposta additionalProperties a false su ogni oggetto, così le chiavi sconosciute falliscono la validazione."
          },
          {
            "q": "Come gestisce gli array misti?",
            "a": "Le forme diverse finiscono in una lista anyOf; le forme identiche vengono unite."
          }
        ]
      },
      "related": [
        "json-to-typescript",
        "json-formatter",
        "json-diff"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "env-json",
      "name": {
        "en": "ENV ↔ JSON",
        "it": "ENV ↔ JSON"
      },
      "url": {
        "en": "https://dev.eneawork.it/env-json",
        "it": "https://dev.eneawork.it/it/env-json"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/env-json.md",
        "it": "https://dev.eneawork.it/md/it/env-json.md"
      },
      "category": "json",
      "summary": {
        "en": "Convert .env configuration to JSON and back.",
        "it": "Converti la configurazione .env in JSON e viceversa."
      },
      "description": {
        "en": "Convert .env configuration to JSON and JSON back to .env syntax. Handles comments, export prefixes, quotes and basic types locally.",
        "it": "Converti file .env in JSON e JSON in sintassi .env. Gestisce commenti, prefisso export, virgolette e tipi base, tutto in locale."
      },
      "howTo": {
        "en": [
          "Choose .env → JSON or JSON → .env.",
          "Paste the source and decide whether to infer numbers and booleans.",
          "Copy the result or swap it back into the input."
        ],
        "it": [
          "Scegli .env → JSON o JSON → .env.",
          "Incolla la sorgente e decidi se dedurre numeri e booleani.",
          "Copia il risultato o inverti input e output."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "What happens to comments?",
            "a": "They are ignored when parsing .env. JSON has no comments, so they are lost when converting back."
          },
          {
            "q": "How are quoted values handled?",
            "a": "Single and double quotes are removed; escaped newlines, tabs and quotes in double-quoted values are decoded."
          },
          {
            "q": "Can I keep every value as a string?",
            "a": "Yes. Turn off type inference and all values stay JSON strings."
          }
        ],
        "it": [
          {
            "q": "Cosa succede ai commenti?",
            "a": "Vengono ignorati nel parsing .env. JSON non ha commenti, quindi si perdono nella conversione inversa."
          },
          {
            "q": "Come gestisce i valori quotati?",
            "a": "Rimuove virgolette singole e doppie; decodifica newline, tab e virgolette escapate nei valori double-quoted."
          },
          {
            "q": "Posso mantenere tutto come stringa?",
            "a": "Sì. Disattiva l'inferenza tipi e tutti i valori restano stringhe JSON."
          }
        ]
      },
      "related": [
        "json-formatter",
        "json-to-csv",
        "line-tools"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "url-parser",
      "name": {
        "en": "URL Parser",
        "it": "Parser URL"
      },
      "url": {
        "en": "https://dev.eneawork.it/url-parser",
        "it": "https://dev.eneawork.it/it/url-parser"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/url-parser.md",
        "it": "https://dev.eneawork.it/md/it/url-parser.md"
      },
      "category": "web",
      "summary": {
        "en": "Break a URL into protocol, host, path and query parameters.",
        "it": "Scomponi un URL in protocollo, host, path e parametri."
      },
      "description": {
        "en": "Parse any URL into protocol, host, port, path, hash and decoded query parameters. WHATWG URL semantics, private and instant.",
        "it": "Analizza qualsiasi URL in protocollo, host, porta, path, hash e parametri decodificati. Semantica WHATWG URL, privato e istantaneo."
      },
      "howTo": {
        "en": [
          "Paste a full URL.",
          "Inspect the component list and the decoded query parameters.",
          "Copy any field with its button."
        ],
        "it": [
          "Incolla un URL completo.",
          "Controlla i componenti e i parametri query decodificati.",
          "Copia il campo che ti serve."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "What if I omit the protocol?",
            "a": "The parser assumes https:// and shows the resolved URL parts."
          },
          {
            "q": "Are duplicate query parameters kept?",
            "a": "Yes, every occurrence is listed with its decoded value."
          },
          {
            "q": "How are spaces encoded?",
            "a": "URLSearchParams decodes percent escapes and returns the readable value."
          }
        ],
        "it": [
          {
            "q": "E se ometto il protocollo?",
            "a": "Il parser assume https:// e mostra le parti dell'URL risolto."
          },
          {
            "q": "I parametri duplicati vengono mantenuti?",
            "a": "Sì, ogni occorrenza è elencata con il suo valore decodificato."
          },
          {
            "q": "Come gestisce gli spazi?",
            "a": "URLSearchParams decodifica gli escape percentuali e restituisce il valore leggibile."
          }
        ]
      },
      "related": [
        "url-encoder",
        "base64",
        "jwt"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "base32",
      "name": {
        "en": "Base32 Encoder",
        "it": "Encoder Base32"
      },
      "url": {
        "en": "https://dev.eneawork.it/base32",
        "it": "https://dev.eneawork.it/it/base32"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/base32.md",
        "it": "https://dev.eneawork.it/md/it/base32.md"
      },
      "category": "encode",
      "summary": {
        "en": "Encode and decode Base32 with optional padding.",
        "it": "Codifica e decodifica Base32 con padding opzionale."
      },
      "description": {
        "en": "Encode and decode UTF-8 text in RFC 4648 Base32 with optional padding. Private, instant and entirely in your browser.",
        "it": "Codifica e decodifica testo UTF-8 in Base32 RFC 4648 con padding opzionale. Privato, istantaneo e nel browser."
      },
      "howTo": {
        "en": [
          "Choose encode or decode.",
          "Paste the text and toggle padding if needed.",
          "Copy the result or swap it back into the input."
        ],
        "it": [
          "Scegli codifica o decodifica.",
          "Incolla il testo e attiva il padding se serve.",
          "Copia il risultato o inverti input e output."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "Base32 or Base64?",
            "a": "Base32 is longer but case-insensitive and avoids ambiguous characters. Base64 is shorter but case-sensitive."
          },
          {
            "q": "Should I keep padding?",
            "a": "Keep it for RFC-strict systems. Many TOTP secrets omit the = padding and decoders accept both."
          }
        ],
        "it": [
          {
            "q": "Base32 o Base64?",
            "a": "Base32 è più lungo ma case-insensitive ed evita caratteri ambigui. Base64 è più corto ma case-sensitive."
          },
          {
            "q": "Devo tenere il padding?",
            "a": "Tienilo per i sistemi RFC-strict. Molti segreti TOTP omettono il padding = e i decoder accettano entrambi."
          }
        ]
      },
      "related": [
        "base64",
        "base58",
        "totp"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "base58",
      "name": {
        "en": "Base58 Encoder",
        "it": "Encoder Base58"
      },
      "url": {
        "en": "https://dev.eneawork.it/base58",
        "it": "https://dev.eneawork.it/it/base58"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/base58.md",
        "it": "https://dev.eneawork.it/md/it/base58.md"
      },
      "category": "encode",
      "summary": {
        "en": "Encode and decode Base58 using the Bitcoin alphabet.",
        "it": "Codifica e decodifica Base58 con alfabeto Bitcoin."
      },
      "description": {
        "en": "Encode and decode UTF-8 text in Bitcoin Base58. Preserves leading zero bytes and runs entirely in your browser.",
        "it": "Codifica e decodifica testo UTF-8 in Base58 Bitcoin. Preserva i byte zero iniziali e gira interamente nel browser."
      },
      "howTo": {
        "en": [
          "Choose encode or decode.",
          "Paste the text.",
          "Copy the result or swap it back into the input."
        ],
        "it": [
          "Scegli codifica o decodifica.",
          "Incolla il testo.",
          "Copia il risultato o inverti input e output."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "Which Base58 alphabet is used?",
            "a": "The Bitcoin alphabet: 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz."
          },
          {
            "q": "Does it add a checksum?",
            "a": "No. This is raw Base58, not Base58Check. Address checksums are a separate step."
          },
          {
            "q": "Are leading zero bytes preserved?",
            "a": "Yes, each leading zero byte becomes a leading 1, as in the reference encoding."
          }
        ],
        "it": [
          {
            "q": "Quale alfabeto Base58 usa?",
            "a": "L'alfabeto Bitcoin: 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz."
          },
          {
            "q": "Aggiunge un checksum?",
            "a": "No. È Base58 puro, non Base58Check. Il checksum degli indirizzi è un passaggio separato."
          },
          {
            "q": "I byte zero iniziali sono preservati?",
            "a": "Sì, ogni byte zero iniziale diventa un 1 iniziale, come nella codifica di riferimento."
          }
        ]
      },
      "related": [
        "base32",
        "base64",
        "hash-generator"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "hmac",
      "name": {
        "en": "HMAC Generator",
        "it": "Generatore HMAC"
      },
      "url": {
        "en": "https://dev.eneawork.it/hmac",
        "it": "https://dev.eneawork.it/it/hmac"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/hmac.md",
        "it": "https://dev.eneawork.it/md/it/hmac.md"
      },
      "category": "encode",
      "summary": {
        "en": "Sign a message with a secret using HMAC.",
        "it": "Firma un messaggio con un segreto usando HMAC."
      },
      "description": {
        "en": "Generate HMAC signatures from a message and secret with SHA-1, SHA-256, SHA-384 or SHA-512. Hex or Base64 output, all local.",
        "it": "Genera firme HMAC da messaggio e segreto con SHA-1, SHA-256, SHA-384 o SHA-512. Output hex o Base64, tutto in locale."
      },
      "howTo": {
        "en": [
          "Paste the message.",
          "Enter the secret and choose an algorithm.",
          "Copy the hex or Base64 signature."
        ],
        "it": [
          "Incolla il messaggio.",
          "Inserisci il segreto e scegli l'algoritmo.",
          "Copia la firma hex o Base64."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "How is HMAC different from a hash?",
            "a": "A plain hash only proves integrity. HMAC also requires a secret key, so it proves the message was signed by someone who knows the key."
          },
          {
            "q": "Which output should I use?",
            "a": "Use hex for logs and documentation, Base64 for HTTP headers and compact transport."
          },
          {
            "q": "Is the secret stored?",
            "a": "No. It stays in the page memory and disappears when you close or reload the tab."
          }
        ],
        "it": [
          {
            "q": "HMAC e hash semplice sono diversi?",
            "a": "Un hash semplice dimostra solo l'integrità. HMAC richiede anche una chiave segreta, quindi dimostra che il messaggio è stato firmato da chi conosce la chiave."
          },
          {
            "q": "Quale output uso?",
            "a": "Hex per log e documentazione, Base64 per header HTTP e trasporto compatto."
          },
          {
            "q": "Il segreto viene salvato?",
            "a": "No. Resta nella memoria della pagina e sparisce chiudendo o ricaricando la scheda."
          }
        ]
      },
      "related": [
        "hash-generator",
        "jwt",
        "totp"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "totp",
      "name": {
        "en": "TOTP Generator",
        "it": "Generatore TOTP"
      },
      "url": {
        "en": "https://dev.eneawork.it/totp",
        "it": "https://dev.eneawork.it/it/totp"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/totp.md",
        "it": "https://dev.eneawork.it/md/it/totp.md"
      },
      "category": "encode",
      "summary": {
        "en": "Generate time-based one-time passwords from a Base32 secret.",
        "it": "Genera password monouso a tempo da un segreto Base32."
      },
      "description": {
        "en": "Generate TOTP codes from a Base32 secret with 6 or 8 digits and a configurable period. SHA-1, SHA-256, SHA-512. Local only.",
        "it": "Genera codici TOTP da un segreto Base32 con 6 o 8 cifre e periodo configurabile. SHA-1, SHA-256, SHA-512. Solo in locale."
      },
      "howTo": {
        "en": [
          "Paste the Base32 secret from your authenticator setup.",
          "Choose digits, period and hash algorithm if they differ from the defaults.",
          "Copy the current code before the timer runs out."
        ],
        "it": [
          "Incolla il segreto Base32 della configurazione authenticator.",
          "Scegli cifre, periodo e algoritmo se diversi dai default.",
          "Copia il codice corrente prima che scada."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "Does it work with Google Authenticator and Authy?",
            "a": "Yes, with the default 6 digits, 30-second period and SHA-1."
          },
          {
            "q": "Why does the code change every 30 seconds?",
            "a": "TOTP derives the code from a time counter. The server accepts the current step and usually one adjacent step for clock drift."
          },
          {
            "q": "Is my secret safe here?",
            "a": "It is processed locally and never uploaded. Still avoid real production secrets on a shared or recorded screen."
          }
        ],
        "it": [
          {
            "q": "Funziona con Google Authenticator e Authy?",
            "a": "Sì, con i default: 6 cifre, periodo 30 secondi e SHA-1."
          },
          {
            "q": "Perché il codice cambia ogni 30 secondi?",
            "a": "TOTP deriva il codice da un contatore temporale. Il server accetta lo step corrente e di solito uno adiacente per il clock drift."
          },
          {
            "q": "Il segreto è al sicuro?",
            "a": "È elaborato in locale e non viene caricato. Evita comunque segreti di produzione su schermi condivisi o registrati."
          }
        ]
      },
      "related": [
        "hmac",
        "base32",
        "jwt"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "ulid",
      "name": {
        "en": "ULID Generator",
        "it": "Generatore ULID"
      },
      "url": {
        "en": "https://dev.eneawork.it/ulid",
        "it": "https://dev.eneawork.it/it/ulid"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/ulid.md",
        "it": "https://dev.eneawork.it/md/it/ulid.md"
      },
      "category": "generate",
      "summary": {
        "en": "Generate time-sortable ULIDs, in batches.",
        "it": "Genera ULID ordinabili nel tempo, anche in batch."
      },
      "description": {
        "en": "Generate ULIDs with a 48-bit timestamp and 80 random bits. Batch up to 100, copy or download. Private, in-browser.",
        "it": "Genera ULID con timestamp a 48 bit e 80 bit casuali. Batch fino a 100, copia o download. Privato, nel browser."
      },
      "howTo": {
        "en": [
          "Choose how many ULIDs you need.",
          "Generate the batch.",
          "Copy or download the list."
        ],
        "it": [
          "Scegli quanti ULID generare.",
          "Genera il batch.",
          "Copia o scarica la lista."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "ULID or UUID v7?",
            "a": "Both are time-sortable. ULIDs are shorter as text (26 characters) and easier to read; UUIDs have wider library support."
          },
          {
            "q": "Are ULIDs case-sensitive?",
            "a": "The canonical form is uppercase. Crockford Base32 decoding is case-insensitive."
          },
          {
            "q": "Can two ULIDs collide?",
            "a": "The 80 random bits make collisions negligible, even inside the same millisecond."
          }
        ],
        "it": [
          {
            "q": "ULID o UUID v7?",
            "a": "Entrambi sono ordinabili nel tempo. Gli ULID sono più corti come testo (26 caratteri) e più leggibili; gli UUID hanno supporto più ampio nelle librerie."
          },
          {
            "q": "Gli ULID sono case-sensitive?",
            "a": "La forma canonica è maiuscola. La decodifica Crockford Base32 è case-insensitive."
          },
          {
            "q": "Due ULID possono collidere?",
            "a": "Gli 80 bit casuali rendono la collisione trascurabile, anche nello stesso millisecondo."
          }
        ]
      },
      "related": [
        "uuid",
        "hash-generator",
        "base58"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "file-hash",
      "name": {
        "en": "File Hash",
        "it": "Hash file"
      },
      "url": {
        "en": "https://dev.eneawork.it/file-hash",
        "it": "https://dev.eneawork.it/it/file-hash"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/file-hash.md",
        "it": "https://dev.eneawork.it/md/it/file-hash.md"
      },
      "category": "encode",
      "summary": {
        "en": "SHA-1, SHA-256, SHA-384 and SHA-512 checksums of a file.",
        "it": "Checksum SHA-1, SHA-256, SHA-384 e SHA-512 di un file."
      },
      "description": {
        "en": "Compute SHA-1, SHA-256, SHA-384 or SHA-512 checksums of a local file. Nothing is uploaded; hashing happens in your browser.",
        "it": "Calcola checksum SHA-1, SHA-256, SHA-384 o SHA-512 di un file locale. Nulla viene caricato; l'hash avviene nel browser."
      },
      "howTo": {
        "en": [
          "Choose a local file.",
          "Pick the hash algorithm.",
          "Copy the checksum and compare it with the published value."
        ],
        "it": [
          "Scegli un file locale.",
          "Seleziona l'algoritmo.",
          "Copia il checksum e confrontalo con il valore pubblicato."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "Is the file uploaded?",
            "a": "No. The browser reads the bytes locally and computes the digest in the tab."
          },
          {
            "q": "How large can the file be?",
            "a": "It depends on available browser memory because the file is read into an ArrayBuffer. Common multi-gigabyte files may be slow."
          },
          {
            "q": "Which algorithm should I use?",
            "a": "SHA-256 is the usual default. SHA-512 is fine too; SHA-1 is legacy only."
          }
        ],
        "it": [
          {
            "q": "Il file viene caricato?",
            "a": "No. Il browser legge i byte in locale e calcola il digest nella scheda."
          },
          {
            "q": "Quanto può essere grande il file?",
            "a": "Dipende dalla memoria del browser, perché il file viene letto in un ArrayBuffer. File da più gigabyte possono essere lenti."
          },
          {
            "q": "Quale algoritmo uso?",
            "a": "SHA-256 è il default usuale. SHA-512 va bene; SHA-1 solo per legacy."
          }
        ]
      },
      "related": [
        "hash-generator",
        "base64",
        "ulid"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "unicode-escape",
      "name": {
        "en": "Unicode Escape",
        "it": "Unicode Escape"
      },
      "url": {
        "en": "https://dev.eneawork.it/unicode-escape",
        "it": "https://dev.eneawork.it/it/unicode-escape"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/unicode-escape.md",
        "it": "https://dev.eneawork.it/md/it/unicode-escape.md"
      },
      "category": "encode",
      "summary": {
        "en": "Convert text to \\uXXXX escapes and back.",
        "it": "Converti testo in escape \\uXXXX e viceversa."
      },
      "description": {
        "en": "Escape text to JavaScript Unicode sequences or decode \\uXXXX, \\u{...} and \\xXX back to readable text. UTF-8 and astral characters supported.",
        "it": "Converti testo in sequenze Unicode JavaScript o decodifica \\uXXXX, \\u{...} e \\xXX in testo leggibile. Supporta UTF-8 e caratteri astrali."
      },
      "howTo": {
        "en": [
          "Choose escape or unescape.",
          "Pick non-ASCII only or every character.",
          "Copy the result or swap it back."
        ],
        "it": [
          "Scegli escape o unescape.",
          "Scegli solo non-ASCII oppure tutti i caratteri.",
          "Copia il risultato o inverti input e output."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "How are emoji handled?",
            "a": "Character pairs outside the BMP are written as two UTF-16 surrogate escapes in minimal mode, so the output is valid JavaScript."
          },
          {
            "q": "What is the difference between the scopes?",
            "a": "Non-ASCII escapes only characters outside the printable ASCII range; all escapes every character, including spaces and letters."
          },
          {
            "q": "Which escape syntax can it decode?",
            "a": "\\uXXXX, \\u{XXXXX}, \\xXX and the common \\n, \\r, \\t, \\\\ sequences."
          }
        ],
        "it": [
          {
            "q": "Come gestisce le emoji?",
            "a": "I caratteri fuori dal BMP diventano due escape surrogate UTF-16 in modalità minimale, così l'output è JavaScript valido."
          },
          {
            "q": "Differenza tra gli scope?",
            "a": "Non-ASCII escapa solo i caratteri fuori dall'ASCII stampabile; tutti escapa ogni carattere, spazi e lettere inclusi."
          },
          {
            "q": "Quali sintassi decodifica?",
            "a": "\\uXXXX, \\u{XXXXX}, \\xXX e le sequenze comuni \\n, \\r, \\t, \\\\."
          }
        ]
      },
      "related": [
        "html-entities",
        "url-encoder",
        "base64"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "chmod",
      "name": {
        "en": "Chmod Calculator",
        "it": "Calcolatore Chmod"
      },
      "url": {
        "en": "https://dev.eneawork.it/chmod",
        "it": "https://dev.eneawork.it/it/chmod"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/chmod.md",
        "it": "https://dev.eneawork.it/md/it/chmod.md"
      },
      "category": "systems",
      "summary": {
        "en": "Convert Unix permissions between octal, symbolic and command.",
        "it": "Converti permessi Unix tra ottale, simbolico e comando."
      },
      "description": {
        "en": "Build Unix file permissions with checkboxes or octal input. See rwx notation, symbolic form and the chmod command. Free and local.",
        "it": "Costruisci permessi Unix con checkbox o input ottale. Vedi notazione rwx, forma simbolica e comando chmod. Gratis e in locale."
      },
      "howTo": {
        "en": [
          "Type an octal mode or tick the permission boxes.",
          "Check the symbolic form and the special bits.",
          "Copy the chmod command."
        ],
        "it": [
          "Scrivi un modo ottale o spunta i permessi.",
          "Controlla forma simbolica e bit speciali.",
          "Copia il comando chmod."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "755 or 644?",
            "a": "755 gives the owner full access and everyone else read/execute — typical for directories and executables. 644 gives the owner write and everyone else read — typical for files."
          },
          {
            "q": "What do setuid, setgid and sticky do?",
            "a": "They change execution identity or deletion rules. Use them deliberately; they are security-sensitive."
          },
          {
            "q": "Does this handle directories?",
            "a": "The bits are the same. The leading character in the symbolic form is shown as - for a regular file."
          }
        ],
        "it": [
          {
            "q": "755 o 644?",
            "a": "755 dà pieno accesso al proprietario e lettura/esecuzione agli altri — tipico per directory ed eseguibili. 644 dà scrittura al proprietario e lettura agli altri — tipico per i file."
          },
          {
            "q": "Cosa fanno setuid, setgid e sticky?",
            "a": "Cambiano identità di esecuzione o regole di cancellazione. Usali consapevolmente: sono sensibili per la sicurezza."
          },
          {
            "q": "Gestisce le directory?",
            "a": "I bit sono gli stessi. Il carattere iniziale nella forma simbolica è mostrato come - per un file regolare."
          }
        ]
      },
      "related": [
        "cidr",
        "file-hash",
        "semver"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "cidr",
      "name": {
        "en": "CIDR Calculator",
        "it": "Calcolatore CIDR"
      },
      "url": {
        "en": "https://dev.eneawork.it/cidr",
        "it": "https://dev.eneawork.it/it/cidr"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/cidr.md",
        "it": "https://dev.eneawork.it/md/it/cidr.md"
      },
      "category": "systems",
      "summary": {
        "en": "Network, broadcast, host range and netmask for an IPv4 CIDR.",
        "it": "Network, broadcast, range host e netmask per un CIDR IPv4."
      },
      "description": {
        "en": "Calculate network, broadcast, first and last host, netmask, wildcard and usable hosts from an IPv4 CIDR. Free, private and in-browser.",
        "it": "Calcola network, broadcast, primo e ultimo host, netmask, wildcard e host utilizzabili da un CIDR IPv4. Gratis, privato e nel browser."
      },
      "howTo": {
        "en": [
          "Enter an IPv4 address with a prefix, such as 192.168.1.10/24.",
          "Read the network and host range.",
          "Copy any value you need."
        ],
        "it": [
          "Inserisci un indirizzo IPv4 con prefisso, ad esempio 192.168.1.10/24.",
          "Leggi network e range host.",
          "Copia i valori che ti servono."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "How are usable hosts calculated?",
            "a": "For /0 to /30 it is 2^(32-prefix) − 2. For /31 both addresses are shown as usable; /32 has one address."
          },
          {
            "q": "Does it support IPv6?",
            "a": "Not yet. This calculator is intentionally IPv4-only so the output stays unambiguous."
          },
          {
            "q": "What is the wildcard mask?",
            "a": "The bitwise inverse of the netmask. It is used by ACLs and some routing configuration."
          }
        ],
        "it": [
          {
            "q": "Come calcola gli host utilizzabili?",
            "a": "Da /0 a /30 è 2^(32-prefix) − 2. Per /31 entrambi gli indirizzi sono mostrati come utilizzabili; /32 ne ha uno."
          },
          {
            "q": "Supporta IPv6?",
            "a": "Non ancora. Il calcolatore è volutamente solo IPv4 per mantenere l'output senza ambiguità."
          },
          {
            "q": "Cos'è la wildcard mask?",
            "a": "L'inverso bit a bit della netmask. È usata da ACL e alcune configurazioni di routing."
          }
        ]
      },
      "related": [
        "chmod",
        "url-parser",
        "http-status"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "timezone-meeting",
      "name": {
        "en": "Timezone Meeting Planner",
        "it": "Planner fusi orari"
      },
      "url": {
        "en": "https://dev.eneawork.it/timezone-meeting",
        "it": "https://dev.eneawork.it/it/timezone-meeting"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/timezone-meeting.md",
        "it": "https://dev.eneawork.it/md/it/timezone-meeting.md"
      },
      "category": "web",
      "summary": {
        "en": "See one meeting time across 13 timezones.",
        "it": "Vedi un meeting su 13 fusi orari."
      },
      "description": {
        "en": "Pick a local date and time and compare it across 13 developer hubs. Working hours, night hours and DST handled by your browser.",
        "it": "Scegli data e ora locali e confrontale su 13 hub per developer. Orari di lavoro, notte e DST gestiti dal browser."
      },
      "howTo": {
        "en": [
          "Pick a date and time in your local timezone.",
          "Scan the 13 zones for the best overlap.",
          "Use the marked working-hours rows to choose a slot."
        ],
        "it": [
          "Scegli data e ora nel tuo fuso locale.",
          "Scorri i 13 fusi per trovare la sovrapposizione migliore.",
          "Usa le righe evidenziate per scegliere lo slot."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "Is daylight saving handled?",
            "a": "Yes. Each value is formatted by Intl with the IANA timezone database built into your browser."
          },
          {
            "q": "What counts as working hours?",
            "a": "09:00–17:59 local time. Night mode marks hours before 07:00 or from 22:00."
          },
          {
            "q": "Which timezone is the input in?",
            "a": "Your browser's local timezone. The result list shows the same instant everywhere."
          }
        ],
        "it": [
          {
            "q": "L'ora legale è gestita?",
            "a": "Sì. Ogni valore è formattato da Intl con il database IANA dei fusi integrato nel browser."
          },
          {
            "q": "Cosa conta come orario di lavoro?",
            "a": "09:00–17:59 ora locale. La modalità notte segna le ore prima delle 07:00 o dalle 22:00."
          },
          {
            "q": "In quale fuso è l'input?",
            "a": "Nel fuso locale del browser. La lista mostra lo stesso istante ovunque."
          }
        ]
      },
      "related": [
        "timestamp",
        "date-difference",
        "cron"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "date-difference",
      "name": {
        "en": "Date Difference",
        "it": "Differenza date"
      },
      "url": {
        "en": "https://dev.eneawork.it/date-difference",
        "it": "https://dev.eneawork.it/it/date-difference"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/date-difference.md",
        "it": "https://dev.eneawork.it/md/it/date-difference.md"
      },
      "category": "web",
      "summary": {
        "en": "Duration between two dates in days, hours, minutes and seconds.",
        "it": "Durata tra due date in giorni, ore, minuti e secondi."
      },
      "description": {
        "en": "Calculate the exact duration between two dates in days, hours, minutes, seconds and weeks. Runs locally, no uploads.",
        "it": "Calcola la durata esatta tra due date in giorni, ore, minuti, secondi e settimane. In locale, senza upload."
      },
      "howTo": {
        "en": [
          "Pick the start and end date.",
          "Read the breakdown or total units.",
          "Copy any value with its button."
        ],
        "it": [
          "Scegli data di inizio e fine.",
          "Leggi il dettaglio o le unità totali.",
          "Copia i valori che ti servono."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "How is daylight saving handled?",
            "a": "The inputs are local date-times, so the elapsed duration follows the browser's timezone rules."
          },
          {
            "q": "Can I get a negative result?",
            "a": "Yes. If the end is before the start, the human duration is shown with a minus sign."
          },
          {
            "q": "Does it count business days?",
            "a": "No. It reports calendar duration; business-day counting depends on holidays and locale."
          }
        ],
        "it": [
          {
            "q": "Come gestisce l'ora legale?",
            "a": "Gli input sono date-ora locali, quindi la durata segue le regole del fuso del browser."
          },
          {
            "q": "Posso ottenere un risultato negativo?",
            "a": "Sì. Se la fine precede l'inizio, la durata umana è mostrata con il segno meno."
          },
          {
            "q": "Conta i giorni lavorativi?",
            "a": "No. Riporta la durata di calendario; il conteggio lavorativo dipende da festivi e locale."
          }
        ]
      },
      "related": [
        "timezone-meeting",
        "timestamp",
        "cron"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "css-units",
      "name": {
        "en": "CSS Unit Converter",
        "it": "Convertitore unità CSS"
      },
      "url": {
        "en": "https://dev.eneawork.it/css-units",
        "it": "https://dev.eneawork.it/it/css-units"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/css-units.md",
        "it": "https://dev.eneawork.it/md/it/css-units.md"
      },
      "category": "web",
      "summary": {
        "en": "Convert px, rem, em, pt and % using a base font size.",
        "it": "Converti px, rem, em, pt e % con una base font."
      },
      "description": {
        "en": "Convert CSS lengths between px, rem, em, pt and percent with a configurable base font size. Instant and private.",
        "it": "Converti lunghezze CSS tra px, rem, em, pt e percentuale con base font configurabile. Istantaneo e privato."
      },
      "howTo": {
        "en": [
          "Enter a value and choose its unit.",
          "Set the base font size if it is not 16px.",
          "Copy the unit you need."
        ],
        "it": [
          "Inserisci un valore e scegli l'unità.",
          "Imposta la base font se non è 16px.",
          "Copia l'unità che ti serve."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "What is the difference between em and rem?",
            "a": "rem is relative to the root font size. em is relative to the parent element's font size, which this tool approximates with the same base."
          },
          {
            "q": "How is percentage calculated?",
            "a": "For font sizes, 100% equals the base font size; the converter uses that assumption."
          },
          {
            "q": "How many points are in a pixel?",
            "a": "1pt = 4/3px, so 12pt = 16px."
          }
        ],
        "it": [
          {
            "q": "Differenza tra em e rem?",
            "a": "rem è relativo alla root font. em è relativo al font del parent, che qui approssimiamo con la stessa base."
          },
          {
            "q": "Come calcola la percentuale?",
            "a": "Per i font, 100% equivale alla base font; il convertitore usa questa assunzione."
          },
          {
            "q": "Quanti punti ci sono in un pixel?",
            "a": "1pt = 4/3px, quindi 12pt = 16px."
          }
        ]
      },
      "related": [
        "color-converter",
        "semver",
        "regex"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "semver",
      "name": {
        "en": "SemVer Tool",
        "it": "Tool SemVer"
      },
      "url": {
        "en": "https://dev.eneawork.it/semver",
        "it": "https://dev.eneawork.it/it/semver"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/semver.md",
        "it": "https://dev.eneawork.it/md/it/semver.md"
      },
      "category": "systems",
      "summary": {
        "en": "Compare versions and calculate the next major, minor or patch.",
        "it": "Confronta versioni e calcola major, minor o patch successivi."
      },
      "description": {
        "en": "Validate, compare and bump Semantic Versioning values. See next major, minor and patch versions instantly. No signup.",
        "it": "Valida, confronta e incrementa versioni Semantic Versioning. Vedi subito major, minor e patch successivi. Nessuna registrazione."
      },
      "howTo": {
        "en": [
          "Enter a version.",
          "Optionally enter another version to compare.",
          "Copy the comparison or a next version."
        ],
        "it": [
          "Inserisci una versione.",
          "Opzionalmente inserisci un'altra versione da confrontare.",
          "Copia il confronto o una versione successiva."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "How is prerelease precedence calculated?",
            "a": "SemVer compares dot-separated identifiers: numeric identifiers numerically, text identifiers lexically, and a prerelease is lower than the release."
          },
          {
            "q": "Are leading zeros allowed?",
            "a": "No. Major, minor and patch must be non-negative integers without leading zeros."
          },
          {
            "q": "Is build metadata compared?",
            "a": "No. Build metadata after + is ignored for precedence."
          }
        ],
        "it": [
          {
            "q": "Come calcola la precedenza delle prerelease?",
            "a": "SemVer confronta gli identificatori separati da punti: numerici in modo numerico, testuali in modo lessicale, e una prerelease è inferiore alla release."
          },
          {
            "q": "Sono ammessi zeri iniziali?",
            "a": "No. Major, minor e patch devono essere interi non negativi senza zeri iniziali."
          },
          {
            "q": "I metadati di build contano?",
            "a": "No. I metadati dopo + sono ignorati nella precedenza."
          }
        ]
      },
      "related": [
        "chmod",
        "line-tools",
        "css-units"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "text-stats",
      "name": {
        "en": "Text Statistics",
        "it": "Statistiche testo"
      },
      "url": {
        "en": "https://dev.eneawork.it/text-stats",
        "it": "https://dev.eneawork.it/it/text-stats"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/text-stats.md",
        "it": "https://dev.eneawork.it/md/it/text-stats.md"
      },
      "category": "text",
      "summary": {
        "en": "Word count, characters, sentences, reading time and top words.",
        "it": "Conteggio parole, caratteri, frasi, tempo di lettura e parole frequenti."
      },
      "description": {
        "en": "Count words, characters, sentences, paragraphs and lines. Estimate reading and speaking time, and see the most frequent words. Live and local.",
        "it": "Conta parole, caratteri, frasi, paragrafi e righe. Stima tempo di lettura e parlato, e mostra le parole più frequenti. Live e in locale."
      },
      "howTo": {
        "en": [
          "Paste or type your text.",
          "Read the counts and time estimates.",
          "Use the top-word list to spot repetitions."
        ],
        "it": [
          "Incolla o scrivi il testo.",
          "Leggi conteggi e stime di tempo.",
          "Usa la lista parole per notare ripetizioni."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "How is reading time estimated?",
            "a": "At 200 words per minute. Speaking time uses 130 words per minute."
          },
          {
            "q": "Are stopwords excluded from the top list?",
            "a": "Yes, common English and Italian function words are ignored to make repetitions visible."
          },
          {
            "q": "How are characters counted?",
            "a": "Characters are counted as Unicode code points, so emoji count once rather than as two UTF-16 units."
          }
        ],
        "it": [
          {
            "q": "Come stima il tempo di lettura?",
            "a": "A 200 parole al minuto. Il parlato usa 130 parole al minuto."
          },
          {
            "q": "Le stopword sono escluse?",
            "a": "Sì, le parole funzionali comuni inglesi e italiane sono ignorate per rendere visibili le ripetizioni."
          },
          {
            "q": "Come conta i caratteri?",
            "a": "Come code point Unicode, quindi una emoji conta una volta e non due unità UTF-16."
          }
        ]
      },
      "related": [
        "line-tools",
        "lorem-ipsum",
        "slug"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "line-tools",
      "name": {
        "en": "Line Tools",
        "it": "Tool per righe"
      },
      "url": {
        "en": "https://dev.eneawork.it/line-tools",
        "it": "https://dev.eneawork.it/it/line-tools"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/line-tools.md",
        "it": "https://dev.eneawork.it/md/it/line-tools.md"
      },
      "category": "text",
      "summary": {
        "en": "Sort, deduplicate, trim, reverse or number lines.",
        "it": "Ordina, deduplica, taglia, inverti o numera righe."
      },
      "description": {
        "en": "Clean up lists line by line: sort, remove duplicates or empty lines, trim, reverse, shuffle and number. Fast and private.",
        "it": "Pulisci liste riga per riga: ordina, rimuovi duplicati o righe vuote, taglia spazi, inverti, mischia e numera. Veloce e privato."
      },
      "howTo": {
        "en": [
          "Paste one item per line.",
          "Choose an operation.",
          "Copy the cleaned result."
        ],
        "it": [
          "Incolla un elemento per riga.",
          "Scegli un'operazione.",
          "Copia il risultato pulito."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "Is deduplication case-sensitive?",
            "a": "Yes. “Apple” and “apple” are kept as distinct lines."
          },
          {
            "q": "Does sorting respect numbers?",
            "a": "It uses locale-aware string sorting, so 10 may come before 2. Use a numeric sort when that matters."
          },
          {
            "q": "Can I chain operations?",
            "a": "Choose one operation, copy or use the result, then apply another pass."
          }
        ],
        "it": [
          {
            "q": "La deduplicazione è case-sensitive?",
            "a": "Sì. “Apple” e “apple” restano righe distinte."
          },
          {
            "q": "L'ordinamento rispetta i numeri?",
            "a": "Usa l'ordinamento stringa locale, quindi 10 può precedere 2. Serve un ordinamento numerico quando conta."
          },
          {
            "q": "Posso concatenare operazioni?",
            "a": "Scegli un'operazione, copia o usa il risultato, poi applica un altro passaggio."
          }
        ]
      },
      "related": [
        "text-stats",
        "text-diff",
        "json-diff"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    },
    {
      "id": "slug",
      "name": {
        "en": "Slug Generator",
        "it": "Generatore slug"
      },
      "url": {
        "en": "https://dev.eneawork.it/slug",
        "it": "https://dev.eneawork.it/it/slug"
      },
      "markdown": {
        "en": "https://dev.eneawork.it/md/slug.md",
        "it": "https://dev.eneawork.it/md/it/slug.md"
      },
      "category": "text",
      "summary": {
        "en": "Turn a title into a clean, URL-safe slug.",
        "it": "Trasforma un titolo in uno slug pulito per URL."
      },
      "description": {
        "en": "Generate clean URL slugs from titles. Removes accents, punctuation and emoji, with - _ or . separators. Free and local.",
        "it": "Genera slug puliti da titoli. Rimuove accenti, punteggiatura ed emoji, con separatore - _ o . Gratis e in locale."
      },
      "howTo": {
        "en": [
          "Paste a title or phrase.",
          "Choose the separator and case.",
          "Copy the slug."
        ],
        "it": [
          "Incolla un titolo o una frase.",
          "Scegli separatore e maiuscole.",
          "Copia lo slug."
        ]
      },
      "faq": {
        "en": [
          {
            "q": "What happens to accented letters?",
            "a": "They are normalised to their ASCII base: caffè becomes caffe."
          },
          {
            "q": "What about Chinese or Arabic text?",
            "a": "This generator keeps Latin alphanumerics; scripts without a simple ASCII transliteration are stripped. Use a locale-aware slugger for those."
          },
          {
            "q": "Should I remove stopwords from slugs?",
            "a": "Only when the slug stays readable. Short, meaningful slugs usually beat artificially shortened ones."
          }
        ],
        "it": [
          {
            "q": "Cosa succede alle lettere accentate?",
            "a": "Sono normalizzate alla base ASCII: caffè diventa caffe."
          },
          {
            "q": "E per cinese o arabo?",
            "a": "Questo generatore mantiene alfanumerici latini; le scritture senza semplice traslitterazione ASCII vengono rimosse. Per quelle serve uno slugger locale."
          },
          {
            "q": "Devo togliere le stopword dagli slug?",
            "a": "Solo se lo slug resta leggibile. Slug brevi e significativi di solito battono quelli tagliati artificialmente."
          }
        ]
      },
      "related": [
        "case-converter",
        "text-stats",
        "html-entities"
      ],
      "privacy": "client-side",
      "offline": true,
      "price": "0 EUR"
    }
  ]
}