{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "name": "Uttir",
  "version": "1.0.0",
  "lastUpdated": "2026-08-21",
  "url": "https://uttir.com",
  "description": "Uttir tool catalog. RFC 9727-style API catalog for AI agents.",
  "termsOfService": "https://uttir.com/terms",
  "privacyPolicy": "https://uttir.com/privacy",
  "stats": {
    "tools": 156,
    "categories": 18
  },
  "capabilities": {
    "read": "All tools and skill docs are readable by any agent. No authentication required.",
    "invocation": "Uttir is browser-only by design. Tools cannot be invoked by agents programmatically; they are intended for human-in-the-loop use via the URL.",
    "contentNegotiation": "Every tool page is available as text/markdown at {slug}.md and as a structured skill doc at /.well-known/skills/{slug}.md."
  },
  "standards": {
    "llmsTxt": "https://llmstxt.org",
    "linkHeader": "RFC 8288",
    "contentSignal": "contentsignals.org"
  },
  "categories": [
    {
      "slug": "developer-tools",
      "name": "Developer Tools",
      "shortDescription": "Format, validate, decode, and generate the things developers deal with every day.",
      "url": "https://uttir.com/developer-tools",
      "toolCount": 58
    },
    {
      "slug": "text-tools",
      "name": "Text Tools",
      "shortDescription": "Count, convert, compare, and clean up text instantly.",
      "url": "https://uttir.com/text-tools",
      "toolCount": 34
    },
    {
      "slug": "calculators",
      "name": "Calculators",
      "shortDescription": "Quick, accurate calculators for percentages, dates, ages, and finance.",
      "url": "https://uttir.com/calculators",
      "toolCount": 25
    },
    {
      "slug": "color-tools",
      "name": "Color Tools",
      "shortDescription": "Pick colors, convert formats, and check accessibility.",
      "url": "https://uttir.com/color-tools",
      "toolCount": 10
    },
    {
      "slug": "image-tools",
      "name": "Image Tools",
      "shortDescription": "Convert, compress, and resize images without uploading them.",
      "url": "https://uttir.com/image-tools",
      "toolCount": 21
    },
    {
      "slug": "pdf-tools",
      "name": "PDF Tools",
      "shortDescription": "Merge, split, and convert PDFs locally in your browser.",
      "url": "https://uttir.com/pdf-tools",
      "toolCount": 8
    },
    {
      "slug": "converters",
      "name": "Converters",
      "shortDescription": "Convert between formats, units, and standards.",
      "url": "https://uttir.com/converters",
      "toolCount": 19
    },
    {
      "slug": "seo-tools",
      "name": "SEO Tools",
      "shortDescription": "Generate meta tags, sitemaps, robots.txt, and UTM links.",
      "url": "https://uttir.com/seo-tools",
      "toolCount": 11
    },
    {
      "slug": "file-tools",
      "name": "File Tools",
      "shortDescription": "Work with files directly in your browser.",
      "url": "https://uttir.com/file-tools",
      "toolCount": 3
    },
    {
      "slug": "generators",
      "name": "Generators",
      "shortDescription": "Generate passwords, IDs, dummy data, and more.",
      "url": "https://uttir.com/generators",
      "toolCount": 23
    },
    {
      "slug": "date-time-tools",
      "name": "Date & Time Tools",
      "shortDescription": "Work with dates, times, durations, and time zones.",
      "url": "https://uttir.com/date-time-tools",
      "toolCount": 8
    },
    {
      "slug": "encoding-tools",
      "name": "Encoding Tools",
      "shortDescription": "Encode and decode Base64, URLs, HTML entities, and more.",
      "url": "https://uttir.com/encoding-tools",
      "toolCount": 9
    },
    {
      "slug": "data-tools",
      "name": "Data Tools",
      "shortDescription": "Transform CSV, JSON, XML, and YAML.",
      "url": "https://uttir.com/data-tools",
      "toolCount": 10
    },
    {
      "slug": "web-tools",
      "name": "Web Tools",
      "shortDescription": "Utilities for building and testing websites.",
      "url": "https://uttir.com/web-tools",
      "toolCount": 18
    },
    {
      "slug": "media-tools",
      "name": "Media Tools",
      "shortDescription": "Work with audio and video in your browser.",
      "url": "https://uttir.com/media-tools",
      "toolCount": 2
    },
    {
      "slug": "security-tools",
      "name": "Security Tools",
      "shortDescription": "Check, generate, and decode security primitives in your browser.",
      "url": "https://uttir.com/security-tools",
      "toolCount": 7
    },
    {
      "slug": "network-tools",
      "name": "Network Tools",
      "shortDescription": "Look up IP, DNS, WHOIS, and HTTP headers from your browser.",
      "url": "https://uttir.com/network-tools",
      "toolCount": 6
    },
    {
      "slug": "math-tools",
      "name": "Math Tools",
      "shortDescription": "Statistics, equations, sequences, and number theory.",
      "url": "https://uttir.com/math-tools",
      "toolCount": 14
    }
  ],
  "tools": [
    {
      "slug": "json-formatter",
      "name": "JSON Formatter",
      "shortDescription": "Format, beautify, and validate JSON with adjustable indentation — instantly in your browser.",
      "url": "https://uttir.com/json-formatter",
      "categories": [
        "developer-tools",
        "data-tools"
      ],
      "keywords": [
        "json formatter",
        "json beautifier",
        "format json",
        "pretty print json",
        "json pretty printer",
        "online json formatter"
      ],
      "useCases": [
        "Format and beautify minified JSON from an API response",
        "Pretty-print JSON for a config file or a code review",
        "Validate JSON syntax while formatting it",
        "Convert a one-line JSON blob to indented, readable form",
        "Standardize indentation across a project (2-space, 4-space, tabs)"
      ],
      "userIntents": [
        "How do I json formatter?",
        "JSON Formatter online",
        "Free json formatter no signup",
        "JSON Formatter that doesn't upload my data",
        "JSON Formatter in my browser",
        "Best json beautifier compared"
      ],
      "privacy": "Your JSON is formatted entirely in your browser and never uploaded anywhere.",
      "related": [
        "json-validator",
        "csv-json-converter",
        "jwt-decoder",
        "sql-formatter",
        "json-ld-generator"
      ],
      "inputs": "A JSON document or fragment",
      "outputs": "A formatted (pretty-printed) version of the input",
      "howTo": [
        {
          "title": "Paste your JSON",
          "detail": "Drop minified or messy JSON into the input panel."
        },
        {
          "title": "Pick an indentation style",
          "detail": "Choose 2 spaces, 4 spaces, or tabs to match your project’s style."
        },
        {
          "title": "Read or copy the result",
          "detail": "The formatted output appears instantly. Use Copy to grab it."
        }
      ],
      "examples": [
        {
          "title": "Minified to readable",
          "description": "A single-line API response becomes structured, readable JSON.",
          "input": "{\"id\":42,\"name\":\"Uttir\",\"tags\":[\"free\",\"fast\"]}",
          "output": "{\n  \"id\": 42,\n  \"name\": \"Uttir\",\n  \"tags\": [\n    \"free\",\n    \"fast\"\n  ]\n}"
        }
      ],
      "faq": [
        {
          "question": "Does formatting change my data?",
          "answer": "No. Formatting only changes whitespace. Keys, values, and order are preserved exactly as parsed."
        },
        {
          "question": "Why is my JSON invalid?",
          "answer": "Common causes are trailing commas, single quotes instead of double quotes, unquoted keys, or comments. The tool reports the line and column of the first problem it finds."
        },
        {
          "question": "Is my data uploaded to a server?",
          "answer": "No. Parsing and formatting run entirely in your browser using its native JSON engine."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/json-formatter.md",
      "markdownDoc": "https://uttir.com/json-formatter.md"
    },
    {
      "slug": "json-validator",
      "name": "JSON Validator",
      "shortDescription": "Check whether your JSON is valid and find the exact line and column of any syntax error.",
      "url": "https://uttir.com/json-validator",
      "categories": [
        "developer-tools",
        "data-tools"
      ],
      "keywords": [
        "json validator",
        "validate json",
        "json syntax check",
        "json lint",
        "check json online",
        "json error finder"
      ],
      "useCases": [
        "Check whether a JSON document is syntactically valid",
        "Find the exact line and column of a JSON syntax error",
        "Validate JSON before deploying an API or config file",
        "Validate a JSON payload from a third-party API"
      ],
      "userIntents": [
        "How do I json validator?",
        "JSON Validator online",
        "Free json validator no signup",
        "JSON Validator that doesn't upload my data",
        "JSON Validator in my browser",
        "Best validate json compared"
      ],
      "privacy": "Validation runs locally in your browser. Your JSON is never transmitted or stored.",
      "related": [
        "json-formatter",
        "csv-json-converter",
        "jwt-decoder",
        "json-ld-generator"
      ],
      "inputs": "A JSON document or fragment",
      "outputs": "A check result (pass/fail, length, ratio, etc.)",
      "howTo": [
        {
          "title": "Paste your JSON",
          "detail": "The check runs automatically as you type or paste."
        },
        {
          "title": "Read the verdict",
          "detail": "A green banner means valid; a red banner shows the error location."
        },
        {
          "title": "Fix and re-check",
          "detail": "Correct the reported line and column, and the verdict updates instantly."
        }
      ],
      "examples": [
        {
          "title": "Trailing comma",
          "description": "A trailing comma after the last property is the most common JSON mistake.",
          "input": "{\n  \"a\": 1,\n}",
          "output": "Invalid — expected a property name after the comma (line 3)."
        }
      ],
      "faq": [
        {
          "question": "What makes JSON invalid?",
          "answer": "Typical issues: trailing commas, single quotes, unquoted keys, comments, NaN/Infinity, or cut-off documents. JSON is a strict subset of JavaScript object syntax."
        },
        {
          "question": "Can it validate large files?",
          "answer": "Yes. Parsing runs natively in your browser, so even multi-megabyte documents validate quickly on modern hardware."
        },
        {
          "question": "Is my JSON uploaded to a server?",
          "answer": "No. Validation happens in your browser using the browser's built-in parser. The text never leaves your device."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/json-validator.md",
      "markdownDoc": "https://uttir.com/json-validator.md"
    },
    {
      "slug": "uuid-generator",
      "name": "UUID Generator",
      "shortDescription": "Generate cryptographically random UUID v4 identifiers, one or a thousand at a time.",
      "url": "https://uttir.com/uuid-generator",
      "categories": [
        "developer-tools",
        "generators"
      ],
      "keywords": [
        "uuid generator",
        "guid generator",
        "uuid v4",
        "random uuid",
        "generate uuid online",
        "unique id generator"
      ],
      "useCases": [
        "Generate a UUID v4 (random)",
        "Generate a UUID v7 (time-sortable, 2026 default)",
        "Generate many UUIDs at once (1, 10, 100, 1000)",
        "Create a unique identifier for a database row or record"
      ],
      "userIntents": [
        "How do I uuid generator?",
        "UUID Generator online",
        "Free uuid generator no signup",
        "UUID Generator that doesn't upload my data",
        "UUID Generator in my browser",
        "Best guid generator compared"
      ],
      "privacy": "UUIDs are generated locally with your browser’s crypto API. Nothing is sent anywhere.",
      "related": [
        "base64-encoder",
        "hash-generator",
        "unix-timestamp-converter"
      ],
      "inputs": "A date or time value",
      "outputs": "A generated value (UUID, password, QR code, palette, etc.)",
      "howTo": [
        {
          "title": "Choose a count",
          "detail": "Any number from 1 to 1,000."
        },
        {
          "title": "Set the format",
          "detail": "Toggle uppercase letters or remove hyphens for compact IDs."
        },
        {
          "title": "Generate and copy",
          "detail": "Press Generate for a fresh batch; Copy all puts every UUID on your clipboard."
        }
      ],
      "examples": [
        {
          "title": "Standard format",
          "description": "The canonical 8-4-4-4-12 hexadecimal layout.",
          "output": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
        },
        {
          "title": "Compact uppercase",
          "description": "No hyphens, uppercase — common in legacy systems.",
          "output": "F47AC10B58CC4372A5670E02B2C3D479"
        }
      ],
      "faq": [
        {
          "question": "Are these UUIDs truly random?",
          "answer": "Yes. They come from crypto.randomUUID, a cryptographically secure generator provided by your browser, not from Math.random."
        },
        {
          "question": "Can two generated UUIDs collide?",
          "answer": "The probability is astronomically small — generating a billion UUIDs per second for a year would still make a collision vanishingly unlikely."
        },
        {
          "question": "Is the UUID generated in a secure way?",
          "answer": "Yes. The browser uses the platform's cryptographically secure random source. Generated UUIDs are unique enough for database primary keys, request IDs, and identifiers you do not want to guess."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/uuid-generator.md",
      "markdownDoc": "https://uttir.com/uuid-generator.md"
    },
    {
      "slug": "email-validator",
      "name": "Email Validator",
      "shortDescription": "Check any email address for format errors, common typos, disposable providers, and role addresses — instantly in your browser.",
      "url": "https://uttir.com/email-validator",
      "categories": [
        "developer-tools",
        "text-tools"
      ],
      "keywords": [
        "email validator",
        "email checker",
        "validate email",
        "email verification",
        "check email address",
        "is this email valid",
        "email format checker",
        "disposable email check",
        "role email check"
      ],
      "useCases": [
        "Use for email validator",
        "Use for email checker",
        "Use for validate email",
        "Use for email verification",
        "Use for check email address"
      ],
      "userIntents": [
        "How do I email validator?",
        "Email Validator online",
        "Free email validator no signup",
        "Email Validator that doesn't upload my data",
        "Email Validator in my browser",
        "Best email checker compared"
      ],
      "privacy": "The address you check is processed entirely in your browser. It is never sent to a server, logged, or stored.",
      "related": [
        "regex-tester",
        "url-encoder",
        "password-generator"
      ],
      "inputs": "An email address",
      "outputs": "A formatted (pretty-printed) version of the input",
      "howTo": [
        {
          "title": "Paste an email address",
          "detail": "Any address you want to check — a sign-up form input, a contact sheet row, or a pasted list."
        },
        {
          "title": "Read the verdict",
          "detail": "Valid, Risky, or Invalid — plus a short list of every issue found."
        },
        {
          "title": "Accept the suggestion",
          "detail": "If a typo was detected, copy the corrected address with one click."
        }
      ],
      "examples": [
        {
          "title": "A common typo",
          "description": "A one-letter domain typo (gmial instead of gmail).",
          "input": "jane@gmial.com",
          "output": "Risky · Possible typo: did you mean jane@gmail.com?"
        },
        {
          "title": "A disposable address",
          "description": "A throwaway email service that should not be used for important signups.",
          "input": "foo@mailinator.com",
          "output": "Risky · Domain is a known disposable / throwaway email service."
        },
        {
          "title": "A role address",
          "description": "A team address that no specific person reads.",
          "input": "support@example.com",
          "output": "Risky · \"support\" is a role address — it goes to a team, not a person."
        }
      ],
      "faq": [
        {
          "question": "Does this tool send my email to a server?",
          "answer": "No. The check is fully offline: format, length, typo detection, disposable / role / free-provider flags. Your email never leaves the browser."
        },
        {
          "question": "Can this verify that an email actually delivers?",
          "answer": "No — that requires contacting the mail server, which is a network operation. For a delivery check, use DNS Lookup against the domain and look for MX records. A domain with no MX records will not receive email."
        },
        {
          "question": "Why are role addresses flagged?",
          "answer": "Addresses like admin@, support@, and info@ go to a shared inbox, not a specific person. They are fine for general contact forms, but not ideal for one-to-one communication or account-bound logins."
        }
      ],
      "addedAt": "2026-08-17",
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/email-validator.md",
      "markdownDoc": "https://uttir.com/email-validator.md"
    },
    {
      "slug": "base64-encoder",
      "name": "Base64 Encoder",
      "shortDescription": "Encode any text — including emoji and non-Latin scripts — into standard Base64.",
      "url": "https://uttir.com/base64-encoder",
      "categories": [
        "developer-tools",
        "encoding-tools"
      ],
      "keywords": [
        "base64 encode",
        "base64 encoder",
        "text to base64",
        "encode base64 online",
        "string to base64",
        "utf8 base64"
      ],
      "useCases": [
        "Encode text to Base64 for embedding in CSS, HTML, or data URLs",
        "Encode UTF-8 strings safely (handles emojis and non-ASCII)",
        "Convert a string for transport over an API that expects Base64",
        "Generate a data URL for a small inline image or icon"
      ],
      "userIntents": [
        "How do I base64 encode?",
        "Base64 Encoder online",
        "Free base64 encode no signup",
        "Base64 Encoder that doesn't upload my data",
        "Base64 Encoder in my browser",
        "Best base64 encoder compared"
      ],
      "privacy": "Encoding happens locally in your browser. Your text is never uploaded.",
      "related": [
        "base64-decoder",
        "url-encoder"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "An encoded string (Base64, URL, HTML entity, etc.)",
      "howTo": [
        {
          "title": "Type or paste text",
          "detail": "Any Unicode text works, including emoji."
        },
        {
          "title": "Copy the output",
          "detail": "The Base64 string updates live; use Copy to grab it."
        }
      ],
      "examples": [
        {
          "title": "Plain ASCII",
          "description": "The classic example.",
          "input": "hello world",
          "output": "aGVsbG8gd29ybGQ="
        },
        {
          "title": "Unicode",
          "description": "UTF-8 bytes are encoded, not raw code units.",
          "input": "✓ ok",
          "output": "4pyTIG9r"
        }
      ],
      "faq": [
        {
          "question": "Is Base64 encryption?",
          "answer": "No. Base64 is an encoding, not encryption — anyone can decode it. It exists to transport binary data through text-only channels safely."
        },
        {
          "question": "Why does the output end with \"=\"?",
          "answer": "Padding brings the output length to a multiple of four characters. One or two \"=\" signs are added depending on the input length."
        },
        {
          "question": "Is Base64 encryption?",
          "answer": "No. Base64 is an encoding, not encryption — anyone can decode it in one step. It is for transmitting binary data over text-only channels, not for hiding data."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/base64-encoder.md",
      "markdownDoc": "https://uttir.com/base64-encoder.md"
    },
    {
      "slug": "base64-decoder",
      "name": "Base64 Decoder",
      "shortDescription": "Decode Base64 back into readable text, with clear errors for malformed input.",
      "url": "https://uttir.com/base64-decoder",
      "categories": [
        "developer-tools",
        "encoding-tools"
      ],
      "keywords": [
        "base64 decode",
        "base64 decoder",
        "base64 to text",
        "decode base64 online",
        "base64 convert"
      ],
      "useCases": [
        "Decode a Base64 string back to plain text",
        "Decode a data URL (data:image/png;base64,…) to inspect its content",
        "Decode UTF-8 Base64 (handles emojis and non-ASCII)",
        "Verify a Base64-encoded JWT or token payload"
      ],
      "userIntents": [
        "How do I base64 decode?",
        "Base64 Decoder online",
        "Free base64 decode no signup",
        "Base64 Decoder that doesn't upload my data",
        "Base64 Decoder in my browser",
        "Best base64 decoder compared"
      ],
      "privacy": "Decoding happens locally in your browser. Your data is never uploaded.",
      "related": [
        "base64-encoder",
        "jwt-decoder"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A decoded string (Base64, URL, HTML entity, JWT, etc.)",
      "howTo": [
        {
          "title": "Paste Base64",
          "detail": "Whitespace-free standard Base64 with optional = padding."
        },
        {
          "title": "Read or copy the result",
          "detail": "The decoded text appears live on the right."
        }
      ],
      "examples": [
        {
          "title": "Round trip",
          "description": "Decoding the encoder’s example returns the original text.",
          "input": "aGVsbG8gd29ybGQ=",
          "output": "hello world"
        }
      ],
      "faq": [
        {
          "question": "Why do I get an error about padding?",
          "answer": "Standard Base64 length must be a multiple of four characters, padded with \"=\" if needed. A truncated or hand-edited string usually fails this check."
        },
        {
          "question": "Can it decode URL-safe Base64?",
          "answer": "This tool expects the standard alphabet. URL-safe variants use \"-\" and \"_\" instead of \"+\" and \"/\"; replace those two characters before decoding."
        },
        {
          "question": "What if the input is not valid Base64?",
          "answer": "The tool reports the position of the first invalid character. Fix that, then re-decode. Common issues are missing padding (=) at the end and characters outside the Base64 alphabet."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/base64-decoder.md",
      "markdownDoc": "https://uttir.com/base64-decoder.md"
    },
    {
      "slug": "url-encoder",
      "name": "URL Encoder",
      "shortDescription": "Percent-encode text for safe use in URLs — as a query value or a full URL.",
      "url": "https://uttir.com/url-encoder",
      "categories": [
        "developer-tools",
        "encoding-tools"
      ],
      "keywords": [
        "url encode",
        "url encoder",
        "percent encoding",
        "encode url online",
        "urlencode",
        "escape url"
      ],
      "useCases": [
        "Percent-encode a URL for use in a query string",
        "Encode special characters in a URL path or fragment",
        "Encode a URL parameter value that contains spaces or symbols",
        "Round-trip encode/decode for debugging URL handling"
      ],
      "userIntents": [
        "How do I url encode?",
        "URL Encoder online",
        "Free url encode no signup",
        "URL Encoder that doesn't upload my data",
        "URL Encoder in my browser",
        "Best url encoder compared"
      ],
      "privacy": "Encoding runs locally in your browser. Nothing is uploaded.",
      "related": [
        "url-decoder",
        "base64-encoder",
        "utm-builder"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "An encoded string (Base64, URL, HTML entity, etc.)",
      "howTo": [
        {
          "title": "Pick a mode",
          "detail": "Component for a parameter value; full URL for an entire address."
        },
        {
          "title": "Paste your text",
          "detail": "The encoded output updates as you type."
        },
        {
          "title": "Copy the result",
          "detail": "Use Copy to place the encoded string on your clipboard."
        }
      ],
      "examples": [
        {
          "title": "Query value",
          "description": "Reserved characters are encoded in component mode.",
          "input": "a b&c=d",
          "output": "a%20b%26c%3Dd"
        },
        {
          "title": "Full URL",
          "description": "Structure is preserved; only unsafe characters are encoded.",
          "input": "https://example.com/search?q=café & more",
          "output": "https://example.com/search?q=caf%C3%A9%20&%20more"
        }
      ],
      "faq": [
        {
          "question": "What is the difference between the two modes?",
          "answer": "Component mode encodes every reserved character (&, =, ?, /, :), suitable for a single value. Full-URL mode leaves those intact so the URL still works as a URL."
        },
        {
          "question": "Is a space \"%20\" or \"+\"?",
          "answer": "This tool uses %20, the standard percent-encoding. The \"+\" convention comes from HTML form submissions (application/x-www-form-urlencoded) and is a different format."
        },
        {
          "question": "When do I need to URL-encode?",
          "answer": "Any time a value goes into a URL as a query parameter or path segment, and contains reserved characters (space, &, ?, #, /, +, etc.). Modern frameworks usually encode for you; this tool is for debugging and for hand-built URLs."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/url-encoder.md",
      "markdownDoc": "https://uttir.com/url-encoder.md"
    },
    {
      "slug": "url-decoder",
      "name": "URL Decoder",
      "shortDescription": "Decode percent-encoded URLs and query strings back into readable text.",
      "url": "https://uttir.com/url-decoder",
      "categories": [
        "developer-tools",
        "encoding-tools"
      ],
      "keywords": [
        "url decode",
        "url decoder",
        "decode percent encoding",
        "decode url online",
        "unescape url"
      ],
      "useCases": [
        "Use for url decode",
        "Use for url decoder",
        "Use for decode percent encoding",
        "Use for decode url online",
        "Use for unescape url"
      ],
      "userIntents": [
        "How do I url decode?",
        "URL Decoder online",
        "Free url decode no signup",
        "URL Decoder that doesn't upload my data",
        "URL Decoder in my browser",
        "Best url decoder compared"
      ],
      "privacy": "Decoding runs locally in your browser. Nothing is uploaded.",
      "related": [
        "url-encoder",
        "base64-decoder"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "An encoded string (Base64, URL, HTML entity, etc.)",
      "howTo": [
        {
          "title": "Paste encoded text",
          "detail": "Any percent-encoded string or full URL."
        },
        {
          "title": "Read or copy the result",
          "detail": "The decoded text appears instantly."
        }
      ],
      "examples": [
        {
          "title": "Query string",
          "description": "Encoded symbols return to their readable form.",
          "input": "a%20b%26c%3Dd",
          "output": "a b&c=d"
        }
      ],
      "faq": [
        {
          "question": "Why does \"+\" stay a plus sign?",
          "answer": "Percent-decoding does not treat \"+\" as a space; that convention belongs to form encoding. Replace \"+\" with \"%20\" first if you are decoding a form query string."
        },
        {
          "question": "What does %20 mean?",
          "answer": "Percent-encoded space. URLs cannot contain literal spaces, so spaces are replaced with %20 (or + in form-encoded data). Other common ones: %2F = /, %3A = :, %26 = &."
        },
        {
          "question": "What does %20 mean?",
          "answer": "Percent-encoded space. URLs cannot contain literal spaces, so spaces are replaced with %20 (or + in form-encoded data). Other common ones: %2F = /, %3A = :, %26 = &."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/url-decoder.md",
      "markdownDoc": "https://uttir.com/url-decoder.md"
    },
    {
      "slug": "jwt-decoder",
      "name": "JWT Decoder",
      "shortDescription": "Decode a JWT’s header and payload and check its expiration — without sending it anywhere.",
      "url": "https://uttir.com/jwt-decoder",
      "categories": [
        "developer-tools",
        "security-tools"
      ],
      "keywords": [
        "jwt decoder",
        "decode jwt",
        "jwt parser",
        "json web token decoder",
        "jwt inspector",
        "check jwt expiry"
      ],
      "useCases": [
        "Decode and inspect the header and payload of a JWT token",
        "Check when a JWT expires (the `exp` claim)",
        "Read the issuer (`iss`) and audience (`aud`) of a token",
        "Verify the structure of a token without trusting its contents"
      ],
      "userIntents": [
        "How do I jwt decoder?",
        "JWT Decoder online",
        "Free jwt decoder no signup",
        "JWT Decoder that doesn't upload my data",
        "JWT Decoder in my browser",
        "Best decode jwt compared"
      ],
      "privacy": "Tokens are decoded locally in your browser. Paste-sensitive JWTs here safely — nothing is transmitted.",
      "related": [
        "base64-decoder",
        "json-formatter",
        "unix-timestamp-converter",
        "http-status-codes"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A decoded string (Base64, URL, HTML entity, JWT, etc.)",
      "howTo": [
        {
          "title": "Paste the token",
          "detail": "The full header.payload.signature string."
        },
        {
          "title": "Inspect the claims",
          "detail": "Header and payload render as formatted JSON."
        },
        {
          "title": "Check expiry",
          "detail": "If an exp claim exists, a badge shows whether it is expired."
        }
      ],
      "examples": [
        {
          "title": "Typical payload",
          "description": "Common claims: sub (subject), name, iat (issued at).",
          "input": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
          "output": "{ \"sub\": \"1234567890\", \"name\": \"John Doe\", \"iat\": 1516239022 }"
        }
      ],
      "faq": [
        {
          "question": "Does this verify the signature?",
          "answer": "No. Decoding only reads the token; verifying requires the secret or public key. Never trust an unverified token for authorization."
        },
        {
          "question": "What does the exp claim mean?",
          "answer": "exp is a Unix timestamp (seconds) after which the token must be rejected. The tool shows it as a human-readable relative time."
        },
        {
          "question": "Is it safe to paste a real token here?",
          "answer": "Yes — decoding happens in your browser and the token is never sent over the network. Still, treat tokens as secrets and avoid sharing them."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/jwt-decoder.md",
      "markdownDoc": "https://uttir.com/jwt-decoder.md"
    },
    {
      "slug": "unix-timestamp-converter",
      "name": "Unix Timestamp Converter",
      "shortDescription": "Convert Unix timestamps to readable dates and back, with a live current-time readout.",
      "url": "https://uttir.com/unix-timestamp-converter",
      "categories": [
        "developer-tools"
      ],
      "keywords": [
        "unix timestamp converter",
        "epoch converter",
        "timestamp to date",
        "epoch to date",
        "date to timestamp",
        "unix time"
      ],
      "useCases": [
        "Convert a Unix timestamp to a human-readable date",
        "Convert a date to a Unix timestamp",
        "See the current Unix timestamp in real time",
        "Convert between seconds and milliseconds"
      ],
      "userIntents": [
        "How do I unix timestamp converter?",
        "Unix Timestamp Converter online",
        "Free unix timestamp converter no signup",
        "Unix Timestamp Converter that doesn't upload my data",
        "Unix Timestamp Converter in my browser",
        "Best epoch converter compared"
      ],
      "privacy": "All conversion happens locally in your browser.",
      "related": [
        "jwt-decoder",
        "time-zone-converter",
        "uuid-generator"
      ],
      "inputs": "A date or time value",
      "outputs": "A file in the target format",
      "howTo": [
        {
          "title": "Paste a timestamp",
          "detail": "Seconds (10 digits) or milliseconds (13 digits) — the unit is detected automatically."
        },
        {
          "title": "Read the date",
          "detail": "ISO, UTC, local, and relative representations appear instantly."
        },
        {
          "title": "Or pick a date",
          "detail": "Use the date picker to get the matching Unix seconds and milliseconds."
        }
      ],
      "examples": [
        {
          "title": "Seconds to date",
          "description": "A 10-digit value is treated as seconds.",
          "input": "1700000000",
          "output": "2023-11-14T22:13:20.000Z"
        }
      ],
      "faq": [
        {
          "question": "Seconds or milliseconds — which do I need?",
          "answer": "JavaScript’s Date.now() returns milliseconds; most Unix systems and JWT exp claims use seconds. The tool detects which you pasted and labels it."
        },
        {
          "question": "Why does the local time differ from UTC?",
          "answer": "A timestamp is a single instant; timezones are just different ways of displaying it. The UTC and local lines show the same moment in two zones."
        },
        {
          "question": "Seconds or milliseconds?",
          "answer": "JavaScript uses milliseconds; most server-side languages use seconds. The tool has a toggle so you can switch. A 1000x difference between the same moment in two systems is a common bug."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/unix-timestamp-converter.md",
      "markdownDoc": "https://uttir.com/unix-timestamp-converter.md"
    },
    {
      "slug": "regex-tester",
      "name": "Regex Tester",
      "shortDescription": "Test and debug regular expressions with live matches, capture groups, and highlighted results.",
      "url": "https://uttir.com/regex-tester",
      "categories": [
        "developer-tools",
        "text-tools"
      ],
      "keywords": [
        "regex tester",
        "regular expression tester",
        "regex tool",
        "test regex online",
        "regex debugger",
        "regex checker"
      ],
      "useCases": [
        "Test a regular expression against a sample text",
        "See all matches highlighted in real time",
        "Debug a regex by inspecting capture groups",
        "Generate the JavaScript, Python, or PCRE equivalent"
      ],
      "userIntents": [
        "How do I regex tester?",
        "Regex Tester online",
        "Free regex tester no signup",
        "Regex Tester that doesn't upload my data",
        "Regex Tester in my browser",
        "Best regular expression tester compared"
      ],
      "privacy": "Your pattern and test text are processed entirely in your browser and never uploaded.",
      "related": [
        "json-formatter",
        "text-diff",
        "base64-decoder"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Type your pattern",
          "detail": "For example: \\b\\w+@\\w+\\.\\w+ to match email addresses."
        },
        {
          "title": "Toggle flags",
          "detail": "Case-insensitive, multiline, dot-all, Unicode, and sticky modes."
        },
        {
          "title": "Enter test text",
          "detail": "Every match is highlighted and listed with its capture groups."
        }
      ],
      "examples": [
        {
          "title": "Find email addresses",
          "description": "A simple pattern that finds email-like strings in a block of text.",
          "input": "\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\b",
          "output": "All email addresses in the test text, highlighted with capture groups shown."
        }
      ],
      "faq": [
        {
          "question": "Which regex syntax is supported?",
          "answer": "JavaScript’s ECMAScript regular expression syntax, which is what runs natively in your browser."
        },
        {
          "question": "Why do I need the “global” behavior?",
          "answer": "The tester always finds every match in your text so you can review them all. The flag buttons control the other behaviors."
        },
        {
          "question": "What do the capture groups mean?",
          "answer": "Groups are the parts of the match captured by parentheses in your pattern. They are shown per match so you can confirm they capture the pieces you expect."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/regex-tester.md",
      "markdownDoc": "https://uttir.com/regex-tester.md"
    },
    {
      "slug": "sql-formatter",
      "name": "SQL Formatter",
      "shortDescription": "Format and beautify SQL queries for MySQL, PostgreSQL, SQLite, and more — with optional keyword uppercase and tab indentation.",
      "url": "https://uttir.com/sql-formatter",
      "categories": [
        "developer-tools",
        "data-tools"
      ],
      "keywords": [
        "sql formatter",
        "sql beautifier",
        "format sql online",
        "sql pretty printer",
        "mysql formatter",
        "postgresql formatter"
      ],
      "useCases": [
        "Use for sql formatter",
        "Use for sql beautifier",
        "Use for format sql online",
        "Use for sql pretty printer",
        "Use for mysql formatter"
      ],
      "userIntents": [
        "How do I sql formatter?",
        "SQL Formatter online",
        "Free sql formatter no signup",
        "SQL Formatter that doesn't upload my data",
        "SQL Formatter in my browser",
        "Best sql beautifier compared"
      ],
      "privacy": "Your SQL is formatted entirely in your browser. The query never leaves this page.",
      "related": [
        "json-formatter",
        "regex-tester",
        "case-converter"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A formatted (pretty-printed) version of the input",
      "howTo": [
        {
          "title": "Paste your SQL",
          "detail": "Any query, however messy — the formatter handles one-liners and minified code."
        },
        {
          "title": "Pick your dialect",
          "detail": "Select the database flavor so reserved words and syntax are handled correctly."
        },
        {
          "title": "Tune and copy",
          "detail": "Toggle keyword uppercase or tab indentation, then copy the cleaned query."
        }
      ],
      "examples": [
        {
          "title": "A messy one-liner becomes readable",
          "description": "Formatting separates the columns, tables, and conditions onto their own lines.",
          "input": "select id,name from users where id=1 and active=true order by name desc",
          "output": "SELECT\n  id,\n  name\nFROM\n  users\nWHERE\n  id = 1\n  AND active = true\nORDER BY\n  name DESC"
        }
      ],
      "faq": [
        {
          "question": "Is my SQL sent to a server?",
          "answer": "No. Formatting happens entirely in your browser using the sql-formatter library. Your query, which may contain sensitive schema details, never leaves the page."
        },
        {
          "question": "Which dialects are supported?",
          "answer": "Generic SQL plus MySQL, PostgreSQL, SQLite, MariaDB, BigQuery, and T-SQL. Pick the closest match to your database for the most accurate formatting."
        },
        {
          "question": "Does it validate my SQL?",
          "answer": "No — it is a formatter, not a validator. It will format syntactically incorrect SQL too, but the output makes errors much easier to spot."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/sql-formatter.md",
      "markdownDoc": "https://uttir.com/sql-formatter.md"
    },
    {
      "slug": "http-status-codes",
      "name": "HTTP Status Code Lookup",
      "shortDescription": "Look up any HTTP status code from 100 to 511 with plain-language explanations, searchable and filterable by category.",
      "url": "https://uttir.com/http-status-codes",
      "categories": [
        "developer-tools",
        "web-tools"
      ],
      "keywords": [
        "http status codes",
        "http status code list",
        "status code lookup",
        "404 meaning",
        "http response codes",
        "api status codes"
      ],
      "useCases": [
        "Use for http status codes",
        "Use for http status code list",
        "Use for status code lookup",
        "Use for 404 meaning",
        "Use for http response codes"
      ],
      "userIntents": [
        "How do I http status codes?",
        "HTTP Status Code Lookup online",
        "Free http status codes no signup",
        "HTTP Status Code Lookup that doesn't upload my data",
        "HTTP Status Code Lookup in my browser",
        "Best http status code list compared"
      ],
      "privacy": "This reference is fully static — no code, text, or data is sent anywhere.",
      "related": [
        "url-decoder",
        "jwt-decoder",
        "unix-timestamp-converter"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Search by number or name",
          "detail": "Type \"404\", \"redirect\", or \"teapot\" to find matching codes instantly."
        },
        {
          "title": "Filter by category",
          "detail": "Jump straight to 2xx success codes or 4xx client errors with one click."
        },
        {
          "title": "Click a category chip to clear it",
          "detail": "Tap the active filter again to show all codes."
        }
      ],
      "examples": [
        {
          "title": "The codes you will meet most often",
          "description": "A quick reference for the most common responses.",
          "input": "Search \"not found\"",
          "output": "404 Not Found — the server cannot find the requested resource."
        }
      ],
      "faq": [
        {
          "question": "What is the difference between a 4xx and a 5xx error?",
          "answer": "4xx codes mean the client made a mistake — a bad request, missing authentication, or a URL that does not exist. 5xx codes mean the server failed, even though the request was fine."
        },
        {
          "question": "What does 418 I’m a teapot mean?",
          "answer": "It is an April Fools’ joke from 1998, defined in RFC 2324. The server refuses to brew coffee because it is, in fact, a teapot. It is still officially registered."
        },
        {
          "question": "Is there a difference between 301 and 308 redirects?",
          "answer": "Both are permanent redirects, but 308 preserves the HTTP method and body, while 301 may cause some clients to change POST requests to GET."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/http-status-codes.md",
      "markdownDoc": "https://uttir.com/http-status-codes.md"
    },
    {
      "slug": "word-counter",
      "name": "Word Counter",
      "shortDescription": "Count words, characters, sentences, and paragraphs in your text instantly.",
      "url": "https://uttir.com/word-counter",
      "categories": [
        "text-tools"
      ],
      "keywords": [
        "word counter",
        "word count",
        "character counter",
        "character count",
        "count words online",
        "sentence counter",
        "paragraph counter",
        "reading time"
      ],
      "useCases": [
        "Count words and characters in a document or essay",
        "Check the length of a meta description or page title",
        "Estimate reading time for a piece of writing",
        "Count sentences and paragraphs in a draft",
        "Verify character limits for a tweet, SMS, or ad"
      ],
      "userIntents": [
        "How do I word counter?",
        "Word Counter online",
        "Free word counter no signup",
        "Word Counter that doesn't upload my data",
        "Word Counter in my browser",
        "Best word count compared"
      ],
      "privacy": "Your text is counted entirely in your browser. Nothing is uploaded, stored, or sent anywhere.",
      "related": [
        "character-counter",
        "case-converter",
        "text-diff",
        "keyword-density-checker"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A count (words, characters, sentences, paragraphs)",
      "howTo": [
        {
          "title": "Paste or type your text",
          "detail": "Drop your text into the editor. Counts update automatically as you type."
        },
        {
          "title": "Read the breakdown",
          "detail": "Words, characters, sentences, paragraphs, and reading time are shown below the editor."
        },
        {
          "title": "Copy or clear",
          "detail": "Use the buttons to copy your text or clear the editor and start over."
        }
      ],
      "examples": [
        {
          "title": "A short sentence",
          "description": "Simple text counts every whitespace-separated token as a word.",
          "input": "The quick brown fox jumps over the lazy dog.",
          "output": "9 words · 44 characters · 1 sentence · 1 paragraph"
        },
        {
          "title": "Reading time",
          "description": "Reading time is estimated at 200 words per minute, a common average for adults.",
          "input": "A 400-word article",
          "output": "≈ 2 minutes reading time"
        }
      ],
      "faq": [
        {
          "question": "Is my text uploaded anywhere?",
          "answer": "No. Counting happens entirely in your browser using JavaScript. Your text is never transmitted, stored, or logged."
        },
        {
          "question": "How are words counted?",
          "answer": "Words are counted by splitting on whitespace. Sequences of letters, numbers, and punctuation that are not separated by spaces count as one word."
        },
        {
          "question": "How is reading time calculated?",
          "answer": "Reading time uses an average speed of 200 words per minute. Speaking time uses roughly 130 words per minute."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/word-counter.md",
      "markdownDoc": "https://uttir.com/word-counter.md"
    },
    {
      "slug": "character-counter",
      "name": "Character Counter",
      "shortDescription": "Count characters, words, lines, and UTF-8 bytes as you type.",
      "url": "https://uttir.com/character-counter",
      "categories": [
        "text-tools"
      ],
      "keywords": [
        "character counter",
        "char count",
        "letter counter",
        "count characters online",
        "text length",
        "byte counter"
      ],
      "useCases": [
        "Count the number of characters in a text",
        "Check the length of a single-line input (tweet, SMS, ad)",
        "Count characters with and without spaces",
        "Verify a character limit for a form field"
      ],
      "userIntents": [
        "How do I character counter?",
        "Character Counter online",
        "Free character counter no signup",
        "Character Counter that doesn't upload my data",
        "Character Counter in my browser",
        "Best char count compared"
      ],
      "privacy": "Counting happens locally in your browser. Your text is never uploaded.",
      "related": [
        "word-counter",
        "case-converter",
        "slug-generator",
        "keyword-density-checker"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A count (words, characters, sentences, paragraphs)",
      "howTo": [
        {
          "title": "Paste or type",
          "detail": "Counts update automatically as the text changes."
        },
        {
          "title": "Read the breakdown",
          "detail": "Each metric is shown in its own card below the editor."
        }
      ],
      "examples": [
        {
          "title": "Spaces matter",
          "description": "“Hello world” is 11 characters but only 10 without the space.",
          "input": "Hello world",
          "output": "11 characters · 10 without spaces · 2 words · 1 line"
        }
      ],
      "faq": [
        {
          "question": "What is the difference between characters and bytes?",
          "answer": "Characters are what you see; bytes are what storage and transfer use. ASCII characters take one UTF-8 byte, but emoji and many accented letters take two to four."
        },
        {
          "question": "Do spaces count as characters?",
          "answer": "Yes in the “Characters” total. The “no spaces” count excludes all whitespace, matching limits like X/Twitter’s that count visible characters."
        },
        {
          "question": "Does it count spaces?",
          "answer": "Yes, by default. The tool has a toggle to exclude whitespace, which is useful when you are writing copy and want to know the visible character count."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/character-counter.md",
      "markdownDoc": "https://uttir.com/character-counter.md"
    },
    {
      "slug": "case-converter",
      "name": "Case Converter",
      "shortDescription": "Convert text between UPPER, lower, Title, sentence, camelCase, PascalCase, snake_case, and kebab-case.",
      "url": "https://uttir.com/case-converter",
      "categories": [
        "text-tools"
      ],
      "keywords": [
        "case converter",
        "uppercase to lowercase",
        "title case converter",
        "camelcase converter",
        "snake case",
        "kebab case",
        "change text case"
      ],
      "useCases": [
        "Convert text to UPPERCASE, lowercase, Title Case, or Sentence case",
        "Convert to camelCase, snake_case, kebab-case, or CONSTANT_CASE",
        "Clean up pasted text with the wrong case",
        "Apply a consistent case to a list of values"
      ],
      "userIntents": [
        "How do I case converter?",
        "Case Converter online",
        "Free case converter no signup",
        "Case Converter that doesn't upload my data",
        "Case Converter in my browser",
        "Best uppercase to lowercase compared"
      ],
      "privacy": "Conversion runs locally in your browser. Your text is never uploaded.",
      "related": [
        "slug-generator",
        "word-counter"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A file in the target format",
      "howTo": [
        {
          "title": "Paste your text",
          "detail": "Plain sentences or existing identifiers both work."
        },
        {
          "title": "Choose a case",
          "detail": "Pick any of the eight styles from the dropdown."
        },
        {
          "title": "Copy the result",
          "detail": "The converted text appears instantly on the right."
        }
      ],
      "examples": [
        {
          "title": "Sentence to identifier",
          "description": "A phrase becomes a valid variable name.",
          "input": "the quick brown fox",
          "output": "theQuickBrownFox (camelCase)"
        }
      ],
      "faq": [
        {
          "question": "How are words detected?",
          "answer": "Words are split on punctuation, spaces, hyphens, and camelCase boundaries, so mixed input like “userName_first” is handled correctly."
        },
        {
          "question": "Does Title Case follow style guides?",
          "answer": "It capitalizes every word, which suits headings and slugs. It does not apply AP/Chicago small-word rules."
        },
        {
          "question": "What is the difference between title case and sentence case?",
          "answer": "Title Case capitalizes the first letter of every major word. Sentence case capitalizes only the first letter of the sentence and any proper nouns. The tool does both."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/case-converter.md",
      "markdownDoc": "https://uttir.com/case-converter.md"
    },
    {
      "slug": "text-diff",
      "name": "Text Diff",
      "shortDescription": "Compare two texts line by line and see exactly what was added, removed, or kept.",
      "url": "https://uttir.com/text-diff",
      "categories": [
        "text-tools"
      ],
      "keywords": [
        "text diff",
        "compare text online",
        "diff checker",
        "text comparison",
        "find differences between two texts"
      ],
      "useCases": [
        "Compare two texts and see the differences highlighted",
        "Find what changed between two versions of a document",
        "See line-by-line and character-by-character differences",
        "Compare code, prose, or config files"
      ],
      "userIntents": [
        "How do I text diff?",
        "Text Diff online",
        "Free text diff no signup",
        "Text Diff that doesn't upload my data",
        "Text Diff in my browser",
        "Best compare text online compared"
      ],
      "privacy": "Comparison runs locally in your browser. Neither text is uploaded.",
      "related": [
        "word-counter",
        "character-counter"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A side-by-side or inline diff",
      "howTo": [
        {
          "title": "Paste the original",
          "detail": "Left panel: the older version of the text."
        },
        {
          "title": "Paste the changed version",
          "detail": "Right panel: the newer version."
        },
        {
          "title": "Read the diff",
          "detail": "Green lines were added, red lines removed, plain lines are unchanged."
        }
      ],
      "examples": [
        {
          "title": "One-line edit",
          "description": "Changing a single line shows one removal and one addition.",
          "input": "a\nb\nc   →   a\nc\nd",
          "output": "  a\n− b\n  c\n+ d"
        }
      ],
      "faq": [
        {
          "question": "How large can the texts be?",
          "answer": "The line-by-line comparison handles thousands of lines comfortably in your browser. Very large documents are rejected with a clear message to keep the page responsive."
        },
        {
          "question": "Does it compare words within a line?",
          "answer": "No — the comparison is line-based. A line with any change is shown as removed plus added, which keeps results easy to read."
        },
        {
          "question": "Does it work on code?",
          "answer": "Yes. Line-by-line diff is the same for code and prose. The tool is line-oriented, so it shows which lines changed, were added, or were removed."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/text-diff.md",
      "markdownDoc": "https://uttir.com/text-diff.md"
    },
    {
      "slug": "slug-generator",
      "name": "Slug Generator",
      "shortDescription": "Turn any title into a clean, URL-safe slug: lowercase, hyphenated, diacritics removed.",
      "url": "https://uttir.com/slug-generator",
      "categories": [
        "text-tools"
      ],
      "keywords": [
        "slug generator",
        "url slug",
        "slugify",
        "seo slug",
        "url friendly string",
        "convert title to slug"
      ],
      "useCases": [
        "Generate a URL slug from a title",
        "Convert a title to a clean, hyphen-separated, lowercase slug",
        "Remove stop words and special characters from a slug",
        "Get a slug that works in any URL parser"
      ],
      "userIntents": [
        "How do I slug generator?",
        "Slug Generator online",
        "Free slug generator no signup",
        "Slug Generator that doesn't upload my data",
        "Slug Generator in my browser",
        "Best url slug compared"
      ],
      "privacy": "Slugs are generated locally in your browser. Nothing is uploaded.",
      "related": [
        "case-converter",
        "url-encoder",
        "character-counter"
      ],
      "inputs": "A URL string",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Type a title",
          "detail": "Any phrase, headline, or product name."
        },
        {
          "title": "Copy the slug",
          "detail": "The cleaned slug appears instantly below the input."
        }
      ],
      "examples": [
        {
          "title": "Headline to slug",
          "description": "Punctuation and casing are normalized.",
          "input": "How to Convert JPG to PNG (2026 Guide)",
          "output": "how-to-convert-jpg-to-png-2026-guide"
        },
        {
          "title": "Accents removed",
          "description": "Diacritics are transliterated away.",
          "input": "Héllo Wörld Café",
          "output": "hello-world-cafe"
        }
      ],
      "faq": [
        {
          "question": "Why hyphens and not underscores?",
          "answer": "Search engines treat hyphens as word separators but underscores as joiners, so hyphenated slugs read as separate words in search results."
        },
        {
          "question": "Should slugs be short?",
          "answer": "Yes — keep the essential words. Long slugs get truncated in search results and are harder to share."
        },
        {
          "question": "Are slugs case-sensitive?",
          "answer": "URLs are case-sensitive, but most servers treat slugs case-insensitively. The tool lowercases the slug by default for consistency."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/slug-generator.md",
      "markdownDoc": "https://uttir.com/slug-generator.md"
    },
    {
      "slug": "percentage-calculator",
      "name": "Percentage Calculator",
      "shortDescription": "Three percentage tools in one: percent of a value, ratio as a percent, and percent change.",
      "url": "https://uttir.com/percentage-calculator",
      "categories": [
        "calculators",
        "math-tools"
      ],
      "keywords": [
        "percentage calculator",
        "percent calculator",
        "percent change calculator",
        "what is x percent of y",
        "percentage increase calculator"
      ],
      "useCases": [
        "Calculate what percent one number is of another",
        "Calculate a percentage increase or decrease between two values",
        "Apply a percentage to a number (discount, tax, tip, markup)",
        "Reverse a percentage (find the original from a known result)"
      ],
      "userIntents": [
        "How do I percentage calculator?",
        "Percentage Calculator online",
        "Free percentage calculator no signup",
        "Percentage Calculator that doesn't upload my data",
        "Percentage Calculator in my browser",
        "Best percent calculator compared"
      ],
      "privacy": "Calculations run locally in your browser.",
      "related": [
        "compound-interest-calculator",
        "bmi-calculator",
        "grade-calculator",
        "date-calculator",
        "margin-calculator"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Pick the card that matches your question",
          "detail": "Each card is one of the three classic percentage problems."
        },
        {
          "title": "Enter the numbers",
          "detail": "The answer appears instantly below the inputs."
        }
      ],
      "examples": [
        {
          "title": "Tip on a bill",
          "description": "15% of a $200 bill.",
          "input": "15% of 200",
          "output": "30"
        },
        {
          "title": "Discount as a percent",
          "description": "Paying 75 for something listed at 100.",
          "input": "75 of 100",
          "output": "75%"
        },
        {
          "title": "Price increase",
          "description": "From 50 to 75.",
          "input": "50 → 75",
          "output": "+50%"
        }
      ],
      "faq": [
        {
          "question": "How is percent change calculated?",
          "answer": "As (new − old) divided by the absolute value of old, times 100. A rise from 50 to 75 is +50%; a fall from 75 to 50 is −33.33%."
        },
        {
          "question": "Why is division by zero shown as a dash?",
          "answer": "Percentages of or changes from zero are mathematically undefined, so the tool shows a dash instead of a misleading number."
        },
        {
          "question": "What is percentage change?",
          "answer": "((new - old) / old) * 100. If a value goes from 100 to 120, the percentage change is +20%. If it goes from 100 to 80, it is -20%. The tool handles the direction automatically."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/percentage-calculator.md",
      "markdownDoc": "https://uttir.com/percentage-calculator.md"
    },
    {
      "slug": "age-calculator",
      "name": "Age Calculator",
      "shortDescription": "Find the exact age in years, months, and days — plus totals and the countdown to the next birthday.",
      "url": "https://uttir.com/age-calculator",
      "categories": [
        "calculators"
      ],
      "keywords": [
        "age calculator",
        "calculate age",
        "how old am i",
        "birthday calculator",
        "age in days",
        "date of birth calculator"
      ],
      "useCases": [
        "Calculate exact age in years, months, and days from a birthday",
        "Find the countdown to the next birthday",
        "Calculate age in total days, hours, or minutes",
        "Determine if someone is a legal adult in their jurisdiction"
      ],
      "userIntents": [
        "How do I age calculator?",
        "Age Calculator online",
        "Free age calculator no signup",
        "Age Calculator that doesn't upload my data",
        "Age Calculator in my browser",
        "Best calculate age compared"
      ],
      "privacy": "Dates are processed locally in your browser and never uploaded.",
      "related": [
        "date-calculator",
        "percentage-calculator"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A count (words, characters, sentences, paragraphs)",
      "howTo": [
        {
          "title": "Pick the date of birth",
          "detail": "The age at today’s date appears immediately."
        },
        {
          "title": "Optionally set a target date",
          "detail": "See the age as of any other date, past or future."
        }
      ],
      "examples": [
        {
          "title": "A birthday mid-year",
          "description": "Born 15 Jan 1990, age on 20 Jun 2026.",
          "input": "1990-01-15 → 2026-06-20",
          "output": "36 years, 5 months, 5 days"
        }
      ],
      "faq": [
        {
          "question": "How are months counted?",
          "answer": "By calendar months: from the 15th of one month to the 14th of the next is one month minus one day. When the day of month has not yet arrived, days borrow from the previous month’s real length."
        },
        {
          "question": "Does it handle leap years?",
          "answer": "Yes. All math uses real calendar dates, so February 29 and leap years are accounted for automatically."
        },
        {
          "question": "How is age calculated across time zones?",
          "answer": "By date of birth in your local time zone. If you were born on 2000-01-01 in Tokyo, you are one year older on 2026-01-01 in Tokyo than you would be on 2026-01-01 in New York, because the local date flips at different moments."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/age-calculator.md",
      "markdownDoc": "https://uttir.com/age-calculator.md"
    },
    {
      "slug": "date-calculator",
      "name": "Date Calculator",
      "shortDescription": "Count the days between two dates, or add and subtract days from any date.",
      "url": "https://uttir.com/date-calculator",
      "categories": [
        "calculators"
      ],
      "keywords": [
        "date calculator",
        "days between dates",
        "date difference",
        "add days to date",
        "subtract days from date",
        "date math"
      ],
      "useCases": [
        "Calculate the number of days between two dates",
        "Add or subtract days, weeks, months, or years from a date",
        "See the day of the week for any date",
        "Plan a deadline or a countdown with a date diff"
      ],
      "userIntents": [
        "How do I date calculator?",
        "Date Calculator online",
        "Free date calculator no signup",
        "Date Calculator that doesn't upload my data",
        "Date Calculator in my browser",
        "Best days between dates compared"
      ],
      "privacy": "Date math runs locally in your browser.",
      "related": [
        "age-calculator",
        "time-zone-converter",
        "unix-timestamp-converter"
      ],
      "inputs": "A date or time value",
      "outputs": "A count (words, characters, sentences, paragraphs)",
      "howTo": [
        {
          "title": "Difference",
          "detail": "Pick From and To dates to see the gap in days and equivalents."
        },
        {
          "title": "Shift a date",
          "detail": "Pick a starting date and a day offset; negative values go backwards."
        }
      ],
      "examples": [
        {
          "title": "January gap",
          "description": "From 1 Jan to 31 Jan.",
          "input": "2026-01-01 → 2026-01-31",
          "output": "30 days"
        },
        {
          "title": "Due date",
          "description": "30 days after 30 Jan 2026 crosses the month boundary.",
          "input": "2026-01-30 + 5",
          "output": "Wed, Feb 4, 2026"
        }
      ],
      "faq": [
        {
          "question": "Are the results timezone-aware?",
          "answer": "Yes. Dates are interpreted in your local timezone, so there is no off-by-one-day surprise from UTC conversion."
        },
        {
          "question": "Why are months and years approximate?",
          "answer": "Months vary in length, so gaps longer than a few weeks are expressed using average month (30.44 days) and year (365.25 days) lengths."
        },
        {
          "question": "Does it count business days?",
          "answer": "Yes. There is a toggle to exclude weekends, and an option to add a list of holidays. The result is the number of business days between two dates."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/date-calculator.md",
      "markdownDoc": "https://uttir.com/date-calculator.md"
    },
    {
      "slug": "compound-interest-calculator",
      "name": "Compound Interest Calculator",
      "shortDescription": "Project savings growth with compound interest and monthly contributions, year by year.",
      "url": "https://uttir.com/compound-interest-calculator",
      "categories": [
        "calculators"
      ],
      "keywords": [
        "compound interest calculator",
        "investment calculator",
        "savings calculator",
        "interest calculator",
        "future value calculator"
      ],
      "useCases": [
        "Calculate compound interest with monthly contributions",
        "See how an investment grows over time with regular deposits",
        "Compare simple interest vs compound interest",
        "Plan for retirement or a long-term savings goal"
      ],
      "userIntents": [
        "How do I compound interest calculator?",
        "Compound Interest Calculator online",
        "Free compound interest calculator no signup",
        "Compound Interest Calculator that doesn't upload my data",
        "Compound Interest Calculator in my browser",
        "Best investment calculator compared"
      ],
      "privacy": "Projections are computed locally in your browser.",
      "related": [
        "percentage-calculator",
        "age-calculator",
        "loan-calculator",
        "margin-calculator"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Enter the inputs",
          "detail": "Starting amount, annual rate, years, compounding frequency, and monthly contribution."
        },
        {
          "title": "Read the summary",
          "detail": "Future value, total contributed, and interest earned."
        },
        {
          "title": "Review the table",
          "detail": "Year-by-year breakdown of contributions, interest, and balance."
        }
      ],
      "examples": [
        {
          "title": "A decade of compounding",
          "description": "$10,000 at 7% compounded monthly with $200/month for 20 years.",
          "input": "P=10000, r=7%, y=20, monthly=200",
          "output": "≈ $216,000 future value, of which ≈ $158,000 is interest"
        }
      ],
      "faq": [
        {
          "question": "How accurate is the projection?",
          "answer": "It is exact for the assumptions given (fixed rate, end-of-month contributions). Real returns vary year to year, so treat results as a scenario, not a promise."
        },
        {
          "question": "What does the compounding frequency change?",
          "answer": "More frequent compounding earns slightly more at the same nominal rate. The calculator converts your chosen frequency to an equivalent monthly growth rate."
        },
        {
          "question": "Does it account for taxes or inflation?",
          "answer": "No. The projection is pre-tax and nominal. For a rough real-value view, subtract expected inflation from the rate."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/compound-interest-calculator.md",
      "markdownDoc": "https://uttir.com/compound-interest-calculator.md"
    },
    {
      "slug": "loan-calculator",
      "name": "Loan Calculator",
      "shortDescription": "Calculate monthly payments, total interest, and a full amortization schedule for any loan.",
      "url": "https://uttir.com/loan-calculator",
      "categories": [
        "calculators"
      ],
      "keywords": [
        "loan calculator",
        "mortgage calculator",
        "monthly payment calculator",
        "amortization calculator",
        "car loan calculator",
        "loan payment calculator"
      ],
      "useCases": [
        "Calculate a monthly loan payment from principal, rate, and term",
        "See the full amortization schedule (interest vs principal over time)",
        "Compare two loan scenarios (15-year vs 30-year)",
        "Calculate the total interest paid over the life of the loan"
      ],
      "userIntents": [
        "How do I loan calculator?",
        "Loan Calculator online",
        "Free loan calculator no signup",
        "Loan Calculator that doesn't upload my data",
        "Loan Calculator in my browser",
        "Best mortgage calculator compared"
      ],
      "privacy": "Your loan details are calculated entirely in your browser and never leave your device.",
      "related": [
        "compound-interest-calculator",
        "mortgage-calculator",
        "percentage-calculator"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A numeric calculation (percentage, BMI, payment, etc.)",
      "howTo": [
        {
          "title": "Enter the loan amount",
          "detail": "The total you plan to borrow."
        },
        {
          "title": "Enter the annual interest rate",
          "detail": "For example 6.5 for a 6.5% APR. Leave at 0 for an interest-free loan."
        },
        {
          "title": "Set the term in years",
          "detail": "For example 30 for a 30-year mortgage."
        },
        {
          "title": "Add an optional extra payment",
          "detail": "See how an extra amount per month shortens the term and cuts total interest."
        }
      ],
      "examples": [
        {
          "title": "A $20,000 car loan at 6% for 5 years",
          "description": "The standard payment formula used by lenders.",
          "input": "Amount: 20000 · Rate: 6% · Term: 5 years",
          "output": "Monthly payment ≈ $386.66, total interest ≈ $3,199.30."
        }
      ],
      "faq": [
        {
          "question": "How is the monthly payment calculated?",
          "answer": "It uses the standard amortization formula: P × r / (1 − (1 + r)⁻ⁿ), where r is the monthly interest rate and n is the number of monthly payments."
        },
        {
          "question": "What does an extra payment do?",
          "answer": "Every extra dollar goes directly to the principal, so you pay less interest and finish the loan early. The calculator shows your new total and how many payments you save."
        },
        {
          "question": "Does this include fees or taxes?",
          "answer": "No. It calculates the pure principal and interest. Closing costs, insurance, and property taxes are separate and vary by lender and location."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/loan-calculator.md",
      "markdownDoc": "https://uttir.com/loan-calculator.md"
    },
    {
      "slug": "mortgage-calculator",
      "name": "Mortgage Calculator",
      "shortDescription": "Estimate monthly mortgage payments, including down payment, property tax, and insurance.",
      "url": "https://uttir.com/mortgage-calculator",
      "categories": [
        "calculators"
      ],
      "keywords": [
        "mortgage calculator",
        "home loan calculator",
        "monthly mortgage payment",
        "house payment calculator",
        "mortgage payoff calculator",
        "PITI calculator"
      ],
      "useCases": [
        "Calculate a monthly mortgage payment from principal, rate, and term",
        "See the full amortization schedule (interest vs principal over time)",
        "Compare two loan scenarios (15-year vs 30-year)",
        "Calculate the total interest paid over the life of the loan"
      ],
      "userIntents": [
        "How do I mortgage calculator?",
        "Mortgage Calculator online",
        "Free mortgage calculator no signup",
        "Mortgage Calculator that doesn't upload my data",
        "Mortgage Calculator in my browser",
        "Best home loan calculator compared"
      ],
      "privacy": "Your mortgage figures are computed entirely in your browser and never leave your device.",
      "related": [
        "loan-calculator",
        "compound-interest-calculator",
        "percentage-calculator"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Enter the purchase price",
          "detail": "The full price of the home you are considering."
        },
        {
          "title": "Set your down payment percentage",
          "detail": "A 20% down payment typically avoids private mortgage insurance (PMI)."
        },
        {
          "title": "Add the interest rate and term",
          "detail": "For example 6.5% for 30 years. Longer terms mean lower payments but more total interest."
        },
        {
          "title": "Include tax and insurance",
          "detail": "Optional annual property tax and homeowners insurance are spread across your monthly payment."
        }
      ],
      "examples": [
        {
          "title": "A $350,000 home with 20% down",
          "description": "A common starter scenario.",
          "input": "Price: 350000 · Down: 20% · Rate: 6.5% · Term: 30 years",
          "output": "Loan of $280,000 → monthly P&I ≈ $1,769.95, total interest ≈ $357,000."
        }
      ],
      "faq": [
        {
          "question": "What is PITI?",
          "answer": "Principal, Interest, Taxes, and Insurance — the four components that make up a typical monthly mortgage payment. The first two are your loan; the last two are escrowed and paid on your behalf."
        },
        {
          "question": "Why does a 20% down payment matter?",
          "answer": "Lenders generally require private mortgage insurance (PMI) when your down payment is below 20%. PMI protects the lender, not you, and adds to your monthly cost until you build enough equity."
        },
        {
          "question": "Should I choose a shorter term?",
          "answer": "A 15-year loan has a higher monthly payment but far less total interest than a 30-year loan at the same rate. Use the calculator to compare both before deciding."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/mortgage-calculator.md",
      "markdownDoc": "https://uttir.com/mortgage-calculator.md"
    },
    {
      "slug": "margin-calculator",
      "name": "Profit Margin Calculator",
      "shortDescription": "Calculate profit, margin, and markup from cost and selling price — or find the price needed for a target margin.",
      "url": "https://uttir.com/margin-calculator",
      "categories": [
        "calculators"
      ],
      "keywords": [
        "margin calculator",
        "markup calculator",
        "profit margin calculator",
        "margin and markup",
        "selling price calculator",
        "business calculator"
      ],
      "useCases": [
        "Use for margin calculator",
        "Use for markup calculator",
        "Use for profit margin calculator",
        "Use for margin and markup",
        "Use for selling price calculator"
      ],
      "userIntents": [
        "How do I margin calculator?",
        "Profit Margin Calculator online",
        "Free margin calculator no signup",
        "Profit Margin Calculator that doesn't upload my data",
        "Profit Margin Calculator in my browser",
        "Best markup calculator compared"
      ],
      "privacy": "Your numbers are calculated entirely in your browser and never leave your device.",
      "related": [
        "percentage-calculator",
        "break-even-calculator",
        "vat-calculator",
        "loan-calculator"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A numeric calculation (percentage, BMI, payment, etc.)",
      "howTo": [
        {
          "title": "Enter your cost",
          "detail": "What the product or service costs you."
        },
        {
          "title": "Enter the selling price",
          "detail": "What customers pay. The calculator shows profit, margin %, and markup %."
        },
        {
          "title": "Or price from a target margin",
          "detail": "Enter a cost and desired margin % to get the exact selling price."
        }
      ],
      "examples": [
        {
          "title": "Cost $50, sold at $80",
          "description": "The same numbers, expressed as both margin and markup.",
          "input": "Cost: 50 · Price: 80",
          "output": "Profit $30 · Margin 37.5% · Markup 60%."
        }
      ],
      "faq": [
        {
          "question": "What is the difference between margin and markup?",
          "answer": "Margin is profit divided by selling price. Markup is profit divided by cost. A 60% markup is the same as a 37.5% margin — the calculator shows both so you never mix them up."
        },
        {
          "question": "How do I price for a target margin?",
          "answer": "Divide the cost by (1 − target margin). For a 40% margin on a $60 cost: 60 ÷ 0.6 = $100 selling price."
        },
        {
          "question": "Does this include taxes and shipping?",
          "answer": "No — those should be folded into your cost before calculating, or calculated separately for your specific business."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/margin-calculator.md",
      "markdownDoc": "https://uttir.com/margin-calculator.md"
    },
    {
      "slug": "grade-calculator",
      "name": "Grade Calculator",
      "shortDescription": "Average your grades and work out what you need on the final to reach your target.",
      "url": "https://uttir.com/grade-calculator",
      "categories": [
        "calculators"
      ],
      "keywords": [
        "grade calculator",
        "final grade calculator",
        "grade average calculator",
        "what do i need on my final",
        "weighted grade calculator"
      ],
      "useCases": [
        "Use for grade calculator",
        "Use for final grade calculator",
        "Use for grade average calculator",
        "Use for what do i need on my final",
        "Use for weighted grade calculator"
      ],
      "userIntents": [
        "How do I grade calculator?",
        "Grade Calculator online",
        "Free grade calculator no signup",
        "Grade Calculator that doesn't upload my data",
        "Grade Calculator in my browser",
        "Best final grade calculator compared"
      ],
      "privacy": "All calculations happen locally in your browser. Your grades stay on your device.",
      "related": [
        "percentage-calculator",
        "age-calculator",
        "date-calculator"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Enter your grades",
          "detail": "Add each grade with its weight (for example a test worth 30%). Weights need not sum to 100."
        },
        {
          "title": "See your average",
          "detail": "The weighted average updates as you add or change grades."
        },
        {
          "title": "Plan for the final",
          "detail": "Enter your current average, the final’s weight, and your target to see the score required."
        }
      ],
      "examples": [
        {
          "title": "Needing a 90 overall",
          "description": "A final worth 25% of the course.",
          "input": "Current: 88 · Final weight: 25% · Target: 90",
          "output": "Required final score ≈ 96."
        }
      ],
      "faq": [
        {
          "question": "What if weights do not add up to 100?",
          "answer": "The average is computed as a true weighted average, so the weights are normalized automatically. You can use whatever scale fits your syllabus."
        },
        {
          "question": "What if the required score is over 100?",
          "answer": "The calculator tells you the target is not achievable. That can mean your current average is too low for the final’s weight — or you simply need to aim higher in earlier assignments."
        },
        {
          "question": "Does it handle points instead of percentages?",
          "answer": "Enter scores and weights in whatever consistent scale your course uses — the math is the same whether you use 0–100 percentages or points."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/grade-calculator.md",
      "markdownDoc": "https://uttir.com/grade-calculator.md"
    },
    {
      "slug": "break-even-calculator",
      "name": "Break-Even Calculator",
      "shortDescription": "Find out how many units you must sell to cover your costs and start making a profit.",
      "url": "https://uttir.com/break-even-calculator",
      "categories": [
        "calculators"
      ],
      "keywords": [
        "break even calculator",
        "break even point",
        "break even analysis",
        "break even formula",
        "contribution margin calculator",
        "business calculator"
      ],
      "useCases": [
        "Use for break even calculator",
        "Use for break even point",
        "Use for break even analysis",
        "Use for break even formula",
        "Use for contribution margin calculator"
      ],
      "userIntents": [
        "How do I break even calculator?",
        "Break-Even Calculator online",
        "Free break even calculator no signup",
        "Break-Even Calculator that doesn't upload my data",
        "Break-Even Calculator in my browser",
        "Best break even point compared"
      ],
      "privacy": "Your figures are calculated in your browser and never leave your device.",
      "related": [
        "margin-calculator",
        "percentage-calculator",
        "loan-calculator"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Enter fixed costs",
          "detail": "Rent, salaries, insurance — costs that stay the same regardless of how much you sell."
        },
        {
          "title": "Enter price and variable cost per unit",
          "detail": "The price you sell for, and the per-unit cost of materials, labor, and shipping."
        },
        {
          "title": "Read your break-even point",
          "detail": "The minimum units to sell — and the revenue that represents."
        },
        {
          "title": "Check profit at a volume",
          "detail": "See exactly what profit looks like at your expected sales volume."
        }
      ],
      "examples": [
        {
          "title": "A small product business",
          "description": "Fixed costs of $10,000, selling at $50 with $30 variable cost.",
          "input": "Fixed: 10000 · Price: 50 · Variable: 30",
          "output": "Break-even at 500 units ($25,000 revenue), $20 contribution per unit."
        }
      ],
      "faq": [
        {
          "question": "What is the break-even formula?",
          "answer": "Break-even units = fixed costs ÷ (price per unit − variable cost per unit). The denominator is your contribution margin per unit."
        },
        {
          "question": "What if my price is lower than variable cost?",
          "answer": "Then every sale loses money and you can never break even. The calculator flags this so you can reprice before it becomes a problem."
        },
        {
          "question": "Does this include taxes?",
          "answer": "No. It covers operating costs only. Taxes, interest, and one-off expenses can be added to your fixed costs for a more conservative number."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/break-even-calculator.md",
      "markdownDoc": "https://uttir.com/break-even-calculator.md"
    },
    {
      "slug": "vat-calculator",
      "name": "VAT Calculator",
      "shortDescription": "Add or remove VAT on any amount. Choose a standard rate or enter your own.",
      "url": "https://uttir.com/vat-calculator",
      "categories": [
        "calculators"
      ],
      "keywords": [
        "vat calculator",
        "vat calculator uk",
        "add vat",
        "remove vat",
        "sales tax calculator",
        "gst calculator"
      ],
      "useCases": [
        "Add VAT to a net amount (or remove VAT from a gross amount)",
        "Use a custom VAT rate (for any country)",
        "See the VAT portion and the net amount separately",
        "Generate an invoice-ready VAT-inclusive total"
      ],
      "userIntents": [
        "How do I vat calculator?",
        "VAT Calculator online",
        "Free vat calculator no signup",
        "VAT Calculator that doesn't upload my data",
        "VAT Calculator in my browser",
        "Best vat calculator uk compared"
      ],
      "privacy": "VAT is calculated instantly in your browser. Your amounts never leave your device.",
      "related": [
        "percentage-calculator",
        "margin-calculator",
        "compound-interest-calculator"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A random selection from the input list",
      "howTo": [
        {
          "title": "Enter the amount",
          "detail": "The figure you want to add VAT to, or strip VAT from."
        },
        {
          "title": "Pick a rate",
          "detail": "Choose a common standard rate (UK 20%, Germany 19%, Australia 10%…) or enter a custom percentage."
        },
        {
          "title": "Choose add or remove",
          "detail": "\"Add VAT\" treats the amount as net; \"Remove VAT\" treats it as gross with VAT included."
        }
      ],
      "examples": [
        {
          "title": "Adding 20% VAT in the UK",
          "description": "A net price of £100.",
          "input": "Amount: 100 · Rate: 20% · Add VAT",
          "output": "VAT £20, gross total £120."
        }
      ],
      "faq": [
        {
          "question": "What is the difference between net and gross?",
          "answer": "Net is the price before tax; gross is the price including tax. VAT calculators work in both directions depending on which figure you start from."
        },
        {
          "question": "How do I remove VAT from a gross price?",
          "answer": "Divide the gross amount by (1 + rate/100). For example £120 at 20% → £120 ÷ 1.2 = £100 net, with £20 VAT."
        },
        {
          "question": "Is GST the same as VAT?",
          "answer": "Yes — GST (Australia, India, Canada) and VAT (UK, EU) are both value-added taxes calculated the same way. Pick a matching preset or enter your rate."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/vat-calculator.md",
      "markdownDoc": "https://uttir.com/vat-calculator.md"
    },
    {
      "slug": "bmi-calculator",
      "name": "BMI Calculator",
      "shortDescription": "Calculate your Body Mass Index and see where you fall on the healthy range.",
      "url": "https://uttir.com/bmi-calculator",
      "categories": [
        "calculators"
      ],
      "keywords": [
        "bmi calculator",
        "body mass index calculator",
        "bmi chart",
        "healthy weight range",
        "calculate bmi"
      ],
      "useCases": [
        "Calculate Body Mass Index from height and weight",
        "Check whether a BMI is in the underweight, normal, overweight, or obese range",
        "Use metric (cm, kg) or imperial (in, lb) units",
        "Track BMI changes over time for a health goal"
      ],
      "userIntents": [
        "How do I bmi calculator?",
        "BMI Calculator online",
        "Free bmi calculator no signup",
        "BMI Calculator that doesn't upload my data",
        "BMI Calculator in my browser",
        "Best body mass index calculator compared"
      ],
      "privacy": "Your measurements are processed in your browser and never leave your device.",
      "related": [
        "percentage-calculator",
        "age-calculator",
        "date-calculator"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A numeric calculation (percentage, BMI, payment, etc.)",
      "howTo": [
        {
          "title": "Choose your units",
          "detail": "Switch between metric (kg, cm) and imperial (lb, ft + in)."
        },
        {
          "title": "Enter height and weight",
          "detail": "The BMI updates as soon as both fields are valid."
        },
        {
          "title": "Read the result",
          "detail": "See your BMI, category, and the healthy weight range for your height."
        }
      ],
      "examples": [
        {
          "title": "A 70 kg adult at 175 cm",
          "description": "A classic healthy-range example.",
          "input": "70 kg · 175 cm",
          "output": "BMI ≈ 22.9 — \"Healthy weight\", healthy range 56.7–76.3 kg."
        }
      ],
      "faq": [
        {
          "question": "What do the BMI categories mean?",
          "answer": "Under 18.5 is underweight, 18.5–24.9 is a healthy weight, 25–29.9 is overweight, and 30+ is obese. BMI is a screening tool, not a diagnosis."
        },
        {
          "question": "Is BMI accurate for athletes?",
          "answer": "BMI does not distinguish muscle from fat, so muscular people may read as overweight. For most people it is a useful guide, but it is not a complete health picture."
        },
        {
          "question": "What is a healthy weight for my height?",
          "answer": "The healthy range corresponds to a BMI between 18.5 and 24.9. The calculator shows the exact weight range for your height in both metric and imperial."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/bmi-calculator.md",
      "markdownDoc": "https://uttir.com/bmi-calculator.md"
    },
    {
      "slug": "color-picker",
      "name": "Color Picker",
      "shortDescription": "Pick any color and copy it as HEX, RGB, or HSL.",
      "url": "https://uttir.com/color-picker",
      "categories": [
        "color-tools",
        "web-tools"
      ],
      "keywords": [
        "color picker",
        "html color picker",
        "color chooser",
        "pick color online",
        "color codes"
      ],
      "useCases": [
        "Pick a color and get its hex, RGB, HSL, and CMYK values",
        "Tweak a color with sliders and see the values update live",
        "Convert a color between hex, RGB, and HSL formats",
        "Generate lighter and darker shades of a base color"
      ],
      "userIntents": [
        "How do I color picker?",
        "Color Picker online",
        "Free color picker no signup",
        "Color Picker that doesn't upload my data",
        "Color Picker in my browser",
        "Best html color picker compared"
      ],
      "privacy": "Color values are processed locally in your browser.",
      "related": [
        "hex-to-rgb",
        "rgb-to-hex",
        "contrast-checker"
      ],
      "inputs": "A color value (hex, RGB, or HSL)",
      "outputs": "A random selection from the input list",
      "howTo": [
        {
          "title": "Pick or type a color",
          "detail": "Use the swatch picker or enter a HEX code directly."
        },
        {
          "title": "Copy the format you need",
          "detail": "HEX, RGB, and HSL are shown with copy buttons."
        }
      ],
      "examples": [
        {
          "title": "A vivid indigo",
          "description": "One color, three formats.",
          "input": "#4f46e5",
          "output": "rgb(79, 70, 229) · hsl(243, 75%, 59%)"
        }
      ],
      "faq": [
        {
          "question": "Which format should I use?",
          "answer": "HEX is the most common in CSS and design tools. RGB matches screen pixels and is handy in code. HSL is the most human-readable when adjusting shades."
        },
        {
          "question": "What is the difference between HEX, RGB, and HSL?",
          "answer": "HEX is a compact way to write RGB (#RRGGBB). RGB is the red/green/blue components, each 0-255. HSL is hue (the color), saturation (how vivid), and lightness (how bright). HSL is usually easier to tweak by hand."
        },
        {
          "question": "What is the difference between HEX, RGB, and HSL?",
          "answer": "HEX is a compact way to write RGB (#RRGGBB). RGB is the red/green/blue components, each 0-255. HSL is hue (the color), saturation (how vivid), and lightness (how bright). HSL is usually easier to tweak by hand."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/color-picker.md",
      "markdownDoc": "https://uttir.com/color-picker.md"
    },
    {
      "slug": "hex-to-rgb",
      "name": "HEX to RGB",
      "shortDescription": "Convert any HEX color code to its RGB and HSL equivalents.",
      "url": "https://uttir.com/hex-to-rgb",
      "categories": [
        "color-tools"
      ],
      "keywords": [
        "hex to rgb",
        "hex to rgb converter",
        "convert hex color",
        "hex color code to rgb"
      ],
      "useCases": [
        "Convert a hex color (#FF5733) to RGB values",
        "Get the RGB values for a CSS color code",
        "Convert hex to RGBA with a custom alpha",
        "Bulk-convert multiple hex colors at once"
      ],
      "userIntents": [
        "How do I hex to rgb?",
        "HEX to RGB online",
        "Free hex to rgb no signup",
        "HEX to RGB that doesn't upload my data",
        "HEX to RGB in my browser",
        "Best hex to rgb converter compared"
      ],
      "privacy": "Conversion runs locally in your browser.",
      "related": [
        "rgb-to-hex",
        "color-picker"
      ],
      "inputs": "A color value (hex, RGB, or HSL)",
      "outputs": "A file in the target format",
      "howTo": [
        {
          "title": "Enter a HEX code",
          "detail": "With or without the leading #, 3 or 6 digits."
        },
        {
          "title": "Copy RGB or HSL",
          "detail": "Both formats appear with copy buttons."
        }
      ],
      "examples": [
        {
          "title": "Shorthand expands",
          "description": "#f80 expands to the same color as #ff8800.",
          "input": "#f80",
          "output": "rgb(255, 136, 0)"
        }
      ],
      "faq": [
        {
          "question": "Do 3-digit codes work?",
          "answer": "Yes. Each digit is doubled: #f80 equals #ff8800."
        },
        {
          "question": "How do I add transparency?",
          "answer": "Use the 8-digit HEX form (#RRGGBBAA) where the last two digits are the alpha (00 = transparent, FF = opaque). Or convert to RGBA, which has an explicit alpha channel."
        },
        {
          "question": "How do I add transparency?",
          "answer": "Use the 8-digit HEX form (#RRGGBBAA) where the last two digits are the alpha (00 = transparent, FF = opaque). Or convert to RGBA, which has an explicit alpha channel."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/hex-to-rgb.md",
      "markdownDoc": "https://uttir.com/hex-to-rgb.md"
    },
    {
      "slug": "rgb-to-hex",
      "name": "RGB to HEX",
      "shortDescription": "Convert RGB values (0–255) into a HEX color code.",
      "url": "https://uttir.com/rgb-to-hex",
      "categories": [
        "color-tools"
      ],
      "keywords": [
        "rgb to hex",
        "rgb to hex converter",
        "convert rgb color",
        "rgb values to hex"
      ],
      "useCases": [
        "Convert RGB values to a hex color code",
        "Convert RGBA (with alpha) to a hex code",
        "Get the hex equivalent of a CSS rgb() color",
        "Standardize colors to hex for a design system"
      ],
      "userIntents": [
        "How do I rgb to hex?",
        "RGB to HEX online",
        "Free rgb to hex no signup",
        "RGB to HEX that doesn't upload my data",
        "RGB to HEX in my browser",
        "Best rgb to hex converter compared"
      ],
      "privacy": "Conversion runs locally in your browser.",
      "related": [
        "hex-to-rgb",
        "color-picker"
      ],
      "inputs": "A color value (hex, RGB, or HSL)",
      "outputs": "A file in the target format",
      "howTo": [
        {
          "title": "Enter R, G, B values",
          "detail": "Whole numbers from 0 to 255."
        },
        {
          "title": "Copy the HEX",
          "detail": "The code appears next to the preview swatch."
        }
      ],
      "examples": [
        {
          "title": "A familiar indigo",
          "description": "Common channel values map to a tidy code.",
          "input": "79, 70, 229",
          "output": "#4f46e5"
        }
      ],
      "faq": [
        {
          "question": "Why 0 to 255?",
          "answer": "Each RGB channel is one byte, giving 256 possible intensities from 0 (none) to 255 (full)."
        },
        {
          "question": "How do I add transparency?",
          "answer": "Output the 8-digit HEX form (#RRGGBBAA) where the last two digits are the alpha (00 = transparent, FF = opaque). Most modern CSS supports this directly."
        },
        {
          "question": "How do I add transparency?",
          "answer": "Output the 8-digit HEX form (#RRGGBBAA) where the last two digits are the alpha (00 = transparent, FF = opaque). Most modern CSS supports this directly."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/rgb-to-hex.md",
      "markdownDoc": "https://uttir.com/rgb-to-hex.md"
    },
    {
      "slug": "contrast-checker",
      "name": "Contrast Checker",
      "shortDescription": "Check text/background color pairs against WCAG AA and AAA contrast requirements.",
      "url": "https://uttir.com/contrast-checker",
      "categories": [
        "color-tools"
      ],
      "keywords": [
        "contrast checker",
        "wcag contrast",
        "color contrast ratio",
        "accessibility contrast checker",
        "text contrast"
      ],
      "useCases": [
        "Verify WCAG AA and AAA contrast for body text and large text",
        "Check the contrast ratio between a foreground and background color",
        "Find a color that meets the 4.5:1 or 7:1 ratio requirement",
        "Audit a design system palette for accessibility"
      ],
      "userIntents": [
        "How do I contrast checker?",
        "Contrast Checker online",
        "Free contrast checker no signup",
        "Contrast Checker that doesn't upload my data",
        "Contrast Checker in my browser",
        "Best wcag contrast compared"
      ],
      "privacy": "Contrast calculations run locally in your browser.",
      "related": [
        "color-picker",
        "hex-to-rgb"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A check result (pass/fail, length, ratio, etc.)",
      "howTo": [
        {
          "title": "Pick text and background colors",
          "detail": "Use the two color pickers or type HEX values."
        },
        {
          "title": "Read the ratio and badges",
          "detail": "Pass/fail is shown for AA and AAA at both text sizes."
        }
      ],
      "examples": [
        {
          "title": "Maximum contrast",
          "description": "Black on white is the reference maximum.",
          "input": "#000000 on #ffffff",
          "output": "21.00 : 1 — passes AA and AAA at all sizes"
        }
      ],
      "faq": [
        {
          "question": "What ratio do I need?",
          "answer": "WCAG AA requires 4.5:1 for normal text and 3:1 for large text (18pt+ or 14pt bold). AAA raises these to 7:1 and 4.5:1."
        },
        {
          "question": "What counts as large text?",
          "answer": "Roughly 18pt (24px) regular or 14pt (18.5px) bold. The large-text thresholds are lower because bigger glyphs stay legible at lower contrast."
        },
        {
          "question": "What is WCAG AA?",
          "answer": "A Web Content Accessibility Guidelines standard. AA requires a contrast ratio of 4.5:1 for normal text and 3:1 for large text. AAA is stricter: 7:1 and 4.5:1. The tool shows which level your colors pass."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/contrast-checker.md",
      "markdownDoc": "https://uttir.com/contrast-checker.md"
    },
    {
      "slug": "jpg-to-png",
      "name": "JPG to PNG",
      "shortDescription": "Convert JPG images to lossless PNG — entirely in your browser.",
      "url": "https://uttir.com/jpg-to-png",
      "categories": [
        "image-tools"
      ],
      "keywords": [
        "jpg to png",
        "convert jpg to png",
        "jpeg to png",
        "image converter"
      ],
      "useCases": [
        "Convert a JPG image to PNG",
        "Convert a photo to a lossless format for editing",
        "Convert a batch of JPGs to PNGs",
        "Convert in the browser without uploading the image"
      ],
      "userIntents": [
        "How do I jpg to png?",
        "JPG to PNG online",
        "Free jpg to png no signup",
        "JPG to PNG that doesn't upload my data",
        "JPG to PNG in my browser",
        "Best convert jpg to png compared"
      ],
      "privacy": "Your image is converted locally in your browser and never uploaded.",
      "related": [
        "png-to-jpg",
        "webp-converter",
        "image-compressor"
      ],
      "inputs": "An image file (JPG, PNG, WebP, HEIC, or other)",
      "outputs": "A file in the target format",
      "howTo": [
        {
          "title": "Choose a JPG",
          "detail": "Click or drag & drop — up to 25 MB."
        },
        {
          "title": "Download the PNG",
          "detail": "The converted file is ready in a second."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "Will the PNG be larger than the JPG?",
          "answer": "Usually yes. JPG is lossy and compact; PNG is lossless. The trade-off is quality and editability, not file size."
        },
        {
          "question": "Does conversion add transparency?",
          "answer": "No. A JPG has no alpha channel, so the PNG keeps the same opaque pixels — just losslessly encoded."
        },
        {
          "question": "Will the file get bigger?",
          "answer": "Usually yes, because PNG is lossless. A JPEG that is 200 KB might become 800 KB as PNG. Use PNG for graphics with sharp edges and text; use JPEG for photos."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/jpg-to-png.md",
      "markdownDoc": "https://uttir.com/jpg-to-png.md"
    },
    {
      "slug": "png-to-jpg",
      "name": "PNG to JPG",
      "shortDescription": "Convert PNG images to compact JPG with adjustable quality and background.",
      "url": "https://uttir.com/png-to-jpg",
      "categories": [
        "image-tools"
      ],
      "keywords": [
        "png to jpg",
        "convert png to jpg",
        "png to jpeg",
        "image converter"
      ],
      "useCases": [
        "Convert a PNG image to JPG",
        "Reduce a PNG’s file size for web use",
        "Convert a batch of PNGs to JPGs",
        "Convert in the browser without uploading the image"
      ],
      "userIntents": [
        "How do I png to jpg?",
        "PNG to JPG online",
        "Free png to jpg no signup",
        "PNG to JPG that doesn't upload my data",
        "PNG to JPG in my browser",
        "Best convert png to jpg compared"
      ],
      "privacy": "Your image is converted locally in your browser and never uploaded.",
      "related": [
        "jpg-to-png",
        "image-compressor",
        "webp-converter"
      ],
      "inputs": "An image file (JPG, PNG, WebP, HEIC, or other)",
      "outputs": "A file in the target format",
      "howTo": [
        {
          "title": "Choose a PNG",
          "detail": "Up to 25 MB."
        },
        {
          "title": "Set background and quality",
          "detail": "The background fills transparent areas; quality balances size vs. fidelity."
        },
        {
          "title": "Download the JPG",
          "detail": "Ready instantly."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "What happens to transparent pixels?",
          "answer": "They are filled with the background color you choose (white by default), because JPG cannot store transparency."
        },
        {
          "question": "Will the file get smaller?",
          "answer": "Usually yes, because JPEG is lossy. A PNG that is 800 KB might become 150 KB as JPEG. The trade-off is a small loss in quality, which is usually invisible for photos."
        },
        {
          "question": "Will the file get smaller?",
          "answer": "Usually yes, because JPEG is lossy. A PNG that is 800 KB might become 150 KB as JPEG. The trade-off is a small loss in quality, which is usually invisible for photos."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/png-to-jpg.md",
      "markdownDoc": "https://uttir.com/png-to-jpg.md"
    },
    {
      "slug": "webp-converter",
      "name": "WebP Converter",
      "shortDescription": "Convert JPG or PNG images to modern WebP for much smaller files.",
      "url": "https://uttir.com/webp-converter",
      "categories": [
        "image-tools",
        "converters"
      ],
      "keywords": [
        "webp converter",
        "convert to webp",
        "jpg to webp",
        "png to webp",
        "webp image"
      ],
      "useCases": [
        "Convert a JPG, PNG, or other image to WebP",
        "Reduce an image’s file size with the WebP format",
        "Convert a batch of images to WebP",
        "Convert in the browser without uploading the images"
      ],
      "userIntents": [
        "How do I webp converter?",
        "WebP Converter online",
        "Free webp converter no signup",
        "WebP Converter that doesn't upload my data",
        "WebP Converter in my browser",
        "Best convert to webp compared"
      ],
      "privacy": "Your image is converted locally in your browser and never uploaded.",
      "related": [
        "image-compressor",
        "jpg-to-png",
        "png-to-jpg"
      ],
      "inputs": "An image file (JPG, PNG, WebP, HEIC, or other)",
      "outputs": "A file in the target format",
      "howTo": [
        {
          "title": "Choose a JPG or PNG",
          "detail": "Up to 25 MB."
        },
        {
          "title": "Set the quality",
          "detail": "Lower quality means smaller files."
        },
        {
          "title": "Download the WebP",
          "detail": "Ready in a second."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "Is WebP widely supported?",
          "answer": "Yes. All modern browsers and current versions of major operating systems support WebP."
        },
        {
          "question": "Will I lose quality?",
          "answer": "WebP is lossy by default here, but at 80–90% quality the difference is usually imperceptible while the file shrinks a lot."
        },
        {
          "question": "What is WebP?",
          "answer": "A modern image format from Google that produces smaller files than JPEG or PNG at the same visual quality. Supported in all modern browsers since 2020."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/webp-converter.md",
      "markdownDoc": "https://uttir.com/webp-converter.md"
    },
    {
      "slug": "image-compressor",
      "name": "Image Compressor",
      "shortDescription": "Shrink image file size with quality and format control, and see the savings before you download.",
      "url": "https://uttir.com/image-compressor",
      "categories": [
        "image-tools"
      ],
      "keywords": [
        "image compressor",
        "compress image",
        "reduce image size",
        "image optimizer",
        "smaller image"
      ],
      "useCases": [
        "Compress a JPG, PNG, or WebP image to a smaller file size",
        "Reduce image dimensions while keeping the same format",
        "Compress in the browser without uploading the image",
        "See the size before and after compression"
      ],
      "userIntents": [
        "How do I image compressor?",
        "Image Compressor online",
        "Free image compressor no signup",
        "Image Compressor that doesn't upload my data",
        "Image Compressor in my browser",
        "Best compress image compared"
      ],
      "privacy": "Your image is compressed locally in your browser and never uploaded.",
      "related": [
        "webp-converter",
        "image-resizer",
        "png-to-jpg"
      ],
      "inputs": "An image file (JPG, PNG, WebP, HEIC, or other)",
      "outputs": "A formatted (pretty-printed) version of the input",
      "howTo": [
        {
          "title": "Choose an image",
          "detail": "JPG, PNG, or WebP up to 25 MB."
        },
        {
          "title": "Tune quality and format",
          "detail": "WebP usually saves the most at a given quality."
        },
        {
          "title": "Check the savings and download",
          "detail": "Before/after sizes are shown side by side."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "Why is my compressed file sometimes bigger?",
          "answer": "If the source is already heavily compressed or tiny, re-encoding at high quality can add data. Lower the quality or switch to WebP."
        },
        {
          "question": "Does compression reduce dimensions?",
          "answer": "No. This tool reduces file size via encoding quality, not pixel dimensions. Use the Image Resizer to change dimensions."
        },
        {
          "question": "What is the difference between quality and size?",
          "answer": "Quality is the encoder's fidelity setting (1-100). Size is the target file size in KB. A quality-based compressor lets you pick how good the image looks; a size-based compressor picks the quality that fits your size target."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/image-compressor.md",
      "markdownDoc": "https://uttir.com/image-compressor.md"
    },
    {
      "slug": "image-resizer",
      "name": "Image Resizer",
      "shortDescription": "Resize images to exact pixel dimensions with optional aspect-ratio lock.",
      "url": "https://uttir.com/image-resizer",
      "categories": [
        "image-tools"
      ],
      "keywords": [
        "image resizer",
        "resize image",
        "scale image",
        "change image size",
        "image dimensions"
      ],
      "useCases": [
        "Resize an image to a specific width and height",
        "Keep the aspect ratio while resizing",
        "Resize without uploading the image",
        "See the file size before and after resizing"
      ],
      "userIntents": [
        "How do I image resizer?",
        "Image Resizer online",
        "Free image resizer no signup",
        "Image Resizer that doesn't upload my data",
        "Image Resizer in my browser",
        "Best resize image compared"
      ],
      "privacy": "Your image is resized locally in your browser and never uploaded.",
      "related": [
        "image-compressor",
        "image-cropper"
      ],
      "inputs": "An image file (JPG, PNG, WebP, HEIC, or other)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Choose an image",
          "detail": "The current dimensions are shown."
        },
        {
          "title": "Set width or height",
          "detail": "With the lock on, the other axis follows automatically."
        },
        {
          "title": "Resize and download",
          "detail": "The result is a PNG at your exact dimensions."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "Can I enlarge an image?",
          "answer": "Yes, but enlarging cannot add real detail — the browser interpolates pixels, so big upscaling looks soft. Downscaling gives the best results."
        },
        {
          "question": "Does resizing reduce quality?",
          "answer": "No — resizing removes pixels, it does not blur. The remaining pixels are the same as before. Quality loss only happens on re-encode (saving the resized image as a new file)."
        },
        {
          "question": "Does resizing reduce quality?",
          "answer": "No — resizing removes pixels, it does not blur. The remaining pixels are the same as before. Quality loss only happens on re-encode (saving the resized image as a new file)."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/image-resizer.md",
      "markdownDoc": "https://uttir.com/image-resizer.md"
    },
    {
      "slug": "image-cropper",
      "name": "Image Cropper",
      "shortDescription": "Crop a precise pixel region from any image.",
      "url": "https://uttir.com/image-cropper",
      "categories": [
        "image-tools"
      ],
      "keywords": [
        "image cropper",
        "crop image",
        "cut image",
        "trim image online"
      ],
      "useCases": [
        "Crop an image to a specific rectangle",
        "Crop to a target aspect ratio (1:1, 16:9, 4:3, etc.)",
        "Crop without uploading the image",
        "Download the cropped image as a PNG or JPG"
      ],
      "userIntents": [
        "How do I image cropper?",
        "Image Cropper online",
        "Free image cropper no signup",
        "Image Cropper that doesn't upload my data",
        "Image Cropper in my browser",
        "Best crop image compared"
      ],
      "privacy": "Your image is cropped locally in your browser and never uploaded.",
      "related": [
        "image-resizer",
        "image-compressor"
      ],
      "inputs": "An image file (JPG, PNG, WebP, HEIC, or other)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Choose an image",
          "detail": "A preview and its dimensions are shown."
        },
        {
          "title": "Enter the crop region",
          "detail": "X, Y, width, and height in pixels."
        },
        {
          "title": "Crop and download",
          "detail": "The extracted region is saved as PNG."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "What do X and Y mean?",
          "answer": "They are the pixel coordinates of the top-left corner of the crop, measured from the top-left of the image (0,0)."
        },
        {
          "question": "Can I crop to a specific aspect ratio?",
          "answer": "Yes. There is a preset list (1:1, 4:3, 16:9, etc.) and a custom ratio input. The crop box is constrained to the ratio as you drag."
        },
        {
          "question": "Can I crop to a specific aspect ratio?",
          "answer": "Yes. There is a preset list (1:1, 4:3, 16:9, etc.) and a custom ratio input. The crop box is constrained to the ratio as you drag."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/image-cropper.md",
      "markdownDoc": "https://uttir.com/image-cropper.md"
    },
    {
      "slug": "image-to-base64",
      "name": "Image to Base64",
      "shortDescription": "Turn a small image into a Base64 data URL you can paste into HTML or CSS.",
      "url": "https://uttir.com/image-to-base64",
      "categories": [
        "image-tools",
        "encoding-tools"
      ],
      "keywords": [
        "image to base64",
        "base64 image",
        "image data url",
        "encode image to base64"
      ],
      "useCases": [
        "Convert an image to a Base64-encoded string",
        "Generate a data URL for inline embedding in CSS or HTML",
        "See the size of the Base64 string before you use it",
        "Convert in the browser without uploading the image"
      ],
      "userIntents": [
        "How do I image to base64?",
        "Image to Base64 online",
        "Free image to base64 no signup",
        "Image to Base64 that doesn't upload my data",
        "Image to Base64 in my browser",
        "Best base64 image compared"
      ],
      "privacy": "Your image is encoded locally in your browser and never uploaded.",
      "related": [
        "base64-encoder",
        "favicon-generator"
      ],
      "inputs": "An image file (JPG, PNG, WebP, HEIC, or other)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Choose a small image",
          "detail": "Under 2 MB is recommended."
        },
        {
          "title": "Copy the data URL",
          "detail": "Paste it into a src attribute or CSS url()."
        }
      ],
      "examples": [
        {
          "title": "Embedding in HTML",
          "description": "The data URL goes straight into the src attribute.",
          "output": "<img src=\"data:image/png;base64,iVBORw0KGgo…\" alt=\"\">"
        }
      ],
      "faq": [
        {
          "question": "When should I use a data URL?",
          "answer": "For tiny, frequently-used assets like icons where avoiding an extra request wins. For real photos, serve a file instead."
        },
        {
          "question": "When is Base64 useful for images?",
          "answer": "Embedding small images directly in HTML or CSS as a data URL. Avoid for large images — Base64 is 33% larger than the binary and inline images cannot be cached separately."
        },
        {
          "question": "When is Base64 useful for images?",
          "answer": "Embedding small images directly in HTML or CSS as a data URL. Avoid for large images — Base64 is 33% larger than the binary and inline images cannot be cached separately."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/image-to-base64.md",
      "markdownDoc": "https://uttir.com/image-to-base64.md"
    },
    {
      "slug": "favicon-generator",
      "name": "Favicon Generator",
      "shortDescription": "Generate favicon PNGs at 16, 32, 48, and 180 px from any image.",
      "url": "https://uttir.com/favicon-generator",
      "categories": [
        "image-tools"
      ],
      "keywords": [
        "favicon generator",
        "create favicon",
        "favicon png",
        "website icon generator"
      ],
      "useCases": [
        "Generate a favicon for a website",
        "Create a favicon from text, an emoji, or an image",
        "Download the favicon in all the sizes a browser needs",
        "Get the HTML to link the favicon to a site"
      ],
      "userIntents": [
        "How do I favicon generator?",
        "Favicon Generator online",
        "Free favicon generator no signup",
        "Favicon Generator that doesn't upload my data",
        "Favicon Generator in my browser",
        "Best create favicon compared"
      ],
      "privacy": "Your image is processed locally in your browser and never uploaded.",
      "related": [
        "image-resizer",
        "image-to-base64"
      ],
      "inputs": "An image file (JPG, PNG, WebP, HEIC, or other)",
      "outputs": "A generated value (UUID, password, QR code, palette, etc.)",
      "howTo": [
        {
          "title": "Choose a square-ish image",
          "detail": "Your logo or icon works well."
        },
        {
          "title": "Download each size",
          "detail": "16, 32, 48, and 180 px PNGs are generated."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "Which sizes do I actually need?",
          "answer": "At minimum 32 px for tabs plus 180 px for Apple devices. Add 16 and 48 for completeness."
        },
        {
          "question": "What sizes do I need?",
          "answer": "A 32x32 ICO for legacy browsers, a 180x180 apple-touch-icon.png for iOS, and a 192x192 + 512x512 PNG for Android. Modern browsers prefer the SVG version. The tool generates all of these from one source image."
        },
        {
          "question": "What sizes do I need?",
          "answer": "A 32x32 ICO for legacy browsers, a 180x180 apple-touch-icon.png for iOS, and a 192x192 + 512x512 PNG for Android. Modern browsers prefer the SVG version. The tool generates all of these from one source image."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/favicon-generator.md",
      "markdownDoc": "https://uttir.com/favicon-generator.md"
    },
    {
      "slug": "heic-to-jpg",
      "name": "HEIC to JPG",
      "shortDescription": "Convert iPhone HEIC photos to JPG right in your browser — fast and completely private.",
      "url": "https://uttir.com/heic-to-jpg",
      "categories": [
        "image-tools",
        "converters"
      ],
      "keywords": [
        "heic to jpg",
        "heic to jpeg",
        "convert heic to jpg",
        "heic converter",
        "iphone heic to jpg",
        "heif to jpg"
      ],
      "useCases": [
        "Convert a HEIC image (Apple’s default) to JPG",
        "Open an iPhone photo on a non-Apple device",
        "Convert a batch of HEIC images to JPG",
        "Convert in the browser without uploading the image"
      ],
      "userIntents": [
        "How do I heic to jpg?",
        "HEIC to JPG online",
        "Free heic to jpg no signup",
        "HEIC to JPG that doesn't upload my data",
        "HEIC to JPG in my browser",
        "Best heic to jpeg compared"
      ],
      "privacy": "Your photo is converted locally in your browser using WebAssembly and never uploaded anywhere.",
      "related": [
        "jpg-to-png",
        "webp-converter",
        "image-compressor"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A file in the target format",
      "howTo": [
        {
          "title": "Choose a HEIC photo",
          "detail": "Files with the .heic or .heif extension, straight from your phone."
        },
        {
          "title": "Set the quality",
          "detail": "Lower quality means a smaller file; 85% is a good default."
        },
        {
          "title": "Download the JPG",
          "detail": "The converted image is ready instantly, with the original previewed alongside."
        }
      ],
      "examples": [
        {
          "title": "iPhone photo to universal format",
          "description": "A 3 MB HEIC photo becomes a standard JPG that any site or app can open.",
          "input": "IMG_1234.HEIC (3.1 MB)",
          "output": "IMG_1234.jpg (≈0.9 MB)"
        }
      ],
      "faq": [
        {
          "question": "Why can’t I open my iPhone photos?",
          "answer": "Many services don’t support the HEIC format. Converting to JPG gives you a universally compatible file with a much smaller footprint."
        },
        {
          "question": "Is my photo uploaded to a server?",
          "answer": "No. The HEIC decoder runs as WebAssembly inside your browser tab. Your photo never leaves your device."
        },
        {
          "question": "Which browsers are supported?",
          "answer": "Any modern browser that supports WebAssembly — Chrome, Edge, Firefox, and Safari all work."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/heic-to-jpg.md",
      "markdownDoc": "https://uttir.com/heic-to-jpg.md"
    },
    {
      "slug": "jpg-to-pdf",
      "name": "JPG to PDF",
      "shortDescription": "Combine JPG and PNG images into a single PDF, one page per image.",
      "url": "https://uttir.com/jpg-to-pdf",
      "categories": [
        "pdf-tools",
        "converters"
      ],
      "keywords": [
        "jpg to pdf",
        "image to pdf",
        "convert images to pdf",
        "png to pdf",
        "create pdf from images"
      ],
      "useCases": [
        "Convert one or more JPG images to a single PDF",
        "Reorder images before creating the PDF",
        "Combine scanned photos into a PDF document",
        "Convert in the browser without uploading the images"
      ],
      "userIntents": [
        "How do I jpg to pdf?",
        "JPG to PDF online",
        "Free jpg to pdf no signup",
        "JPG to PDF that doesn't upload my data",
        "JPG to PDF in my browser",
        "Best image to pdf compared"
      ],
      "privacy": "Your images are combined into a PDF locally in your browser and never uploaded.",
      "related": [
        "pdf-merge",
        "pdf-to-jpg"
      ],
      "inputs": "An image file (JPG, PNG, WebP, HEIC, or other)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Choose images",
          "detail": "JPG or PNG; add as many as you need."
        },
        {
          "title": "Review the order",
          "detail": "Images are placed in the order listed; remove any you don’t want."
        },
        {
          "title": "Combine and download",
          "detail": "The PDF is built instantly."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "What page size will the PDF use?",
          "answer": "Each page matches its image’s pixel dimensions, so nothing is cropped or letterboxed."
        },
        {
          "question": "Will the PDF be searchable?",
          "answer": "No — JPG is a flat image. The PDF will show the image but the text will not be selectable. For searchable PDFs, use the OCR tool first, then convert."
        },
        {
          "question": "Will the PDF be searchable?",
          "answer": "No — JPG is a flat image. The PDF will show the image but the text will not be selectable. For searchable PDFs, use the OCR tool first, then convert."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/jpg-to-pdf.md",
      "markdownDoc": "https://uttir.com/jpg-to-pdf.md"
    },
    {
      "slug": "pdf-to-jpg",
      "name": "PDF to JPG",
      "shortDescription": "Render every page of a PDF as a high-resolution JPG image.",
      "url": "https://uttir.com/pdf-to-jpg",
      "categories": [
        "pdf-tools",
        "converters"
      ],
      "keywords": [
        "pdf to jpg",
        "convert pdf to jpg",
        "pdf to image",
        "extract pdf pages as images"
      ],
      "useCases": [
        "Convert each page of a PDF to a JPG image",
        "Extract images from a PDF",
        "Convert a PDF to images for sharing on social media",
        "Convert in the browser without uploading the PDF"
      ],
      "userIntents": [
        "How do I pdf to jpg?",
        "PDF to JPG online",
        "Free pdf to jpg no signup",
        "PDF to JPG that doesn't upload my data",
        "PDF to JPG in my browser",
        "Best convert pdf to jpg compared"
      ],
      "privacy": "Your PDF is rendered locally in your browser and never uploaded.",
      "related": [
        "jpg-to-pdf",
        "pdf-split"
      ],
      "inputs": "An image file (JPG, PNG, WebP, HEIC, or other)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Choose a PDF",
          "detail": "Pages are rendered automatically."
        },
        {
          "title": "Download pages",
          "detail": "Grab individual pages as JPG."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "Why 2× scale?",
          "answer": "Rendering at double resolution keeps text sharp on high-density displays and when zoomed."
        },
        {
          "question": "Can it handle scanned PDFs?",
          "answer": "Yes. Scanned pages are already images, so they convert directly to JPG."
        },
        {
          "question": "How are multi-page PDFs handled?",
          "answer": "Each page becomes a separate JPG, with the page number appended to the filename (page-1.jpg, page-2.jpg, etc.). You can also choose to combine them into a single tall image."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/pdf-to-jpg.md",
      "markdownDoc": "https://uttir.com/pdf-to-jpg.md"
    },
    {
      "slug": "pdf-merge",
      "name": "PDF Merge",
      "shortDescription": "Combine multiple PDFs into one, in the order you choose.",
      "url": "https://uttir.com/pdf-merge",
      "categories": [
        "pdf-tools"
      ],
      "keywords": [
        "pdf merge",
        "combine pdf",
        "merge pdf files",
        "join pdf",
        "concatenate pdf"
      ],
      "useCases": [
        "Merge multiple PDFs into a single file",
        "Reorder the pages from different PDFs before merging",
        "Combine PDFs without uploading them to a server",
        "Download the merged PDF when done"
      ],
      "userIntents": [
        "How do I pdf merge?",
        "PDF Merge online",
        "Free pdf merge no signup",
        "PDF Merge that doesn't upload my data",
        "PDF Merge in my browser",
        "Best combine pdf compared"
      ],
      "privacy": "Your PDFs are merged locally in your browser and never uploaded.",
      "related": [
        "pdf-split",
        "jpg-to-pdf"
      ],
      "inputs": "A PDF file",
      "outputs": "A random selection from the input list",
      "howTo": [
        {
          "title": "Add PDFs in order",
          "detail": "Two or more; they merge in the listed sequence."
        },
        {
          "title": "Merge and download",
          "detail": "The combined PDF is ready in seconds."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "Are pages reordered or lost?",
          "answer": "No. Every page from every file is copied, in order, into the output."
        },
        {
          "question": "Do encrypted PDFs work?",
          "answer": "Password-protected PDFs are loaded with encryption ignored where possible; a file that cannot be opened will report a clear error."
        },
        {
          "question": "Is the upload secure?",
          "answer": "There is no upload. The PDFs are read from your device, merged in the browser, and the result is downloaded. Nothing leaves your device."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/pdf-merge.md",
      "markdownDoc": "https://uttir.com/pdf-merge.md"
    },
    {
      "slug": "pdf-split",
      "name": "PDF Split",
      "shortDescription": "Extract a page range from a PDF into a new, smaller document.",
      "url": "https://uttir.com/pdf-split",
      "categories": [
        "pdf-tools"
      ],
      "keywords": [
        "pdf split",
        "extract pdf pages",
        "split pdf",
        "pdf page range",
        "cut pdf"
      ],
      "useCases": [
        "Split a PDF into individual pages or page ranges",
        "Extract a specific page range from a PDF",
        "Save selected pages as a new PDF",
        "Split a PDF in the browser without uploading it"
      ],
      "userIntents": [
        "How do I pdf split?",
        "PDF Split online",
        "Free pdf split no signup",
        "PDF Split that doesn't upload my data",
        "PDF Split in my browser",
        "Best extract pdf pages compared"
      ],
      "privacy": "Your PDF is processed locally in your browser and never uploaded.",
      "related": [
        "pdf-merge",
        "pdf-to-jpg"
      ],
      "inputs": "A PDF file",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Choose a PDF",
          "detail": "Its page count is shown."
        },
        {
          "title": "Set the range",
          "detail": "From and to page numbers."
        },
        {
          "title": "Extract and download",
          "detail": "A new PDF with only those pages."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "Can I extract a single page?",
          "answer": "Yes — set From and To to the same page number."
        },
        {
          "question": "Can I extract one page?",
          "answer": "Yes. Set the start and end page to the same page, and the output is a single-page PDF. The tool can also split into ranges (pages 1-3, 4-6, 7-10) and extract every page as a separate file."
        },
        {
          "question": "Can I extract one page?",
          "answer": "Yes. Set the start and end page to the same page, and the output is a single-page PDF. The tool can also split into ranges (pages 1-3, 4-6, 7-10) and extract every page as a separate file."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/pdf-split.md",
      "markdownDoc": "https://uttir.com/pdf-split.md"
    },
    {
      "slug": "pdf-compressor",
      "name": "PDF Compressor",
      "shortDescription": "Repack a PDF with compressed object streams to reduce its file size.",
      "url": "https://uttir.com/pdf-compressor",
      "categories": [
        "pdf-tools"
      ],
      "keywords": [
        "pdf compressor",
        "compress pdf",
        "reduce pdf size",
        "smaller pdf",
        "pdf optimizer"
      ],
      "useCases": [
        "Reduce the file size of a PDF while keeping the content readable",
        "Compress a PDF to fit an email attachment size limit",
        "See the size before and after compression",
        "Compress in the browser without uploading the PDF"
      ],
      "userIntents": [
        "How do I pdf compressor?",
        "PDF Compressor online",
        "Free pdf compressor no signup",
        "PDF Compressor that doesn't upload my data",
        "PDF Compressor in my browser",
        "Best compress pdf compared"
      ],
      "privacy": "Your PDF is compressed locally in your browser and never uploaded.",
      "related": [
        "pdf-merge",
        "pdf-split"
      ],
      "inputs": "A PDF file",
      "outputs": "A compressed file or image (smaller size, same content)",
      "howTo": [
        {
          "title": "Choose a PDF",
          "detail": "Up to 50 MB."
        },
        {
          "title": "Review the savings",
          "detail": "Original vs. compressed size is shown."
        },
        {
          "title": "Download",
          "detail": "Keep whichever file is smaller."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "Why didn’t my PDF shrink much?",
          "answer": "If the PDF is already optimized, most of its size is in compressed images and fonts that lossless repacking cannot reduce. For bigger wins, lower image quality with the Image Compressor before creating the PDF."
        },
        {
          "question": "Is anything lost in compression?",
          "answer": "No. This is structural optimization, not quality reduction — content is preserved exactly."
        },
        {
          "question": "How much can a PDF be compressed?",
          "answer": "It depends on the content. Image-heavy PDFs compress 50-80%. Text-only PDFs compress 10-30%. The tool re-saves the images inside the PDF at a lower quality, which is the main lever."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/pdf-compressor.md",
      "markdownDoc": "https://uttir.com/pdf-compressor.md"
    },
    {
      "slug": "qr-code-generator",
      "name": "QR Code Generator",
      "shortDescription": "Turn URLs, text, and Wi-Fi details into scannable QR codes you can download as PNG or SVG.",
      "url": "https://uttir.com/qr-code-generator",
      "categories": [
        "generators",
        "image-tools"
      ],
      "keywords": [
        "qr code generator",
        "qr generator",
        "make a qr code",
        "qr code maker",
        "free qr code generator",
        "qr code online"
      ],
      "useCases": [
        "Generate a QR code for a URL, vCard, or WiFi network",
        "Create a QR code for an email address or phone number",
        "Encode plain text or a contact card as a QR code",
        "Download a QR code as PNG, SVG, or printable"
      ],
      "userIntents": [
        "How do I qr code generator?",
        "QR Code Generator online",
        "Free qr code generator no signup",
        "QR Code Generator that doesn't upload my data",
        "QR Code Generator in my browser",
        "Best qr generator compared"
      ],
      "privacy": "Your QR code is generated entirely in your browser. Nothing you type is ever sent to a server.",
      "related": [
        "password-generator",
        "uuid-generator",
        "favicon-generator",
        "utm-builder"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Type or paste your content",
          "detail": "A URL, plain text, or any other string to encode."
        },
        {
          "title": "Tune the options",
          "detail": "Adjust the size, error correction level, and colors to match your use."
        },
        {
          "title": "Download or copy",
          "detail": "Save as PNG or SVG, or copy the data URL to embed it anywhere."
        }
      ],
      "examples": [
        {
          "title": "Encode a website link",
          "description": "Scanning the code opens the site directly on a phone.",
          "input": "https://uttir.example",
          "output": "A scannable QR code that resolves to the link above."
        }
      ],
      "faq": [
        {
          "question": "Is the QR code really free?",
          "answer": "Yes. There are no limits, watermarks, or expiration dates — the code is generated locally on your device."
        },
        {
          "question": "What is the error correction level for?",
          "answer": "Higher levels make the code readable even when part of it is damaged or covered. Use High for prints that might get scuffed, Low for clean digital screens."
        },
        {
          "question": "Can I change the colors?",
          "answer": "Yes. Dark and light colors are both customizable, but keep the contrast high — scannable codes need a strong difference between the two."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/qr-code-generator.md",
      "markdownDoc": "https://uttir.com/qr-code-generator.md"
    },
    {
      "slug": "password-generator",
      "name": "Password Generator",
      "shortDescription": "Create strong, random passwords with custom length and character sets — right in your browser.",
      "url": "https://uttir.com/password-generator",
      "categories": [
        "generators",
        "security-tools"
      ],
      "keywords": [
        "password generator",
        "strong password generator",
        "random password",
        "secure password",
        "password maker",
        "create password"
      ],
      "useCases": [
        "Generate a strong, random password",
        "Create a memorable passphrase (4-5 random words)",
        "Generate a one-time PIN code",
        "Build a password that meets a specific policy (length, symbols, digits)"
      ],
      "userIntents": [
        "How do I password generator?",
        "Password Generator online",
        "Free password generator no signup",
        "Password Generator that doesn't upload my data",
        "Password Generator in my browser",
        "Best strong password generator compared"
      ],
      "privacy": "Passwords are generated locally with your browser’s secure random number generator. Nothing leaves this page.",
      "related": [
        "uuid-generator",
        "hash-generator",
        "qr-code-generator"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Set the length",
          "detail": "Longer is stronger; 16 or more characters is a good default."
        },
        {
          "title": "Choose character sets",
          "detail": "Enable or disable letters, numbers, and symbols."
        },
        {
          "title": "Generate and copy",
          "detail": "Click regenerate for a fresh password, then copy it into your password manager."
        }
      ],
      "examples": [
        {
          "title": "A strong default",
          "description": "16 characters with all character sets and no ambiguous letters.",
          "input": "Length 16, all sets, exclude ambiguous",
          "output": "A random 16-character password with a strong entropy score."
        }
      ],
      "faq": [
        {
          "question": "Is this password generator secure?",
          "answer": "Yes. It uses the Web Crypto API’s cryptographically secure random source, the same one browsers use for security-critical operations."
        },
        {
          "question": "Are my passwords saved anywhere?",
          "answer": "No. Passwords are generated in memory on your device and disappear when you leave the page. Use a password manager to store them."
        },
        {
          "question": "What does the entropy score mean?",
          "answer": "Entropy measures how hard a password is to guess in bits. Above 60 bits is good for most uses; above 90 is very strong."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/password-generator.md",
      "markdownDoc": "https://uttir.com/password-generator.md"
    },
    {
      "slug": "email-signature-generator",
      "name": "Email Signature Generator",
      "shortDescription": "Create a professional HTML email signature with your name, role, and contact details in seconds.",
      "url": "https://uttir.com/email-signature-generator",
      "categories": [
        "generators",
        "text-tools"
      ],
      "keywords": [
        "email signature generator",
        "email signature template",
        "html email signature",
        "outlook signature generator",
        "gmail signature generator",
        "business email signature"
      ],
      "useCases": [
        "Build a professional email signature with name, title, and links",
        "Add social media icons, a headshot, and a logo",
        "Copy the signature as HTML to paste into Gmail, Outlook, etc.",
        "Preview the signature before copying"
      ],
      "userIntents": [
        "How do I email signature generator?",
        "Email Signature Generator online",
        "Free email signature generator no signup",
        "Email Signature Generator that doesn't upload my data",
        "Email Signature Generator in my browser",
        "Best email signature template compared"
      ],
      "privacy": "Your details are processed locally in your browser and never leave your device.",
      "related": [
        "meta-tag-generator",
        "utm-builder",
        "qr-code-generator"
      ],
      "inputs": "An email address",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Enter your details",
          "detail": "Name, job title, company, email, phone, and website. Pick an accent color that fits your brand."
        },
        {
          "title": "Preview the signature",
          "detail": "A live preview shows exactly how the signature will look in an email."
        },
        {
          "title": "Copy and paste",
          "detail": "Copy the HTML, open your email settings, and paste it into the signature field."
        }
      ],
      "examples": [
        {
          "title": "A classic business signature",
          "description": "Name, role, and contact lines with an accent bar.",
          "input": "Name: Jane Doe · Title: Marketing Lead · Email: jane@example.com",
          "output": "A clean HTML signature with a colored accent and clickable links."
        }
      ],
      "faq": [
        {
          "question": "How do I add it to Gmail?",
          "answer": "Open Gmail settings → General → Signature, paste the HTML into the box, and save. Gmail supports pasting rich HTML signatures directly."
        },
        {
          "question": "How do I add it to Outlook?",
          "answer": "Open Outlook settings → Mail → Compose and reply, create a new signature, and paste the HTML in. New Outlook and Outlook.com accept HTML signatures from the clipboard."
        },
        {
          "question": "Why does the signature use a table layout?",
          "answer": "Email clients strip modern CSS. The classic table layout is the most reliably rendered structure across Gmail, Outlook, Apple Mail, and mobile clients."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/email-signature-generator.md",
      "markdownDoc": "https://uttir.com/email-signature-generator.md"
    },
    {
      "slug": "unit-converter",
      "name": "Unit Converter",
      "shortDescription": "Convert length, weight, temperature, area, volume, speed, time, and data units instantly.",
      "url": "https://uttir.com/unit-converter",
      "categories": [
        "converters"
      ],
      "keywords": [
        "unit converter",
        "convert units",
        "unit conversion",
        "length converter",
        "temperature converter",
        "weight converter",
        "metric converter"
      ],
      "useCases": [
        "Convert between metric and imperial units (length, mass, volume)",
        "Convert temperatures between Celsius, Fahrenheit, and Kelvin",
        "Convert between area, speed, pressure, energy, and time units",
        "Convert data sizes (bytes, KB, MB, GB, TB)"
      ],
      "userIntents": [
        "How do I unit converter?",
        "Unit Converter online",
        "Free unit converter no signup",
        "Unit Converter that doesn't upload my data",
        "Unit Converter in my browser",
        "Best convert units compared"
      ],
      "privacy": "All conversions happen locally in your browser. No values are sent anywhere.",
      "related": [
        "binary-hex-converter",
        "percentage-calculator",
        "date-calculator",
        "compound-interest-calculator"
      ],
      "inputs": "A date or time value",
      "outputs": "A file in the target format",
      "howTo": [
        {
          "title": "Pick a category",
          "detail": "Length, weight, temperature, area, volume, speed, time, or data."
        },
        {
          "title": "Choose the units",
          "detail": "Select the unit you have and the unit you want, or swap them with one click."
        },
        {
          "title": "Type a value",
          "detail": "The result appears instantly, along with every other equivalent value."
        }
      ],
      "examples": [
        {
          "title": "Miles to kilometers",
          "description": "A 5-mile run converted to the metric system.",
          "input": "5 mi",
          "output": "8.05 km"
        },
        {
          "title": "Fahrenheit to Celsius",
          "description": "A 350 °F oven in Celsius.",
          "input": "350 °F",
          "output": "176.67 °C"
        }
      ],
      "faq": [
        {
          "question": "Are the conversion factors exact?",
          "answer": "Yes. Standard international conversion factors are used, and temperatures are converted with the correct offset formulas rather than a simple multiplier."
        },
        {
          "question": "Do you use decimal or binary units for data?",
          "answer": "Both. The data category includes decimal units (KB, MB, GB) and binary units (KiB, MiB, GiB) so you can compare them directly."
        },
        {
          "question": "Is my data sent anywhere?",
          "answer": "No. Conversion runs entirely in your browser, so nothing you type leaves the page."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/unit-converter.md",
      "markdownDoc": "https://uttir.com/unit-converter.md"
    },
    {
      "slug": "binary-hex-converter",
      "name": "Binary, Hex & Octal Converter",
      "shortDescription": "Convert numbers between binary, octal, decimal, and hexadecimal instantly.",
      "url": "https://uttir.com/binary-hex-converter",
      "categories": [
        "converters"
      ],
      "keywords": [
        "binary to hex",
        "hex to binary converter",
        "decimal to binary",
        "binary to decimal converter",
        "octal converter",
        "number base converter"
      ],
      "useCases": [
        "Use for binary to hex",
        "Use for hex to binary converter",
        "Use for decimal to binary",
        "Use for binary to decimal converter",
        "Use for octal converter"
      ],
      "userIntents": [
        "How do I binary to hex?",
        "Binary, Hex & Octal Converter online",
        "Free binary to hex no signup",
        "Binary, Hex & Octal Converter that doesn't upload my data",
        "Binary, Hex & Octal Converter in my browser",
        "Best hex to binary converter compared"
      ],
      "privacy": "Conversions run locally in your browser — nothing is sent to a server.",
      "related": [
        "unit-converter",
        "hex-to-rgb",
        "base64-encoder"
      ],
      "inputs": "A color value (hex, RGB, or HSL)",
      "outputs": "A file in the target format",
      "howTo": [
        {
          "title": "Pick the input base",
          "detail": "Choose binary, octal, decimal, or hexadecimal for what you are typing."
        },
        {
          "title": "Type a number",
          "detail": "The other three representations update live as you type."
        },
        {
          "title": "Copy what you need",
          "detail": "Each result has a copy button, with or without prefixes like 0x and 0b."
        }
      ],
      "examples": [
        {
          "title": "The byte 255",
          "description": "The maximum value of a single byte in every base.",
          "input": "decimal 255",
          "output": "binary 11111111 · octal 377 · hexadecimal FF"
        }
      ],
      "faq": [
        {
          "question": "What is a base?",
          "answer": "A base is how many digits a number system uses. Binary uses 0–1, octal 0–7, decimal 0–9, and hexadecimal 0–9 plus A–F. The same quantity can be written in any base."
        },
        {
          "question": "Why does hex use letters?",
          "answer": "Base 16 needs 16 digits, so after 0–9 it continues with A=10, B=11, C=12, D=13, E=14, F=15."
        },
        {
          "question": "Can I convert negative numbers?",
          "answer": "Yes. A leading minus sign is preserved through every base, though it is not a two’s-complement representation."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/binary-hex-converter.md",
      "markdownDoc": "https://uttir.com/binary-hex-converter.md"
    },
    {
      "slug": "csv-json-converter",
      "name": "CSV to JSON Converter",
      "shortDescription": "Convert CSV to JSON and JSON to CSV instantly, right in your browser.",
      "url": "https://uttir.com/csv-json-converter",
      "categories": [
        "data-tools",
        "developer-tools"
      ],
      "keywords": [
        "csv to json",
        "json to csv",
        "csv converter",
        "csv to json converter online",
        "convert csv to json",
        "json to csv converter"
      ],
      "useCases": [
        "Convert between CSV and JSON formats",
        "Parse a CSV with custom delimiters and quoting",
        "Generate JSON from a spreadsheet export",
        "Convert a JSON array to a CSV file (or back to JSON)"
      ],
      "userIntents": [
        "How do I csv to json?",
        "CSV to JSON Converter online",
        "Free csv to json no signup",
        "CSV to JSON Converter that doesn't upload my data",
        "CSV to JSON Converter in my browser",
        "Best json to csv compared"
      ],
      "privacy": "Your data is converted entirely in your browser. It is never uploaded anywhere.",
      "related": [
        "json-formatter",
        "json-validator",
        "base64-encoder"
      ],
      "inputs": "A JSON document or fragment",
      "outputs": "A file in the target format",
      "howTo": [
        {
          "title": "Paste your CSV",
          "detail": "The first row is treated as column headers. Semicolon and tab delimiters are detected automatically."
        },
        {
          "title": "Switch direction",
          "detail": "Toggle to \"JSON to CSV\" and paste a JSON array of objects to get a CSV back."
        },
        {
          "title": "Copy the result",
          "detail": "Use the copy button to grab the converted output in one click."
        }
      ],
      "examples": [
        {
          "title": "A simple contacts list",
          "description": "CSV with headers becomes an array of objects.",
          "input": "name,email\nAda,ada@example.com\nGrace,grace@example.com",
          "output": "[{\"name\":\"Ada\",\"email\":\"ada@example.com\"},{\"name\":\"Grace\",\"email\":\"grace@example.com\"}]"
        }
      ],
      "faq": [
        {
          "question": "Does it handle quoted fields with commas?",
          "answer": "Yes. Fields wrapped in double quotes can contain commas, newlines, and escaped quotes, and the parser keeps them intact."
        },
        {
          "question": "What if my CSV uses semicolons?",
          "answer": "The delimiter is detected automatically from the first line. You can also switch it manually between comma, semicolon, and tab."
        },
        {
          "question": "Is my data uploaded to a server?",
          "answer": "No. Conversion happens locally in your browser, so sensitive data never leaves your device."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/csv-json-converter.md",
      "markdownDoc": "https://uttir.com/csv-json-converter.md"
    },
    {
      "slug": "csv-viewer",
      "name": "CSV Viewer",
      "shortDescription": "View any CSV as a sortable, searchable table — paste or drop a file, filter rows, and see column stats in your browser.",
      "url": "https://uttir.com/csv-viewer",
      "categories": [
        "data-tools",
        "developer-tools"
      ],
      "keywords": [
        "csv viewer",
        "view csv online",
        "csv table",
        "csv inspector",
        "open csv file",
        "sort csv",
        "filter csv",
        "csv stats"
      ],
      "useCases": [
        "Open a CSV file as a sortable, searchable table",
        "Filter rows by any cell value",
        "See column stats (unique values, missing cells)",
        "Export a filtered view back to CSV or JSON",
        "Preview a CSV before opening it in Excel"
      ],
      "userIntents": [
        "How do I csv viewer?",
        "CSV Viewer online",
        "Free csv viewer no signup",
        "CSV Viewer that doesn't upload my data",
        "CSV Viewer in my browser",
        "Best view csv online compared"
      ],
      "privacy": "CSV parsing and filtering happen entirely in your browser. Files are never uploaded.",
      "related": [
        "csv-json-converter",
        "json-formatter",
        "json-tree-viewer",
        "text-diff",
        "json-diff"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Paste or drop a CSV",
          "detail": "Drop a file onto the input area, click \"Open file\" to pick one, or just paste CSV text. The first row is treated as the header."
        },
        {
          "title": "Read the stats",
          "detail": "The summary cards show row count, column count, total cells, and the number of empty cells. Useful for a quick \"how messy is this data?\" check."
        },
        {
          "title": "Filter and sort",
          "detail": "Click any column header to sort by it (numeric sort when the values are numbers, alphabetic otherwise). Type in the search box to filter rows by any cell value."
        },
        {
          "title": "Export the result",
          "detail": "Download the filtered view as a CSV, or copy the whole thing as a JSON array. The export reflects the current sort and filter."
        }
      ],
      "examples": [
        {
          "title": "A small contacts list",
          "description": "Six rows, four columns, no missing values.",
          "input": "name,email,role,active\nAda,ada@example.com,engineer,true\nGrace,grace@example.com,engineer,true",
          "output": "A 6×4 table with sortable columns and a search box."
        }
      ],
      "faq": [
        {
          "question": "How large a CSV can it handle?",
          "answer": "Up to 100,000 rows. Larger files slow the browser down; for huge CSVs, use a desktop tool or a small script."
        },
        {
          "question": "Does it handle semicolon or tab delimiters?",
          "answer": "Yes. The viewer auto-detects the delimiter from the first line, just like the converter. Comma, semicolon, and tab are all supported."
        },
        {
          "question": "Is my CSV uploaded?",
          "answer": "No. The file is read in your browser and never sent to a server. You can verify by opening DevTools and watching the Network tab."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/csv-viewer.md",
      "markdownDoc": "https://uttir.com/csv-viewer.md"
    },
    {
      "slug": "json-diff",
      "name": "JSON Diff",
      "shortDescription": "Compare two JSON values semantically. Ignores key order, highlights added/removed/changed paths, and works with nested objects and arrays.",
      "url": "https://uttir.com/json-diff",
      "categories": [
        "developer-tools",
        "data-tools",
        "text-tools"
      ],
      "keywords": [
        "json diff",
        "compare json",
        "json difference",
        "diff json online",
        "json compare",
        "semantic diff",
        "json patch",
        "json visual diff"
      ],
      "useCases": [
        "Compare two JSON configs and see what changed",
        "Diff an API response against an expected payload",
        "Find what changed between two versions of a JSON file",
        "See added, removed, and changed keys at any depth",
        "Generate a patch you can share with a teammate"
      ],
      "userIntents": [
        "How do I json diff?",
        "JSON Diff online",
        "Free json diff no signup",
        "JSON Diff that doesn't upload my data",
        "JSON Diff in my browser",
        "Best compare json compared"
      ],
      "privacy": "Both JSON values are parsed and compared in your browser. Nothing is uploaded — the diff never leaves your device.",
      "related": [
        "json-formatter",
        "json-validator",
        "text-diff",
        "json-tree-viewer",
        "api-tester"
      ],
      "inputs": "A JSON document or fragment",
      "outputs": "A side-by-side or inline diff",
      "howTo": [
        {
          "title": "Paste the two JSON values",
          "detail": "Drop the \"before\" JSON in the left panel, the \"after\" in the right. Both can be objects, arrays, or any JSON value — they do not have to be the same type."
        },
        {
          "title": "Read the table",
          "detail": "Each row is a path (e.g. users[3].email). Green rows are added, red rows removed, amber rows changed. Toggle \"Show unchanged\" to see what stayed the same."
        },
        {
          "title": "Copy the patch",
          "detail": "The \"Copy patch\" button puts a one-line-per-op summary in your clipboard — useful for sharing in chat or in a commit message."
        }
      ],
      "examples": [
        {
          "title": "Detecting a renamed key indirectly",
          "description": "Two objects that differ in one nested value.",
          "input": "Before: {\"user\":{\"name\":\"Ada\",\"age\":30}}\nAfter:  {\"user\":{\"name\":\"Ada\",\"age\":31}}",
          "output": "1 changed: user.age 30 → 31"
        },
        {
          "title": "Array element added",
          "description": "An element was added to the end of a tags array.",
          "input": "Before: [\"eng\",\"lead\"]\nAfter:  [\"eng\",\"lead\",\"reviewer\"]",
          "output": "1 added: [2] \"reviewer\""
        }
      ],
      "faq": [
        {
          "question": "Does it ignore key order?",
          "answer": "Yes, by default. {\"a\":1,\"b\":2} and {\"b\":2,\"a\":1} are treated as identical. Toggle \"Ignore key order\" off to detect reorder as a change."
        },
        {
          "question": "Does it work on arrays?",
          "answer": "Yes. Arrays are compared by index, with added and removed elements reported as such. Note that this is positional — a different sort order is reported as a change to every element."
        },
        {
          "question": "How deep does it go?",
          "answer": "As deep as the JSON. The viewer handles arbitrarily nested structures; the path notation uses dot for object keys and [N] for array indices."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/json-diff.md",
      "markdownDoc": "https://uttir.com/json-diff.md"
    },
    {
      "slug": "pressure-converter",
      "name": "Pressure Converter",
      "shortDescription": "Convert between pascal, bar, psi, atmosphere, mmHg, torr, and other pressure units instantly.",
      "url": "https://uttir.com/pressure-converter",
      "categories": [
        "converters",
        "math-tools"
      ],
      "keywords": [
        "pressure converter",
        "psi converter",
        "bar to psi",
        "pascal converter",
        "atm converter",
        "mmhg to atm",
        "torr converter",
        "kpa to psi"
      ],
      "useCases": [
        "Convert tire pressure between psi, bar, and kPa",
        "Convert atmospheric pressure between atm, mmHg, and Pa",
        "Convert between metric and imperial pressure units",
        "Read a pressure spec sheet and convert to your preferred unit"
      ],
      "userIntents": [
        "How do I pressure converter?",
        "Pressure Converter online",
        "Free pressure converter no signup",
        "Pressure Converter that doesn't upload my data",
        "Pressure Converter in my browser",
        "Best psi converter compared"
      ],
      "privacy": "Conversions run locally in your browser. No values are sent anywhere.",
      "related": [
        "unit-converter",
        "energy-converter",
        "force-converter",
        "power-converter",
        "temperature-converter"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A file in the target format",
      "howTo": [
        {
          "title": "Enter a value",
          "detail": "Type the pressure in any of the supported units. The default is 1 atm."
        },
        {
          "title": "Pick the from / to units",
          "detail": "The \"from\" dropdown lists the source unit; the \"to\" dropdown lists the target. The result updates as you type."
        },
        {
          "title": "Use the swap button",
          "detail": "Click the swap arrow to flip the from and to units. Useful for back-and-forth conversions."
        }
      ],
      "examples": [
        {
          "title": "Tire pressure: 32 psi to bar",
          "description": "A typical car tire at 32 psi (US spec) is about 2.21 bar (European spec).",
          "input": "32 psi",
          "output": "≈ 2.206 bar"
        }
      ],
      "faq": [
        {
          "question": "What unit is used for blood pressure?",
          "answer": "Blood pressure is typically reported in mmHg (millimeters of mercury). 120/80 mmHg is the standard \"normal\" reading."
        },
        {
          "question": "What is the difference between bar and atm?",
          "answer": "1 bar = 100,000 Pa. 1 atm = 101,325 Pa. They differ by about 1.3%; for most practical work, the difference is negligible."
        },
        {
          "question": "Is this the same as the unit-converter on the home page?",
          "answer": "No — this is a focused pressure-only converter with a wider unit list and quick-reference table. The general unit converter covers fewer pressure units."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/pressure-converter.md",
      "markdownDoc": "https://uttir.com/pressure-converter.md"
    },
    {
      "slug": "energy-converter",
      "name": "Energy Converter",
      "shortDescription": "Convert between joule, kilojoule, calorie, kilocalorie, watt-hour, kilowatt-hour, BTU, electron-volt, and more.",
      "url": "https://uttir.com/energy-converter",
      "categories": [
        "converters",
        "math-tools"
      ],
      "keywords": [
        "energy converter",
        "joule converter",
        "kwh to joule",
        "calorie to joule",
        "btu converter",
        "electron volt converter",
        "food calorie converter"
      ],
      "useCases": [
        "Convert kWh from a utility bill to joules (for physics or engineering work)",
        "Convert food calories (kcal) to kilojoules (or back)",
        "Convert BTU (heating / cooling) to joules or kWh",
        "Convert electron-volts (physics) to joules"
      ],
      "userIntents": [
        "How do I energy converter?",
        "Energy Converter online",
        "Free energy converter no signup",
        "Energy Converter that doesn't upload my data",
        "Energy Converter in my browser",
        "Best joule converter compared"
      ],
      "privacy": "Conversions run locally in your browser. No values are sent anywhere.",
      "related": [
        "unit-converter",
        "power-converter",
        "pressure-converter",
        "calorie-calculator",
        "compound-interest-calculator"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A file in the target format",
      "howTo": [
        {
          "title": "Enter a value",
          "detail": "Type the energy in any supported unit. The default is 1 kWh."
        },
        {
          "title": "Pick the units",
          "detail": "The from/to dropdowns list all supported units. Result updates live."
        },
        {
          "title": "Watch the quick-reference table",
          "detail": "For 1, 10, 100, 1000, 10000 in the source unit, the table shows the equivalent in the target."
        }
      ],
      "examples": [
        {
          "title": "1 kWh = how many joules?",
          "description": "One kilowatt-hour is 3.6 megajoules.",
          "input": "1 kWh",
          "output": "= 3,600,000 J (3.6 MJ)"
        }
      ],
      "faq": [
        {
          "question": "How many joules is 1 food Calorie?",
          "answer": "1 food Calorie (1 kcal) = 4,184 J. Food labels in the US use kcal but write \"Calories\" with a capital C."
        },
        {
          "question": "How many BTU does it take to heat a house?",
          "answer": "A typical US home uses about 50,000-100,000 BTU per day in winter (from the furnace)."
        },
        {
          "question": "Why are BTU and kWh different magnitudes?",
          "answer": "BTU is older (steam-engine era); kWh is the modern unit. 1 kWh ≈ 3,412 BTU. Most US heating systems still quote BTU/h (BTU per hour) for power rating, while utility bills use kWh for energy."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/energy-converter.md",
      "markdownDoc": "https://uttir.com/energy-converter.md"
    },
    {
      "slug": "power-converter",
      "name": "Power Converter",
      "shortDescription": "Convert between watt, kilowatt, megawatt, horsepower (mechanical and metric), BTU/h, and more.",
      "url": "https://uttir.com/power-converter",
      "categories": [
        "converters",
        "math-tools"
      ],
      "keywords": [
        "power converter",
        "watt converter",
        "horsepower converter",
        "kw to hp",
        "btu per hour converter",
        "megawatt converter",
        "watt to btu"
      ],
      "useCases": [
        "Convert car engine power between kW and hp",
        "Convert AC unit cooling/heating capacity between BTU/h and kW",
        "Convert generator output between W, kW, MW",
        "Convert metric horsepower (CV/PS) to mechanical horsepower (hp)"
      ],
      "userIntents": [
        "How do I power converter?",
        "Power Converter online",
        "Free power converter no signup",
        "Power Converter that doesn't upload my data",
        "Power Converter in my browser",
        "Best watt converter compared"
      ],
      "privacy": "Conversions run locally in your browser. No values are sent anywhere.",
      "related": [
        "unit-converter",
        "energy-converter",
        "force-converter",
        "pressure-converter",
        "temperature-converter"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A file in the target format",
      "howTo": [
        {
          "title": "Enter a value",
          "detail": "Type the power in any supported unit. The default is 1 kW."
        },
        {
          "title": "Pick the units",
          "detail": "The from/to dropdowns cover all supported power units."
        },
        {
          "title": "Check the quick-reference table",
          "detail": "For 1, 10, 100, 1000, 10000 W (or whatever the source unit is), the table shows the equivalent in the target unit."
        }
      ],
      "examples": [
        {
          "title": "100 hp to kW",
          "description": "A 100-horsepower engine is about 74.6 kW.",
          "input": "100 hp",
          "output": "≈ 74.6 kW"
        }
      ],
      "faq": [
        {
          "question": "What is mechanical vs metric horsepower?",
          "answer": "Mechanical horsepower (hp) is 745.7 W. Metric horsepower (CV in France, PS in Germany) is 735.5 W. They differ by about 1.4%."
        },
        {
          "question": "Why is BTU/h used for air conditioners?",
          "answer": "BTU/h describes the rate of heat transfer; a 12,000 BTU/h AC removes 12,000 BTU per hour. The kW equivalent is 3.52 kW. US consumers are more familiar with the BTU/h number for AC sizing."
        },
        {
          "question": "How many watts is 1 hp?",
          "answer": "1 mechanical horsepower = 745.7 watts. 1 metric horsepower = 735.5 watts."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/power-converter.md",
      "markdownDoc": "https://uttir.com/power-converter.md"
    },
    {
      "slug": "force-converter",
      "name": "Force Converter",
      "shortDescription": "Convert between newton, kilonewton, dyne, pound-force, kilogram-force, ounce-force, kip, and more.",
      "url": "https://uttir.com/force-converter",
      "categories": [
        "converters",
        "math-tools"
      ],
      "keywords": [
        "force converter",
        "newton converter",
        "pound force converter",
        "kgf to n",
        "lbf to n",
        "kip converter",
        "dyne to newton"
      ],
      "useCases": [
        "Convert lbf to N (or back) for engineering specs",
        "Convert kgf to N when reading an old scale or datasheet",
        "Convert between SI (newton) and CGS (dyne) force units",
        "Convert kip values used in US structural engineering"
      ],
      "userIntents": [
        "How do I force converter?",
        "Force Converter online",
        "Free force converter no signup",
        "Force Converter that doesn't upload my data",
        "Force Converter in my browser",
        "Best newton converter compared"
      ],
      "privacy": "Conversions run locally in your browser. No values are sent anywhere.",
      "related": [
        "unit-converter",
        "pressure-converter",
        "power-converter",
        "energy-converter",
        "percentage-calculator"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A file in the target format",
      "howTo": [
        {
          "title": "Enter a value",
          "detail": "Type the force in any supported unit. The default is 1 N."
        },
        {
          "title": "Pick the units",
          "detail": "The from/to dropdowns cover SI, CGS, and US customary force units."
        },
        {
          "title": "Use the quick-reference table",
          "detail": "The 1, 10, 100, 1000, 10000 table helps you eyeball the scale at a glance."
        }
      ],
      "examples": [
        {
          "title": "1 kgf to N",
          "description": "A 1-kilogram force (the pull of Earth gravity on a 1-kg mass) is about 9.807 N.",
          "input": "1 kgf",
          "output": "≈ 9.80665 N"
        }
      ],
      "faq": [
        {
          "question": "What is a kip?",
          "answer": "A kip is 1,000 pound-force. Used in US structural engineering; \"kip\" comes from \"kilo-pound\". 1 kip ≈ 4.448 kN."
        },
        {
          "question": "Is newton-force the same as newton-weight?",
          "answer": "Yes — the newton is a unit of force, not of mass. A newton-force is the force that accelerates a 1-kg mass at 1 m/s²."
        },
        {
          "question": "How do I convert kg (mass) to N (force)?",
          "answer": "Multiply by 9.80665 (the standard gravity in m/s²). The result is the weight of that mass under Earth gravity. To convert in the strict sense, you need the local gravitational acceleration, but for most purposes 9.80665 is correct."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/force-converter.md",
      "markdownDoc": "https://uttir.com/force-converter.md"
    },
    {
      "slug": "angle-converter",
      "name": "Angle Converter",
      "shortDescription": "Convert between degrees, radians, gradians (gon), arcminutes, arcseconds, turns, and milliradians.",
      "url": "https://uttir.com/angle-converter",
      "categories": [
        "converters",
        "math-tools"
      ],
      "keywords": [
        "angle converter",
        "degrees to radians",
        "radians to degrees",
        "gradian converter",
        "arcminutes converter",
        "turn converter",
        "gon converter"
      ],
      "useCases": [
        "Convert between degrees and radians for math problems",
        "Convert degrees with decimal minutes (DMM) or degrees/minutes/seconds (DMS)",
        "Convert angles for surveying, navigation, or astronomy",
        "Convert between turns (full circles), degrees, and radians"
      ],
      "userIntents": [
        "How do I angle converter?",
        "Angle Converter online",
        "Free angle converter no signup",
        "Angle Converter that doesn't upload my data",
        "Angle Converter in my browser",
        "Best degrees to radians compared"
      ],
      "privacy": "Conversions run locally in your browser. No values are sent anywhere.",
      "related": [
        "unit-converter",
        "percentage-calculator",
        "binary-hex-converter",
        "number-base-converter",
        "energy-converter"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A file in the target format",
      "howTo": [
        {
          "title": "Enter a value",
          "detail": "Type the angle in any supported unit. The default is 1 degree."
        },
        {
          "title": "Pick the units",
          "detail": "The from/to dropdowns include degrees, radians, gradians, arcminutes, arcseconds, and turns."
        },
        {
          "title": "Watch the result",
          "detail": "The result updates live as you type. The quick-reference table shows 1, 10, 100, 1000, 10000 in the source unit."
        }
      ],
      "examples": [
        {
          "title": "180° in radians",
          "description": "A straight angle is π radians.",
          "input": "180°",
          "output": "≈ 3.14159 rad"
        }
      ],
      "faq": [
        {
          "question": "When do I use radians vs degrees?",
          "answer": "Use radians for any math or physics formula (sine, cosine, derivatives, integrals). Use degrees for navigation, surveying, and any context where the unit is implicit."
        },
        {
          "question": "What is a gradian (gon)?",
          "answer": "A gradian (or gon) is 1/400 of a full turn. Useful in civil engineering (especially in France and Germany) and in surveying. 100 gon = 90°."
        },
        {
          "question": "What is a milliradian?",
          "answer": "1 milliradian (mrad) = 0.001 rad. Used in ballistics and targeting: 1 mrad spreads the trajectory by 1 meter per kilometer of range."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/angle-converter.md",
      "markdownDoc": "https://uttir.com/angle-converter.md"
    },
    {
      "slug": "fuel-consumption-converter",
      "name": "Fuel Consumption Converter",
      "shortDescription": "Convert between L/100km, km/L, MPG (US), and MPG (UK) — for cars, motorcycles, and any other vehicle.",
      "url": "https://uttir.com/fuel-consumption-converter",
      "categories": [
        "converters",
        "math-tools"
      ],
      "keywords": [
        "fuel consumption converter",
        "mpg converter",
        "l per 100km converter",
        "km to mpg",
        "mpg to l per 100km",
        "fuel economy converter",
        "gas mileage converter"
      ],
      "useCases": [
        "Convert a US-spec MPG rating to European L/100km (or back)",
        "Compare fuel economy across regions (US, UK, EU, Japan)",
        "Convert km/L (common in Asia) to mpg",
        "Compare two vehicles with different rated units"
      ],
      "userIntents": [
        "How do I fuel consumption converter?",
        "Fuel Consumption Converter online",
        "Free fuel consumption converter no signup",
        "Fuel Consumption Converter that doesn't upload my data",
        "Fuel Consumption Converter in my browser",
        "Best mpg converter compared"
      ],
      "privacy": "Conversions run locally in your browser. No values are sent anywhere.",
      "related": [
        "unit-converter",
        "currency-converter",
        "pressure-converter",
        "energy-converter",
        "temperature-converter"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A file in the target format",
      "howTo": [
        {
          "title": "Enter a value",
          "detail": "Type the consumption in any supported unit. The default is 1 L/100km."
        },
        {
          "title": "Pick the units",
          "detail": "The from/to dropdowns cover all four common units."
        },
        {
          "title": "Mind the direction",
          "detail": "L/100km is \"lower is better\"; MPG and km/L are \"higher is better\". A 5 L/100km car is more efficient than a 10 L/100km car; a 50 mpg car is more efficient than a 25 mpg car."
        }
      ],
      "examples": [
        {
          "title": "US 30 mpg → L/100km",
          "description": "A US-spec 30 mpg rating converts to about 7.84 L/100km.",
          "input": "30 mpg (US)",
          "output": "≈ 7.84 L/100km"
        }
      ],
      "faq": [
        {
          "question": "Why is the US gallon different from the UK gallon?",
          "answer": "1 US gallon = 3.785 liters. 1 UK (imperial) gallon = 4.546 liters. A car rated at 30 MPG (US) is about 35 MPG (UK) for the same fuel economy. UK ratings look higher because the UK gallon is larger."
        },
        {
          "question": "Which unit is most common globally?",
          "answer": "L/100km is the official standard in most countries. MPG persists in the US and a few others. km/L is common in East Asia."
        },
        {
          "question": "How do I interpret the result?",
          "answer": "For L/100km, lower is better (less fuel per 100 km). For MPG and km/L, higher is better (more distance per unit of fuel). When comparing two cars, normalize to the same unit."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/fuel-consumption-converter.md",
      "markdownDoc": "https://uttir.com/fuel-consumption-converter.md"
    },
    {
      "slug": "typography-converter",
      "name": "Typography / CSS Unit Converter",
      "shortDescription": "Convert between CSS length units: px, pt, pc, in, cm, mm, em, rem, and %. Default 16px base.",
      "url": "https://uttir.com/typography-converter",
      "categories": [
        "converters",
        "color-tools",
        "web-tools"
      ],
      "keywords": [
        "css unit converter",
        "px to pt",
        "pt to px",
        "em to px",
        "rem to px",
        "px to rem",
        "pixel to point",
        "css typography"
      ],
      "useCases": [
        "Convert pt to px when matching print specs to web layout",
        "Convert em or rem to px (or back) when debugging a CSS file",
        "Convert mm or cm to px when designing a print-ready web page",
        "Convert between relative (em, rem, %) and absolute (px, pt, in) units"
      ],
      "userIntents": [
        "How do I css unit converter?",
        "Typography / CSS Unit Converter online",
        "Free css unit converter no signup",
        "Typography / CSS Unit Converter that doesn't upload my data",
        "Typography / CSS Unit Converter in my browser",
        "Best px to pt compared"
      ],
      "privacy": "Conversions run locally in your browser. No values are sent anywhere.",
      "related": [
        "unit-converter",
        "css-minifier",
        "color-picker",
        "aspect-ratio-calculator",
        "css-gradient-generator"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A file in the target format",
      "howTo": [
        {
          "title": "Enter a value",
          "detail": "Type the length in any supported unit. The default is 1 px."
        },
        {
          "title": "Pick the units",
          "detail": "The from/to dropdowns cover all the CSS length units: px, pt, pc, in, cm, mm, em, rem, %."
        },
        {
          "title": "Mind the base",
          "detail": "em assumes 16px base (browser default). rem also assumes 16px root. If your CSS uses a different base, multiply the em/rem result accordingly."
        }
      ],
      "examples": [
        {
          "title": "12pt to px",
          "description": "12pt (a common body-text size) is exactly 16px in CSS.",
          "input": "12 pt",
          "output": "= 16 px (at 96 DPI / 1px = 0.75pt)"
        }
      ],
      "faq": [
        {
          "question": "Why is 1em = 16px?",
          "answer": "em is relative to the current font size; the browser default is 16px. If you set body { font-size: 18px }, then 1em in a child element would be 18px."
        },
        {
          "question": "When should I use pt instead of px?",
          "answer": "Use pt for print stylesheets (@media print) where you want to match a physical point size. Use px for screen layouts, where pixels are the natural unit."
        },
        {
          "question": "How do I convert a print design (say 8.5x11 inches) to screen pixels?",
          "answer": "Multiply by 96. 8.5 in = 816 px, 11 in = 1056 px. The 96 DPI is the CSS reference pixel and what most browsers use at 100% zoom."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/typography-converter.md",
      "markdownDoc": "https://uttir.com/typography-converter.md"
    },
    {
      "slug": "data-transfer-converter",
      "name": "Data Transfer Rate Converter",
      "shortDescription": "Convert between bits/second, bytes/second, kbps, Mbps, Gbps, kB/s, MB/s, GB/s, and more.",
      "url": "https://uttir.com/data-transfer-converter",
      "categories": [
        "converters",
        "math-tools",
        "network-tools"
      ],
      "keywords": [
        "data transfer converter",
        "kbps to mbps",
        "mbps to mb/s",
        "gigabit converter",
        "byte per second converter",
        "bandwidth converter",
        "network speed converter"
      ],
      "useCases": [
        "Convert internet speed between Mbps (provider quote) and MB/s (download speed)",
        "Convert between bits/second (networking) and bytes/second (file transfer)",
        "Check whether a connection is fast enough for a 4K stream (≥ 25 Mbps)",
        "Convert network speed units for an old spec sheet"
      ],
      "userIntents": [
        "How do I data transfer converter?",
        "Data Transfer Rate Converter online",
        "Free data transfer converter no signup",
        "Data Transfer Rate Converter that doesn't upload my data",
        "Data Transfer Rate Converter in my browser",
        "Best kbps to mbps compared"
      ],
      "privacy": "Conversions run locally in your browser. No values are sent anywhere.",
      "related": [
        "unit-converter",
        "currency-converter",
        "force-converter",
        "json-formatter",
        "base64-encoder"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A file in the target format",
      "howTo": [
        {
          "title": "Enter a value",
          "detail": "Type the rate in any supported unit. The default is 1 Mbit/s."
        },
        {
          "title": "Pick the units",
          "detail": "The from/to dropdowns cover bit/s, kbit/s, Mbit/s, Gbit/s, Tbit/s, and the same range in bytes (B/s through TB/s)."
        },
        {
          "title": "Note the case",
          "detail": "A lowercase \"b\" means bits (kbit/s); an uppercase \"B\" means bytes (kB/s). The factor is 8 between them."
        }
      ],
      "examples": [
        {
          "title": "100 Mbps internet → MB/s download",
          "description": "A 100 Mbps connection (ISP quote) downloads at about 12.5 MB/s (file transfer speed).",
          "input": "100 Mbit/s",
          "output": "≈ 12.5 MB/s"
        }
      ],
      "faq": [
        {
          "question": "Why does my 100 Mbps connection only download at 12.5 MB/s?",
          "answer": "The ISP quotes bits per second (Mbit/s); the download manager shows bytes per second (MB/s). 8 bits = 1 byte, so 100 Mbit/s = 12.5 MB/s. The connection is not slow — the units differ."
        },
        {
          "question": "How much bandwidth do I need for 4K streaming?",
          "answer": "4K HDR streams need 25-50 Mbps. 4K SDR needs 15-25 Mbps. HD needs 5-10 Mbps. SD needs 3-5 Mbps."
        },
        {
          "question": "Are kbps and KB/s the same?",
          "answer": "No. kbps = kilobits per second. KB/s = kilobytes per second. They differ by a factor of 8."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/data-transfer-converter.md",
      "markdownDoc": "https://uttir.com/data-transfer-converter.md"
    },
    {
      "slug": "time-zone-converter",
      "name": "Time Zone Converter",
      "shortDescription": "Convert times between time zones and compare them side by side.",
      "url": "https://uttir.com/time-zone-converter",
      "categories": [
        "date-time-tools"
      ],
      "keywords": [
        "time zone converter",
        "time converter",
        "world time converter",
        "convert time zones",
        "time difference calculator",
        "meeting time planner"
      ],
      "useCases": [
        "Convert a time between two time zones",
        "See what time it is now in any time zone",
        "Plan a meeting across time zones",
        "See the UTC offset and DST status for any zone"
      ],
      "userIntents": [
        "How do I time zone converter?",
        "Time Zone Converter online",
        "Free time zone converter no signup",
        "Time Zone Converter that doesn't upload my data",
        "Time Zone Converter in my browser",
        "Best time converter compared"
      ],
      "privacy": "Time conversion happens instantly in your browser. Nothing is sent to a server.",
      "related": [
        "unix-timestamp-converter",
        "date-calculator",
        "age-calculator"
      ],
      "inputs": "A date or time value",
      "outputs": "A file in the target format",
      "howTo": [
        {
          "title": "Set the date and time",
          "detail": "Pick the moment you want to convert, or use \"Now\" to start from the current time."
        },
        {
          "title": "Choose the source zone",
          "detail": "The time you entered is interpreted in this zone."
        },
        {
          "title": "Read the comparison table",
          "detail": "Every listed city shows the equivalent time and its current UTC offset."
        }
      ],
      "examples": [
        {
          "title": "A meeting across the Atlantic",
          "description": "DST-aware conversion in July.",
          "input": "09:00 America/New_York (July)",
          "output": "14:00 Europe/London, 15:00 Europe/Paris — all automatic."
        }
      ],
      "faq": [
        {
          "question": "Does it handle daylight saving time?",
          "answer": "Yes. Conversion uses the official IANA time zone database, so DST transitions are applied automatically for the exact date you choose."
        },
        {
          "question": "Why is my city not in the list?",
          "answer": "The comparison shows the most common zones. The conversions are computed from the official time zone database, so any IANA zone could be added."
        },
        {
          "question": "What is a UTC offset?",
          "answer": "It is how many hours ahead of or behind Coordinated Universal Time a zone sits right now, for example UTC+09:00 for Tokyo. It changes twice a year in DST regions."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/time-zone-converter.md",
      "markdownDoc": "https://uttir.com/time-zone-converter.md"
    },
    {
      "slug": "hash-generator",
      "name": "Hash Generator",
      "shortDescription": "Generate MD5, SHA-1, SHA-256, and SHA-512 hashes of any text instantly.",
      "url": "https://uttir.com/hash-generator",
      "categories": [
        "developer-tools",
        "security-tools"
      ],
      "keywords": [
        "hash generator",
        "md5 generator",
        "sha256 generator",
        "sha512 generator",
        "sha1 generator",
        "hash calculator"
      ],
      "useCases": [
        "Use for hash generator",
        "Use for md5 generator",
        "Use for sha256 generator",
        "Use for sha512 generator",
        "Use for sha1 generator"
      ],
      "userIntents": [
        "How do I hash generator?",
        "Hash Generator online",
        "Free hash generator no signup",
        "Hash Generator that doesn't upload my data",
        "Hash Generator in my browser",
        "Best md5 generator compared"
      ],
      "privacy": "Hashing runs locally in your browser, so your text and files are never uploaded.",
      "related": [
        "uuid-generator",
        "base64-encoder",
        "password-generator"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A generated value (UUID, password, QR code, palette, etc.)",
      "howTo": [
        {
          "title": "Type or paste text",
          "detail": "All four digests update live as you type."
        },
        {
          "title": "Hash a file instead",
          "detail": "Drop a file anywhere on the page to compute its checksum — useful for verifying downloads."
        },
        {
          "title": "Copy any digest",
          "detail": "Each hash has its own copy button."
        }
      ],
      "examples": [
        {
          "title": "The classic \"abc\" vector",
          "description": "Well-known reference digests.",
          "input": "abc",
          "output": "MD5 900150983cd24fb0d6963f7d28e17f72 · SHA-256 ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
        }
      ],
      "faq": [
        {
          "question": "What is the difference between the algorithms?",
          "answer": "MD5 and SHA-1 are fast but considered weak for security purposes. SHA-256 and SHA-512 are modern, cryptographically secure choices recommended for new work."
        },
        {
          "question": "Can I reverse a hash?",
          "answer": "No. Hashing is one-way by design. The only way to \"reverse\" it is to guess the input and compare hashes, which is why strong passwords matter."
        },
        {
          "question": "Why do hashes look random?",
          "answer": "Even a tiny change in input produces a completely different digest. That avalanche effect is what makes hashes useful for detecting tampering."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/hash-generator.md",
      "markdownDoc": "https://uttir.com/hash-generator.md"
    },
    {
      "slug": "utm-builder",
      "name": "UTM Builder",
      "shortDescription": "Add UTM campaign parameters to any URL so you can track traffic sources accurately in Google Analytics.",
      "url": "https://uttir.com/utm-builder",
      "categories": [
        "seo-tools",
        "developer-tools"
      ],
      "keywords": [
        "utm builder",
        "utm generator",
        "utm tag builder",
        "campaign url builder",
        "google analytics utm",
        "build utm links"
      ],
      "useCases": [
        "Add UTM parameters (source, medium, campaign) to a URL",
        "Build a campaign URL for Google Analytics tracking",
        "Generate a tagged link for an email, ad, or social post",
        "Standardize UTM naming across a team or campaign"
      ],
      "userIntents": [
        "How do I utm builder?",
        "UTM Builder online",
        "Free utm builder no signup",
        "UTM Builder that doesn't upload my data",
        "UTM Builder in my browser",
        "Best utm generator compared"
      ],
      "privacy": "Your URL and campaign details are processed entirely in your browser. Nothing is sent to a server.",
      "related": [
        "slug-generator",
        "email-signature-generator",
        "qr-code-generator",
        "url-encoder"
      ],
      "inputs": "A URL string",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Enter the destination URL",
          "detail": "The full address of the page you want to track, including https://."
        },
        {
          "title": "Fill in your campaign details",
          "detail": "Source (e.g. newsletter), medium (e.g. email), and campaign name (e.g. summer_sale) are required; term and content are optional."
        },
        {
          "title": "Copy the tagged URL",
          "detail": "The builder produces a ready-to-use link with all UTM parameters appended."
        }
      ],
      "examples": [
        {
          "title": "Tag an email campaign",
          "description": "A newsletter link that separates email traffic from every other channel.",
          "input": "https://example.com/shop",
          "output": "https://example.com/shop?utm_source=newsletter&utm_medium=email&utm_campaign=july_sale"
        }
      ],
      "faq": [
        {
          "question": "Which UTM parameters are required?",
          "answer": "Only utm_source, utm_medium, and utm_campaign are needed for basic tracking. utm_term is for paid search keywords and utm_content for differentiating links in the same piece."
        },
        {
          "question": "Are UTM parameters case-sensitive?",
          "answer": "Analytics platforms treat them as case-sensitive, so it is best to use lowercase consistently. The builder keeps whatever you type, so use one convention everywhere."
        },
        {
          "question": "Can I use this for QR codes and short links?",
          "answer": "Yes. Generate the tagged URL here, then feed it into the QR code generator or a link shortener of your choice."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/utm-builder.md",
      "markdownDoc": "https://uttir.com/utm-builder.md"
    },
    {
      "slug": "meta-tag-generator",
      "name": "Meta Tag Generator",
      "shortDescription": "Generate title, meta description, canonical, Open Graph, and Twitter card tags as ready-to-paste HTML.",
      "url": "https://uttir.com/meta-tag-generator",
      "categories": [
        "seo-tools",
        "developer-tools"
      ],
      "keywords": [
        "meta tag generator",
        "meta tags generator",
        "open graph generator",
        "og tags generator",
        "meta description generator",
        "twitter card generator"
      ],
      "useCases": [
        "Use for meta tag generator",
        "Use for meta tags generator",
        "Use for open graph generator",
        "Use for og tags generator",
        "Use for meta description generator"
      ],
      "userIntents": [
        "How do I meta tag generator?",
        "Meta Tag Generator online",
        "Free meta tag generator no signup",
        "Meta Tag Generator that doesn't upload my data",
        "Meta Tag Generator in my browser",
        "Best meta tags generator compared"
      ],
      "privacy": "Everything you type is processed locally in your browser and never sent to a server.",
      "related": [
        "serp-preview",
        "sitemap-generator",
        "robots-txt-generator",
        "json-ld-generator",
        "slug-generator"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A generated value (UUID, password, QR code, palette, etc.)",
      "howTo": [
        {
          "title": "Fill in the fields",
          "detail": "Title and description are the essentials; canonical, Open Graph, and Twitter fields are optional but recommended."
        },
        {
          "title": "Review the generated HTML",
          "detail": "Only the fields you filled in are included, grouped under clear comment headers."
        },
        {
          "title": "Copy and paste into your page",
          "detail": "Paste the block into the <head> section of your HTML or your CMS’s custom head section."
        }
      ],
      "examples": [
        {
          "title": "A complete SEO head block",
          "description": "The generator combines primary, Open Graph, and Twitter tags in one snippet.",
          "input": "Title: Example Page · Description: A short page summary.",
          "output": "<title>Example Page</title>\n<meta name=\"description\" content=\"A short page summary.\">"
        }
      ],
      "faq": [
        {
          "question": "How long should my meta title be?",
          "answer": "Around 60 characters keeps titles from being truncated in most search results. Use the SERP preview tool to check how your title will actually look."
        },
        {
          "question": "What is Open Graph?",
          "answer": "Open Graph tags control how your page appears when shared on Facebook, LinkedIn, and other platforms — the title, image, and description shown in the share card."
        },
        {
          "question": "Are the tags escaped safely?",
          "answer": "Yes. Special characters like quotes and ampersands are escaped automatically so the output stays valid HTML even with unusual input."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/meta-tag-generator.md",
      "markdownDoc": "https://uttir.com/meta-tag-generator.md"
    },
    {
      "slug": "serp-preview",
      "name": "SERP Preview",
      "shortDescription": "Preview how your page title and meta description will look in Google search results before you publish.",
      "url": "https://uttir.com/serp-preview",
      "categories": [
        "seo-tools",
        "text-tools"
      ],
      "keywords": [
        "serp preview",
        "serp snippet preview",
        "google preview tool",
        "meta title preview",
        "meta description preview",
        "google search preview"
      ],
      "useCases": [
        "Use for serp preview",
        "Use for serp snippet preview",
        "Use for google preview tool",
        "Use for meta title preview",
        "Use for meta description preview"
      ],
      "userIntents": [
        "How do I serp preview?",
        "SERP Preview online",
        "Free serp preview no signup",
        "SERP Preview that doesn't upload my data",
        "SERP Preview in my browser",
        "Best serp snippet preview compared"
      ],
      "privacy": "Your title and description are processed locally in your browser. Nothing is sent to a server.",
      "related": [
        "meta-tag-generator",
        "sitemap-generator",
        "keyword-density-checker"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Enter your page title",
          "detail": "Watch the desktop and mobile character counters as you type."
        },
        {
          "title": "Enter the URL",
          "detail": "Shown as the green display URL beneath the title."
        },
        {
          "title": "Enter your meta description",
          "detail": "Aim for roughly 150–155 characters so it does not get cut off."
        }
      ],
      "examples": [
        {
          "title": "A well-sized snippet",
          "description": "A title around 55 characters and a description near 150 characters display fully.",
          "input": "Title: How to Brew the Perfect Cup of Coffee",
          "output": "The full title and description render without truncation in the preview."
        }
      ],
      "faq": [
        {
          "question": "What is the ideal title length?",
          "answer": "Google typically displays about 60 characters on desktop and up to 78 on mobile. Titles close to 60 characters are the safest bet."
        },
        {
          "question": "How long should a meta description be?",
          "answer": "Around 155 characters. Longer descriptions may be truncated with an ellipsis in search results."
        },
        {
          "question": "Does this guarantee my snippet looks exactly like this?",
          "answer": "No — Google may rewrite titles and descriptions based on the search query. This is a close approximation that is useful for sizing and message testing."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/serp-preview.md",
      "markdownDoc": "https://uttir.com/serp-preview.md"
    },
    {
      "slug": "keyword-density-checker",
      "name": "Keyword Density Checker",
      "shortDescription": "Analyze keyword frequency and density in any text, and see your most-used keywords ranked at a glance.",
      "url": "https://uttir.com/keyword-density-checker",
      "categories": [
        "seo-tools",
        "text-tools"
      ],
      "keywords": [
        "keyword density checker",
        "keyword density calculator",
        "keyword frequency checker",
        "seo keyword analysis",
        "check keyword density",
        "top keywords tool"
      ],
      "useCases": [
        "Use for keyword density checker",
        "Use for keyword density calculator",
        "Use for keyword frequency checker",
        "Use for seo keyword analysis",
        "Use for check keyword density"
      ],
      "userIntents": [
        "How do I keyword density checker?",
        "Keyword Density Checker online",
        "Free keyword density checker no signup",
        "Keyword Density Checker that doesn't upload my data",
        "Keyword Density Checker in my browser",
        "Best keyword density calculator compared"
      ],
      "privacy": "Your text is analyzed entirely in your browser and never uploaded anywhere.",
      "related": [
        "word-counter",
        "serp-preview",
        "meta-tag-generator"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Paste your content",
          "detail": "Any amount of text — a blog post, product page, or ad copy."
        },
        {
          "title": "Check a specific keyword (optional)",
          "detail": "See its exact occurrence count and density percentage."
        },
        {
          "title": "Review the top keywords list",
          "detail": "Spot accidental repetition and find opportunities to mention your main keyword."
        }
      ],
      "examples": [
        {
          "title": "Check a keyword in a paragraph",
          "description": "How density is calculated for a repeated phrase.",
          "input": "The cat sat on the mat. The cat purred. The cat is happy.",
          "output": "\"cat\" appears 3 times in 13 words — a density of about 23.1%."
        }
      ],
      "faq": [
        {
          "question": "What is a good keyword density?",
          "answer": "There is no perfect number — 1–3% is a common natural range. What matters more is that your content reads naturally and answers the searcher’s intent."
        },
        {
          "question": "Does keyword density affect rankings?",
          "answer": "It is a weak signal on its own. Modern search engines prioritize relevance and quality, and obvious keyword stuffing can actually hurt your rankings."
        },
        {
          "question": "Is my content uploaded anywhere?",
          "answer": "No. The analysis runs entirely in your browser — your draft stays private on your device."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/keyword-density-checker.md",
      "markdownDoc": "https://uttir.com/keyword-density-checker.md"
    },
    {
      "slug": "json-ld-generator",
      "name": "JSON-LD Schema Generator",
      "shortDescription": "Generate valid schema.org JSON-LD structured data for articles, FAQs, organizations, and local businesses.",
      "url": "https://uttir.com/json-ld-generator",
      "categories": [
        "seo-tools"
      ],
      "keywords": [
        "json ld generator",
        "schema markup generator",
        "schema.org generator",
        "faq schema generator",
        "structured data generator",
        "json ld schema"
      ],
      "useCases": [
        "Generate JSON-LD structured data for a page (Article, Product, Recipe, etc.)",
        "Add schema.org markup to improve search rich results",
        "Validate the JSON-LD against the schema.org spec",
        "Copy the JSON-LD script to paste into a page head"
      ],
      "userIntents": [
        "How do I json ld generator?",
        "JSON-LD Schema Generator online",
        "Free json ld generator no signup",
        "JSON-LD Schema Generator that doesn't upload my data",
        "JSON-LD Schema Generator in my browser",
        "Best schema markup generator compared"
      ],
      "privacy": "Your structured data is generated locally in your browser and never sent to a server.",
      "related": [
        "json-formatter",
        "meta-tag-generator",
        "json-validator"
      ],
      "inputs": "A JSON document or fragment",
      "outputs": "A generated value (UUID, password, QR code, palette, etc.)",
      "howTo": [
        {
          "title": "Pick a schema type",
          "detail": "Article, FAQ, Organization, or Local Business."
        },
        {
          "title": "Fill in the fields",
          "detail": "Only the fields you fill in appear in the output, so partial data stays valid."
        },
        {
          "title": "Copy the JSON-LD",
          "detail": "Paste it into <script type=\"application/ld+json\">…</script> in your page head, then validate with Google’s Rich Results Test."
        }
      ],
      "examples": [
        {
          "title": "FAQ schema",
          "description": "Questions and answers formatted for Google’s FAQ rich results.",
          "input": "Q: How fast is it?\nA: Very fast.",
          "output": "{\"@context\":\"https://schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"How fast is it?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Very fast.\"}}]}"
        }
      ],
      "faq": [
        {
          "question": "What is JSON-LD?",
          "answer": "JSON-LD (JSON for Linking Data) is a standard format for describing data to search engines. It is the format Google recommends for structured data."
        },
        {
          "question": "Where do I put the generated code?",
          "answer": "Wrap it in <script type=\"application/ld+json\">…</script> and place it anywhere in the head or body of the page. Many CMS plugins also accept raw schema markup."
        },
        {
          "question": "How do I check that my schema is valid?",
          "answer": "Paste your page URL into Google’s Rich Results Test or validate the JSON itself with the JSON formatter on this site."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/json-ld-generator.md",
      "markdownDoc": "https://uttir.com/json-ld-generator.md"
    },
    {
      "slug": "sitemap-generator",
      "name": "Sitemap Generator",
      "shortDescription": "Generate a clean XML sitemap for your website in seconds.",
      "url": "https://uttir.com/sitemap-generator",
      "categories": [
        "seo-tools",
        "developer-tools"
      ],
      "keywords": [
        "sitemap generator",
        "xml sitemap generator",
        "generate sitemap",
        "sitemap.xml generator",
        "seo sitemap"
      ],
      "useCases": [
        "Use for sitemap generator",
        "Use for xml sitemap generator",
        "Use for generate sitemap",
        "Use for sitemap.xml generator",
        "Use for seo sitemap"
      ],
      "userIntents": [
        "How do I sitemap generator?",
        "Sitemap Generator online",
        "Free sitemap generator no signup",
        "Sitemap Generator that doesn't upload my data",
        "Sitemap Generator in my browser",
        "Best xml sitemap generator compared"
      ],
      "privacy": "Your URLs are processed locally in your browser and never sent to a server.",
      "related": [
        "meta-tag-generator",
        "robots-txt-generator",
        "serp-preview",
        "json-ld-generator"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A generated value (UUID, password, QR code, palette, etc.)",
      "howTo": [
        {
          "title": "Paste your URLs",
          "detail": "One URL per line, starting with https://. Only http(s) URLs are accepted."
        },
        {
          "title": "Add optional metadata",
          "detail": "Set a global last-modified date, change frequency, and priority that apply to every URL."
        },
        {
          "title": "Copy and upload",
          "detail": "Copy the XML, save it as sitemap.xml, and upload it to the root of your domain."
        }
      ],
      "examples": [
        {
          "title": "A small site sitemap",
          "description": "Two URLs with defaults applied.",
          "input": "https://example.com/\nhttps://example.com/about",
          "output": "A valid <urlset> document with a <url> entry for each page."
        }
      ],
      "faq": [
        {
          "question": "Where do I upload the sitemap?",
          "answer": "To the root of your domain as sitemap.xml, then submit the URL (for example https://yoursite.com/sitemap.xml) in Google Search Console."
        },
        {
          "question": "What does change frequency mean?",
          "answer": "It hints to search engines how often a page changes — daily, weekly, monthly, and so on. It is a hint, not a directive."
        },
        {
          "question": "Is this valid for Bing too?",
          "answer": "Yes. The sitemap protocol is a shared standard supported by Google, Bing, and other major search engines."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/sitemap-generator.md",
      "markdownDoc": "https://uttir.com/sitemap-generator.md"
    },
    {
      "slug": "robots-txt-generator",
      "name": "robots.txt Generator",
      "shortDescription": "Generate a valid robots.txt with allow and disallow rules, sitemaps, and AI crawler directives.",
      "url": "https://uttir.com/robots-txt-generator",
      "categories": [
        "seo-tools",
        "developer-tools"
      ],
      "keywords": [
        "robots.txt generator",
        "robots txt generator",
        "create robots.txt",
        "robots.txt checker",
        "robotstxt",
        "block ai crawlers"
      ],
      "useCases": [
        "Use for robots.txt generator",
        "Use for robots txt generator",
        "Use for create robots.txt",
        "Use for robots.txt checker",
        "Use for robotstxt"
      ],
      "userIntents": [
        "How do I robots.txt generator?",
        "robots.txt Generator online",
        "Free robots.txt generator no signup",
        "robots.txt Generator that doesn't upload my data",
        "robots.txt Generator in my browser",
        "Best robots txt generator compared"
      ],
      "privacy": "Your rules are generated locally in your browser. Nothing is sent to a server.",
      "related": [
        "sitemap-generator",
        "meta-tag-generator",
        "serp-preview"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A generated value (UUID, password, QR code, palette, etc.)",
      "howTo": [
        {
          "title": "Set global rules",
          "detail": "Allow and disallow paths apply to all crawlers, e.g. /admin should be disallowed."
        },
        {
          "title": "Add your sitemap",
          "detail": "Include the full URL, for example https://yoursite.com/sitemap.xml."
        },
        {
          "title": "Choose AI crawler rules",
          "detail": "Optionally add a section that explicitly allows or blocks generative-AI crawlers like GPTBot and ClaudeBot."
        },
        {
          "title": "Copy and upload",
          "detail": "Save the output as robots.txt in the root of your domain."
        }
      ],
      "examples": [
        {
          "title": "A typical marketing site",
          "description": "Allow everything, point to the sitemap, and greet AI crawlers.",
          "input": "Allow: / · Sitemap: https://example.com/sitemap.xml",
          "output": "A robots.txt with a universal allow rule, sitemap reference, and AI section."
        }
      ],
      "faq": [
        {
          "question": "Where do I put robots.txt?",
          "answer": "In the root of your domain, so it is served at https://yoursite.com/robots.txt. It applies to the whole site (subdomains have their own)."
        },
        {
          "question": "Should I block AI crawlers?",
          "answer": "That depends on your goals. If you want generative engines to cite and summarize your content, leave them allowed. If not, list their user agents under Disallow."
        },
        {
          "question": "Is robots.txt a security measure?",
          "answer": "No. It is a request, not a barrier — any crawler can ignore it. Use real access controls for anything private."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/robots-txt-generator.md",
      "markdownDoc": "https://uttir.com/robots-txt-generator.md"
    },
    {
      "slug": "lorem-ipsum-generator",
      "name": "Lorem Ipsum Generator",
      "shortDescription": "Generate placeholder Lorem Ipsum paragraphs for designs, mockups, and content layouts.",
      "url": "https://uttir.com/lorem-ipsum-generator",
      "categories": [
        "generators",
        "text-tools"
      ],
      "keywords": [
        "lorem ipsum",
        "lorem ipsum generator",
        "placeholder text",
        "filler text",
        "lorem generator",
        "dummy text"
      ],
      "useCases": [
        "Generate Lorem Ipsum placeholder text for a mockup",
        "Get a specific number of paragraphs, sentences, or words",
        "Fill a layout with realistic-looking filler text",
        "Generate placeholder text for a design comp or wireframe"
      ],
      "userIntents": [
        "How do I lorem ipsum?",
        "Lorem Ipsum Generator online",
        "Free lorem ipsum no signup",
        "Lorem Ipsum Generator that doesn't upload my data",
        "Lorem Ipsum Generator in my browser",
        "Best lorem ipsum generator compared"
      ],
      "privacy": "Generated entirely in your browser. Nothing is uploaded or stored.",
      "related": [
        "password-generator",
        "qr-code-generator",
        "slug-generator"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A generated value (UUID, password, QR code, palette, etc.)",
      "howTo": [
        {
          "title": "Set paragraph count",
          "detail": "Any number from 1 to 50. Defaults to 3."
        },
        {
          "title": "Set words per paragraph",
          "detail": "Any number from 10 to 200. Defaults to 60."
        },
        {
          "title": "Generate and copy",
          "detail": "Press Generate for a fresh batch; Copy puts the whole block on your clipboard."
        }
      ],
      "examples": [
        {
          "title": "3 paragraphs × 60 words",
          "description": "A common default for filling a full article-shaped layout.",
          "output": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ..."
        },
        {
          "title": "1 paragraph × 20 words",
          "description": "Short caption or button label placeholder.",
          "output": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ..."
        }
      ],
      "faq": [
        {
          "question": "Where does Lorem Ipsum come from?",
          "answer": "The standard Lorem Ipsum passage is a scrambled section of Cicero's \"De Finibus Bonorum et Malorum\" (On the Ends of Good and Evil), written in 45 BC. It has been used as placeholder text since the 1500s."
        },
        {
          "question": "Can I use Lorem Ipsum in commercial projects?",
          "answer": "Yes. Lorem Ipsum is uncopyrighted, public domain text. It contains no proprietary content, so it is safe to use in mockups, prototypes, designs, and templates that ship to clients."
        },
        {
          "question": "Is the output random?",
          "answer": "Each generate uses a fresh seed so you get different wording each time, but the first five words of every paragraph are always \"Lorem ipsum dolor sit amet\" to match traditional typesetting conventions."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/lorem-ipsum-generator.md",
      "markdownDoc": "https://uttir.com/lorem-ipsum-generator.md"
    },
    {
      "slug": "random-number-generator",
      "name": "Random Number Generator",
      "shortDescription": "Pick a random number, roll dice, or shuffle a list. Cryptographically secure, runs locally.",
      "url": "https://uttir.com/random-number-generator",
      "categories": [
        "generators",
        "math-tools"
      ],
      "keywords": [
        "random number generator",
        "random number",
        "pick a number",
        "roll dice",
        "shuffle list",
        "random picker"
      ],
      "useCases": [
        "Generate a random number in a range (e.g. 1-100)",
        "Generate multiple random numbers at once",
        "Generate unique random numbers (no duplicates)",
        "Use a cryptographically-secure source for game or decision use"
      ],
      "userIntents": [
        "How do I random number generator?",
        "Random Number Generator online",
        "Free random number generator no signup",
        "Random Number Generator that doesn't upload my data",
        "Random Number Generator in my browser",
        "Best random number compared"
      ],
      "privacy": "Numbers come from your browser’s cryptographically secure RNG. Nothing is sent anywhere.",
      "related": [
        "password-generator",
        "uuid-generator",
        "lorem-ipsum-generator"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A random selection from the input list",
      "howTo": [
        {
          "title": "Choose a range",
          "detail": "Set the minimum and maximum (inclusive)."
        },
        {
          "title": "Pick how many",
          "detail": "One number or a batch — useful for giveaways and raffles."
        },
        {
          "title": "Or use a preset",
          "detail": "Roll one or many six-sided dice, or shuffle any list of items."
        }
      ],
      "examples": [
        {
          "title": "Pick a winner",
          "description": "Generate one number from 1 to 100 for a giveaway.",
          "output": "42"
        },
        {
          "title": "Roll 3d6",
          "description": "Roll three six-sided dice and add them up.",
          "output": "5 + 2 + 6 = 13"
        }
      ],
      "faq": [
        {
          "question": "How random is this?",
          "answer": "Numbers come from crypto.getRandomValues, a cryptographically secure RNG provided by your browser. The same API is used for TLS, password generation, and other security-sensitive work."
        },
        {
          "question": "Can I exclude some numbers?",
          "answer": "Not directly, but you can reroll the draw until you get a value that works for you. Each draw is independent."
        },
        {
          "question": "Is the random number cryptographically secure?",
          "answer": "Yes. The tool uses the browser's crypto.getRandomValues(), which is the platform's secure random source. The output is suitable for cryptographic keys, salts, nonces, and any place where predictability is a problem."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/random-number-generator.md",
      "markdownDoc": "https://uttir.com/random-number-generator.md"
    },
    {
      "slug": "html-entity-encoder-decoder",
      "name": "HTML Entity Encoder/Decoder",
      "shortDescription": "Encode special characters to HTML entities (& < > \" ’) and decode named, decimal, or hex entities back to text.",
      "url": "https://uttir.com/html-entity-encoder-decoder",
      "categories": [
        "encoding-tools",
        "developer-tools",
        "text-tools"
      ],
      "keywords": [
        "html entity encoder",
        "html entity decoder",
        "html escape",
        "html unescape",
        "encode html entities",
        "decode html entities"
      ],
      "useCases": [
        "Encode special characters as HTML entities (&amp; &lt; &gt;)",
        "Decode HTML entities back to their original characters",
        "Convert text for use in an HTML attribute or text node",
        "See the entity name, decimal, and hex for each character"
      ],
      "userIntents": [
        "How do I html entity encoder?",
        "HTML Entity Encoder/Decoder online",
        "Free html entity encoder no signup",
        "HTML Entity Encoder/Decoder that doesn't upload my data",
        "HTML Entity Encoder/Decoder in my browser",
        "Best html entity decoder compared"
      ],
      "privacy": "All conversion happens locally in your browser. No text leaves your device.",
      "related": [
        "base64-encoder",
        "url-encoder",
        "json-formatter"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "An encoded string (Base64, URL, HTML entity, etc.)",
      "howTo": [
        {
          "title": "Encode or decode",
          "detail": "Switch the mode with the toggle at the top of the page."
        },
        {
          "title": "Paste your text",
          "detail": "Type or paste into the input box. Output updates as you type."
        },
        {
          "title": "Copy the result",
          "detail": "Use the Copy button to put the converted text on your clipboard."
        }
      ],
      "examples": [
        {
          "title": "Encode a tag",
          "description": "Convert <div> to its escaped form.",
          "output": "&lt;div&gt;"
        },
        {
          "title": "Decode a named entity",
          "description": "&copy; 2024 — Uttir → © 2024 — Uttir",
          "output": "© 2024 — Uttir"
        }
      ],
      "faq": [
        {
          "question": "What is the difference between basic and full encoding?",
          "answer": "Basic encoding escapes only the five reserved characters (& < > \" '). Full encoding also turns every non-ASCII character into a numeric entity, which can help avoid encoding issues when serving the same HTML across many systems."
        },
        {
          "question": "Does the decoder handle decimal and hex entities?",
          "answer": "Yes. Both &#169; (decimal) and &#xA9; (hex) are recognized, along with any named entity from the standard set. Unknown entities are left as-is."
        },
        {
          "question": "What is the difference between named and numeric entities?",
          "answer": "Named entities use a short name (&amp; for &, &lt; for <, &gt; for >). Numeric entities use the Unicode code point (&#38; for &, &#60; for <, &#62; for >). Both render identically; named is more readable, numeric is more universal."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/html-entity-encoder-decoder.md",
      "markdownDoc": "https://uttir.com/html-entity-encoder-decoder.md"
    },
    {
      "slug": "morse-code-translator",
      "name": "Morse Code Translator",
      "shortDescription": "Translate text to Morse code and decode Morse back to text. Letter-perfect ITU/ANSI standard.",
      "url": "https://uttir.com/morse-code-translator",
      "categories": [
        "encoding-tools",
        "developer-tools",
        "text-tools"
      ],
      "keywords": [
        "morse code translator",
        "morse code",
        "morse to text",
        "text to morse",
        "morse decoder",
        "morse encoder"
      ],
      "useCases": [
        "Use for morse code translator",
        "Use for morse code",
        "Use for morse to text",
        "Use for text to morse",
        "Use for morse decoder"
      ],
      "userIntents": [
        "How do I morse code translator?",
        "Morse Code Translator online",
        "Free morse code translator no signup",
        "Morse Code Translator that doesn't upload my data",
        "Morse Code Translator in my browser",
        "Best morse code compared"
      ],
      "privacy": "Translation runs entirely in your browser.",
      "related": [
        "html-entity-encoder-decoder",
        "base64-encoder",
        "base32-encoder-decoder"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A decoded string (Base64, URL, HTML entity, JWT, etc.)",
      "howTo": [
        {
          "title": "Choose direction",
          "detail": "Pick \"Text → Morse\" or \"Morse → Text\"."
        },
        {
          "title": "Paste your input",
          "detail": "Type or paste. The other side updates live."
        },
        {
          "title": "Copy the result",
          "detail": "Use the Copy button for a clean output."
        }
      ],
      "examples": [
        {
          "title": "SOS",
          "description": "The universal distress signal.",
          "output": "... --- ..."
        },
        {
          "title": "Hello",
          "description": "Plain text to Morse.",
          "output": ".... . .-.. .-.. ---"
        }
      ],
      "faq": [
        {
          "question": "What alphabet do you use?",
          "answer": "The ITU/ANSI standard used by amateur radio operators worldwide. Letter-spacing is one space, word-spacing is \" / \"."
        },
        {
          "question": "Why are some letters shown as \"?\" when decoding?",
          "answer": "A \"?\" appears wherever the decoder hits a sequence that does not match any standard symbol. That usually means a typo in the Morse or extra/missing spaces."
        },
        {
          "question": "Is there a standard for Morse code?",
          "answer": "Yes — the International Morse Code standard, last revised in 2004. The tool follows it, including the special prosigns (CT, SK, AR) used by radio operators."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/morse-code-translator.md",
      "markdownDoc": "https://uttir.com/morse-code-translator.md"
    },
    {
      "slug": "base32-encoder-decoder",
      "name": "Base32 Encoder/Decoder",
      "shortDescription": "Encode text to Base32 and decode Base32 strings back. RFC 4648 alphabet, UTF-8 safe.",
      "url": "https://uttir.com/base32-encoder-decoder",
      "categories": [
        "encoding-tools",
        "developer-tools"
      ],
      "keywords": [
        "base32 encoder",
        "base32 decoder",
        "base32",
        "encode base32",
        "decode base32",
        "base32 online"
      ],
      "useCases": [
        "Use for base32 encoder",
        "Use for base32 decoder",
        "Use for base32",
        "Use for encode base32",
        "Use for decode base32"
      ],
      "userIntents": [
        "How do I base32 encoder?",
        "Base32 Encoder/Decoder online",
        "Free base32 encoder no signup",
        "Base32 Encoder/Decoder that doesn't upload my data",
        "Base32 Encoder/Decoder in my browser",
        "Best base32 decoder compared"
      ],
      "privacy": "Encoding and decoding happen entirely in your browser.",
      "related": [
        "base64-encoder",
        "base64-decoder",
        "hash-generator"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "An encoded string (Base64, URL, HTML entity, etc.)",
      "howTo": [
        {
          "title": "Choose direction",
          "detail": "Switch between Encode and Decode with the toggle."
        },
        {
          "title": "Paste input",
          "detail": "The output updates as you type."
        },
        {
          "title": "Copy the result",
          "detail": "One click to copy the encoded or decoded value."
        }
      ],
      "examples": [
        {
          "title": "Encode \"foobar\"",
          "description": "A canonical RFC 4648 test vector.",
          "output": "MZXW6YTBOI======"
        },
        {
          "title": "Decode a TOTP secret",
          "description": "Most TOTP secrets are stored as Base32.",
          "output": "JBSWY3DPEHPK3PXP"
        }
      ],
      "faq": [
        {
          "question": "What is the difference between Base32 and Base64?",
          "answer": "Base32 uses a 32-character uppercase alphabet (A–Z, 2–7) and is case-insensitive. Base64 uses a 64-character mixed-case alphabet and is about 8% more compact. Base32 is preferred when humans may need to read or retype the value."
        },
        {
          "question": "Is this safe to use for production secrets?",
          "answer": "For one-off encoding and decoding, yes. For storing secrets long-term, prefer your platform’s native secret manager. Anything pasted here is processed only inside your browser — no network requests are made."
        },
        {
          "question": "When is Base32 used?",
          "answer": "Where Base64's character set is a problem: case-insensitive systems, URLs, filesystems, and human-typed codes. Base32 uses only A-Z and 2-7, which is easier to read, type, and process in those environments."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/base32-encoder-decoder.md",
      "markdownDoc": "https://uttir.com/base32-encoder-decoder.md"
    },
    {
      "slug": "cron-parser",
      "name": "Cron Expression Parser",
      "shortDescription": "Parse a 5-field cron expression and see when it will next fire, with a plain-English explanation.",
      "url": "https://uttir.com/cron-parser",
      "categories": [
        "developer-tools",
        "date-time-tools"
      ],
      "keywords": [
        "cron parser",
        "cron expression",
        "crontab",
        "cron schedule",
        "cron next run",
        "cron translator"
      ],
      "useCases": [
        "Explain a cron expression in plain English",
        "See the next 5 or 10 times a cron will run",
        "Verify that a cron expression matches the intended schedule",
        "Decode someone else’s cron expression from a config file"
      ],
      "userIntents": [
        "How do I cron parser?",
        "Cron Expression Parser online",
        "Free cron parser no signup",
        "Cron Expression Parser that doesn't upload my data",
        "Cron Expression Parser in my browser",
        "Best cron expression compared"
      ],
      "privacy": "Parsing runs locally in your browser. No expression is sent to a server.",
      "related": [
        "unix-timestamp-converter",
        "regex-tester",
        "json-formatter"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Paste a cron expression",
          "detail": "Five space-separated fields. Wildcards, lists, ranges, and steps are all supported."
        },
        {
          "title": "Read the breakdown",
          "detail": "Each field shows its raw value, allowed range, and matched values."
        },
        {
          "title": "Check the next runs",
          "detail": "Use the UTC time list to confirm the schedule fires when you expect."
        }
      ],
      "examples": [
        {
          "title": "Every 15 minutes",
          "description": "A very common heartbeat schedule.",
          "output": "*/15 * * * *"
        },
        {
          "title": "Weekday mornings at 9:00",
          "description": "Monday through Friday, 9 AM sharp.",
          "output": "0 9 * * 1-5"
        },
        {
          "title": "First of the month, midnight",
          "description": "Classic monthly job schedule.",
          "output": "0 0 1 * *"
        }
      ],
      "faq": [
        {
          "question": "Do you support seconds or year fields (6- or 7-field cron)?",
          "answer": "Not yet. This tool targets the classic 5-field POSIX cron used by crontab, GitHub Actions scheduled events, and most CI systems. Extended formats (Quartz-style) are not supported."
        },
        {
          "question": "Why are next-run times in UTC?",
          "answer": "Cron itself does not carry time zone information — it fires whenever the host clock matches the pattern. We display the next runs in UTC so the result is unambiguous regardless of where you are."
        },
        {
          "question": "What does \"*\" mean in a cron expression?",
          "answer": "Every value. In the minute field, \"*\" means every minute. In the hour field, \"*\" means every hour. To restrict to specific values, replace \"*\" with a number (e.g. \"5\"), a list (\"1,3,5\"), a range (\"1-5\"), or a step (\"*/15\" = every 15)."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/cron-parser.md",
      "markdownDoc": "https://uttir.com/cron-parser.md"
    },
    {
      "slug": "color-palette-generator",
      "name": "Color Palette Generator",
      "shortDescription": "Generate 5-color palettes from any base color using classic harmony schemes — analogous, complementary, triadic, and more.",
      "url": "https://uttir.com/color-palette-generator",
      "categories": [
        "color-tools",
        "generators"
      ],
      "keywords": [
        "color palette generator",
        "color palette",
        "color scheme",
        "color harmony",
        "complementary colors",
        "triadic palette"
      ],
      "useCases": [
        "Generate a 5-color palette from a base color",
        "Build palettes using analogous, complementary, triadic, or tetradic harmonies",
        "Get hex, RGB, and HSL values for every color in the palette",
        "Create a palette with proper contrast for text and backgrounds"
      ],
      "userIntents": [
        "How do I color palette generator?",
        "Color Palette Generator online",
        "Free color palette generator no signup",
        "Color Palette Generator that doesn't upload my data",
        "Color Palette Generator in my browser",
        "Best color palette compared"
      ],
      "privacy": "All color math runs locally in your browser.",
      "related": [
        "color-picker",
        "contrast-checker",
        "hex-to-rgb"
      ],
      "inputs": "A color value (hex, RGB, or HSL)",
      "outputs": "A generated value (UUID, password, QR code, palette, etc.)",
      "howTo": [
        {
          "title": "Pick a base color",
          "detail": "Use the color input or paste a hex value."
        },
        {
          "title": "Choose a scheme",
          "detail": "Analogous, complementary, triadic, split-complementary, tetradic, or monochrome."
        },
        {
          "title": "Copy any swatch",
          "detail": "Click a swatch to copy its hex value to the clipboard."
        }
      ],
      "examples": [
        {
          "title": "Triadic brand palette",
          "description": "A balanced three-hue palette plus two supporting shades.",
          "output": "3 hues 120° apart + 2 shades"
        },
        {
          "title": "Analogous nature palette",
          "description": "Calm, related hues for organic designs.",
          "output": "5 hues within 30° of the base"
        }
      ],
      "faq": [
        {
          "question": "Which scheme should I use?",
          "answer": "Analogous for calm/natural designs. Complementary for high contrast (e.g. CTAs). Triadic for vibrant but balanced brands. Tetradic for rich, multi-hue designs that still feel organized. Monochrome for minimal, premium aesthetics."
        },
        {
          "question": "Why five colors?",
          "answer": "Five is enough to express a brand (primary, secondary, accent, two neutrals) without overwhelming the result. You can always regenerate or pick fewer swatches for a tighter palette."
        },
        {
          "question": "What is a good color palette?",
          "answer": "A small set (3-5) of colors that work well together. Most palettes are based on a relationship: complementary (opposite on the color wheel), analogous (adjacent), or triadic (evenly spaced). The tool generates all three from a base color."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/color-palette-generator.md",
      "markdownDoc": "https://uttir.com/color-palette-generator.md"
    },
    {
      "slug": "tip-calculator",
      "name": "Tip Calculator",
      "shortDescription": "Calculate tip and split a bill fairly across any number of people. Quick presets for 15%, 18%, 20%, 25%.",
      "url": "https://uttir.com/tip-calculator",
      "categories": [
        "calculators"
      ],
      "keywords": [
        "tip calculator",
        "tip",
        "gratuity calculator",
        "restaurant tip",
        "split bill",
        "calculate tip"
      ],
      "useCases": [
        "Calculate a tip amount and split a bill between people",
        "Figure out a 15%, 18%, 20%, or custom tip",
        "See the per-person total including tip and tax",
        "Round the total up, down, or to the nearest dollar"
      ],
      "userIntents": [
        "How do I tip calculator?",
        "Tip Calculator online",
        "Free tip calculator no signup",
        "Tip Calculator that doesn't upload my data",
        "Tip Calculator in my browser",
        "Best tip compared"
      ],
      "privacy": "Math runs entirely in your browser.",
      "related": [
        "percentage-calculator",
        "loan-calculator",
        "bmi-calculator"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A numeric calculation (percentage, BMI, payment, etc.)",
      "howTo": [
        {
          "title": "Enter the bill",
          "detail": "The pre-tip total in your local currency."
        },
        {
          "title": "Set the tip percent",
          "detail": "Use a preset or type a custom value."
        },
        {
          "title": "Set the number of people",
          "detail": "The per-person breakdown updates immediately."
        }
      ],
      "examples": [
        {
          "title": "20% on a $100 dinner for 4",
          "description": "Standard U.S. restaurant tip.",
          "output": "$5 tip each, $25 per person total"
        },
        {
          "title": "15% on a $60 taxi for 2",
          "description": "A common starting tip for rideshares.",
          "output": "$4.50 tip each, $34.50 per person total"
        }
      ],
      "faq": [
        {
          "question": "Should I tip on the pre-tax or post-tax amount?",
          "answer": "In the U.S., the common convention is to tip on the pre-tax subtotal. In many other countries, service is included in the bill. This tool does not add tax — just enter the number you want to tip on."
        },
        {
          "question": "How do I split uneven shares?",
          "answer": "This tool splits evenly. For uneven shares, calculate each person’s portion separately using the percentage calculator."
        },
        {
          "question": "How much should I tip?",
          "answer": "Standard in the US is 15-20% for restaurants, $1-2 per drink at bars, 10-15% for takeout. In many other countries, tipping is not expected. The tool lets you pick the rate and split between any number of people."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/tip-calculator.md",
      "markdownDoc": "https://uttir.com/tip-calculator.md"
    },
    {
      "slug": "aspect-ratio-calculator",
      "name": "Aspect Ratio Calculator",
      "shortDescription": "Compute the aspect ratio of any width × height, and resize to a target width or fit inside a maximum box.",
      "url": "https://uttir.com/aspect-ratio-calculator",
      "categories": [
        "image-tools"
      ],
      "keywords": [
        "aspect ratio calculator",
        "aspect ratio",
        "image dimensions",
        "resize image",
        "16:9",
        "photo ratio"
      ],
      "useCases": [
        "Calculate the aspect ratio of an image (width:height)",
        "Find the matching width or height for a target ratio",
        "Crop an image to a target aspect ratio",
        "Compare aspect ratios across different image formats"
      ],
      "userIntents": [
        "How do I aspect ratio calculator?",
        "Aspect Ratio Calculator online",
        "Free aspect ratio calculator no signup",
        "Aspect Ratio Calculator that doesn't upload my data",
        "Aspect Ratio Calculator in my browser",
        "Best aspect ratio compared"
      ],
      "privacy": "All math runs locally. No image is uploaded.",
      "related": [
        "image-resizer",
        "image-cropper",
        "image-compressor"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Enter width and height",
          "detail": "In any unit — pixels, mm, inches. The ratio is unitless."
        },
        {
          "title": "Read the reduced ratio",
          "detail": "The tool uses the GCD of width and height to show the cleanest form."
        },
        {
          "title": "Resize or fit",
          "detail": "Pick a target width or max bounds to see the new dimensions."
        }
      ],
      "examples": [
        {
          "title": "1920×1080 video",
          "description": "Full HD video, reduced.",
          "output": "16:9"
        },
        {
          "title": "1080×1920 Reel",
          "description": "Vertical video for Instagram Reels / TikTok.",
          "output": "9:16"
        }
      ],
      "faq": [
        {
          "question": "What is the \"reduced\" ratio?",
          "answer": "Every pixel-perfect ratio can be expressed as a simplified fraction. The reduced form is the version with the smallest whole numbers — 1920×1080 reduces to 16:9 because the GCD of 1920 and 1080 is 120."
        },
        {
          "question": "Why does my 1080×1080 Instagram post have ratio 1:1 but my 1080×1350 post has 4:5?",
          "answer": "Both are common Instagram aspect ratios. 1:1 is the original square format, 4:5 takes up more vertical space in the feed and gets more attention. Use the preset list to confirm what you are about to publish."
        },
        {
          "question": "What is the difference between 16:9 and 1.78:1?",
          "answer": "They are the same aspect ratio written two ways. 16:9 is the common short form; 1.78:1 is the decimal form. Both describe the ratio of width to height. The tool shows both."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/aspect-ratio-calculator.md",
      "markdownDoc": "https://uttir.com/aspect-ratio-calculator.md"
    },
    {
      "slug": "json-to-yaml",
      "name": "JSON to YAML Converter",
      "shortDescription": "Convert JSON to clean YAML and decode YAML back to JSON. Round-trips common JSON shapes.",
      "url": "https://uttir.com/json-to-yaml",
      "categories": [
        "data-tools",
        "developer-tools"
      ],
      "keywords": [
        "json to yaml",
        "yaml converter",
        "json yaml",
        "yaml to json",
        "yaml formatter",
        "convert json to yaml"
      ],
      "useCases": [
        "Convert a JSON document to YAML",
        "Convert a JSON config to a YAML config (YAML supports comments)",
        "See the YAML equivalent of a JSON structure side by side",
        "Convert without uploading the JSON to a server"
      ],
      "userIntents": [
        "How do I json to yaml?",
        "JSON to YAML Converter online",
        "Free json to yaml no signup",
        "JSON to YAML Converter that doesn't upload my data",
        "JSON to YAML Converter in my browser",
        "Best yaml converter compared"
      ],
      "privacy": "Conversion runs locally in your browser. No data is uploaded.",
      "related": [
        "json-formatter",
        "csv-json-converter",
        "sql-formatter"
      ],
      "inputs": "A JSON document or fragment",
      "outputs": "A file in the target format",
      "howTo": [
        {
          "title": "Choose direction",
          "detail": "Toggle between JSON → YAML and YAML → JSON."
        },
        {
          "title": "Paste your input",
          "detail": "The output updates as you type or paste."
        },
        {
          "title": "Copy the result",
          "detail": "One click to copy the converted text."
        }
      ],
      "examples": [
        {
          "title": "Service manifest",
          "description": "A common Kubernetes-style service definition.",
          "output": "apiVersion: v1\nkind: Service\nmetadata:\n  name: web\nspec:\n  ports:\n    - port: 80\n      targetPort: 8080"
        },
        {
          "title": "Decoded back to JSON",
          "description": "Round-trip is lossless for plain JSON.",
          "output": "{\"apiVersion\":\"v1\",\"kind\":\"Service\",...}"
        }
      ],
      "faq": [
        {
          "question": "Does this support flow style and anchors?",
          "answer": "Not yet. This tool targets the most common block-style YAML subset. It round-trips plain JSON shapes perfectly. If you need full YAML 1.2 support, look for a tool built on PyYAML or libyaml."
        },
        {
          "question": "Why does my YAML output look indented differently than I expected?",
          "answer": "Indentation is 2 spaces per level. If your editor expects 4, just run the result through your formatter of choice — the data is unchanged."
        },
        {
          "question": "When should I use YAML instead of JSON?",
          "answer": "YAML is easier to read and edit by hand. JSON is easier for machines to parse and is the lingua franca of web APIs. Use YAML for configuration files, CI/CD pipelines, and any place humans will edit the data. Use JSON for everything else."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/json-to-yaml.md",
      "markdownDoc": "https://uttir.com/json-to-yaml.md"
    },
    {
      "slug": "date-add-subtract",
      "name": "Date Add/Subtract Calculator",
      "shortDescription": "Add or subtract days, weeks, months, or years from any date. Handles month-end and leap-year rollovers.",
      "url": "https://uttir.com/date-add-subtract",
      "categories": [
        "date-time-tools",
        "calculators"
      ],
      "keywords": [
        "date calculator",
        "add days",
        "subtract days",
        "date arithmetic",
        "add weeks",
        "add months"
      ],
      "useCases": [
        "Add days, weeks, months, or years to a date",
        "Subtract days, weeks, months, or years from a date",
        "Calculate a future or past date for a deadline",
        "See the day of the week for the resulting date"
      ],
      "userIntents": [
        "How do I date calculator?",
        "Date Add/Subtract Calculator online",
        "Free date calculator no signup",
        "Date Add/Subtract Calculator that doesn't upload my data",
        "Date Add/Subtract Calculator in my browser",
        "Best add days compared"
      ],
      "privacy": "All math runs in your browser. No date leaves your device.",
      "related": [
        "date-calculator",
        "age-calculator",
        "unix-timestamp-converter"
      ],
      "inputs": "A date or time value",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Pick a starting date",
          "detail": "Defaults to today. Edit it freely."
        },
        {
          "title": "Choose a unit and amount",
          "detail": "Days, weeks, months, years, hours, or minutes. Negative values go backward."
        },
        {
          "title": "Read the result",
          "detail": "The target date and the number of days between start and target."
        }
      ],
      "examples": [
        {
          "title": "30 days from today",
          "description": "A standard return-window deadline.",
          "output": "Date + 30 days"
        },
        {
          "title": "6 months back",
          "description": "For figuring out a 6-month lookback window.",
          "output": "Date − 6 months"
        }
      ],
      "faq": [
        {
          "question": "How are months handled?",
          "answer": "Months are added by name, so Jan 31 + 1 month = Feb 28 (or Feb 29 in a leap year). The tool never produces an invalid date — it rolls over to the last valid day of the month when needed."
        },
        {
          "question": "Are the calculations timezone-aware?",
          "answer": "Dates are treated as calendar dates in UTC, so you get the same answer no matter where you are in the world. If you need timezone-aware math (e.g. business days), that is a different tool."
        },
        {
          "question": "How are time zones handled?",
          "answer": "The tool uses your browser's local time zone for the input and output. If you need to add days in a specific time zone, set the time zone on the input — the output will be in the same time zone."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/date-add-subtract.md",
      "markdownDoc": "https://uttir.com/date-add-subtract.md"
    },
    {
      "slug": "markdown-to-html",
      "name": "Markdown to HTML Converter",
      "shortDescription": "Convert Markdown to clean HTML. Headings, lists, links, images, code blocks, blockquotes, and inline formatting.",
      "url": "https://uttir.com/markdown-to-html",
      "categories": [
        "text-tools"
      ],
      "keywords": [
        "markdown to html",
        "md to html",
        "markdown converter",
        "convert markdown",
        "markdown preview",
        "markdown online"
      ],
      "useCases": [
        "Convert Markdown to HTML for a static site or blog post",
        "Preview how a Markdown file will render in the browser",
        "Copy clean HTML for use in a CMS or email template",
        "See the rendered output side-by-side with the source"
      ],
      "userIntents": [
        "How do I markdown to html?",
        "Markdown to HTML Converter online",
        "Free markdown to html no signup",
        "Markdown to HTML Converter that doesn't upload my data",
        "Markdown to HTML Converter in my browser",
        "Best md to html compared"
      ],
      "privacy": "Conversion happens entirely in your browser.",
      "related": [
        "html-minifier",
        "css-minifier",
        "json-to-yaml"
      ],
      "inputs": "An image file (JPG, PNG, WebP, HEIC, or other)",
      "outputs": "A formatted (pretty-printed) version of the input",
      "howTo": [
        {
          "title": "Type or paste Markdown",
          "detail": "The HTML preview updates as you type."
        },
        {
          "title": "Read the preview",
          "detail": "Use the rendered output to confirm the formatting is what you want."
        },
        {
          "title": "Copy the HTML",
          "detail": "Click Copy HTML to put the converted markup on your clipboard."
        }
      ],
      "examples": [
        {
          "title": "A short post",
          "description": "Headings, a list, and a code block.",
          "output": "<h1>Hello</h1><ul><li>one</li><li>two</li></ul><pre><code>const x = 1;</code></pre>"
        },
        {
          "title": "Link with title",
          "description": "Markdown `[text](url \"title\")` becomes a real anchor.",
          "output": "<a href=\"url\" title=\"title\" rel=\"noopener noreferrer\" target=\"_blank\">text</a>"
        }
      ],
      "faq": [
        {
          "question": "Does it support GitHub-flavored Markdown?",
          "answer": "It covers the most-used subset including headings, lists, links, images, code, and blockquotes. GFM-specific features like tables, task lists, and strikethrough are not included."
        },
        {
          "question": "Is the HTML safe to paste into my site?",
          "answer": "The converter HTML-escapes all input, so user-provided text is safe. Links are automatically given rel=\"noopener noreferrer\" and target=\"_blank\" to prevent tab-nabbing."
        },
        {
          "question": "Does the output match GitHub-Flavored Markdown?",
          "answer": "Mostly. Tables, fenced code, and task lists are supported. Some GFM extensions (mention autolinking, math with $$) are not. The output is safe HTML — no inline scripts, no event handlers — so it is safe to render in your own page."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/markdown-to-html.md",
      "markdownDoc": "https://uttir.com/markdown-to-html.md"
    },
    {
      "slug": "html-minifier",
      "name": "HTML Minifier",
      "shortDescription": "Shrink HTML by stripping comments and collapsing whitespace. See byte savings in real time.",
      "url": "https://uttir.com/html-minifier",
      "categories": [
        "developer-tools",
        "web-tools"
      ],
      "keywords": [
        "html minifier",
        "minify html",
        "compress html",
        "html optimizer",
        "strip html comments",
        "minify html online"
      ],
      "useCases": [
        "Minify an HTML file by removing whitespace and comments",
        "Shrink an HTML payload for production (often 20-40% smaller)",
        "See the size difference between the source and the minified output",
        "Minify in the browser without uploading the source"
      ],
      "userIntents": [
        "How do I html minifier?",
        "HTML Minifier online",
        "Free html minifier no signup",
        "HTML Minifier that doesn't upload my data",
        "HTML Minifier in my browser",
        "Best minify html compared"
      ],
      "privacy": "All processing is local. Your HTML never leaves the browser.",
      "related": [
        "css-minifier",
        "js-minifier",
        "markdown-to-html"
      ],
      "inputs": "A date or time value",
      "outputs": "A live timer or stopwatch",
      "howTo": [
        {
          "title": "Paste your HTML",
          "detail": "Drop a snippet, a partial, or a full document."
        },
        {
          "title": "Pick options",
          "detail": "Toggle \"remove optional tags\" if you want an extra squeeze."
        },
        {
          "title": "Copy the minified HTML",
          "detail": "Use the Copy button to grab the result."
        }
      ],
      "examples": [
        {
          "title": "Comment stripping",
          "description": "HTML comments are removed entirely.",
          "output": "<!-- hidden --><p>hi</p> → <p>hi</p>"
        },
        {
          "title": "Whitespace collapse",
          "description": "Multiple spaces and newlines between tags become a single space.",
          "output": "<p>hello   world</p> → <p>hello world</p>"
        }
      ],
      "faq": [
        {
          "question": "Will minifying break my HTML?",
          "answer": "For most static markup, no. The minifier does not touch the contents of <script> or <style> tags. If your code relies on subtle whitespace inside <pre> elements, use the option to keep certain blocks intact."
        },
        {
          "question": "How much smaller does it get?",
          "answer": "Hand-written HTML with comments and indentation typically shrinks 10-30%. Generated HTML with minimal whitespace may only shrink a few percent. The byte counter on this page shows the actual savings for your input."
        },
        {
          "question": "Will minification break my HTML?",
          "answer": "No — the minifier only removes whitespace, comments, and optional tags. The browser parses the minified HTML identically. Always test the minified output, but for well-formed HTML, it is safe."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/html-minifier.md",
      "markdownDoc": "https://uttir.com/html-minifier.md"
    },
    {
      "slug": "css-minifier",
      "name": "CSS Minifier",
      "shortDescription": "Shrink CSS by stripping comments, collapsing whitespace, and tightening punctuation. See byte savings live.",
      "url": "https://uttir.com/css-minifier",
      "categories": [
        "developer-tools",
        "web-tools"
      ],
      "keywords": [
        "css minifier",
        "minify css",
        "compress css",
        "css optimizer",
        "strip css comments",
        "minify css online"
      ],
      "useCases": [
        "Minify a CSS file by removing whitespace and comments",
        "Shrink a CSS payload for production (often 30-50% smaller)",
        "See the size difference between the source and the minified output",
        "Minify in the browser without uploading the source"
      ],
      "userIntents": [
        "How do I css minifier?",
        "CSS Minifier online",
        "Free css minifier no signup",
        "CSS Minifier that doesn't upload my data",
        "CSS Minifier in my browser",
        "Best minify css compared"
      ],
      "privacy": "CSS never leaves your browser.",
      "related": [
        "html-minifier",
        "js-minifier",
        "json-formatter"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Paste your CSS",
          "detail": "A snippet, a file, or an entire stylesheet."
        },
        {
          "title": "Read the result",
          "detail": "The minified CSS appears instantly."
        },
        {
          "title": "Copy",
          "detail": "One click to put the minified CSS on your clipboard."
        }
      ],
      "examples": [
        {
          "title": "Comment stripping",
          "description": "A simple comment-and-whitespace example.",
          "input": "/* header */ .a { color: red; }",
          "output": ".a{color:red}"
        },
        {
          "title": "Punctuation tightening",
          "description": "Spaces around { } ; : , are removed.",
          "input": "a , b > c { color : red ; }",
          "output": "a,b>c{color:red}"
        }
      ],
      "faq": [
        {
          "question": "Does it preserve source maps?",
          "answer": "No. This is a copy-paste minifier. If you need source maps for debugging, use a build-time tool like cssnano or lightningcss with the sourceMap option enabled."
        },
        {
          "question": "Are there any CSS features it does not support?",
          "answer": "It works on any valid CSS. The minifier is purely syntactic — it does not parse or transform selectors, so anything your browser accepts is fair game."
        },
        {
          "question": "Will minification break my CSS?",
          "answer": "No — the minifier only removes whitespace, comments, and trailing semicolons. The browser reads the minified CSS identically. Always test the minified output, but for well-formed CSS, it is safe."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/css-minifier.md",
      "markdownDoc": "https://uttir.com/css-minifier.md"
    },
    {
      "slug": "js-minifier",
      "name": "JavaScript Minifier",
      "shortDescription": "Quick JS minifier that strips comments and collapses whitespace. Best for trusted, simple code snippets.",
      "url": "https://uttir.com/js-minifier",
      "categories": [
        "developer-tools",
        "web-tools"
      ],
      "keywords": [
        "js minifier",
        "javascript minifier",
        "minify js",
        "minify javascript",
        "compress javascript",
        "js minifier online"
      ],
      "useCases": [
        "Minify a JavaScript file by removing whitespace and comments",
        "Shrink a JavaScript payload for production (often 40-60% smaller)",
        "Shorten variable and function names for a smaller bundle",
        "See the size difference between the source and the minified output"
      ],
      "userIntents": [
        "How do I js minifier?",
        "JavaScript Minifier online",
        "Free js minifier no signup",
        "JavaScript Minifier that doesn't upload my data",
        "JavaScript Minifier in my browser",
        "Best javascript minifier compared"
      ],
      "privacy": "Your JavaScript is processed locally and never sent over the network.",
      "related": [
        "html-minifier",
        "css-minifier",
        "json-formatter"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Paste your JS",
          "detail": "A snippet, a function, or a small module."
        },
        {
          "title": "Read the minified output",
          "detail": "Comments and excess whitespace are stripped."
        },
        {
          "title": "Copy",
          "detail": "Grab the result for use elsewhere."
        }
      ],
      "examples": [
        {
          "title": "Comment stripping",
          "description": "Block and line comments go away.",
          "input": "/* greet */ const greet = (name) => {\n  console.log(\"hi\", name); // say hi\n};",
          "output": "const greet = (name) => { console.log(\"hi\", name); };"
        },
        {
          "title": "Whitespace collapse",
          "description": "Multiple spaces and newlines become one.",
          "input": "const    a  =   1;",
          "output": "const a = 1;"
        }
      ],
      "faq": [
        {
          "question": "Why is this not as good as Terser?",
          "answer": "Terser parses the JavaScript into an AST, which means it can safely rename variables, remove dead code, and respect string/regex literals. This tool does only the safe syntactic passes. It is great for quick wins on small snippets; it is not a replacement for a real minifier on a real codebase."
        },
        {
          "question": "Is it safe to use on production code?",
          "answer": "Only if your code is simple and does not contain `//` inside strings, template literals, or regular expressions. When in doubt, test the minified output and prefer a real AST-based minifier for production."
        },
        {
          "question": "Will minification break my JavaScript?",
          "answer": "No, for syntactically valid code. The minifier only renames local variables, removes whitespace, and shortens property accesses. It does not change behavior. Always test the minified output."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/js-minifier.md",
      "markdownDoc": "https://uttir.com/js-minifier.md"
    },
    {
      "slug": "character-frequency",
      "name": "Character Frequency Counter",
      "shortDescription": "Count how often each character appears in your text. Useful for cryptanalysis, language detection, and stats.",
      "url": "https://uttir.com/character-frequency",
      "categories": [
        "text-tools",
        "data-tools"
      ],
      "keywords": [
        "character frequency",
        "character count",
        "letter frequency",
        "letter count",
        "frequency analysis",
        "text stats"
      ],
      "useCases": [
        "Count the frequency of each character in a text",
        "Find the most common letters, digits, or symbols",
        "Analyse a string for a code-breaking exercise",
        "Visualise a character distribution as a bar chart"
      ],
      "userIntents": [
        "How do I character frequency?",
        "Character Frequency Counter online",
        "Free character frequency no signup",
        "Character Frequency Counter that doesn't upload my data",
        "Character Frequency Counter in my browser",
        "Best character count compared"
      ],
      "privacy": "Counting happens entirely in your browser.",
      "related": [
        "word-counter",
        "character-counter",
        "reading-time"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A count (words, characters, sentences, paragraphs)",
      "howTo": [
        {
          "title": "Paste text",
          "detail": "Any length — works for sentences, paragraphs, or large corpora."
        },
        {
          "title": "Pick options",
          "detail": "Toggle case sensitivity and whether to include whitespace."
        },
        {
          "title": "Read the ranked list",
          "detail": "The most frequent character is at the top."
        }
      ],
      "examples": [
        {
          "title": "English text",
          "description": "In English, \"e\" is by far the most common letter.",
          "output": "e 12, t 9, a 8, o 7, i 6, n 6, s 6, h 5, r 5, …"
        },
        {
          "title": "Cryptanalysis hint",
          "description": "A frequency table for ciphertext can crack simple substitution ciphers.",
          "output": "Most-frequent character matches a likely plaintext \"e\""
        }
      ],
      "faq": [
        {
          "question": "Is whitespace counted by default?",
          "answer": "Yes. Spaces, tabs, and newlines each count as their own characters. Turn on \"ignore whitespace\" if you only care about letters and digits."
        },
        {
          "question": "Why sort alphabetically when counts are equal?",
          "answer": "So the result is stable across runs. Two characters with the same count will always appear in the same order."
        },
        {
          "question": "What is the most common letter in English?",
          "answer": "E, at about 13% of all letters. T is second, A is third. The tool helps you find this kind of pattern in any text — useful for cryptography, compression, and text analysis."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/character-frequency.md",
      "markdownDoc": "https://uttir.com/character-frequency.md"
    },
    {
      "slug": "reading-time",
      "name": "Reading Time Calculator",
      "shortDescription": "Estimate how long it takes to read or speak a piece of text. Adjustable words-per-minute for fiction, non-fiction, or speech.",
      "url": "https://uttir.com/reading-time",
      "categories": [
        "text-tools"
      ],
      "keywords": [
        "reading time",
        "reading time calculator",
        "words per minute",
        "estimate reading time",
        "how long to read",
        "speaking time"
      ],
      "useCases": [
        "Estimate the reading time of an article or essay",
        "Calculate the speaking time for a script or presentation",
        "See the word count and reading time side by side",
        "Use a custom words-per-minute reading speed"
      ],
      "userIntents": [
        "How do I reading time?",
        "Reading Time Calculator online",
        "Free reading time no signup",
        "Reading Time Calculator that doesn't upload my data",
        "Reading Time Calculator in my browser",
        "Best reading time calculator compared"
      ],
      "privacy": "Word counts run in your browser. No text leaves your device.",
      "related": [
        "word-counter",
        "character-counter",
        "character-frequency"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Paste text",
          "detail": "A paragraph, a chapter, or a whole article."
        },
        {
          "title": "Adjust WPM",
          "detail": "Default 238 is good for non-fiction; 130 is good for speech."
        },
        {
          "title": "Read the time",
          "detail": "Format is \"2 min 14 sec\" or just seconds when short."
        }
      ],
      "examples": [
        {
          "title": "1,000-word article",
          "description": "At 238 wpm, that is about 4.2 minutes of reading.",
          "output": "~4 min 12 sec"
        },
        {
          "title": "30-minute talk",
          "description": "At 130 wpm, you need roughly 3,900 words.",
          "output": "~3,900 words for a 30-min speech"
        }
      ],
      "faq": [
        {
          "question": "How do I pick the right WPM?",
          "answer": "238 is the average for non-fiction. Bump to 250-300 for light fiction or familiar technical content. Drop to 130 for presentations and audiobooks where pronunciation, pacing, and pauses matter."
        },
        {
          "question": "Does it count code as words?",
          "answer": "Yes — every whitespace-separated token counts. A 50-line code block with 10 tokens per line will be counted as 500 words, which is more than a human would actually spend reading it."
        },
        {
          "question": "How is reading time calculated?",
          "answer": "At an average reading speed of 238 words per minute for English prose. The result is rounded up to the nearest minute. Technical and academic text often reads slower; the tool is a rough estimate, not a precise one."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/reading-time.md",
      "markdownDoc": "https://uttir.com/reading-time.md"
    },
    {
      "slug": "roman-numeral-converter",
      "name": "Roman Numeral Converter",
      "shortDescription": "Convert integers to Roman numerals (1–3999) and decode Roman numerals back to integers.",
      "url": "https://uttir.com/roman-numeral-converter",
      "categories": [
        "converters"
      ],
      "keywords": [
        "roman numeral converter",
        "roman numerals",
        "number to roman",
        "roman to number",
        "roman numeral translator",
        "convert to roman numerals"
      ],
      "useCases": [
        "Convert a number to Roman numerals",
        "Convert Roman numerals to a number",
        "Generate Roman numerals for a chapter, section, or event",
        "See the rules of Roman numeral construction"
      ],
      "userIntents": [
        "How do I roman numeral converter?",
        "Roman Numeral Converter online",
        "Free roman numeral converter no signup",
        "Roman Numeral Converter that doesn't upload my data",
        "Roman Numeral Converter in my browser",
        "Best roman numerals compared"
      ],
      "privacy": "Conversion runs in your browser.",
      "related": [
        "unit-converter",
        "binary-hex-converter",
        "json-to-yaml"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A file in the target format",
      "howTo": [
        {
          "title": "Type a number",
          "detail": "Any integer from 1 to 3,999."
        },
        {
          "title": "Or type a Roman numeral",
          "detail": "Lowercase works too — it is normalized to uppercase."
        },
        {
          "title": "Read the result",
          "detail": "The other side updates live as you type."
        }
      ],
      "examples": [
        {
          "title": "1994 in Roman numerals",
          "description": "A classic year used in many textbooks.",
          "output": "MCMXCIV"
        },
        {
          "title": "Decode MCMLXXXIV",
          "description": "1984 in canonical Roman form.",
          "output": "1984"
        }
      ],
      "faq": [
        {
          "question": "Why is the range 1 to 3,999?",
          "answer": "Classical Roman numerals had no standard form for numbers above 3,999. Appian and medieval scribes used overscores to multiply values by 1,000, but that notation is not part of the everyday Roman numerals you see in clocks and titles."
        },
        {
          "question": "What about lowercase Roman numerals?",
          "answer": "They are accepted. The converter normalizes input to uppercase before parsing."
        },
        {
          "question": "What is the largest Roman numeral?",
          "answer": "Standard Roman numerals go up to 3,999 (MMMCMXCIX). Beyond that, the system breaks down. The tool handles 1-3,999 cleanly; values above 3,999 are returned as a string with an \"out of standard range\" note."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/roman-numeral-converter.md",
      "markdownDoc": "https://uttir.com/roman-numeral-converter.md"
    },
    {
      "slug": "salary-calculator",
      "name": "Salary Calculator",
      "shortDescription": "Convert between hourly, daily, weekly, biweekly, monthly, and annual salary. Adjust hours/week and weeks/year.",
      "url": "https://uttir.com/salary-calculator",
      "categories": [
        "calculators"
      ],
      "keywords": [
        "salary calculator",
        "hourly to salary",
        "annual salary",
        "hourly rate calculator",
        "salary converter",
        "paycheck calculator"
      ],
      "useCases": [
        "Convert an annual salary to hourly, weekly, biweekly, or monthly",
        "See the gross and net (after-tax) breakdown",
        "Compare two salary scenarios (with and without a raise)",
        "Plan a budget from a known annual income"
      ],
      "userIntents": [
        "How do I salary calculator?",
        "Salary Calculator online",
        "Free salary calculator no signup",
        "Salary Calculator that doesn't upload my data",
        "Salary Calculator in my browser",
        "Best hourly to salary compared"
      ],
      "privacy": "Math runs locally — no data leaves your browser.",
      "related": [
        "tip-calculator",
        "percentage-calculator",
        "mortgage-calculator"
      ],
      "inputs": "A URL string",
      "outputs": "A file in the target format",
      "howTo": [
        {
          "title": "Enter a salary",
          "detail": "Any rate, in any of the six supported units."
        },
        {
          "title": "Adjust hours/week",
          "detail": "Default 40 — change to match your schedule."
        },
        {
          "title": "Read all six rates",
          "detail": "Annual, monthly, biweekly, weekly, daily, and hourly."
        }
      ],
      "examples": [
        {
          "title": "$50/hour → $104,000/year",
          "description": "A common mid-range freelance rate, full-time.",
          "output": "Annual $104,000 · Monthly $8,667 · Hourly $50.00"
        },
        {
          "title": "$100k → $48.08/hour",
          "description": "A typical full-time salaried position in the US.",
          "output": "Hourly $48.08 · Weekly $1,923 · Biweekly $3,846"
        }
      ],
      "faq": [
        {
          "question": "Are these numbers gross or net?",
          "answer": "Gross. Federal/state taxes, Social Security, Medicare, health insurance, and retirement contributions are not deducted. Take-home is typically 65–80% of gross for a US W-2 employee."
        },
        {
          "question": "Why 52 weeks and not 12 months?",
          "answer": "Because not every month has exactly 4 weeks. The 52-weeks-per-year convention is closer to actual pay periods for a full-time, full-year job. If you have unpaid time off, lower the weeks-per-year to reflect that."
        },
        {
          "question": "What is the difference between gross and net?",
          "answer": "Gross is the total before any deductions. Net is what you take home after tax, social security, health insurance, and other deductions. The tool calculates both; the difference is usually 20-40% of gross."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/salary-calculator.md",
      "markdownDoc": "https://uttir.com/salary-calculator.md"
    },
    {
      "slug": "css-gradient-generator",
      "name": "CSS Gradient Generator",
      "shortDescription": "Build linear and radial CSS gradients visually. Pick colors, drag stops, copy the CSS.",
      "url": "https://uttir.com/css-gradient-generator",
      "categories": [
        "color-tools",
        "web-tools"
      ],
      "keywords": [
        "css gradient generator",
        "linear gradient",
        "radial gradient",
        "css gradient",
        "gradient maker",
        "gradient css"
      ],
      "useCases": [
        "Build a CSS linear or radial gradient visually",
        "Get the exact CSS for the gradient to paste into your stylesheet",
        "Add color stops with custom positions",
        "Set the angle and direction of a linear gradient"
      ],
      "userIntents": [
        "How do I css gradient generator?",
        "CSS Gradient Generator online",
        "Free css gradient generator no signup",
        "CSS Gradient Generator that doesn't upload my data",
        "CSS Gradient Generator in my browser",
        "Best linear gradient compared"
      ],
      "privacy": "Gradient math runs locally. No images are uploaded.",
      "related": [
        "color-palette-generator",
        "color-picker",
        "hex-to-rgb"
      ],
      "inputs": "A color value (hex, RGB, or HSL)",
      "outputs": "A random selection from the input list",
      "howTo": [
        {
          "title": "Pick a type",
          "detail": "Linear for directional blends, radial for circular glows."
        },
        {
          "title": "Set the angle",
          "detail": "For linear: 0deg is bottom-to-top, 90deg is left-to-right."
        },
        {
          "title": "Adjust stops",
          "detail": "Change colors and positions. Copy the CSS when ready."
        }
      ],
      "examples": [
        {
          "title": "Sunset horizontal",
          "description": "A classic left-to-right warm gradient.",
          "output": "linear-gradient(90deg, #ff7e5f 0%, #feb47b 100%)"
        },
        {
          "title": "Cool radial",
          "description": "A center-out blue glow.",
          "output": "radial-gradient(circle, #00c6ff 0%, #0072ff 100%)"
        }
      ],
      "faq": [
        {
          "question": "Linear or radial?",
          "answer": "Linear gradients flow along a direction (top-to-bottom, left-to-right, or any angle). Radial gradients flow outward from a center point. Linear is more common for backgrounds; radial is great for spotlights, vignettes, and buttons."
        },
        {
          "question": "Why does my gradient look banded?",
          "answer": "Most monitors can only display 8 bits per channel (16.7M colors), so smooth gradients can show subtle banding, especially in dark blues and grays. Adding a tiny amount of dither via CSS or PNG can help."
        },
        {
          "question": "What is the difference between linear and radial gradients?",
          "answer": "Linear gradients flow in a straight line (top-to-bottom, left-to-right, or any angle). Radial gradients flow outward from a center point. Linear is for backgrounds and stripes; radial is for spotlights and depth effects."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/css-gradient-generator.md",
      "markdownDoc": "https://uttir.com/css-gradient-generator.md"
    },
    {
      "slug": "placeholder-image-generator",
      "name": "Placeholder Image Generator",
      "shortDescription": "Generate inline SVG placeholder images at any size with custom text and colors. Pure SVG, no server.",
      "url": "https://uttir.com/placeholder-image-generator",
      "categories": [
        "image-tools"
      ],
      "keywords": [
        "placeholder image",
        "placeholder image generator",
        "lorem picsum",
        "image placeholder",
        "svg placeholder",
        "placeholder.com"
      ],
      "useCases": [
        "Generate a placeholder image of a specific size",
        "Get a placeholder with custom text and colors",
        "Download the placeholder as a PNG, JPG, or SVG",
        "Use the placeholder as a temporary stand-in for a real image"
      ],
      "userIntents": [
        "How do I placeholder image?",
        "Placeholder Image Generator online",
        "Free placeholder image no signup",
        "Placeholder Image Generator that doesn't upload my data",
        "Placeholder Image Generator in my browser",
        "Best placeholder image generator compared"
      ],
      "privacy": "Everything is generated in your browser as inline SVG.",
      "related": [
        "favicon-generator",
        "image-resizer",
        "image-compressor"
      ],
      "inputs": "An image file (JPG, PNG, WebP, HEIC, or other)",
      "outputs": "A generated value (UUID, password, QR code, palette, etc.)",
      "howTo": [
        {
          "title": "Set width and height",
          "detail": "Any positive numbers. Common: 800×600, 1200×630 (OG image), 1500×500."
        },
        {
          "title": "Pick colors",
          "detail": "Background and text. High contrast reads best."
        },
        {
          "title": "Copy the data URL or SVG",
          "detail": "Use the data URL in <img>, the SVG inline in your markup."
        }
      ],
      "examples": [
        {
          "title": "OG image (1200×630)",
          "description": "The recommended size for OpenGraph and Twitter cards.",
          "output": "<svg width=\"1200\" height=\"630\" …>…</svg>"
        },
        {
          "title": "Hero placeholder (1500×500)",
          "description": "A 3:1 hero image for a landing page.",
          "output": "<svg width=\"1500\" height=\"500\" …>…</svg>"
        }
      ],
      "faq": [
        {
          "question": "Why SVG instead of PNG?",
          "answer": "Inline SVG is text, so it is a single network request along with your HTML. PNG requires a separate image file and a separate request. SVG also scales perfectly to any size. The tradeoff: SVG does not work for photographic content."
        },
        {
          "question": "Can I export as PNG?",
          "answer": "This tool focuses on the data URL form, which is what most apps need. To convert the SVG to PNG, open the data URL in a browser and use the browser's print-to-PDF or screenshot."
        },
        {
          "question": "Can I use these images in production?",
          "answer": "For placeholders during development, yes. For production, no — replace with real images. Search engines and accessibility tools treat placeholder images as low-quality content."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/placeholder-image-generator.md",
      "markdownDoc": "https://uttir.com/placeholder-image-generator.md"
    },
    {
      "slug": "countdown-timer",
      "name": "Countdown Timer",
      "shortDescription": "Count down to a specific date and time. Set a target, watch the days/hours/minutes/seconds tick down live.",
      "url": "https://uttir.com/countdown-timer",
      "categories": [
        "date-time-tools",
        "calculators"
      ],
      "keywords": [
        "countdown timer",
        "countdown",
        "days until",
        "countdown to date",
        "event countdown",
        "time remaining"
      ],
      "useCases": [
        "Run a countdown to a specific date and time",
        "See the time remaining in days, hours, minutes, and seconds",
        "Get a sound notification when the countdown ends",
        "Use a countdown for a deadline, event, or break"
      ],
      "userIntents": [
        "How do I countdown timer?",
        "Countdown Timer online",
        "Free countdown timer no signup",
        "Countdown Timer that doesn't upload my data",
        "Countdown Timer in my browser",
        "Best countdown compared"
      ],
      "privacy": "Countdown runs entirely in your browser. No tracking.",
      "related": [
        "date-add-subtract",
        "date-calculator",
        "unix-timestamp-converter"
      ],
      "inputs": "A date or time value",
      "outputs": "A count (words, characters, sentences, paragraphs)",
      "howTo": [
        {
          "title": "Set a target date and time",
          "detail": "Defaults to 7 days from now — adjust freely."
        },
        {
          "title": "Start the timer",
          "detail": "Press Start; the display updates every second."
        },
        {
          "title": "Pause or reset",
          "detail": "Use the controls to pause or pick a new target."
        }
      ],
      "examples": [
        {
          "title": "New Year countdown",
          "description": "Set the target to January 1 at 00:00 and watch the year end.",
          "output": "Days, hours, minutes, seconds remaining"
        },
        {
          "title": "30-day sprint",
          "description": "A 30-day deadline for a personal challenge.",
          "output": "30d 0h 0m 0s → 0d 0h 0m 1s → …"
        }
      ],
      "faq": [
        {
          "question": "Why does the timer stop when I close the tab?",
          "answer": "Because it runs in your browser. We do not store anything server-side. Reopen the page and the countdown will be based on the current time and the target you set, which is preserved in the form fields."
        },
        {
          "question": "Is the time local or UTC?",
          "answer": "Local. The countdown uses your device's time zone. For deadlines in another zone, convert to your local time before setting the target."
        },
        {
          "question": "Will the alarm sound if I close the tab?",
          "answer": "No. A browser tab can only run while it is open. The alarm fires when the timer reaches zero AND the tab is still open. For alarms that survive closing the tab, use your phone or computer's built-in timer."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/countdown-timer.md",
      "markdownDoc": "https://uttir.com/countdown-timer.md"
    },
    {
      "slug": "user-agent-parser",
      "name": "User Agent Parser",
      "shortDescription": "Identify the browser, OS, and device type from any user-agent string. Detects bots and crawlers too.",
      "url": "https://uttir.com/user-agent-parser",
      "categories": [
        "web-tools",
        "developer-tools"
      ],
      "keywords": [
        "user agent parser",
        "user agent",
        "ua parser",
        "parse user agent",
        "browser detection",
        "what is my user agent"
      ],
      "useCases": [
        "Parse a user agent string to see the browser, OS, and device",
        "Check what a user agent looks like for a specific browser",
        "Identify bots, crawlers, and automation tools from their UA",
        "See the rendering engine and version"
      ],
      "userIntents": [
        "How do I user agent parser?",
        "User Agent Parser online",
        "Free user agent parser no signup",
        "User Agent Parser that doesn't upload my data",
        "User Agent Parser in my browser",
        "Best user agent compared"
      ],
      "privacy": "Parsing happens in your browser. Your UA string is not sent anywhere.",
      "related": [
        "json-formatter",
        "http-status-codes",
        "regex-tester"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Paste a UA string",
          "detail": "From server logs, browser dev tools, or an HTTP header."
        },
        {
          "title": "Or click \"Use my UA\"",
          "detail": "Fills the field with your own browser's UA string."
        },
        {
          "title": "Read the breakdown",
          "detail": "Browser, version, OS, device, and bot flag appear below."
        }
      ],
      "examples": [
        {
          "title": "Chrome on Windows",
          "description": "The classic desktop Chrome UA.",
          "output": "Browser: Chrome 120 · OS: Windows 10 · Device: desktop"
        },
        {
          "title": "Googlebot",
          "description": "The Google web crawler.",
          "output": "Browser: Unknown · OS: Unknown · Device: bot · Bot: true"
        }
      ],
      "faq": [
        {
          "question": "What is a user-agent string?",
          "answer": "It is the value of the User-Agent HTTP header that your browser sends with every request. It identifies the software making the request and looks something like: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 …"
        },
        {
          "question": "Can user-agent strings be spoofed?",
          "answer": "Trivially. Any client can send any UA string it wants. Treat UA-based detection as a hint, not a guarantee. For serious bot detection, combine UA with IP reputation, behavior analysis, and challenge-response flows like Cloudflare Turnstile or hCaptcha."
        },
        {
          "question": "Why is the User-Agent lying about being a browser?",
          "answer": "Some bots pretend to be a browser to bypass simple User-Agent blocks. The tool also checks the rest of the request for inconsistencies — a real Chrome includes headers like sec-ch-ua that bots often miss."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/user-agent-parser.md",
      "markdownDoc": "https://uttir.com/user-agent-parser.md"
    },
    {
      "slug": "temperature-converter",
      "name": "Temperature Converter",
      "shortDescription": "Convert between Celsius, Fahrenheit, and Kelvin. Bidirectional — type in any field, all three update live.",
      "url": "https://uttir.com/temperature-converter",
      "categories": [
        "converters"
      ],
      "keywords": [
        "temperature converter",
        "celsius to fahrenheit",
        "fahrenheit to celsius",
        "kelvin converter",
        "c to f",
        "f to c"
      ],
      "useCases": [
        "Convert between Celsius, Fahrenheit, and Kelvin",
        "See all three temperature scales for a given value",
        "Convert a body temperature (fever check)",
        "Convert a cooking or weather temperature"
      ],
      "userIntents": [
        "How do I temperature converter?",
        "Temperature Converter online",
        "Free temperature converter no signup",
        "Temperature Converter that doesn't upload my data",
        "Temperature Converter in my browser",
        "Best celsius to fahrenheit compared"
      ],
      "privacy": "Math runs locally. No data leaves your browser.",
      "related": [
        "unit-converter",
        "roman-numeral-converter",
        "binary-hex-converter"
      ],
      "inputs": "A date or time value",
      "outputs": "A file in the target format",
      "howTo": [
        {
          "title": "Enter a value",
          "detail": "In any of the three fields — Celsius, Fahrenheit, or Kelvin."
        },
        {
          "title": "Read the conversion",
          "detail": "The other two fields update live."
        },
        {
          "title": "Copy or note",
          "detail": "The fields are editable, so select and copy whatever you need."
        }
      ],
      "examples": [
        {
          "title": "Boiling point of water",
          "description": "100 °C → 212 °F → 373.15 K",
          "output": "100 °C = 212 °F = 373.15 K"
        },
        {
          "title": "Absolute zero",
          "description": "The lowest possible temperature — 0 K = -273.15 °C = -459.67 °F.",
          "output": "0 K = -273.15 °C = -459.67 °F"
        }
      ],
      "faq": [
        {
          "question": "What is Kelvin?",
          "answer": "Kelvin is the SI unit of temperature. It starts at absolute zero (the coldest possible temperature, where all motion stops) and uses the same scale as Celsius but shifted by 273.15. It is used in physics and engineering because it has no negative values."
        },
        {
          "question": "How accurate is this?",
          "answer": "Conversions are exact up to floating-point precision. The formulas used: °C to °F = (°C × 9/5) + 32; °F to °C = (°F - 32) × 5/9; K to °C = K - 273.15."
        },
        {
          "question": "Why is there no negative Kelvin?",
          "answer": "Because Kelvin is an absolute scale: 0 K is the coldest possible temperature (absolute zero). You cannot go below 0 K. The tool shows the conversion but flags negative Kelvin as physically impossible."
        }
      ],
      "addedAt": "2026-08-11",
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/temperature-converter.md",
      "markdownDoc": "https://uttir.com/temperature-converter.md"
    },
    {
      "slug": "cron-generator",
      "name": "Cron Expression Generator",
      "shortDescription": "Build cron expressions from a simple form, or pick a common preset. See plain-English explanations.",
      "url": "https://uttir.com/cron-generator",
      "categories": [
        "developer-tools",
        "date-time-tools",
        "generators"
      ],
      "keywords": [
        "cron generator",
        "crontab generator",
        "cron expression builder",
        "cron schedule generator",
        "cron presets"
      ],
      "useCases": [
        "Build a cron expression from a description (\"every 5 minutes\", \"weekdays at 9am\")",
        "Generate a cron expression for a common schedule (hourly, daily, weekly)",
        "See the next run times for a generated expression",
        "Copy the expression to paste into a scheduler or config file"
      ],
      "userIntents": [
        "How do I cron generator?",
        "Cron Expression Generator online",
        "Free cron generator no signup",
        "Cron Expression Generator that doesn't upload my data",
        "Cron Expression Generator in my browser",
        "Best crontab generator compared"
      ],
      "privacy": "Generated locally. Nothing is sent anywhere.",
      "related": [
        "cron-parser",
        "unix-timestamp-converter",
        "regex-tester"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A random selection from the input list",
      "howTo": [
        {
          "title": "Pick a preset",
          "detail": "Common schedules are one click — every minute, weekdays at 9 AM, etc."
        },
        {
          "title": "Or build your own",
          "detail": "Set the time, toggle the days of the week, and pick a day-of-month if you want."
        },
        {
          "title": "Copy the expression",
          "detail": "Use the expression in crontab, CI configs, or anywhere cron runs."
        }
      ],
      "examples": [
        {
          "title": "Every weekday at 9 AM",
          "description": "A classic work-hour schedule.",
          "output": "0 9 * * 1-5"
        },
        {
          "title": "Every 15 minutes",
          "description": "A common health-check heartbeat.",
          "output": "*/15 * * * *"
        }
      ],
      "faq": [
        {
          "question": "What format does this use?",
          "answer": "Standard 5-field POSIX cron: minute hour day-of-month month day-of-week. This is the format used by Linux crontab, GitHub Actions scheduled events, Kubernetes CronJobs, and most CI systems. Quartz-style 6- or 7-field cron is not supported."
        },
        {
          "question": "Why is the companion Cron Parser useful?",
          "answer": "Because reading cron by eye is hard. The parser shows you a plain-English description (\"At minute 0 past hour 9, Monday through Friday\") and the next 5 firing times so you can sanity-check the expression before you ship it."
        },
        {
          "question": "Why are there only 5 fields?",
          "answer": "Standard cron has 5 fields (minute, hour, day, month, weekday). Some systems add a 6th field for seconds; some add a 7th for year. The tool generates standard 5-field expressions, which work in every cron implementation."
        }
      ],
      "addedAt": "2026-08-11",
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/cron-generator.md",
      "markdownDoc": "https://uttir.com/cron-generator.md"
    },
    {
      "slug": "palindrome-checker",
      "name": "Palindrome Checker",
      "shortDescription": "Check if a word, phrase, or sentence is a palindrome. Also detects anagrams. Case-insensitive, ignores spaces and punctuation.",
      "url": "https://uttir.com/palindrome-checker",
      "categories": [
        "text-tools"
      ],
      "keywords": [
        "palindrome checker",
        "palindrome",
        "anagram checker",
        "word game",
        "is it a palindrome",
        "palindrome finder"
      ],
      "useCases": [
        "Check whether a word, phrase, or number is a palindrome",
        "Ignore spaces, punctuation, and case in the check",
        "Find palindromes in a text",
        "Generate palindromes from a list of words"
      ],
      "userIntents": [
        "How do I palindrome checker?",
        "Palindrome Checker online",
        "Free palindrome checker no signup",
        "Palindrome Checker that doesn't upload my data",
        "Palindrome Checker in my browser",
        "Best palindrome compared"
      ],
      "privacy": "All checking happens in your browser.",
      "related": [
        "character-frequency",
        "reverse-text",
        "sentence-counter"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A check result (pass/fail, length, ratio, etc.)",
      "howTo": [
        {
          "title": "Paste your text",
          "detail": "A word, phrase, or full sentence."
        },
        {
          "title": "Read the result",
          "detail": "\"Yes, palindrome\" or \"Not a palindrome\" plus the normalized form."
        }
      ],
      "examples": [
        {
          "title": "\"A man, a plan, a canal: Panama\"",
          "description": "One of the most famous palindromic sentences.",
          "output": "Yes — palindrome"
        },
        {
          "title": "\"racecar\"",
          "description": "A simple single-word palindrome.",
          "output": "Yes — palindrome"
        }
      ],
      "faq": [
        {
          "question": "What is an anagram?",
          "answer": "An anagram is a word or phrase formed by rearranging the letters of another. \"listen\" and \"silent\" are anagrams. The tool can also tell you whether two inputs are anagrams of each other."
        },
        {
          "question": "What is ignored when checking?",
          "answer": "Case (A = a), spaces, and punctuation. The comparison is on letters and digits only. This matches the conventional definition of a palindrome for word games."
        },
        {
          "question": "Are spaces and punctuation ignored?",
          "answer": "Yes, by default. \"A man, a plan, a canal: Panama\" is a palindrome if you strip the punctuation and case-fold. There is a toggle to do a strict character-by-character check if you want."
        }
      ],
      "addedAt": "2026-08-11",
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/palindrome-checker.md",
      "markdownDoc": "https://uttir.com/palindrome-checker.md"
    },
    {
      "slug": "reverse-text",
      "name": "Reverse Text",
      "shortDescription": "Reverse characters, words, or lines in any text. Unicode-safe. Useful for puzzles, mirrored layouts, and word games.",
      "url": "https://uttir.com/reverse-text",
      "categories": [
        "text-tools"
      ],
      "keywords": [
        "reverse text",
        "reverse words",
        "reverse lines",
        "flip text",
        "text reverser",
        "mirror text"
      ],
      "useCases": [
        "Reverse the characters in a string",
        "Reverse the words in a sentence (but keep word order intact)",
        "Reverse each word in a sentence individually",
        "Generate a mirrored version of a string"
      ],
      "userIntents": [
        "How do I reverse text?",
        "Reverse Text online",
        "Free reverse text no signup",
        "Reverse Text that doesn't upload my data",
        "Reverse Text in my browser",
        "Best reverse words compared"
      ],
      "privacy": "Reversal happens entirely in your browser.",
      "related": [
        "case-converter",
        "character-counter",
        "palindrome-checker"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Paste your text",
          "detail": "A word, sentence, paragraph, or multi-line block."
        },
        {
          "title": "Pick a mode",
          "detail": "Characters, words, or lines — switch to see the difference."
        },
        {
          "title": "Copy the result",
          "detail": "Use the Copy button to grab the reversed text."
        }
      ],
      "examples": [
        {
          "title": "Character reverse",
          "description": "\"hello world\" becomes \"dlrow olleh\".",
          "output": "dlrow olleh"
        },
        {
          "title": "Word reverse",
          "description": "\"hello world\" becomes \"world hello\".",
          "output": "world hello"
        }
      ],
      "faq": [
        {
          "question": "Is the reversal unicode-safe?",
          "answer": "Yes. The tool uses Array.from() to split on code points, not on UTF-16 code units, so emoji and accented characters are preserved correctly."
        },
        {
          "question": "What is the use case?",
          "answer": "Reversing text is useful for puzzles, word games, mirrored layouts in CSS, reversing poetry, and verifying whether a string is a palindrome (it is if reverse = original)."
        },
        {
          "question": "What about emoji and surrogate pairs?",
          "answer": "Most emoji are made of two Unicode code points. The tool reverses code points, not bytes, so emoji stay intact. The visual order on screen is reversed, but each emoji is still a single emoji."
        }
      ],
      "addedAt": "2026-08-11",
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/reverse-text.md",
      "markdownDoc": "https://uttir.com/reverse-text.md"
    },
    {
      "slug": "sentence-counter",
      "name": "Sentence & Paragraph Counter",
      "shortDescription": "Count sentences, paragraphs, words, characters, and reading time all at once. Find your longest word and average sentence length.",
      "url": "https://uttir.com/sentence-counter",
      "categories": [
        "text-tools"
      ],
      "keywords": [
        "sentence counter",
        "paragraph counter",
        "text statistics",
        "word count",
        "reading time",
        "text analytics"
      ],
      "useCases": [
        "Count the number of sentences in a text",
        "Check the average sentence length in a draft",
        "Verify sentence count for a school assignment",
        "Count sentences in a piece of writing for editing"
      ],
      "userIntents": [
        "How do I sentence counter?",
        "Sentence & Paragraph Counter online",
        "Free sentence counter no signup",
        "Sentence & Paragraph Counter that doesn't upload my data",
        "Sentence & Paragraph Counter in my browser",
        "Best paragraph counter compared"
      ],
      "privacy": "Counting happens in your browser.",
      "related": [
        "word-counter",
        "character-counter",
        "reading-time"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A count (words, characters, sentences, paragraphs)",
      "howTo": [
        {
          "title": "Paste your text",
          "detail": "A paragraph, a chapter, or a whole article."
        },
        {
          "title": "Read the stats",
          "detail": "All the counts update live as you type."
        }
      ],
      "examples": [
        {
          "title": "A short paragraph",
          "description": "Typical prose: 6 sentences, ~100 words, ~580 characters.",
          "output": "Sentences 6 · Words 100 · Paragraphs 1 · Longest \"extraordinary\""
        }
      ],
      "faq": [
        {
          "question": "How are sentences counted?",
          "answer": "By counting . ! ? terminators followed by whitespace or end-of-text. This catches the common cases but may miscount in edge cases like abbreviations (\"Dr. Smith\") — no algorithm is perfect for that."
        },
        {
          "question": "How is reading time estimated?",
          "answer": "At 238 words per minute, which is the average silent reading speed for non-fiction English prose per the most-cited meta-analysis."
        },
        {
          "question": "How does it detect a sentence?",
          "answer": "By sentence-ending punctuation: period, exclamation point, or question mark followed by a space or end of input. It will miscount abbreviations (Dr., Mr., U.S.A.) — there is no perfect heuristic."
        }
      ],
      "addedAt": "2026-08-11",
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/sentence-counter.md",
      "markdownDoc": "https://uttir.com/sentence-counter.md"
    },
    {
      "slug": "uuid-v7-generator",
      "name": "UUID v7 Generator",
      "shortDescription": "Generate RFC 9562 UUID v7 identifiers. Time-sortable, globally unique, generated locally. Batch of 1 to 1000.",
      "url": "https://uttir.com/uuid-v7-generator",
      "categories": [
        "generators"
      ],
      "keywords": [
        "uuid v7",
        "uuidv7",
        "uuid v7 generator",
        "time-sortable uuid",
        "rfc 9562",
        "uuid generator"
      ],
      "useCases": [
        "Generate a UUID v7 (time-sortable, the 2026 default)",
        "Generate UUIDs that can be used as sortable primary keys in a database",
        "Generate many UUID v7s at once",
        "Compare UUID v4 (random) vs UUID v7 (time-ordered) for your use case"
      ],
      "userIntents": [
        "How do I uuid v7?",
        "UUID v7 Generator online",
        "Free uuid v7 no signup",
        "UUID v7 Generator that doesn't upload my data",
        "UUID v7 Generator in my browser",
        "Best uuidv7 compared"
      ],
      "privacy": "UUIDs are generated locally using your browser’s secure RNG.",
      "related": [
        "uuid-generator",
        "password-generator",
        "random-number-generator"
      ],
      "inputs": "A date or time value",
      "outputs": "A generated value (UUID, password, QR code, palette, etc.)",
      "howTo": [
        {
          "title": "Pick a batch size",
          "detail": "Any number from 1 to 1000."
        },
        {
          "title": "Generate",
          "detail": "Press Generate to roll a fresh batch of v7 IDs."
        },
        {
          "title": "Copy",
          "detail": "Use Copy to put the whole batch on your clipboard."
        }
      ],
      "examples": [
        {
          "title": "A typical v7",
          "description": "A v7 ID with a 2026 timestamp prefix.",
          "output": "0190c7e3-5d6e-7abc-9def-1234567890ab"
        },
        {
          "title": "v4 vs v7",
          "description": "v4 IDs are random; v7 IDs sort by time. Same uniqueness guarantees.",
          "output": "v7: 0190… (time-sorted)   v4: 5d6e… (random)"
        }
      ],
      "faq": [
        {
          "question": "Should I use v4 or v7?",
          "answer": "For new projects, v7 is almost always better — it gives you chronological sorting for free, which is huge for database performance. v4 is still fine for security-sensitive use cases where you do not want any timestamp in the ID."
        },
        {
          "question": "Is v7 supported in my database?",
          "answer": "Most modern databases (PostgreSQL 16+, MySQL 8.0.31+, SQLite 3.42+) accept v7 IDs as primary keys just like v4. They are still 128-bit values, just with timestamp bits at the front."
        },
        {
          "question": "Why use UUID v7 over v4?",
          "answer": "UUID v7 is time-ordered: the first 48 bits are a millisecond timestamp, the rest is random. Time-ordered UUIDs sort naturally by creation time and are better for database indexes (no random B-tree thrashing)."
        }
      ],
      "addedAt": "2026-08-11",
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/uuid-v7-generator.md",
      "markdownDoc": "https://uttir.com/uuid-v7-generator.md"
    },
    {
      "slug": "color-name-finder",
      "name": "Color Name Finder",
      "shortDescription": "Find the closest named color to any hex value. Useful for naming colors, picking palette anchors, and palette inspiration.",
      "url": "https://uttir.com/color-name-finder",
      "categories": [
        "generators"
      ],
      "keywords": [
        "color name",
        "color name finder",
        "color name from hex",
        "name that color",
        "color namer",
        "color to name"
      ],
      "useCases": [
        "Find the closest CSS named color to a hex value",
        "Name a color for design documentation or conversation",
        "Identify a color from a screenshot or design",
        "Find a named color to use directly in CSS (`color: red`)"
      ],
      "userIntents": [
        "How do I color name?",
        "Color Name Finder online",
        "Free color name no signup",
        "Color Name Finder that doesn't upload my data",
        "Color Name Finder in my browser",
        "Best color name finder compared"
      ],
      "privacy": "All matching happens locally.",
      "related": [
        "color-picker",
        "color-palette-generator",
        "hex-to-rgb"
      ],
      "inputs": "A color value (hex, RGB, or HSL)",
      "outputs": "A random selection from the input list",
      "howTo": [
        {
          "title": "Enter a hex value",
          "detail": "Use the color picker or paste a hex like #ff7e5f."
        },
        {
          "title": "Read the name",
          "detail": "The closest named color appears with its hex and the distance score."
        }
      ],
      "examples": [
        {
          "title": "Royal blue",
          "description": "The exact hex for Royal Blue returns the exact match.",
          "input": "#4169e1",
          "output": "Royal Blue (#4169e1)"
        },
        {
          "title": "A sunset orange",
          "description": "A near-match that does not have a standard name.",
          "input": "#ff7e5f",
          "output": "Coral (#ff7f50) — closest match"
        }
      ],
      "faq": [
        {
          "question": "Where do the color names come from?",
          "answer": "Standard CSS named colors, the same set browsers use when you write \"color: tomato\". There are 148 of them; the tool uses a curated subset of the most recognizable ones."
        },
        {
          "question": "How is \"closest\" measured?",
          "answer": "A weighted Euclidean distance in RGB space (red counts more, blue less). It is a cheap approximation of perceptual distance. For a perfect match, the result has a distance of 0; for a near-miss, the distance is small but nonzero."
        },
        {
          "question": "Where do the color names come from?",
          "answer": "A curated list of 1,500+ named colors, including the CSS named colors, the X11 color set, and several extended palettes. The closest match is the one with the smallest perceptual distance (in LAB color space)."
        }
      ],
      "addedAt": "2026-08-11",
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/color-name-finder.md",
      "markdownDoc": "https://uttir.com/color-name-finder.md"
    },
    {
      "slug": "gpa-calculator",
      "name": "GPA Calculator",
      "shortDescription": "Calculate your weighted GPA from course grades and credits. Supports 4.0, 4.3, 5.0, 10.0, and percentage scales.",
      "url": "https://uttir.com/gpa-calculator",
      "categories": [
        "calculators"
      ],
      "keywords": [
        "gpa calculator",
        "grade point average",
        "weighted gpa",
        "college gpa",
        "high school gpa",
        "gpa scale"
      ],
      "useCases": [
        "Calculate a GPA from a set of courses and grades",
        "Use a 4.0, 4.3, 5.0, or 10.0 grading scale",
        "See the cumulative GPA across multiple semesters",
        "Add weighted courses (AP, honors, regular)"
      ],
      "userIntents": [
        "How do I gpa calculator?",
        "GPA Calculator online",
        "Free gpa calculator no signup",
        "GPA Calculator that doesn't upload my data",
        "GPA Calculator in my browser",
        "Best grade point average compared"
      ],
      "privacy": "Math runs locally — your grades never leave your browser.",
      "related": [
        "percentage-calculator",
        "bmi-calculator",
        "grade-calculator"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A numeric calculation (percentage, BMI, payment, etc.)",
      "howTo": [
        {
          "title": "Pick a scale",
          "detail": "4.0 (US college), 4.3 (some HS), 5.0 (weighted HS), 10.0, or percentage (US K-12)."
        },
        {
          "title": "Add courses",
          "detail": "Credit hours + grade (letter or numeric, depending on the scale)."
        },
        {
          "title": "Read your GPA",
          "detail": "The weighted GPA updates live as you add, remove, or edit rows."
        }
      ],
      "examples": [
        {
          "title": "A typical college semester",
          "description": "Three 3-credit courses: A, B, C.",
          "input": "3 cr A, 3 cr B, 3 cr C",
          "output": "GPA: 3.0 (on 4.0 scale)"
        },
        {
          "title": "Honors + standard mix",
          "description": "A 4-credit A and a 1-credit F.",
          "input": "4 cr A, 1 cr F",
          "output": "GPA: 3.2 (on 4.0 scale)"
        }
      ],
      "faq": [
        {
          "question": "What is weighted vs unweighted GPA?",
          "answer": "Unweighted GPA is on a single 4.0 scale — every class counts the same. Weighted GPA gives extra points for honors, AP, or IB classes (often a 5.0 scale). This calculator supports both, plus the 4.3 and percentage scales."
        },
        {
          "question": "How do I convert a percentage to a 4.0 scale?",
          "answer": "Pick the \"percentage\" scale and enter the percentage (e.g. 95). The tool uses the common US conversion: 90+ = A (4.0), 80-89 = B (3.0), 70-79 = C (2.0), 60-69 = D (1.0), below 60 = F (0.0)."
        },
        {
          "question": "How is GPA weighted?",
          "answer": "Most systems use the credit hours of each course: grade points (4.0 for A, 3.0 for B, etc.) times the credit hours, divided by total credit hours. Some systems use a 4.0 scale, some a 4.3, some a 5.0. The tool lets you pick."
        }
      ],
      "addedAt": "2026-08-11",
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/gpa-calculator.md",
      "markdownDoc": "https://uttir.com/gpa-calculator.md"
    },
    {
      "slug": "calorie-calculator",
      "name": "Calorie Calculator (BMR + TDEE)",
      "shortDescription": "Calculate your Basal Metabolic Rate (BMR) and Total Daily Energy Expenditure (TDEE). Includes a goal-adjusted daily calorie target.",
      "url": "https://uttir.com/calorie-calculator",
      "categories": [
        "calculators"
      ],
      "keywords": [
        "calorie calculator",
        "bmr calculator",
        "tdee calculator",
        "basal metabolic rate",
        "daily calories",
        "mifflin st jeor"
      ],
      "useCases": [
        "Estimate daily calorie needs from age, weight, height, and activity level",
        "See the BMR (basal metabolic rate) and TDEE (total daily energy expenditure)",
        "Plan a calorie target for weight loss, maintenance, or gain",
        "Use metric or imperial units"
      ],
      "userIntents": [
        "How do I calorie calculator?",
        "Calorie Calculator (BMR + TDEE) online",
        "Free calorie calculator no signup",
        "Calorie Calculator (BMR + TDEE) that doesn't upload my data",
        "Calorie Calculator (BMR + TDEE) in my browser",
        "Best bmr calculator compared"
      ],
      "privacy": "Math runs locally. No data leaves your device.",
      "related": [
        "bmi-calculator",
        "percentage-calculator",
        "salary-calculator"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A numeric calculation (percentage, BMI, payment, etc.)",
      "howTo": [
        {
          "title": "Enter your details",
          "detail": "Age, sex, height, weight."
        },
        {
          "title": "Pick your activity level",
          "detail": "Sedentary, light, moderate, active, or very active."
        },
        {
          "title": "Pick a goal",
          "detail": "Lose, maintain, or gain — the tool gives you a target calorie count."
        }
      ],
      "examples": [
        {
          "title": "A typical office worker wanting to lose",
          "description": "30y male, 180cm, 80kg, sedentary, goal: lose.",
          "output": "BMR 1780 · TDEE 2136 · Target 1636 kcal/day"
        }
      ],
      "faq": [
        {
          "question": "Is the result accurate?",
          "answer": "The Mifflin-St Jeor formula is accurate to within about ±10% for most adults. Real-world calorie burn varies based on muscle mass, genetics, sleep, stress, and other factors. Treat the result as a starting point, not gospel."
        },
        {
          "question": "How fast should I lose weight?",
          "answer": "A safe, sustainable rate is 0.5–1 kg (1–2 lbs) per week. That corresponds to a daily deficit of 500–1000 kcal. Anything faster is hard to maintain and can cause muscle loss."
        },
        {
          "question": "What is TDEE?",
          "answer": "Total Daily Energy Expenditure: the number of calories you burn per day, including activity. It is higher than BMR (basal metabolic rate) by a multiplier based on activity level. The tool uses the Mifflin-St Jeor equation for BMR."
        }
      ],
      "addedAt": "2026-08-11",
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/calorie-calculator.md",
      "markdownDoc": "https://uttir.com/calorie-calculator.md"
    },
    {
      "slug": "stopwatch",
      "name": "Stopwatch",
      "shortDescription": "A clean online stopwatch with laps, millisecond precision, and keyboard shortcuts. Runs in your browser.",
      "url": "https://uttir.com/stopwatch",
      "categories": [
        "date-time-tools",
        "calculators"
      ],
      "keywords": [
        "online stopwatch",
        "stopwatch",
        "timer",
        "lap timer",
        "lap stopwatch",
        "precision timer"
      ],
      "useCases": [
        "Time a task with a precise stopwatch (millisecond accuracy)",
        "Record lap times and split times",
        "Track multiple intervals at once",
        "Use a keyboard shortcut to start, stop, and lap"
      ],
      "userIntents": [
        "How do I online stopwatch?",
        "Stopwatch online",
        "Free online stopwatch no signup",
        "Stopwatch that doesn't upload my data",
        "Stopwatch in my browser",
        "Best stopwatch compared"
      ],
      "privacy": "All timing happens in your browser. No data is uploaded.",
      "related": [
        "countdown-timer",
        "pomodoro-timer",
        "date-add-subtract"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A live timer or stopwatch",
      "howTo": [
        {
          "title": "Start",
          "detail": "Press Start (or Space) to begin timing."
        },
        {
          "title": "Lap or pause",
          "detail": "Press Lap to record a split. Press Pause (or Space) to stop."
        },
        {
          "title": "Reset",
          "detail": "When paused, press Reset to clear."
        }
      ],
      "examples": [
        {
          "title": "Sprint interval",
          "description": "Start the timer, run for 30 seconds, hit Lap, repeat.",
          "output": "Lap 1: 00:30.12 · Lap 2: 01:00.34 · …"
        }
      ],
      "faq": [
        {
          "question": "How accurate is it?",
          "answer": "Accurate to the millisecond, limited only by your browser and display refresh rate. The timer uses Date.now() and setInterval, so it is not affected by the cost of re-rendering."
        },
        {
          "question": "Does it work when I switch tabs?",
          "answer": "Yes. The browser may throttle setInterval in background tabs, but the elapsed time calculation is based on timestamps, so the display catches up when you return to the tab."
        },
        {
          "question": "How accurate is it?",
          "answer": "Within a few milliseconds on modern hardware. The browser's performance.now() provides sub-millisecond precision. Drift over an hour is typically under one second."
        }
      ],
      "addedAt": "2026-08-11",
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/stopwatch.md",
      "markdownDoc": "https://uttir.com/stopwatch.md"
    },
    {
      "slug": "pomodoro-timer",
      "name": "Pomodoro Timer",
      "shortDescription": "A Pomodoro timer with 25/5/15 defaults. Focus, short break, long break, and session counter. Customizable phase lengths.",
      "url": "https://uttir.com/pomodoro-timer",
      "categories": [
        "date-time-tools",
        "calculators"
      ],
      "keywords": [
        "pomodoro timer",
        "pomodoro",
        "focus timer",
        "25 5 timer",
        "study timer",
        "work timer"
      ],
      "useCases": [
        "Run a 25/5 Pomodoro focus session with sound notifications",
        "Track completed Pomodoros in a day",
        "Take a longer break after every four Pomodoros",
        "Use the original Pomodoro Technique intervals in your browser"
      ],
      "userIntents": [
        "How do I pomodoro timer?",
        "Pomodoro Timer online",
        "Free pomodoro timer no signup",
        "Pomodoro Timer that doesn't upload my data",
        "Pomodoro Timer in my browser",
        "Best pomodoro compared"
      ],
      "privacy": "Timer runs in your browser. No tracking.",
      "related": [
        "stopwatch",
        "countdown-timer",
        "reading-time"
      ],
      "inputs": "A date or time value",
      "outputs": "A count (words, characters, sentences, paragraphs)",
      "howTo": [
        {
          "title": "Start the focus phase",
          "detail": "Press Start to begin a 25-minute focus block."
        },
        {
          "title": "Take the break",
          "detail": "When the timer ends, the next phase starts automatically. Take the break."
        },
        {
          "title": "Repeat",
          "detail": "After 4 focus sessions, the tool gives you a longer 15-minute break."
        }
      ],
      "examples": [
        {
          "title": "A classic 4-pomodoro morning",
          "description": "2 hours of focused work with three 5-minute breaks and one 15-minute break.",
          "output": "Focus → Short → Focus → Short → Focus → Short → Focus → Long"
        }
      ],
      "faq": [
        {
          "question": "Why 25 minutes?",
          "answer": "It is short enough to stay focused, long enough to make real progress on most tasks, and the break rewards your attention. Research on ultradian rhythms suggests the brain naturally cycles through ~90-minute focused blocks, and 25 minutes is a comfortably small unit within that."
        },
        {
          "question": "Can I customize the phase lengths?",
          "answer": "Yes. Use the settings to set your own focus, short break, and long break durations. The defaults (25/5/15) work for most people, but a 50/10 or 90/20 setup is also popular."
        },
        {
          "question": "Why 25 minutes?",
          "answer": "It is a heuristic from the 1980s that fits most attention spans. Adjust to whatever works for you. Common variants: 50/10 for deep focus, 15/3 for short tasks, 90/20 for ultradian rhythms. The tool lets you customize."
        }
      ],
      "addedAt": "2026-08-11",
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/pomodoro-timer.md",
      "markdownDoc": "https://uttir.com/pomodoro-timer.md"
    },
    {
      "slug": "meta-description-checker",
      "name": "Meta Description Length Checker",
      "shortDescription": "Check the length of a meta description against Google’s recommended 70-160 character range. Live verdict and progress bar.",
      "url": "https://uttir.com/meta-description-checker",
      "categories": [
        "seo-tools",
        "text-tools"
      ],
      "keywords": [
        "meta description checker",
        "meta description length",
        "meta description validator",
        "seo snippet",
        "meta description tool",
        "description length"
      ],
      "useCases": [
        "Check the length of a meta description in pixels (Google’s unit)",
        "See if a meta description will be truncated in search results",
        "Optimize a description to fit the 920-960 pixel range",
        "Preview the description as it would appear in Google"
      ],
      "userIntents": [
        "How do I meta description checker?",
        "Meta Description Length Checker online",
        "Free meta description checker no signup",
        "Meta Description Length Checker that doesn't upload my data",
        "Meta Description Length Checker in my browser",
        "Best meta description length compared"
      ],
      "privacy": "All length checks run in your browser.",
      "related": [
        "title-length-checker",
        "serp-preview",
        "meta-tag-generator"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A check result (pass/fail, length, ratio, etc.)",
      "howTo": [
        {
          "title": "Paste your description",
          "detail": "Up to 200 characters is supported."
        },
        {
          "title": "Read the verdict",
          "detail": "A live bar shows where you land against the 70-160 sweet spot."
        }
      ],
      "examples": [
        {
          "title": "A good meta description",
          "description": "A 145-character description that fits in full and describes the page.",
          "input": "Count words, characters, sentences, and paragraphs in your text instantly. Free, fast, and private — your text never leaves your browser.",
          "output": "145 chars — good"
        },
        {
          "title": "A truncated one",
          "description": "A 180-character description that Google will cut off.",
          "input": "…(180 chars)…",
          "output": "180 chars — too long, will be truncated by Google"
        }
      ],
      "faq": [
        {
          "question": "How long should a meta description be?",
          "answer": "Google typically displays up to 155–160 characters on desktop and ~120 on mobile. Aim for 70-160 to be safe across devices."
        },
        {
          "question": "Does Google always use my meta description?",
          "answer": "No. About 60% of the time, Google generates its own snippet from the page content. But a well-written meta description is still the best way to influence what shows up."
        },
        {
          "question": "How long should a meta description be?",
          "answer": "Most search engines truncate at 155-160 characters. Aim for 50-160. Front-load the most important words; the truncation is from the end, not the start."
        }
      ],
      "addedAt": "2026-08-11",
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/meta-description-checker.md",
      "markdownDoc": "https://uttir.com/meta-description-checker.md"
    },
    {
      "slug": "title-length-checker",
      "name": "Page Title Length Checker",
      "shortDescription": "Check the length of a page title (or Open Graph title) against Google’s recommended limits. Live character count and verdict.",
      "url": "https://uttir.com/title-length-checker",
      "categories": [
        "seo-tools",
        "text-tools"
      ],
      "keywords": [
        "title length checker",
        "page title length",
        "title length seo",
        "og title length",
        "seo title",
        "title tag length"
      ],
      "useCases": [
        "Check a page title’s length against Google’s pixel truncation",
        "See if a title will be cut off in search results",
        "Optimize a title to fit the 580-600 pixel range",
        "Check an Open Graph title for social sharing"
      ],
      "userIntents": [
        "How do I title length checker?",
        "Page Title Length Checker online",
        "Free title length checker no signup",
        "Page Title Length Checker that doesn't upload my data",
        "Page Title Length Checker in my browser",
        "Best page title length compared"
      ],
      "privacy": "All checks run in your browser.",
      "related": [
        "meta-description-checker",
        "serp-preview",
        "meta-tag-generator"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A count (words, characters, sentences, paragraphs)",
      "howTo": [
        {
          "title": "Pick a tag type",
          "detail": "Page title (<title>) or Open Graph title (<meta property=\"og:title\">)."
        },
        {
          "title": "Paste your title",
          "detail": "The verdict and count update live."
        }
      ],
      "examples": [
        {
          "title": "A good page title",
          "description": "A 47-character title that displays in full and contains the brand name.",
          "input": "Free Word Counter Online — Count Words Instantly",
          "output": "47 chars — good"
        },
        {
          "title": "A truncated one",
          "description": "A 75-character title that Google will cut off.",
          "input": "…(75 chars)…",
          "output": "75 chars — too long, will be truncated"
        }
      ],
      "faq": [
        {
          "question": "How long should a page title be?",
          "answer": "Google typically shows the first 50-60 characters of a title in search results. Aim for 30-60 characters so the whole title is visible on both desktop and mobile."
        },
        {
          "question": "What about the og:title?",
          "answer": "The Open Graph title is what shows when the page is shared on Facebook, LinkedIn, Slack, etc. It can be a bit longer (up to ~90 chars) but the same truncation rules apply. Twitter uses a separate twitter:title tag with a ~70 char limit."
        },
        {
          "question": "How long should a page title be?",
          "answer": "50-60 characters is the safe range. Search engines truncate at around 60 characters on the results page, so the most important words should be in the first 50."
        }
      ],
      "addedAt": "2026-08-11",
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/title-length-checker.md",
      "markdownDoc": "https://uttir.com/title-length-checker.md"
    },
    {
      "slug": "screen-resolution",
      "name": "Screen Resolution Checker",
      "shortDescription": "See your current viewport and screen size, device pixel ratio, color depth, orientation, and more. Useful for responsive design and bug reports.",
      "url": "https://uttir.com/screen-resolution",
      "categories": [
        "web-tools"
      ],
      "keywords": [
        "screen resolution",
        "viewport size",
        "window size",
        "device pixel ratio",
        "my screen size",
        "screen info"
      ],
      "useCases": [
        "See the current screen resolution, viewport size, and pixel ratio",
        "Check the device pixel ratio (DPR) for retina or high-DPI displays",
        "See the available color depth and refresh rate",
        "Get the user agent and browser info alongside the resolution"
      ],
      "userIntents": [
        "How do I screen resolution?",
        "Screen Resolution Checker online",
        "Free screen resolution no signup",
        "Screen Resolution Checker that doesn't upload my data",
        "Screen Resolution Checker in my browser",
        "Best viewport size compared"
      ],
      "privacy": "Reading display info happens in your browser. Nothing is uploaded.",
      "related": [
        "user-agent-parser",
        "json-formatter",
        "http-status-codes"
      ],
      "inputs": "A color value (hex, RGB, or HSL)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Open the page",
          "detail": "The tool reads your screen and viewport on load."
        },
        {
          "title": "Resize or rotate",
          "detail": "Resize the window or rotate your device to see the values update."
        }
      ],
      "examples": [
        {
          "title": "A typical desktop",
          "description": "1920×1080 viewport, 1× pixel ratio, landscape, no touch.",
          "output": "Width 1920 · Height 1080 · Ratio 1.0 · Landscape"
        },
        {
          "title": "A typical phone",
          "description": "390×844 viewport, 3× pixel ratio, portrait, touch supported.",
          "output": "Width 390 · Height 844 · Ratio 3.0 · Portrait · Touch"
        }
      ],
      "faq": [
        {
          "question": "Why are there two sizes (viewport vs screen)?",
          "answer": "The viewport is the size of the browser window — what your page actually renders into. The screen is the size of the physical display, including the taskbar, browser chrome, etc. The viewport is what matters for layout; the screen matters for media queries at the device level."
        },
        {
          "question": "What is device pixel ratio?",
          "answer": "The ratio between physical pixels and CSS pixels. A 3× display has 3 physical pixels for every CSS pixel, which makes text and graphics sharper. A 1× display has a 1:1 mapping and may look more pixelated."
        },
        {
          "question": "What is the difference between resolution and viewport?",
          "answer": "Resolution is the actual pixel count of the screen (e.g. 1920x1080). Viewport is the size of the browser window inside the screen, which is usually smaller after the browser chrome is subtracted."
        }
      ],
      "addedAt": "2026-08-11",
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/screen-resolution.md",
      "markdownDoc": "https://uttir.com/screen-resolution.md"
    },
    {
      "slug": "number-base-converter",
      "name": "Number Base Converter",
      "shortDescription": "Convert between binary, octal, decimal, and hexadecimal. Type in any field and the other three update live.",
      "url": "https://uttir.com/number-base-converter",
      "categories": [
        "developer-tools"
      ],
      "keywords": [
        "number base converter",
        "binary to decimal",
        "decimal to binary",
        "hex to decimal",
        "base converter",
        "octal converter"
      ],
      "useCases": [
        "Convert a number between binary, octal, decimal, and hexadecimal",
        "See the binary representation of a decimal number",
        "Convert a hex color code to its RGB components",
        "Convert without uploading the number"
      ],
      "userIntents": [
        "How do I number base converter?",
        "Number Base Converter online",
        "Free number base converter no signup",
        "Number Base Converter that doesn't upload my data",
        "Number Base Converter in my browser",
        "Best binary to decimal compared"
      ],
      "privacy": "Math runs locally. No data leaves your browser.",
      "related": [
        "binary-hex-converter",
        "cron-generator",
        "regex-tester"
      ],
      "inputs": "A color value (hex, RGB, or HSL)",
      "outputs": "A file in the target format",
      "howTo": [
        {
          "title": "Type a value",
          "detail": "In any of the four base fields — binary, octal, decimal, or hex."
        },
        {
          "title": "Read the conversions",
          "detail": "The other three fields update live."
        },
        {
          "title": "Copy",
          "detail": "Select and copy whatever form you need."
        }
      ],
      "examples": [
        {
          "title": "A typical byte",
          "description": "255 in every base.",
          "output": "Bin 11111111 · Oct 377 · Dec 255 · Hex FF"
        },
        {
          "title": "IPv4 octet",
          "description": "192.168.0.1 — each octet in decimal, binary, hex.",
          "output": "192 → 11000000 → C0 · 168 → 10101000 → A8"
        }
      ],
      "faq": [
        {
          "question": "Why does hex use letters A-F?",
          "answer": "Because hex needs 16 symbols and we only have 10 digits (0-9). The letters A-F stand in for the values 10-15. So \"FF\" in hex = 15*16 + 15 = 255 in decimal."
        },
        {
          "question": "What is the largest number this handles?",
          "answer": "The converter uses BigInt internally, so it handles numbers of any practical size — well beyond 2^53. Display formatting also uses BigInt so the result is always exact."
        },
        {
          "question": "What is hexadecimal used for?",
          "answer": "Color codes (#FF0000), memory addresses, low-level programming, and any place where binary is too long. Each hex digit is exactly 4 binary digits, which makes it a compact way to write binary."
        }
      ],
      "addedAt": "2026-08-11",
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/number-base-converter.md",
      "markdownDoc": "https://uttir.com/number-base-converter.md"
    },
    {
      "slug": "date-formatter",
      "name": "Date Formatter",
      "shortDescription": "Format any date in ISO, US, EU, long, short, time, Unix, RFC 2822, and ISO week formats. Also converts Unix timestamps.",
      "url": "https://uttir.com/date-formatter",
      "categories": [
        "date-time-tools"
      ],
      "keywords": [
        "date formatter",
        "date format",
        "format date",
        "unix timestamp",
        "iso week",
        "rfc 2822"
      ],
      "useCases": [
        "Format a date in any common format (ISO 8601, RFC 2822, US, EU)",
        "See the same date in multiple formats at once",
        "Get the timestamp, UTC, and local representations",
        "Format a date for use in a database, log, or API"
      ],
      "userIntents": [
        "How do I date formatter?",
        "Date Formatter online",
        "Free date formatter no signup",
        "Date Formatter that doesn't upload my data",
        "Date Formatter in my browser",
        "Best date format compared"
      ],
      "privacy": "All formatting happens in your browser. No data leaves your device.",
      "related": [
        "unix-timestamp-converter",
        "date-calculator",
        "date-add-subtract"
      ],
      "inputs": "A date or time value",
      "outputs": "A formatted (pretty-printed) version of the input",
      "howTo": [
        {
          "title": "Pick a date",
          "detail": "Use the date/time picker, or paste a Unix timestamp in seconds."
        },
        {
          "title": "Read the formats",
          "detail": "All eight formats update live."
        }
      ],
      "examples": [
        {
          "title": "A modern ISO timestamp",
          "description": "The format most APIs use.",
          "output": "2026-01-15T12:34:56.000Z"
        },
        {
          "title": "A human-readable date",
          "description": "For a UI or report.",
          "output": "Thursday, January 15, 2026"
        }
      ],
      "faq": [
        {
          "question": "What is the ISO week format?",
          "answer": "The ISO 8601 week date format combines the year and the week number (1–53) with a W separator. For example, 2026-W03 is the third week of 2026. It is the standard in project management, finance, and most international business contexts."
        },
        {
          "question": "Is this in my time zone or UTC?",
          "answer": "It depends on the format. ISO, RFC 2822, and Unix are in UTC. The long, short, and time formats are in your local time zone (the one set in your OS)."
        },
        {
          "question": "What is ISO 8601?",
          "answer": "The international standard for date and time: YYYY-MM-DD for dates, HH:MM:SS for times, and combined with a T separator (2026-08-21T14:30:00Z). Time zones use Z for UTC or +HH:MM offset."
        }
      ],
      "addedAt": "2026-08-11",
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/date-formatter.md",
      "markdownDoc": "https://uttir.com/date-formatter.md"
    },
    {
      "slug": "password-strength-checker",
      "name": "Password Strength Checker",
      "shortDescription": "See how strong a password really is — entropy, time-to-crack, and a list of issues, all computed in your browser.",
      "url": "https://uttir.com/password-strength-checker",
      "categories": [
        "security-tools"
      ],
      "keywords": [
        "password strength checker",
        "password strength test",
        "how strong is my password",
        "password entropy",
        "password meter",
        "password crack time",
        "password score"
      ],
      "useCases": [
        "Use for password strength checker",
        "Use for password strength test",
        "Use for how strong is my password",
        "Use for password entropy",
        "Use for password meter"
      ],
      "userIntents": [
        "How do I password strength checker?",
        "Password Strength Checker online",
        "Free password strength checker no signup",
        "Password Strength Checker that doesn't upload my data",
        "Password Strength Checker in my browser",
        "Best password strength test compared"
      ],
      "privacy": "Your password is analyzed locally in your browser. It is never sent to a server, logged, or stored anywhere.",
      "related": [
        "password-generator",
        "hash-generator",
        "jwt-decoder"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A live timer or stopwatch",
      "howTo": [
        {
          "title": "Type or paste a password",
          "detail": "Use the show/hide eye to verify what you typed."
        },
        {
          "title": "Read the verdict",
          "detail": "Score, entropy, strength bucket, and a plain-English verdict appear as you type."
        },
        {
          "title": "Fix the issues",
          "detail": "If issues are listed, lengthen the password or add a missing character class."
        }
      ],
      "examples": [
        {
          "title": "A weak password",
          "description": "Lowercase letters, common word, 8 characters.",
          "input": "password",
          "output": "Very weak · ~6 bits effective · instantly crackable · common-password match"
        },
        {
          "title": "A strong password",
          "description": "16 characters, mixed case, numbers, symbols.",
          "input": "T7$mK9p!qL2v#R4n",
          "output": "Very strong · ~104 bits · centuries to crack"
        }
      ],
      "faq": [
        {
          "question": "How is password strength measured?",
          "answer": "Strength is the estimated bits of entropy — the log2 of the search space an attacker would have to try, adjusted for known-weak patterns. Above ~60 bits is good for most uses; above ~80 is very strong."
        },
        {
          "question": "Is my password sent to a server?",
          "answer": "No. The analysis runs entirely in your browser using JavaScript. Open DevTools → Network and you will see no outbound requests while you type."
        },
        {
          "question": "What does “time to crack” mean?",
          "answer": "It is an estimate at 10 billion guesses per second, the speed of a modern offline attack against a hashed database. Real-world speed depends on the hashing algorithm and attacker resources, but it is a useful ballpark."
        }
      ],
      "addedAt": "2026-08-12",
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/password-strength-checker.md",
      "markdownDoc": "https://uttir.com/password-strength-checker.md"
    },
    {
      "slug": "my-ip",
      "name": "My IP Address",
      "shortDescription": "See your public IP, approximate location, ISP, and ASN — useful for VPN checks and remote-access setup.",
      "url": "https://uttir.com/my-ip",
      "categories": [
        "network-tools"
      ],
      "keywords": [
        "my ip",
        "what is my ip",
        "ip address lookup",
        "public ip",
        "ip location",
        "vpn check",
        "external ip"
      ],
      "useCases": [
        "Use for my ip",
        "Use for what is my ip",
        "Use for ip address lookup",
        "Use for public ip",
        "Use for ip location"
      ],
      "userIntents": [
        "How do I my ip?",
        "My IP Address online",
        "Free my ip no signup",
        "My IP Address that doesn't upload my data",
        "My IP Address in my browser",
        "Best what is my ip compared"
      ],
      "privacy": "This is the only Uttir tool that makes a network request: a single lookup to a public IP-info service. The request contains no personal data, and Uttir never sees or stores your IP or the lookup result. Every other Uttir tool works fully offline.",
      "related": [
        "user-agent-parser",
        "screen-resolution",
        "hash-generator"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A check result (pass/fail, length, ratio, etc.)",
      "howTo": [
        {
          "title": "Open the tool",
          "detail": "Your IP is fetched and shown immediately — no input needed."
        },
        {
          "title": "Test your VPN",
          "detail": "Connect to a VPN in another country and click Refresh."
        },
        {
          "title": "Use the info",
          "detail": "Copy the IP, country, or ASN to paste into firewall rules, support tickets, or server configs."
        }
      ],
      "examples": [
        {
          "title": "A normal home connection",
          "description": "Looks up the public IP your ISP assigned to your router.",
          "output": "203.0.113.42 · United States · Ashburn · Comcast · AS7922"
        },
        {
          "title": "Connected to a VPN",
          "description": "The IP and location should match the VPN exit node, not your home.",
          "output": "198.51.100.7 · Netherlands · Amsterdam · Mullvad VPN · AS206092"
        }
      ],
      "faq": [
        {
          "question": "Is my IP address private?",
          "answer": "No public IP is truly private — every website you visit sees it. This tool just lets you see what they see. If you want to hide it, use a reputable VPN or Tor."
        },
        {
          "question": "Why does my location look wrong?",
          "answer": "IP geolocation is approximate — it points to the city or region of your ISP, usually your provider’s nearest hub. It is rarely accurate to a street address, and mobile / cellular IPs are even less precise."
        },
        {
          "question": "Why does the tool need to make a network request?",
          "answer": "JavaScript running in your browser cannot see your own public IP — only your local network IP. To find the public one, the tool asks a public IP-info service. The request contains no personal data."
        }
      ],
      "addedAt": "2026-08-12",
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/my-ip.md",
      "markdownDoc": "https://uttir.com/my-ip.md"
    },
    {
      "slug": "statistics-calculator",
      "name": "Statistics Calculator",
      "shortDescription": "Compute mean, median, mode, range, variance, standard deviation, and quartiles from a list of numbers.",
      "url": "https://uttir.com/statistics-calculator",
      "categories": [
        "math-tools"
      ],
      "keywords": [
        "statistics calculator",
        "mean median mode",
        "standard deviation",
        "variance",
        "quartiles",
        "average calculator",
        "sum and average"
      ],
      "useCases": [
        "Use for statistics calculator",
        "Use for mean median mode",
        "Use for standard deviation",
        "Use for variance",
        "Use for quartiles"
      ],
      "userIntents": [
        "How do I statistics calculator?",
        "Statistics Calculator online",
        "Free statistics calculator no signup",
        "Statistics Calculator that doesn't upload my data",
        "Statistics Calculator in my browser",
        "Best mean median mode compared"
      ],
      "privacy": "Your numbers are processed entirely in your browser. Nothing is uploaded — close the tab and the data is gone.",
      "related": [
        "loan-calculator",
        "percentage-calculator",
        "unit-converter"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Enter your numbers",
          "detail": "Paste any list separated by spaces, commas, or new lines."
        },
        {
          "title": "Compute",
          "detail": "Press the button or just keep typing — results update as you go."
        },
        {
          "title": "Read the results",
          "detail": "Central tendency (mean / median / mode) and spread (variance / std dev / IQR) are shown side by side."
        }
      ],
      "examples": [
        {
          "title": "Test scores for a class",
          "description": "Ten scores out of 100. Want to know the class average and how spread out the grades are.",
          "input": "78 82 91 65 88 73 95 81 70 84",
          "output": "Mean 80.7 · Median 81.5 · Std dev 8.96 · Range 30"
        },
        {
          "title": "Daily pageviews for a week",
          "description": "Quick sanity check before logging into a real analytics tool.",
          "input": "1240, 980, 1110, 1450, 1320, 1075, 1690",
          "output": "Mean 1266 · Median 1240 · Std dev 226 · Range 710"
        }
      ],
      "faq": [
        {
          "question": "What is the difference between mean and median?",
          "answer": "The mean is the arithmetic average — sum divided by count. The median is the middle value when the list is sorted. Median is more robust to outliers: in the list 1, 2, 3, 4, 1000 the mean is 202, but the median is 3."
        },
        {
          "question": "Population vs sample standard deviation?",
          "answer": "This calculator uses population standard deviation (divides by N). For sample standard deviation (divides by N − 1), most stats packages default to that — swap the denominator when you need it for a small sample from a larger population."
        },
        {
          "question": "What are Q1 and Q3?",
          "answer": "Q1 is the 25th percentile — 25% of values are below it. Q3 is the 75th percentile. The difference, IQR, is a robust measure of spread that is unaffected by extreme values."
        }
      ],
      "addedAt": "2026-08-12",
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/statistics-calculator.md",
      "markdownDoc": "https://uttir.com/statistics-calculator.md"
    },
    {
      "slug": "totp-generator",
      "name": "TOTP Code Generator",
      "shortDescription": "Generate time-based one-time passwords (2FA codes) from a Base32 secret. Same algorithm as Google Authenticator.",
      "url": "https://uttir.com/totp-generator",
      "categories": [
        "security-tools",
        "developer-tools"
      ],
      "keywords": [
        "totp",
        "2fa",
        "two factor",
        "google authenticator",
        "authy",
        "otp",
        "one time password",
        "base32",
        "rfc 6238",
        "auth code"
      ],
      "useCases": [
        "Use for totp",
        "Use for 2fa",
        "Use for two factor",
        "Use for google authenticator",
        "Use for authy"
      ],
      "userIntents": [
        "How do I totp?",
        "TOTP Code Generator online",
        "Free totp no signup",
        "TOTP Code Generator that doesn't upload my data",
        "TOTP Code Generator in my browser",
        "Best 2fa compared"
      ],
      "privacy": "Codes are generated locally in your browser using the Web Crypto API. Your secret is never sent to a server.",
      "related": [
        "password-generator",
        "hash-generator",
        "jwt-decoder"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A generated value (UUID, password, QR code, palette, etc.)",
      "howTo": [
        {
          "title": "Paste your secret",
          "detail": "A Base32 string (A–Z, 2–7) or a full otpauth:// URI."
        },
        {
          "title": "Read the code",
          "detail": "The 6-digit code refreshes automatically. Copy it before the timer hits zero."
        },
        {
          "title": "Use it within the window",
          "detail": "Codes are valid for the period (default 30s). After that, a new one is generated."
        }
      ],
      "examples": [
        {
          "title": "Google Authenticator setup",
          "description": "After scanning a QR code, the service shows a 6-digit code that rotates every 30 seconds.",
          "input": "JBSWY3DPEHPK3PXP",
          "output": "A 6-digit code, e.g. 492 039, with a 30-second countdown."
        },
        {
          "title": "From an otpauth:// URI",
          "description": "Most QR codes encode a URI that includes the secret and parameters.",
          "input": "otpauth://totp/GitHub:user?secret=JBSWY3DPEHPK3PXP&issuer=GitHub",
          "output": "Same code as above — the URI is parsed and the secret extracted."
        }
      ],
      "faq": [
        {
          "question": "Is this the same as Google Authenticator?",
          "answer": "Yes. It uses the same RFC 6238 algorithm (HMAC-SHA1, 30-second window, 6 digits by default) and the same Base32 secret format, so the codes match exactly."
        },
        {
          "question": "Is my secret sent anywhere?",
          "answer": "No. The HMAC-SHA1 calculation runs in your browser using the Web Crypto API. Your secret is never transmitted. Close the tab and it is gone."
        },
        {
          "question": "What if my code does not match my authenticator app?",
          "answer": "Check the system clock on your device — TOTP requires it to be within about 30 seconds of the server's. Also confirm the secret is correct and that you are using the same number of digits and period."
        }
      ],
      "addedAt": "2026-08-12",
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/totp-generator.md",
      "markdownDoc": "https://uttir.com/totp-generator.md"
    },
    {
      "slug": "dns-lookup",
      "name": "DNS Lookup",
      "shortDescription": "Query DNS records (A, AAAA, MX, TXT, NS, CNAME, SOA, CAA) for any domain using Google DNS-over-HTTPS.",
      "url": "https://uttir.com/dns-lookup",
      "categories": [
        "network-tools",
        "developer-tools"
      ],
      "keywords": [
        "dns lookup",
        "dns query",
        "check dns",
        "dns records",
        "mx record",
        "txt record",
        "ns record",
        "caa record",
        "doH"
      ],
      "useCases": [
        "Use for dns lookup",
        "Use for dns query",
        "Use for check dns",
        "Use for dns records",
        "Use for mx record"
      ],
      "userIntents": [
        "How do I dns lookup?",
        "DNS Lookup online",
        "Free dns lookup no signup",
        "DNS Lookup that doesn't upload my data",
        "DNS Lookup in my browser",
        "Best dns query compared"
      ],
      "privacy": "This tool queries Google DNS-over-HTTPS. The domain you query is not user-private data, and Uttir never sees or logs the result.",
      "related": [
        "my-ip",
        "user-agent-parser",
        "http-status-codes"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Enter a domain",
          "detail": "e.g. github.com — no protocol, no path."
        },
        {
          "title": "Pick a record type",
          "detail": "A is the default (IPv4 addresses)."
        },
        {
          "title": "Read the results",
          "detail": "Each answer shows the data and a TTL in seconds."
        }
      ],
      "examples": [
        {
          "title": "Find the IPs for a domain",
          "description": "Default A record lookup for github.com.",
          "input": "github.com / A",
          "output": "Multiple A records with TTLs. Each is an IPv4 address that the domain resolves to."
        },
        {
          "title": "Check who handles email",
          "description": "MX records tell you which servers receive email for the domain.",
          "input": "github.com / MX",
          "output": "A list of mail exchange records, with priority numbers — lower = preferred."
        }
      ],
      "faq": [
        {
          "question": "Why is the result different from my ISP's DNS?",
          "answer": "Google DNS is one of many resolvers. If a record was just changed, it can take minutes to hours to propagate across the internet. Different resolvers may show different results during that window."
        },
        {
          "question": "What is a TTL?",
          "answer": "TTL (time-to-live) is the number of seconds the record can be cached. A short TTL means changes propagate fast but queries are slightly slower; a long TTL means the opposite."
        },
        {
          "question": "Why does it say NXDOMAIN?",
          "answer": "NXDOMAIN means the domain or record does not exist. Either the domain is unregistered, the record type you picked is not configured, or there is a typo in the name."
        }
      ],
      "addedAt": "2026-08-12",
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/dns-lookup.md",
      "markdownDoc": "https://uttir.com/dns-lookup.md"
    },
    {
      "slug": "permutation-combination",
      "name": "Permutation & Combination Calculator",
      "shortDescription": "Compute nPr and nCr, with optional listing of all arrangements or subsets. Bounded for huge counts.",
      "url": "https://uttir.com/permutation-combination",
      "categories": [
        "math-tools",
        "calculators"
      ],
      "keywords": [
        "permutation",
        "combination",
        "npr",
        "ncr",
        "factorial",
        "arrangements",
        "subsets",
        "counting"
      ],
      "useCases": [
        "Use for permutation",
        "Use for combination",
        "Use for npr",
        "Use for ncr",
        "Use for factorial"
      ],
      "userIntents": [
        "How do I permutation?",
        "Permutation & Combination Calculator online",
        "Free permutation no signup",
        "Permutation & Combination Calculator that doesn't upload my data",
        "Permutation & Combination Calculator in my browser",
        "Best combination compared"
      ],
      "privacy": "All calculations run locally in your browser. Nothing is uploaded — close the tab and the data is gone.",
      "related": [
        "statistics-calculator",
        "percentage-calculator",
        "random-number-generator"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A count (words, characters, sentences, paragraphs)",
      "howTo": [
        {
          "title": "Enter n and r",
          "detail": "n is the total set size, r is how many you pick."
        },
        {
          "title": "Pick permutation or combination",
          "detail": "Permutation counts order, combination does not."
        },
        {
          "title": "Optionally list the values",
          "detail": "Enter items as a comma-separated list, then click List to enumerate."
        }
      ],
      "examples": [
        {
          "title": "Lottery odds",
          "description": "6 numbers from 49, order does not matter.",
          "input": "n = 49, r = 6, combination",
          "output": "13,983,816 (≈ 14 million)"
        },
        {
          "title": "Race podium",
          "description": "1st, 2nd, 3rd from 8 runners, order matters.",
          "input": "n = 8, r = 3, permutation",
          "output": "336 (8 × 7 × 6)"
        }
      ],
      "faq": [
        {
          "question": "What is the difference?",
          "answer": "Permutation counts arrangements where order matters (race positions). Combination counts subsets where order does not (a committee). The formula is the same except combinations divide by r! to remove the ordering."
        },
        {
          "question": "Why does my count say \"1.2 × 10²⁴\"?",
          "answer": "For large n and r the count is bigger than JavaScript can hold exactly. We use the magnitude (log₁₀) to keep the number readable, and the answer is still correct — just not a 64-bit integer."
        },
        {
          "question": "Why is the list limited?",
          "answer": "Listing all permutations of 20 items is 2.4 × 10¹⁸ — far more than any browser can render. The list is capped at 50,000 entries; for larger inputs we show the count and a sample instead."
        }
      ],
      "addedAt": "2026-08-12",
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/permutation-combination.md",
      "markdownDoc": "https://uttir.com/permutation-combination.md"
    },
    {
      "slug": "paragraph-counter",
      "name": "Paragraph Counter",
      "shortDescription": "Count paragraphs, words per paragraph, and find the longest/shortest paragraph in your text. Free, runs in your browser.",
      "url": "https://uttir.com/paragraph-counter",
      "categories": [
        "text-tools"
      ],
      "keywords": [
        "paragraph counter",
        "count paragraphs",
        "paragraphs in text",
        "paragraph word count",
        "paragraph analyzer"
      ],
      "useCases": [
        "Use for paragraph counter",
        "Use for count paragraphs",
        "Use for paragraphs in text",
        "Use for paragraph word count",
        "Use for paragraph analyzer"
      ],
      "userIntents": [
        "How do I paragraph counter?",
        "Paragraph Counter online",
        "Free paragraph counter no signup",
        "Paragraph Counter that doesn't upload my data",
        "Paragraph Counter in my browser",
        "Best count paragraphs compared"
      ],
      "privacy": "Counting happens in your browser.",
      "related": [
        "word-counter",
        "sentence-counter",
        "character-counter",
        "reading-time"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A count (words, characters, sentences, paragraphs)",
      "howTo": [
        {
          "title": "Paste your text",
          "detail": "Drop in any text — an essay, a blog draft, an email, a chapter. The character limit is high enough for a full novel chapter."
        },
        {
          "title": "Read the paragraph count and per-paragraph averages",
          "detail": "The headline number is the count of non-empty paragraphs. The averages help you see if your paragraphs are the right size for the format you are writing for."
        },
        {
          "title": "Look at the longest paragraph preview",
          "detail": "If one paragraph is much longer than the others, it usually means you have a structural split point hiding in there. The tool surfaces it so you can decide whether to break it up."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "How do you count paragraphs?",
          "answer": "Paragraphs are separated by one or more blank lines. A blank line means a hard return followed by another hard return, with no characters between. A single newline without a blank line is treated as a soft break inside the same paragraph."
        },
        {
          "question": "What counts as a paragraph in word processors?",
          "answer": "In Microsoft Word, Google Docs, and most writing tools, a paragraph ends when you press Enter. The Uttir Paragraph Counter matches that behavior: every line block separated by a blank line is one paragraph."
        },
        {
          "question": "How long should a paragraph be?",
          "answer": "For web writing, 2–4 sentences (40–80 words) is the comfortable range. For print and academic writing, 5–8 sentences (100–200 words) is normal. Anything over 200 words usually invites the reader to skim."
        }
      ],
      "addedAt": "2026-08-14",
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/paragraph-counter.md",
      "markdownDoc": "https://uttir.com/paragraph-counter.md"
    },
    {
      "slug": "sentence-length-checker",
      "name": "Sentence Length Checker",
      "shortDescription": "Check the length of every sentence in your text. Find sentences that are too long and see the average, median, and length distribution.",
      "url": "https://uttir.com/sentence-length-checker",
      "categories": [
        "text-tools",
        "calculators"
      ],
      "keywords": [
        "sentence length checker",
        "check sentence length",
        "long sentence detector",
        "readability checker",
        "average sentence length",
        "run-on sentence finder"
      ],
      "useCases": [
        "Use for sentence length checker",
        "Use for check sentence length",
        "Use for long sentence detector",
        "Use for readability checker",
        "Use for average sentence length"
      ],
      "userIntents": [
        "How do I sentence length checker?",
        "Sentence Length Checker online",
        "Free sentence length checker no signup",
        "Sentence Length Checker that doesn't upload my data",
        "Sentence Length Checker in my browser",
        "Best check sentence length compared"
      ],
      "privacy": "Analysis happens in your browser.",
      "related": [
        "sentence-counter",
        "word-counter",
        "reading-time",
        "character-counter"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A check result (pass/fail, length, ratio, etc.)",
      "howTo": [
        {
          "title": "Paste your text",
          "detail": "Drop in an article, essay, email, or any block of prose you want to check."
        },
        {
          "title": "Read the headline numbers",
          "detail": "Total sentences, average, median, and longest. If the average is over 25 words, your prose is dense; under 14, it may feel choppy."
        },
        {
          "title": "Fix any sentence over 35 words",
          "detail": "The tool flags run-on candidates. Each one is shown in full so you can split it without losing context."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "What is a good average sentence length?",
          "answer": "For general-audience writing, 15–20 words is the sweet spot. For academic and professional writing, 20–25 words is normal. The Hemingway editor aims for under 14 words average. Above 25 words, readability drops sharply for most readers."
        },
        {
          "question": "How long is too long for a sentence?",
          "answer": "Anything over 35 words is hard to parse on the first read. Anything over 50 words is almost certainly a run-on that should be split. The Uttir Sentence Length Checker flags any sentence over 35 words so you can decide."
        },
        {
          "question": "Should every sentence be short?",
          "answer": "No — short sentences in a row become monotonous. Good writing varies sentence length deliberately: short sentences for emphasis, longer ones for nuance. Aim for a mix where the average is 15–20 words."
        }
      ],
      "addedAt": "2026-08-14",
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/sentence-length-checker.md",
      "markdownDoc": "https://uttir.com/sentence-length-checker.md"
    },
    {
      "slug": "ip-geolocation-lookup",
      "name": "IP Geolocation Lookup",
      "shortDescription": "Look up geolocation info for any IPv4 or IPv6 address — country, city, ISP, ASN, timezone. Free, runs in your browser.",
      "url": "https://uttir.com/ip-geolocation-lookup",
      "categories": [
        "network-tools",
        "developer-tools"
      ],
      "keywords": [
        "ip geolocation",
        "ip lookup",
        "ip address location",
        "where is this ip",
        "ip to location",
        "ip whois lookup",
        "find ip location",
        "geoip"
      ],
      "useCases": [
        "Use for ip geolocation",
        "Use for ip lookup",
        "Use for ip address location",
        "Use for where is this ip",
        "Use for ip to location"
      ],
      "userIntents": [
        "How do I ip geolocation?",
        "IP Geolocation Lookup online",
        "Free ip geolocation no signup",
        "IP Geolocation Lookup that doesn't upload my data",
        "IP Geolocation Lookup in my browser",
        "Best ip lookup compared"
      ],
      "privacy": "Lookup happens in your browser via a public IP-info service.",
      "related": [
        "my-ip",
        "dns-lookup",
        "whois-lookup",
        "cidr-subnet-calculator"
      ],
      "inputs": "A date or time value",
      "outputs": "A count (words, characters, sentences, paragraphs)",
      "howTo": [
        {
          "title": "Type or paste an IP address",
          "detail": "Both IPv4 (e.g. 8.8.8.8) and IPv6 (e.g. 2001:4860:4860::8888) are supported."
        },
        {
          "title": "Click Look up",
          "detail": "The query goes to a free public IP-info service. The result is shown in a card layout with location, network, timezone, and ASN."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "How accurate is IP geolocation?",
          "answer": "Country-level accuracy is typically 95–99%, region/state 80–90%, city 60–80%. Accuracy drops for mobile carriers, satellite links, and VPNs that exit in another country."
        },
        {
          "question": "Can I look up my own IP?",
          "answer": "Yes — but for that case, the My IP tool automatically uses your public IP and is faster. This tool is meant for looking up other addresses."
        },
        {
          "question": "Does the lookup work for IPv6?",
          "answer": "Yes. Paste any IPv6 address and the same provider returns country, city, and ASN. The data is less complete than IPv4 because fewer IPv6 ranges are geolocated."
        }
      ],
      "addedAt": "2026-08-14",
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/ip-geolocation-lookup.md",
      "markdownDoc": "https://uttir.com/ip-geolocation-lookup.md"
    },
    {
      "slug": "cidr-subnet-calculator",
      "name": "CIDR Subnet Calculator",
      "shortDescription": "Calculate network, broadcast, mask, wildcard, and host range for any IPv4 or IPv6 CIDR block. Pure math, runs in your browser.",
      "url": "https://uttir.com/cidr-subnet-calculator",
      "categories": [
        "network-tools",
        "calculators",
        "developer-tools"
      ],
      "keywords": [
        "cidr calculator",
        "subnet calculator",
        "ip subnet",
        "network range",
        "cidr to range",
        "network mask",
        "ipv4 subnet",
        "ipv6 subnet"
      ],
      "useCases": [
        "Use for cidr calculator",
        "Use for subnet calculator",
        "Use for ip subnet",
        "Use for network range",
        "Use for cidr to range"
      ],
      "userIntents": [
        "How do I cidr calculator?",
        "CIDR Subnet Calculator online",
        "Free cidr calculator no signup",
        "CIDR Subnet Calculator that doesn't upload my data",
        "CIDR Subnet Calculator in my browser",
        "Best subnet calculator compared"
      ],
      "privacy": "Calculation runs locally in your browser. No network calls.",
      "related": [
        "my-ip",
        "ip-geolocation-lookup",
        "dns-lookup",
        "whois-lookup"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A numeric calculation (percentage, BMI, payment, etc.)",
      "howTo": [
        {
          "title": "Type an IP with a prefix",
          "detail": "Format: IP/prefix, e.g. 10.0.0.0/8 or 2001:db8::/32."
        },
        {
          "title": "Read the result",
          "detail": "Network address, mask, wildcard, broadcast (IPv4), and usable host count are shown. For IPv6, the total address count is shown (it is usually astronomically large)."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "What is CIDR?",
          "answer": "CIDR (Classless Inter-Domain Routing) is the modern way to write IP address ranges. The number after the slash is the prefix length — how many bits are fixed. 192.168.1.0/24 means the first 24 bits are the network, the last 8 are hosts."
        },
        {
          "question": "Why does /31 show only 2 hosts and no broadcast?",
          "answer": "RFC 3021 redefined /31 as point-to-point links with no broadcast address — every address is usable. /32 is a single host route. Anything wider (/30 and shorter) reserves 2 addresses for network and broadcast."
        },
        {
          "question": "How do I find the subnet of a host?",
          "answer": "Replace the host portion with 0s and keep the prefix. For 192.168.1.42/24, the network is 192.168.1.0/24. For 10.5.7.13/16, the network is 10.5.0.0/16. The tool does this automatically when you type any IP — the network is always shown."
        }
      ],
      "addedAt": "2026-08-14",
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/cidr-subnet-calculator.md",
      "markdownDoc": "https://uttir.com/cidr-subnet-calculator.md"
    },
    {
      "slug": "whois-lookup",
      "name": "WHOIS / RDAP Lookup",
      "shortDescription": "Look up domain or IP registration info via RDAP. Registrar, status, dates, nameservers, contacts. Free, runs in your browser.",
      "url": "https://uttir.com/whois-lookup",
      "categories": [
        "network-tools",
        "developer-tools"
      ],
      "keywords": [
        "whois lookup",
        "whois",
        "rdap",
        "domain whois",
        "ip whois",
        "registrar lookup",
        "domain registration",
        "who owns this domain"
      ],
      "useCases": [
        "Use for whois lookup",
        "Use for whois",
        "Use for rdap",
        "Use for domain whois",
        "Use for ip whois"
      ],
      "userIntents": [
        "How do I whois lookup?",
        "WHOIS / RDAP Lookup online",
        "Free whois lookup no signup",
        "WHOIS / RDAP Lookup that doesn't upload my data",
        "WHOIS / RDAP Lookup in my browser",
        "Best whois compared"
      ],
      "privacy": "Lookups go to the public RDAP registry. Your query is sent to the registry, not to Uttir.",
      "related": [
        "dns-lookup",
        "ip-geolocation-lookup",
        "my-ip",
        "cidr-subnet-calculator"
      ],
      "inputs": "A date or time value",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Type a domain or IP",
          "detail": "Examples: example.com, github.io, 8.8.8.8, 2001:4860:4860::8888."
        },
        {
          "title": "Read the registration record",
          "detail": "Status, key dates (registered / updated / expires), nameservers, and contact roles (registrar / registrant / admin / abuse) are all displayed."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "What is RDAP?",
          "answer": "RDAP (Registration Data Access Protocol) is the modern, JSON-based replacement for the WHOIS protocol. It returns structured data (registrar, dates, status codes, contacts) instead of the unstructured WHOIS text. RDAP is the standard for all major registries as of 2025."
        },
        {
          "question": "Is this the same as WHOIS?",
          "answer": "Yes and no. RDAP returns the same registration data that WHOIS does, but in a structured JSON format that is easier to read and parse. If a registry only supports WHOIS (older country-code TLDs), this tool will return an error."
        },
        {
          "question": "Why does it work for some TLDs but not others?",
          "answer": ".com, .net, .org, .info, .biz, .io, .dev, .app, and most country-code TLDs are supported. Some smaller ccTLDs have not yet deployed RDAP; for those, the tool reports the lookup failed and you can use a traditional WHOIS service."
        }
      ],
      "addedAt": "2026-08-14",
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/whois-lookup.md",
      "markdownDoc": "https://uttir.com/whois-lookup.md"
    },
    {
      "slug": "image-color-picker",
      "name": "Color Picker from Image",
      "shortDescription": "Upload an image and click any pixel to get its HEX, RGB, and HSL color. Works entirely in your browser — your image never leaves your device.",
      "url": "https://uttir.com/image-color-picker",
      "categories": [
        "color-tools",
        "image-tools",
        "web-tools"
      ],
      "keywords": [
        "color picker from image",
        "pick color from photo",
        "image color extractor",
        "eyedropper tool",
        "pixel color picker",
        "get color from image"
      ],
      "useCases": [
        "Pick a color from any pixel in an image",
        "Extract a dominant palette from a photograph",
        "Get the hex, RGB, and HSL of each extracted color",
        "Match a brand color to a photograph"
      ],
      "userIntents": [
        "How do I color picker from image?",
        "Color Picker from Image online",
        "Free color picker from image no signup",
        "Color Picker from Image that doesn't upload my data",
        "Color Picker from Image in my browser",
        "Best pick color from photo compared"
      ],
      "privacy": "The image is decoded and drawn to a canvas in your browser. It never leaves your device.",
      "related": [
        "color-picker",
        "color-palette-generator",
        "hex-to-rgb",
        "rgb-to-hex"
      ],
      "inputs": "An image file (JPG, PNG, WebP, HEIC, or other)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Drop in an image",
          "detail": "Drop onto the upload zone or click to pick a file. JPG, PNG, WebP, GIF, and most browser-supported formats work."
        },
        {
          "title": "Click any pixel",
          "detail": "The magnifier zooms in so you can land on a single pixel."
        },
        {
          "title": "Read the color values",
          "detail": "HEX, RGB, and HSL values update in the panel as you click."
        },
        {
          "title": "Build a palette",
          "detail": "Click \"Add to palette\" to save each color. Export as JSON or CSS variables when you are done."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "Does the image get uploaded to a server?",
          "answer": "No. The image is decoded with the browser's built-in FileReader API, drawn to a canvas in your browser, and never sent anywhere. You can verify this in DevTools → Network while using the tool."
        },
        {
          "question": "What image formats are supported?",
          "answer": "Anything the browser can decode: JPG, PNG, WebP, GIF, BMP, and most modern formats. HEIC requires a special library; we recommend converting HEIC to JPG first with the HEIC to JPG tool."
        },
        {
          "question": "How accurate is the color?",
          "answer": "Pixel-accurate, down to the byte. The displayed color is the exact sRGB value of the pixel you clicked. The magnifier zooms 10x so you can target a specific pixel without ambiguity."
        }
      ],
      "addedAt": "2026-08-15",
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/image-color-picker.md",
      "markdownDoc": "https://uttir.com/image-color-picker.md"
    },
    {
      "slug": "css-flexbox-playground",
      "name": "CSS Flexbox Playground",
      "shortDescription": "Visual playground for CSS Flexbox. Adjust container and item properties with sliders, see the live layout update, and copy the generated CSS.",
      "url": "https://uttir.com/css-flexbox-playground",
      "categories": [
        "web-tools",
        "developer-tools"
      ],
      "keywords": [
        "flexbox playground",
        "css flex",
        "flex container",
        "flex items",
        "css flex generator",
        "flexbox visualizer",
        "flex layout"
      ],
      "useCases": [
        "Use for flexbox playground",
        "Use for css flex",
        "Use for flex container",
        "Use for flex items",
        "Use for css flex generator"
      ],
      "userIntents": [
        "How do I flexbox playground?",
        "CSS Flexbox Playground online",
        "Free flexbox playground no signup",
        "CSS Flexbox Playground that doesn't upload my data",
        "CSS Flexbox Playground in my browser",
        "Best css flex compared"
      ],
      "privacy": "All rendering happens locally. The CSS you generate never leaves your browser.",
      "related": [
        "css-grid-playground",
        "css-gradient-generator",
        "css-minifier",
        "color-picker"
      ],
      "inputs": "A date or time value",
      "outputs": "A generated value (UUID, password, QR code, palette, etc.)",
      "howTo": [
        {
          "title": "Adjust container controls",
          "detail": "Set flex-direction, flex-wrap, justify-content, align-items, align-content, and gap."
        },
        {
          "title": "Edit each item",
          "detail": "Click any item in the preview to select it. Then adjust its flex-grow, flex-shrink, flex-basis, align-self, and order."
        },
        {
          "title": "Add or remove items",
          "detail": "Use the + and × buttons to add or remove items from the flex container."
        },
        {
          "title": "Copy the generated CSS",
          "detail": "Copy the generated CSS from the right-hand panel."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "What is flexbox?",
          "answer": "CSS Flexbox is a one-dimensional layout system that distributes space along a single axis. Use it for navigation bars, card lists, centering content, and any layout that needs flexible items in a row or column."
        },
        {
          "question": "flex vs inline-flex?",
          "answer": "display: flex makes the container a block (takes the full width). display: inline-flex makes it inline (only as wide as the content). Choose inline-flex when you want a flex container inside a sentence or next to other inline content."
        },
        {
          "question": "What does flex: 1 mean?",
          "answer": "flex: 1 is shorthand for flex-grow: 1; flex-shrink: 1; flex-basis: 0. The item grows to fill available space, can shrink if needed, and starts from a 0 base. Multiple flex: 1 items share the space equally."
        }
      ],
      "addedAt": "2026-08-15",
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/css-flexbox-playground.md",
      "markdownDoc": "https://uttir.com/css-flexbox-playground.md"
    },
    {
      "slug": "css-grid-playground",
      "name": "CSS Grid Playground",
      "shortDescription": "Visual playground for CSS Grid. Define rows, columns, and gaps, place items by area or line number, and copy the generated CSS.",
      "url": "https://uttir.com/css-grid-playground",
      "categories": [
        "web-tools",
        "developer-tools"
      ],
      "keywords": [
        "css grid playground",
        "grid generator",
        "css grid",
        "grid template",
        "grid visualizer",
        "grid layout",
        "css grid builder"
      ],
      "useCases": [
        "Use for css grid playground",
        "Use for grid generator",
        "Use for css grid",
        "Use for grid template",
        "Use for grid visualizer"
      ],
      "userIntents": [
        "How do I css grid playground?",
        "CSS Grid Playground online",
        "Free css grid playground no signup",
        "CSS Grid Playground that doesn't upload my data",
        "CSS Grid Playground in my browser",
        "Best grid generator compared"
      ],
      "privacy": "All rendering happens locally. The CSS you generate never leaves your browser.",
      "related": [
        "css-flexbox-playground",
        "css-gradient-generator",
        "css-minifier",
        "color-picker"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A generated value (UUID, password, QR code, palette, etc.)",
      "howTo": [
        {
          "title": "Set columns and rows",
          "detail": "Set the number of columns and rows, and their sizes (e.g. 1fr 1fr 200px)."
        },
        {
          "title": "Place items",
          "detail": "Add items with the + button. Each item can be placed by line number (grid-row / grid-column) or by named area."
        },
        {
          "title": "Edit named areas",
          "detail": "Edit named areas with the textarea below the preview — the syntax is the same as grid-template-areas."
        },
        {
          "title": "Copy the generated CSS",
          "detail": "Copy the generated CSS from the right-hand panel."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "What is the fr unit?",
          "answer": "fr is a fractional unit that distributes remaining space in the container. 1fr 1fr 1fr gives three equal columns. 1fr 2fr gives a 1:2 ratio. fr only works with grid-template-columns / grid-template-rows."
        },
        {
          "question": "grid-template-columns vs grid-template-rows?",
          "answer": "grid-template-columns defines the vertical tracks (how many columns and how wide each is). grid-template-rows defines the horizontal tracks (how many rows and how tall each is). Use grid-auto-rows / grid-auto-columns for implicitly created tracks."
        },
        {
          "question": "How do named areas work?",
          "answer": "Set grid-template-areas to a string with one row per line and one word per column. Use the same word in grid-area on an item to place it. Empty cells are a single dot (.). Example: \"header header\" / \"sidebar main\" places header across the top, sidebar on the left, main on the right."
        }
      ],
      "addedAt": "2026-08-15",
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/css-grid-playground.md",
      "markdownDoc": "https://uttir.com/css-grid-playground.md"
    },
    {
      "slug": "exif-metadata-viewer",
      "name": "EXIF / Image Metadata Viewer",
      "shortDescription": "Read EXIF, GPS, IPTC, and other metadata from any image. See camera, lens, location, and timestamp. Your image never leaves your device.",
      "url": "https://uttir.com/exif-metadata-viewer",
      "categories": [
        "image-tools",
        "developer-tools",
        "security-tools"
      ],
      "keywords": [
        "exif viewer",
        "image metadata",
        "exif data",
        "photo metadata",
        "gps data from photo",
        "camera info",
        "metadata extractor",
        "read exif"
      ],
      "useCases": [
        "Use for exif viewer",
        "Use for image metadata",
        "Use for exif data",
        "Use for photo metadata",
        "Use for gps data from photo"
      ],
      "userIntents": [
        "How do I exif viewer?",
        "EXIF / Image Metadata Viewer online",
        "Free exif viewer no signup",
        "EXIF / Image Metadata Viewer that doesn't upload my data",
        "EXIF / Image Metadata Viewer in my browser",
        "Best image metadata compared"
      ],
      "privacy": "Image is read in your browser using the FileReader API. It is never uploaded to any server.",
      "related": [
        "image-color-picker",
        "image-compressor",
        "image-resizer",
        "my-ip",
        "whois-lookup"
      ],
      "inputs": "An image file (JPG, PNG, WebP, HEIC, or other)",
      "outputs": "A live timer or stopwatch",
      "howTo": [
        {
          "title": "Drop in an image",
          "detail": "Drop onto the upload zone or click to pick a file. JPG, PNG, HEIC, TIFF, WebP, and RAW are all read locally."
        },
        {
          "title": "Read the metadata sections",
          "detail": "Tags are grouped as Camera, Exposure & optics, Date & time, Image, GPS, and IPTC / editorial."
        },
        {
          "title": "Check the GPS warning",
          "detail": "If the file contains GPS data, a banner links to the location. Sharing the photo would reveal it."
        },
        {
          "title": "Export the data",
          "detail": "Use \"Copy JSON\" or \"Download JSON\" to save the full metadata for analysis or sharing."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "Does the image get uploaded to a server?",
          "answer": "No. The image is read entirely in your browser with the FileReader API. You can verify this in DevTools → Network while using the tool — no requests are made."
        },
        {
          "question": "What image formats are supported?",
          "answer": "JPG, JPEG, TIFF, HEIC, HEIF, WebP, AVIF, PNG, and most RAW formats. EXIF is most common in JPG and HEIC; PNG supports a subset. RAW support depends on the file (CR2, NEF, ARW, DNG, RAF, ORF)."
        },
        {
          "question": "Can I remove the metadata?",
          "answer": "This tool is read-only. To strip metadata, use a dedicated \"EXIF remover\" — it can be added on request. The best defense against leaking metadata in shared photos is to strip it before sharing."
        }
      ],
      "addedAt": "2026-08-15",
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/exif-metadata-viewer.md",
      "markdownDoc": "https://uttir.com/exif-metadata-viewer.md"
    },
    {
      "slug": "currency-converter",
      "name": "Currency Converter",
      "shortDescription": "Convert between 30+ world currencies using static daily-refreshed rates. Fast, private, no API key, no tracking, works offline.",
      "url": "https://uttir.com/currency-converter",
      "categories": [
        "calculators",
        "math-tools",
        "converters"
      ],
      "keywords": [
        "currency converter",
        "exchange rate",
        "money converter",
        "fx converter",
        "USD to EUR",
        "USD to IDR",
        "convert dollars to euros",
        "currency calculator"
      ],
      "useCases": [
        "Use for currency converter",
        "Use for exchange rate",
        "Use for money converter",
        "Use for fx converter",
        "Use for USD to EUR"
      ],
      "userIntents": [
        "How do I currency converter?",
        "Currency Converter online",
        "Free currency converter no signup",
        "Currency Converter that doesn't upload my data",
        "Currency Converter in my browser",
        "Best exchange rate compared"
      ],
      "privacy": "Conversion is done in your browser. No API calls, no keys, no tracking. Rates are bundled with the page and refresh when we deploy.",
      "related": [
        "percentage-calculator",
        "compound-interest-calculator",
        "mortgage-calculator",
        "salary-calculator"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A file in the target format",
      "howTo": [
        {
          "title": "Pick the currencies",
          "detail": "Choose the source currency (e.g. USD) and the target currency (e.g. EUR)."
        },
        {
          "title": "Enter an amount",
          "detail": "Type an amount in the amount field — the converted value updates as you type."
        },
        {
          "title": "Quick target shortcuts",
          "detail": "Click any \"Quick target\" button (USD, EUR, GBP, JPY, IDR) to switch the target currency."
        },
        {
          "title": "Click a row in the table",
          "detail": "Any row in the all-currencies table sets that row as the new target."
        },
        {
          "title": "Check the rate date",
          "detail": "The \"Rates last updated\" footer shows how fresh the bundled rates are."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "How fresh are the exchange rates?",
          "answer": "Rates are bundled with the page and updated when we deploy. The most recent update date is shown at the bottom of the tool. For real transactions, always use a live quote from your bank."
        },
        {
          "question": "Are the rates official / live?",
          "answer": "No. These are static mid-market reference rates, not the buy/sell rates your bank or card issuer will use. They are good enough for estimation, not for transactions."
        },
        {
          "question": "Why no live API?",
          "answer": "To honor the privacy promise: no requests, no keys, no tracking, works offline. A live API would also fail at the worst possible time (during travel, on bad networks). Static rates mean the tool always works."
        }
      ],
      "addedAt": "2026-08-15",
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/currency-converter.md",
      "markdownDoc": "https://uttir.com/currency-converter.md"
    },
    {
      "slug": "emoji-picker",
      "name": "Emoji Picker",
      "shortDescription": "Search and copy emoji by name or category — smileys, hands, animals, food, travel, symbols, and more. Click to copy, paste anywhere.",
      "url": "https://uttir.com/emoji-picker",
      "categories": [
        "text-tools",
        "generators"
      ],
      "keywords": [
        "emoji picker",
        "emoji search",
        "copy emoji",
        "emoji list",
        "unicode emoji",
        "emoji finder",
        "emoji keyboard"
      ],
      "useCases": [
        "Use for emoji picker",
        "Use for emoji search",
        "Use for copy emoji",
        "Use for emoji list",
        "Use for unicode emoji"
      ],
      "userIntents": [
        "How do I emoji picker?",
        "Emoji Picker online",
        "Free emoji picker no signup",
        "Emoji Picker that doesn't upload my data",
        "Emoji Picker in my browser",
        "Best emoji search compared"
      ],
      "privacy": "All emoji data is bundled in the page. No API calls, no tracking, no upload.",
      "related": [
        "character-counter",
        "url-encoder",
        "slug-generator",
        "case-converter"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Type to search",
          "detail": "Type a keyword to filter emojis (e.g. \"fire\", \"music\", \"heart\")."
        },
        {
          "title": "Browse by category",
          "detail": "Click a category tab to browse by group — smileys, people, food, travel, etc."
        },
        {
          "title": "Click to copy",
          "detail": "Click any emoji to copy it to your clipboard. The character details panel below shows the name, code point, and UTF-8 bytes."
        },
        {
          "title": "Copy technical details",
          "detail": "The \"Copy\" buttons next to the code point and UTF-8 hex let you copy those representations for use in code."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "How do I type an emoji on my keyboard?",
          "answer": "On macOS, press Control-Command-Space. On Windows 10/11, press Win-. (period). On Linux, the shortcut depends on the desktop environment. This picker is the universal way to find and copy any emoji on any device."
        },
        {
          "question": "Why do some emojis look different on different systems?",
          "answer": "Emojis are rendered by the operating system or browser, not by the page. The same code point (e.g. U+1F600) renders as a different image on Apple, Google, Microsoft, and Samsung. The code point and name are universal; the visual style is not."
        },
        {
          "question": "Does this work offline?",
          "answer": "Yes. All emoji data is bundled in the page; once loaded, the picker works without a network connection."
        }
      ],
      "addedAt": "2026-08-15",
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/emoji-picker.md",
      "markdownDoc": "https://uttir.com/emoji-picker.md"
    },
    {
      "slug": "html-to-pdf",
      "name": "HTML to PDF",
      "shortDescription": "Convert HTML to a PDF in your browser. Write or paste HTML, see a live preview, and download a print-ready PDF. No upload, no tracking, no server.",
      "url": "https://uttir.com/html-to-pdf",
      "categories": [
        "pdf-tools",
        "converters",
        "developer-tools",
        "web-tools"
      ],
      "keywords": [
        "html to pdf",
        "convert html to pdf",
        "html to pdf converter",
        "html2pdf",
        "web page to pdf",
        "save html as pdf",
        "export html to pdf"
      ],
      "useCases": [
        "Convert an HTML page to a PDF",
        "Save an invoice, receipt, or report as a PDF",
        "Print a webpage to a PDF with custom styling",
        "Generate a PDF in the browser without uploading the HTML"
      ],
      "userIntents": [
        "How do I html to pdf?",
        "HTML to PDF online",
        "Free html to pdf no signup",
        "HTML to PDF that doesn't upload my data",
        "HTML to PDF in my browser",
        "Best convert html to pdf compared"
      ],
      "privacy": "HTML and CSS are processed in your browser. The output PDF is generated locally and never uploaded to any server.",
      "related": [
        "pdf-merge",
        "pdf-compressor",
        "pdf-to-jpg",
        "jpg-to-pdf",
        "markdown-to-html"
      ],
      "inputs": "A PDF file",
      "outputs": "A file in the target format",
      "howTo": [
        {
          "title": "Write or paste HTML",
          "detail": "Use the editor on the left. It accepts full HTML documents or fragments."
        },
        {
          "title": "See the live preview",
          "detail": "The right panel shows the rendered output. The preview matches what gets saved."
        },
        {
          "title": "Choose page size",
          "detail": "A4 (default), US Letter, or Fit to content (no extra whitespace)."
        },
        {
          "title": "Download the PDF",
          "detail": "Click \"Download PDF\" — the file is generated and saved locally."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "Will the PDF look exactly like the preview?",
          "answer": "Yes, within the limits of the rendering engine. The PDF uses the same HTML and CSS as the preview. Custom fonts, gradients, and complex layouts are all supported."
        },
        {
          "question": "Is the HTML sent to a server?",
          "answer": "No. The HTML is processed and the PDF is generated in your browser. You can verify this in DevTools → Network — no requests are made while you use the tool."
        },
        {
          "question": "Can I include images and CSS?",
          "answer": "Yes. Use absolute or relative URLs for images. Inline <style> blocks and external stylesheets are both supported. The renderer captures everything in the HTML, including images and SVG."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/html-to-pdf.md",
      "markdownDoc": "https://uttir.com/html-to-pdf.md"
    },
    {
      "slug": "barcode-generator",
      "name": "Barcode Generator",
      "shortDescription": "Generate barcodes in 8 formats (EAN, UPC, Code 128, Code 39, ITF, MSI, Codabar, Pharmacode). Download as PNG or SVG. Runs in your browser, no upload.",
      "url": "https://uttir.com/barcode-generator",
      "categories": [
        "generators",
        "image-tools",
        "developer-tools"
      ],
      "keywords": [
        "barcode generator",
        "create barcode",
        "EAN-13",
        "EAN-8",
        "UPC-A",
        "UPC-E",
        "code 128",
        "code 39",
        "ITF barcode",
        "MSI barcode"
      ],
      "useCases": [
        "Use for barcode generator",
        "Use for create barcode",
        "Use for EAN-13",
        "Use for EAN-8",
        "Use for UPC-A"
      ],
      "userIntents": [
        "How do I barcode generator?",
        "Barcode Generator online",
        "Free barcode generator no signup",
        "Barcode Generator that doesn't upload my data",
        "Barcode Generator in my browser",
        "Best create barcode compared"
      ],
      "privacy": "Barcodes are rendered in your browser using JsBarcode. The data you enter is never sent to a server.",
      "related": [
        "qr-code-generator",
        "image-resizer",
        "image-compressor",
        "png-to-jpg"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A formatted (pretty-printed) version of the input",
      "howTo": [
        {
          "title": "Pick a format",
          "detail": "Choose EAN, UPC, Code 128, Code 39, ITF, MSI, Codabar, or Pharmacode based on your use case."
        },
        {
          "title": "Type the data",
          "detail": "Each format has different allowed characters. The label updates as you type."
        },
        {
          "title": "Customize",
          "detail": "Adjust bar color, background, and dimensions. Show or hide the human-readable text below the bars."
        },
        {
          "title": "Download",
          "detail": "Save as PNG (raster, for print) or SVG (vector, for design tools)."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "Which barcode format should I use?",
          "answer": "For retail products sold in most of the world: EAN-13 (13 digits) or EAN-8 (8 digits, smaller packages). For products sold in the US: UPC-A (12 digits). For internal inventory, shipping labels, or any alphanumeric data: Code 128. For automotive / defense / military: Code 39. For shipping cartons: ITF-14. The tool shows the format-specific rules below the input."
        },
        {
          "question": "Can I include letters?",
          "answer": "Code 128 and Code 39 support full alphanumeric input (A-Z, 0-9, plus symbols). EAN and UPC are numeric only. Pick the format that matches your data; the tool will warn you if the input is invalid for the chosen format."
        },
        {
          "question": "Are these barcodes scanable?",
          "answer": "Yes. JsBarcode produces standards-compliant barcodes that any retail or industrial scanner can read, including phone camera scanners. The output is a real barcode, not a stylized image."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/barcode-generator.md",
      "markdownDoc": "https://uttir.com/barcode-generator.md"
    },
    {
      "slug": "css-box-shadow-generator",
      "name": "CSS Box Shadow Generator",
      "shortDescription": "Visually design CSS box-shadows. Adjust offset, blur, spread, color, and inset. Stack multiple shadows for layered effects. Get the generated CSS instantly.",
      "url": "https://uttir.com/css-box-shadow-generator",
      "categories": [
        "web-tools",
        "color-tools",
        "developer-tools"
      ],
      "keywords": [
        "css box shadow generator",
        "box shadow css",
        "css shadow",
        "box shadow maker",
        "css drop shadow",
        "box shadow online",
        "neumorphism generator",
        "css shadow effects"
      ],
      "useCases": [
        "Use for css box shadow generator",
        "Use for box shadow css",
        "Use for css shadow",
        "Use for box shadow maker",
        "Use for css drop shadow"
      ],
      "userIntents": [
        "How do I css box shadow generator?",
        "CSS Box Shadow Generator online",
        "Free css box shadow generator no signup",
        "CSS Box Shadow Generator that doesn't upload my data",
        "CSS Box Shadow Generator in my browser",
        "Best box shadow css compared"
      ],
      "privacy": "Shadow values are computed in your browser. No upload, no tracking.",
      "related": [
        "css-gradient-generator",
        "css-flexbox-playground",
        "css-grid-playground",
        "css-minifier"
      ],
      "inputs": "A color value (hex, RGB, or HSL)",
      "outputs": "A generated value (UUID, password, QR code, palette, etc.)",
      "howTo": [
        {
          "title": "Adjust the controls",
          "detail": "Move the offset, blur, spread, and color sliders. The preview updates live."
        },
        {
          "title": "Add layers",
          "detail": "Click \"Add shadow\" to layer multiple shadows. Each layer can have its own color and offset."
        },
        {
          "title": "Copy the CSS",
          "detail": "Use the \"Copy CSS\" button to grab the generated box-shadow value."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "What is the difference between blur and spread?",
          "answer": "Blur is the size of the soft falloff. Spread is the size of the solid part of the shadow. A shadow with high blur and zero spread fades quickly; a shadow with high spread and low blur is a hard, large shadow. Most natural-looking shadows use both."
        },
        {
          "question": "What is inset?",
          "answer": "Inset draws the shadow inside the element instead of outside. Use it for inner highlights, pressed-button effects, or to suggest depth inside a container."
        },
        {
          "question": "How do I layer multiple shadows?",
          "answer": "Click \"Add shadow\" to create a second shadow layer. Each layer has its own color, offset, blur, and spread. The first shadow in the list is on top; later shadows are drawn under it. Common combinations: (1) tight dark shadow directly under the element, (2) larger soft shadow for ambient occlusion."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/css-box-shadow-generator.md",
      "markdownDoc": "https://uttir.com/css-box-shadow-generator.md"
    },
    {
      "slug": "css-border-radius-generator",
      "name": "CSS Border Radius Generator",
      "shortDescription": "Visually design CSS border-radius values. Independent corner control, preset shapes, live preview, and copyable CSS. Includes the \"organic\" 8-value syntax.",
      "url": "https://uttir.com/css-border-radius-generator",
      "categories": [
        "web-tools",
        "color-tools",
        "developer-tools"
      ],
      "keywords": [
        "css border radius generator",
        "border radius css",
        "rounded corners css",
        "css rounded corners",
        "blob maker",
        "organic shapes css",
        "css shape generator"
      ],
      "useCases": [
        "Use for css border radius generator",
        "Use for border radius css",
        "Use for rounded corners css",
        "Use for css rounded corners",
        "Use for blob maker"
      ],
      "userIntents": [
        "How do I css border radius generator?",
        "CSS Border Radius Generator online",
        "Free css border radius generator no signup",
        "CSS Border Radius Generator that doesn't upload my data",
        "CSS Border Radius Generator in my browser",
        "Best border radius css compared"
      ],
      "privacy": "Border-radius values are computed in your browser. No upload, no tracking.",
      "related": [
        "css-box-shadow-generator",
        "css-gradient-generator",
        "css-flexbox-playground",
        "css-minifier"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Pick a shape preset",
          "detail": "Square, rounded, circle, pill, or one of the organic shapes."
        },
        {
          "title": "Adjust the corners",
          "detail": "Drag the corner handles or use the input fields. The CSS updates live."
        },
        {
          "title": "Copy the CSS",
          "detail": "Use the \"Copy\" button to grab the generated border-radius value."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "What is the 8-value border-radius syntax?",
          "answer": "The standard border-radius accepts 4 values (one per corner). The advanced syntax accepts 8 values: 4 horizontal radii and 4 vertical radii, separated by a slash. This lets you create asymmetric organic shapes — for example, \"30% 70% 20% 40% / 50% 60% 40% 30%\" creates a leaf-like shape."
        },
        {
          "question": "What is the difference between px and %?",
          "answer": "Pixels are absolute — a 20px border-radius is always 20 pixels. Percentages are relative to the element size — 50% makes a circle from a square, 25% is a soft rounded corner. Percentages are more flexible for responsive designs."
        },
        {
          "question": "How do I create a perfect circle?",
          "answer": "Set all 4 corners to 50%. This works for any element with equal width and height. For a pill shape (rounded ends on a rectangle), set all corners to 50% on a rectangle that is wider than it is tall."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/css-border-radius-generator.md",
      "markdownDoc": "https://uttir.com/css-border-radius-generator.md"
    },
    {
      "slug": "random-picker",
      "name": "Random Picker / Wheel of Names",
      "shortDescription": "Pick a random item from a list with a spinning wheel. Great for giveaways, classroom activities, and team decisions. Runs in your browser, no upload.",
      "url": "https://uttir.com/random-picker",
      "categories": [
        "generators",
        "math-tools"
      ],
      "keywords": [
        "random picker",
        "wheel of names",
        "random name picker",
        "pick a winner",
        "random name generator",
        "giveaway picker",
        "random selector",
        "random team generator"
      ],
      "useCases": [
        "Pick a random item from a list",
        "Choose between multiple options with a visual spinner",
        "Make a decision when you cannot decide",
        "Pick from a list of names, options, or tasks"
      ],
      "userIntents": [
        "How do I random picker?",
        "Random Picker / Wheel of Names online",
        "Free random picker no signup",
        "Random Picker / Wheel of Names that doesn't upload my data",
        "Random Picker / Wheel of Names in my browser",
        "Best wheel of names compared"
      ],
      "privacy": "Lists are kept in your browser only. Nothing is sent to a server.",
      "related": [
        "random-number-generator",
        "password-generator",
        "uuid-generator",
        "stopwatch"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A random selection from the input list",
      "howTo": [
        {
          "title": "Type your list",
          "detail": "One item per line. Two lines minimum to spin."
        },
        {
          "title": "Click Spin",
          "detail": "The wheel rotates and lands on a random item."
        },
        {
          "title": "See the winner",
          "detail": "The result is shown in the center. The full spin history is in the side panel."
        }
      ],
      "examples": [],
      "faq": [
        {
          "question": "Is the result really random?",
          "answer": "Yes. The wheel uses a cryptographically-seeded random number from the browser. Each item has an equal chance of winning, regardless of order. The spin animation is just visual feedback — the result is determined the moment you click Spin."
        },
        {
          "question": "How many items can the wheel hold?",
          "answer": "There is no hard limit, but readability drops after ~50 items (the segments get too thin). For larger lists, use the random pick button instead of the wheel — same randomness, better readability."
        },
        {
          "question": "Can I save my list?",
          "answer": "Lists are saved in your browser using localStorage. They persist across sessions on the same device. Use \"Clear\" to remove a saved list."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/random-picker.md",
      "markdownDoc": "https://uttir.com/random-picker.md"
    },
    {
      "slug": "invoice-generator",
      "name": "Invoice Generator",
      "shortDescription": "Create a professional PDF invoice with line items, tax, and totals. No signup, no email gate, no data leaves your browser.",
      "url": "https://uttir.com/invoice-generator",
      "categories": [
        "generators",
        "pdf-tools",
        "file-tools"
      ],
      "keywords": [
        "invoice generator",
        "create invoice",
        "free invoice template",
        "invoice maker",
        "pdf invoice",
        "bill generator",
        "receipt maker",
        "freelance invoice",
        "simple invoice"
      ],
      "useCases": [
        "Generate a professional invoice with line items, tax, and totals",
        "Download the invoice as a PDF or print it",
        "Save invoice details for repeated use",
        "Generate an invoice in your browser without uploading data"
      ],
      "userIntents": [
        "How do I invoice generator?",
        "Invoice Generator online",
        "Free invoice generator no signup",
        "Invoice Generator that doesn't upload my data",
        "Invoice Generator in my browser",
        "Best create invoice compared"
      ],
      "privacy": "Your invoice data stays in your browser. Nothing is sent to a server.",
      "related": [
        "compound-interest-calculator",
        "html-to-pdf",
        "pdf-merge",
        "currency-converter"
      ],
      "inputs": "A PDF file",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Fill in the parties",
          "detail": "Your business info and the client’s billing details."
        },
        {
          "title": "Add line items",
          "detail": "Description, quantity, and unit price. Subtotal, tax, and total update as you type."
        },
        {
          "title": "Download the PDF",
          "detail": "A print-ready PDF is generated locally and saved to your device."
        }
      ],
      "examples": [
        {
          "title": "Freelance design invoice",
          "description": "A typical one-page invoice for a freelance design project.",
          "input": "Logo design — $500\nBrand guide — $1,500\nTotal: $2,000",
          "output": "INV-2026-001 • Due in 14 days • Subtotal $2,000 • Tax $0 • Total $2,000"
        }
      ],
      "faq": [
        {
          "question": "Do I need to create an account?",
          "answer": "No. The invoice is built in your browser. Close the tab when you are done and everything is gone."
        },
        {
          "question": "Can I customize the look?",
          "answer": "You can change the accent color, currency, and add a logo (small image). The layout is designed to print cleanly on Letter and A4."
        },
        {
          "question": "Is my data sent to a server?",
          "answer": "No. Every calculation and the PDF generation happens in your browser. Your invoice details never leave your device."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/invoice-generator.md",
      "markdownDoc": "https://uttir.com/invoice-generator.md"
    },
    {
      "slug": "image-compressor-to-size",
      "name": "Image Compressor to Size",
      "shortDescription": "Compress a JPG, PNG, or WebP image to an exact target file size in KB. Iteratively re-encodes until the result fits.",
      "url": "https://uttir.com/image-compressor-to-size",
      "categories": [
        "image-tools",
        "file-tools",
        "converters"
      ],
      "keywords": [
        "compress image to size",
        "compress jpg to 100kb",
        "compress image to 50kb",
        "reduce image size",
        "image to specific size",
        "compress for email",
        "image size compressor",
        "compress to exact size"
      ],
      "useCases": [
        "Compress an image to a specific file size (e.g. \"under 100 KB\")",
        "Iterate the quality setting until the target size is hit",
        "Compress to a maximum file size for email or web uploads",
        "See the iteration history of compression attempts"
      ],
      "userIntents": [
        "How do I compress image to size?",
        "Image Compressor to Size online",
        "Free compress image to size no signup",
        "Image Compressor to Size that doesn't upload my data",
        "Image Compressor to Size in my browser",
        "Best compress jpg to 100kb compared"
      ],
      "privacy": "Your image never leaves the browser. Compression happens locally in JavaScript.",
      "related": [
        "image-compressor",
        "image-resizer",
        "webp-converter",
        "jpg-to-png"
      ],
      "inputs": "An image file (JPG, PNG, WebP, HEIC, or other)",
      "outputs": "A compressed file or image (smaller size, same content)",
      "howTo": [
        {
          "title": "Choose an image",
          "detail": "JPG, PNG, or WebP, up to 25 MB."
        },
        {
          "title": "Set a target size",
          "detail": "In kilobytes. Common: 100 KB for email, 50 KB for avatars, 20 KB for thumbnails."
        },
        {
          "title": "Pick output format",
          "detail": "WebP usually gives the smallest file at a given quality."
        },
        {
          "title": "Click Compress",
          "detail": "The tool re-encodes iteratively and shows the result."
        }
      ],
      "examples": [
        {
          "title": "Compress a 4 MB photo to 200 KB",
          "description": "A real use case: shrinking a phone photo to attach to an email.",
          "input": "4 MB JPG → 200 KB target",
          "output": "~120 KB JPG, quality ~0.45, no resize needed"
        }
      ],
      "faq": [
        {
          "question": "How does it work?",
          "answer": "It uses binary search on the JPEG / WebP quality setting. Each iteration re-encodes the image, measures the byte size, and narrows the quality range until the result is just under your target. If quality alone cannot get there, it reduces dimensions by 10% and retries."
        },
        {
          "question": "What if my image is already smaller than the target?",
          "answer": "The tool will tell you. It does not upscale or add fake data — the original is already optimal for that target."
        },
        {
          "question": "Is WebP always smaller?",
          "answer": "Almost always, at the same visual quality. The exceptions are small icons and very simple graphics, where PNG can be smaller. The tool lets you pick."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/image-compressor-to-size.md",
      "markdownDoc": "https://uttir.com/image-compressor-to-size.md"
    },
    {
      "slug": "meme-generator",
      "name": "Meme Generator",
      "shortDescription": "Add classic top-and-bottom text to any image, then download the meme as a PNG. Pick a template or upload your own image.",
      "url": "https://uttir.com/meme-generator",
      "categories": [
        "image-tools",
        "generators"
      ],
      "keywords": [
        "meme generator",
        "make a meme",
        "meme maker",
        "create meme",
        "meme template",
        "caption image",
        "impact font meme",
        "free meme generator"
      ],
      "useCases": [
        "Create a meme with a top text and a bottom text",
        "Use a custom image as the meme background",
        "Download the meme as a PNG",
        "Generate the classic impact-font meme format"
      ],
      "userIntents": [
        "How do I meme generator?",
        "Meme Generator online",
        "Free meme generator no signup",
        "Meme Generator that doesn't upload my data",
        "Meme Generator in my browser",
        "Best make a meme compared"
      ],
      "privacy": "Your image and text stay in your browser. Nothing is uploaded.",
      "related": [
        "image-resizer",
        "image-compressor",
        "image-color-picker",
        "emoji-picker"
      ],
      "inputs": "An image file (JPG, PNG, WebP, HEIC, or other)",
      "outputs": "A random selection from the input list",
      "howTo": [
        {
          "title": "Choose an image",
          "detail": "Pick a built-in template or upload your own PNG / JPG."
        },
        {
          "title": "Add your captions",
          "detail": "Top and bottom text in classic Impact font with a black stroke."
        },
        {
          "title": "Download the meme",
          "detail": "A PNG is generated locally and saved to your device."
        }
      ],
      "examples": [
        {
          "title": "Top/bottom two-line meme",
          "description": "The most common meme format. Top text sets up, bottom text delivers the punchline.",
          "input": "Top: WHEN THE CODE COMPILES\nBottom: BUT NOBODY KNOWS WHY",
          "output": "A PNG with both captions in big white Impact font with a black stroke."
        }
      ],
      "faq": [
        {
          "question": "Do I need to find a meme template online?",
          "answer": "No. The generator ships with a small set of built-in templates, and you can upload any image from your device. If you want a specific template (e.g. Drake, Distracted Boyfriend), search for it on Google Images, save the blank image, and upload it here."
        },
        {
          "question": "What font is used?",
          "answer": "The classic meme font is Impact, drawn in all-caps with a black stroke. You can change the font, size, color, and stroke color if you want."
        },
        {
          "question": "Is my image uploaded?",
          "answer": "No. The entire generation runs in your browser. The image and text never leave your device."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/meme-generator.md",
      "markdownDoc": "https://uttir.com/meme-generator.md"
    },
    {
      "slug": "json-tree-viewer",
      "name": "JSON Tree Viewer",
      "shortDescription": "Paste any JSON and explore it as a collapsible tree. Click any value to copy it, or copy the whole path. Free, runs in your browser, no upload.",
      "url": "https://uttir.com/json-tree-viewer",
      "categories": [
        "developer-tools",
        "data-tools",
        "text-tools"
      ],
      "keywords": [
        "json tree viewer",
        "json tree",
        "json viewer",
        "json explorer",
        "json browser",
        "view json",
        "json pretty print",
        "json formatter",
        "json path",
        "json pointer"
      ],
      "useCases": [
        "Explore a large JSON file visually as a collapsible tree",
        "Navigate deep JSON structures with a click-to-expand interface",
        "Find a specific value in a JSON document by drilling down",
        "Inspect a JSON API response without reading raw text"
      ],
      "userIntents": [
        "How do I json tree viewer?",
        "JSON Tree Viewer online",
        "Free json tree viewer no signup",
        "JSON Tree Viewer that doesn't upload my data",
        "JSON Tree Viewer in my browser",
        "Best json tree compared"
      ],
      "privacy": "The JSON stays in your browser. Nothing is uploaded.",
      "related": [
        "json-formatter",
        "json-validator",
        "json-to-yaml",
        "json-ld-generator",
        "csv-json-converter"
      ],
      "inputs": "A JSON document or fragment",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Paste your JSON",
          "detail": "Drop a file or paste text into the editor on the left."
        },
        {
          "title": "Explore the tree",
          "detail": "Click any node to expand or collapse its children. Use Expand all / Collapse all for big trees."
        },
        {
          "title": "Copy values or paths",
          "detail": "Click a primitive value to copy it. The path (for example /data/users/2/email) is shown next to each node and is one click to copy."
        }
      ],
      "examples": [
        {
          "title": "API response navigation",
          "description": "Most API responses are deeply nested. The tree view lets you collapse everything except the section you are looking at, then drill in.",
          "input": "{ \"data\": { \"users\": [ { \"id\": 1, \"name\": \"alice\" }, { \"id\": 2, \"name\": \"bob\" } ] } }",
          "output": "A collapsible tree where /data/users/0/name resolves to \"alice\"."
        },
        {
          "title": "Config file debugging",
          "description": "Long package.json, tsconfig.json, or .eslintrc files are easier to read as a tree than as flat text.",
          "input": "{ \"name\": \"app\", \"scripts\": { \"build\": \"vite build\", \"test\": \"vitest\" } }",
          "output": "Each script is a clickable leaf; click to copy the script name."
        }
      ],
      "faq": [
        {
          "question": "Is my JSON uploaded anywhere?",
          "answer": "No. The viewer runs entirely in your browser. The text you paste never leaves your device, and there is no server-side parsing or storage."
        },
        {
          "question": "What is the \"path\" next to each node?",
          "answer": "It is a JSON Pointer (RFC 6901). For example, /users/0/name refers to the name field of the first user. Most JSON tools and the $.. selector in tools like jq use the same syntax."
        },
        {
          "question": "How big a JSON can I paste?",
          "answer": "The viewer handles JSON up to a few megabytes comfortably — large enough for any realistic API response or config file. If the JSON is many megabytes, the browser may slow down; the viewer shows how many nodes it found so you can tell when a file is too big to comfortably browse."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/json-tree-viewer.md",
      "markdownDoc": "https://uttir.com/json-tree-viewer.md"
    },
    {
      "slug": "meta-tag-preview",
      "name": "Meta Tag Preview",
      "shortDescription": "See how your page will look in Google search results, Twitter, Facebook, and LinkedIn — before you publish. Type a title and description, upload an image, and the preview updates live.",
      "url": "https://uttir.com/meta-tag-preview",
      "categories": [
        "seo-tools",
        "web-tools",
        "developer-tools",
        "generators"
      ],
      "keywords": [
        "meta tag preview",
        "google search preview",
        "serp preview",
        "google snippet",
        "meta description preview",
        "twitter card preview",
        "facebook open graph preview",
        "linkedin link preview",
        "og image preview",
        "social card preview",
        "seo preview",
        "serp simulator"
      ],
      "useCases": [
        "Preview how a page will look in Google search results",
        "See the title, URL, and description in SERP format",
        "Check for truncation before publishing",
        "Generate a Twitter card and Open Graph preview"
      ],
      "userIntents": [
        "How do I meta tag preview?",
        "Meta Tag Preview online",
        "Free meta tag preview no signup",
        "Meta Tag Preview that doesn't upload my data",
        "Meta Tag Preview in my browser",
        "Best google search preview compared"
      ],
      "privacy": "Your title, description, and image are processed locally in your browser. No upload to any server.",
      "related": [
        "meta-tag-generator",
        "serp-preview",
        "meta-description-checker",
        "robots-txt-generator",
        "sitemap-generator",
        "json-ld-generator"
      ],
      "inputs": "An image file (JPG, PNG, WebP, HEIC, or other)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Fill in the form",
          "detail": "Title, description, URL, image, and Twitter handle. Each field updates the previews live."
        },
        {
          "title": "Watch the Google snippet",
          "detail": "The Google preview is the most constrained. Aim for 50–60 characters in the title and 150–160 in the description. The preview colors the over-limit characters red."
        },
        {
          "title": "Check each social card",
          "detail": "Twitter, Facebook, and LinkedIn have different aspect ratios. Switch between them to see how the same title and image render differently."
        }
      ],
      "examples": [
        {
          "title": "Landing page",
          "description": "A typical SaaS landing page with a 1200×630 Open Graph image and a 150-character description.",
          "input": "Title: \"Free Tools That Just Work — Uttir\"\nDescription: \"126 free online utilities. Converters, formatters, generators. No signup, no uploads, no tracking. Runs in your browser.\"\nURL: https://uttir.com\nImage: 1200x630 product screenshot",
          "output": "Google snippet, Twitter card, Facebook card, and LinkedIn card all updated with the same metadata."
        },
        {
          "title": "Blog post",
          "description": "A long-form blog post with a 1200×675 image and a description that summarizes the article.",
          "input": "Title: \"How to Make a Favicon from Any Image — Uttir Blog\"\nDescription: \"Turn any logo, photo, or icon into a working favicon in 2 minutes. Free browser tool, no upload, every size and format you need.\"\nURL: https://uttir.com/blog/how-to-make-a-favicon-from-any-image\nImage: 1200x675 cover image",
          "output": "A Google snippet that fits cleanly inside the limits, plus three social cards that look polished on every platform."
        }
      ],
      "faq": [
        {
          "question": "Is the Google preview exactly what users will see?",
          "answer": "It is a close approximation. Google's actual snippet is influenced by the search query, the device, and recent changes to the page. Use this preview to make sure your title and description fit, but trust Search Console for the real-world click-through rate."
        },
        {
          "question": "What aspect ratio should the image be?",
          "answer": "1.91:1 is the safest — 1200×630 works for Facebook, LinkedIn, and most Twitter cards. Twitter also accepts 2:1 (1200×600) and 1:1 (1200×1200) for some card types. The preview highlights when the image does not match the platform's preferred ratio."
        },
        {
          "question": "What are the limits?",
          "answer": "Google: title 50–60 characters, description 150–160. Twitter summary card: title 70, description 200. Facebook / LinkedIn: title 95, description 297. The preview marks the over-limit characters so you can see at a glance which fields need trimming."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/meta-tag-preview.md",
      "markdownDoc": "https://uttir.com/meta-tag-preview.md"
    },
    {
      "slug": "markdown-editor",
      "name": "Markdown Editor",
      "shortDescription": "Write Markdown on the left, see the rendered HTML on the right. Live preview, character / word / line counts, copy HTML or Markdown, drag-drop a file to open it.",
      "url": "https://uttir.com/markdown-editor",
      "categories": [
        "text-tools",
        "developer-tools",
        "generators",
        "web-tools"
      ],
      "keywords": [
        "markdown editor",
        "markdown preview",
        "live markdown",
        "markdown to html",
        "write markdown",
        "markdown online",
        "markdown writer",
        "markdown playground",
        "markdown cheat sheet"
      ],
      "useCases": [
        "Write and preview Markdown in real time",
        "Edit a Markdown file with live HTML rendering",
        "Export the rendered HTML or the Markdown source",
        "Format a blog post or README before publishing"
      ],
      "userIntents": [
        "How do I markdown editor?",
        "Markdown Editor online",
        "Free markdown editor no signup",
        "Markdown Editor that doesn't upload my data",
        "Markdown Editor in my browser",
        "Best markdown preview compared"
      ],
      "privacy": "Your text stays in your browser. The preview is rendered locally — nothing is uploaded.",
      "related": [
        "markdown-to-html",
        "character-counter",
        "word-counter",
        "html-entity-encoder-decoder",
        "html-minifier"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A count (words, characters, sentences, paragraphs)",
      "howTo": [
        {
          "title": "Write or paste Markdown",
          "detail": "Type in the left pane, or paste from another app."
        },
        {
          "title": "Watch the preview",
          "detail": "The right pane updates as you type. No lag — preview is local."
        },
        {
          "title": "Copy or export",
          "detail": "Copy the rendered HTML, or the original Markdown, or download as a .md file."
        }
      ],
      "examples": [
        {
          "title": "A short README",
          "description": "The first three sections of a typical project README. Live preview renders the headings, the code block, and the list.",
          "input": "# Project\n\nA short description.\n\n## Install\n\n```bash\nnpm install my-package\n```\n\n## Usage\n\n- Bullet one\n- Bullet two",
          "output": "A live HTML preview with a heading, a sub-heading, a code block, and an unordered list."
        },
        {
          "title": "A blog draft",
          "description": "Long-form Markdown with a link, an image, a quote, and emphasis. Tests the most common syntax in one document.",
          "input": "## Why I switched to local-first\n\nI have been [writing locally](https://example.com) for years. The privacy angle matters more than people think.\n\n> The best note-taking system is the one you actually use.\n\n**Bold** and *italic* work too.",
          "output": "A live preview with a sub-heading, a paragraph with an inline link, a blockquote, and bold / italic text."
        }
      ],
      "faq": [
        {
          "question": "Which Markdown features are supported?",
          "answer": "Headings, bold, italic, inline code, fenced code blocks, links, images, ordered and unordered lists, blockquotes, horizontal rules, hard line breaks. Tables, footnotes, and task lists are not — for those, use a full-featured editor like Obsidian or VS Code."
        },
        {
          "question": "Is the rendered HTML sanitized?",
          "answer": "Yes. The renderer escapes HTML in the input before producing output, so a markdown document with <script> tags in it produces a safe escaped version, not an executable script. The output is safe to paste into a static site or a blog post."
        },
        {
          "question": "Can I import a .md file?",
          "answer": "Yes. Drag a .md file onto the editor, or click the file icon in the toolbar. The content goes into the editor; the preview updates immediately."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/markdown-editor.md",
      "markdownDoc": "https://uttir.com/markdown-editor.md"
    },
    {
      "slug": "file-compressor",
      "name": "File Compressor (Zip / Unzip)",
      "shortDescription": "Create a zip archive from any files, or extract one — entirely in your browser. No upload, no signup, no file-size limits beyond what your browser can hold.",
      "url": "https://uttir.com/file-compressor",
      "categories": [
        "file-tools",
        "developer-tools"
      ],
      "keywords": [
        "file compressor",
        "zip files",
        "create zip",
        "zip online",
        "extract zip",
        "unzip online",
        "open zip",
        "zip in browser",
        "privacy first zip",
        "no upload zip",
        "compress files"
      ],
      "useCases": [
        "Compress a file (ZIP, gzip) in the browser",
        "Create an archive from one or more files",
        "Extract an archive in the browser",
        "Compress without uploading the file"
      ],
      "userIntents": [
        "How do I file compressor?",
        "File Compressor (Zip / Unzip) online",
        "Free file compressor no signup",
        "File Compressor (Zip / Unzip) that doesn't upload my data",
        "File Compressor (Zip / Unzip) in my browser",
        "Best zip files compared"
      ],
      "privacy": "Your files never leave your device. The zip is built and extracted locally in your browser.",
      "related": [
        "pdf-compressor",
        "image-compressor",
        "image-compressor-to-size",
        "base64-encoder",
        "image-to-base64"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "To zip: drop files in the left panel",
          "detail": "Add as many as you want. The list updates with each file's size. Click \"Compress\" to build the zip; the download starts immediately."
        },
        {
          "title": "To unzip: drop a .zip in the right panel",
          "detail": "The list of contents appears. Click \"Download\" next to any file, or \"Download all\" to extract everything as individual files."
        },
        {
          "title": "No file-size limit (other than your browser)",
          "detail": "Streaming zip — handles a 1 GB file as comfortably as a 1 KB file. The browser may slow down with very large files; use a real desktop tool for anything over a few hundred MB."
        }
      ],
      "examples": [
        {
          "title": "Bundle a project for email",
          "description": "Add 10 files (a few KB each) to the left, click Compress, attach the resulting zip to an email.",
          "input": "A folder of small text files: README.md, package.json, src/index.js, src/utils.js, …",
          "output": "A single .zip file with all the original files, compressed."
        },
        {
          "title": "Open a zip you received",
          "description": "Drop a zip into the right panel. The contents are listed. Click Download next to the ones you need.",
          "input": "A zip you received via email or chat containing photos, documents, or source code.",
          "output": "A list of every file in the zip with its size. Click each to download it, or use \"Download all\"."
        }
      ],
      "faq": [
        {
          "question": "Are my files uploaded?",
          "answer": "No. The zip is built and extracted entirely in your browser. The bytes never leave your device — no server-side processing, no analytics, no upload step."
        },
        {
          "question": "Is there a file-size limit?",
          "answer": "No fixed limit, but the practical limit is your browser's memory. A 1 GB single file works in modern browsers. A 1 GB zip with thousands of small files is also fine because the operation is streaming. If your browser slows down or runs out of memory, that is the limit, not the tool."
        },
        {
          "question": "What compression level is used?",
          "answer": "Level 6, which is the default for most desktop zip tools (WinZip, macOS Archive Utility, 7-Zip). The trade-off between speed and size is near-optimal at level 6; higher levels (7-9) save a few percent at the cost of much longer compression time."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/file-compressor.md",
      "markdownDoc": "https://uttir.com/file-compressor.md"
    },
    {
      "slug": "api-tester",
      "name": "API Tester (HTTP Requests)",
      "shortDescription": "Make HTTP requests from your browser: GET, POST, PUT, DELETE, with custom headers and body. Import a cURL command, see the full response (status, headers, body) with timing. Free, in browser, no signup.",
      "url": "https://uttir.com/api-tester",
      "categories": [
        "developer-tools",
        "web-tools",
        "data-tools"
      ],
      "keywords": [
        "api tester",
        "http request tester",
        "postman alternative",
        "insomnia alternative",
        "rest client",
        "curl tester",
        "curl online",
        "make http request",
        "fetch tester",
        "api client",
        "rest api",
        "api playground"
      ],
      "useCases": [
        "Make an HTTP request to an API endpoint from the browser",
        "Test GET, POST, PUT, DELETE, and PATCH requests",
        "See the response status, headers, and body",
        "Add custom headers, query parameters, and a request body"
      ],
      "userIntents": [
        "How do I api tester?",
        "API Tester (HTTP Requests) online",
        "Free api tester no signup",
        "API Tester (HTTP Requests) that doesn't upload my data",
        "API Tester (HTTP Requests) in my browser",
        "Best http request tester compared"
      ],
      "privacy": "Your request goes from your browser to the target server directly. Nothing is sent to a third party.",
      "related": [
        "json-formatter",
        "json-tree-viewer",
        "json-validator",
        "base64-encoder",
        "jwt-decoder",
        "http-status-codes",
        "url-encoder",
        "url-decoder"
      ],
      "inputs": "A URL string",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Pick a method and enter a URL",
          "detail": "GET is the default. The URL must start with http:// or https://."
        },
        {
          "title": "Add headers (optional)",
          "detail": "Most APIs need an Authorization header. Use the \"Add header\" button for each one."
        },
        {
          "title": "Add a body (for POST / PUT / PATCH)",
          "detail": "JSON, form-encoded, or plain text. The body kind auto-sets the Content-Type header."
        },
        {
          "title": "Click Send",
          "detail": "The request is made from your browser. The response shows status, headers, body, and timing."
        }
      ],
      "examples": [
        {
          "title": "Test a public API",
          "description": "Make a GET to a public API and see the JSON response. No auth, no rate limits, no API key needed for the example APIs.",
          "input": "GET https://api.github.com/repos/sveltejs/kit",
          "output": "A 200 response with the repository metadata, JSON-formatted, showing the full body in a few seconds."
        },
        {
          "title": "POST a JSON body",
          "description": "Most modern APIs use JSON for both the request and the response. The form auto-sets Content-Type: application/json when you pick the JSON body kind.",
          "input": "POST https://httpbin.org/post\nAuthorization: Bearer x\nContent-Type: application/json\n\n{\"name\":\"alice\",\"age\":30}",
          "output": "A 200 response with the body echoed back, showing what the server received."
        },
        {
          "title": "Import a cURL command",
          "description": "Most API docs give cURL examples. Paste the command into the import field and the form fills in method, URL, headers, and body.",
          "input": "curl -X POST -H \"Authorization: Bearer x\" -H \"Content-Type: application/json\" -d '{\"query\":\"hello\"}' https://api.example.com/v1/search",
          "output": "The form shows: method POST, the URL, both headers, and the JSON body. One click to send."
        }
      ],
      "faq": [
        {
          "question": "Is my request going through a proxy?",
          "answer": "No. The request goes from your browser directly to the target server. CORS still applies: if the server does not allow cross-origin requests from a browser, you will get a CORS error. The error is from the target server, not from us."
        },
        {
          "question": "What about CORS?",
          "answer": "Browsers enforce CORS for cross-origin requests. If the target server does not allow your origin (or does not allow the method / headers you are sending), the browser blocks the response and you see a CORS error. The fix is on the server side — the API needs to send the right Access-Control-Allow-* headers. Many public APIs do this; many internal ones do not."
        },
        {
          "question": "Are my API keys safe?",
          "answer": "Your API keys live in the request form. They are sent from your browser to the target server. We do not log them, store them, or send them anywhere else. Clear the form when you are done to remove them from your browser memory."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/api-tester.md",
      "markdownDoc": "https://uttir.com/api-tester.md"
    },
    {
      "slug": "ocr",
      "name": "Image to Text (OCR)",
      "shortDescription": "Extract text from any image — screenshots, scanned documents, photos of signs. Choose a language, see the recognized text with confidence, and copy or download it. Free, in browser, no signup.",
      "url": "https://uttir.com/ocr",
      "categories": [
        "image-tools",
        "text-tools",
        "developer-tools"
      ],
      "keywords": [
        "ocr",
        "ocr online",
        "image to text",
        "extract text from image",
        "text recognition",
        "screenshot to text",
        "scanned document to text",
        "copy text from image",
        "read text from image",
        "photo to text"
      ],
      "useCases": [
        "Extract text from an image using in-browser OCR",
        "Read text from a photo, screenshot, or scanned document",
        "Copy the recognized text to the clipboard",
        "Process an image in the browser without uploading it"
      ],
      "userIntents": [
        "How do I ocr?",
        "Image to Text (OCR) online",
        "Free ocr no signup",
        "Image to Text (OCR) that doesn't upload my data",
        "Image to Text (OCR) in my browser",
        "Best ocr online compared"
      ],
      "privacy": "Your image is processed in your browser. Nothing is uploaded to a server.",
      "related": [
        "image-to-base64",
        "jpg-to-png",
        "webp-converter",
        "character-counter",
        "word-counter",
        "text-diff",
        "json-formatter"
      ],
      "inputs": "An image file (JPG, PNG, WebP, HEIC, or other)",
      "outputs": "A random selection from the input list",
      "howTo": [
        {
          "title": "Choose an image",
          "detail": "JPG, PNG, or WebP. Screenshots and scans work best."
        },
        {
          "title": "Pick the language",
          "detail": "English is the default. Other supported languages are in the dropdown."
        },
        {
          "title": "Extract text",
          "detail": "The first run downloads the language model (~10 MB) and caches it for next time."
        },
        {
          "title": "Review and copy",
          "detail": "Check the confidence on each block, copy what you need, or download as .txt."
        }
      ],
      "examples": [
        {
          "title": "Screenshot to text",
          "description": "Take a screenshot of an error message, a code snippet, or a paragraph from a slide, and pull the text out so you can paste it into a document or search box.",
          "input": "A screenshot of \"Page not found — The link you followed may be broken, or the page may have been removed.\"",
          "output": "Page not found\nThe link you followed may be broken, or the page may have been removed."
        },
        {
          "title": "Scanned document",
          "description": "Photos or scans of typed documents come through cleanly. Confidence is usually 90%+ for printed text at reasonable resolution.",
          "input": "A scan of a printed invoice with date, line items, and a total.",
          "output": "Recognized text in reading order with the same structure as the original."
        },
        {
          "title": "Sign or label in another language",
          "description": "Pick the language that matches the image. The model is per-language — picking the wrong one degrades accuracy a lot.",
          "input": "A photo of a sign in Spanish. Pick \"Spanish\" from the dropdown before extracting.",
          "output": "The Spanish text, with a confidence score. A different language dropdown choice would produce nonsense."
        }
      ],
      "faq": [
        {
          "question": "Is my image uploaded?",
          "answer": "No. The image is processed in your browser. Nothing is sent to a server, and the result is generated locally. Close the tab when you are done and the image is gone."
        },
        {
          "question": "What languages are supported?",
          "answer": "The dropdown shows 12 common languages: English, Spanish, French, German, Italian, Portuguese, Russian, Japanese, Chinese (Simplified and Traditional), Korean, and Arabic. Other languages can be added by editing the configuration."
        },
        {
          "question": "How big is the language model?",
          "answer": "Roughly 10 MB per language. The model downloads once on first use and is cached by your browser. Switching languages downloads an additional model."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/ocr.md",
      "markdownDoc": "https://uttir.com/ocr.md"
    },
    {
      "slug": "pdf-ocr",
      "name": "PDF OCR — Extract Text from Scanned PDFs",
      "shortDescription": "Pull text out of a scanned PDF in your browser. Each page is rendered at high resolution and recognized locally, with per-page text and a combined export. No upload, no signup.",
      "url": "https://uttir.com/pdf-ocr",
      "categories": [
        "pdf-tools",
        "image-tools",
        "text-tools",
        "developer-tools"
      ],
      "keywords": [
        "pdf ocr",
        "ocr pdf",
        "extract text from pdf",
        "scanned pdf to text",
        "pdf to text",
        "pdf text recognition",
        "image pdf to text",
        "copy text from scanned pdf",
        "pdf a text"
      ],
      "useCases": [
        "Extract text from a scanned or image-based PDF",
        "OCR a PDF in the browser without uploading it",
        "Get searchable text from a non-searchable PDF",
        "Process a multi-page PDF and download the text or a new searchable PDF"
      ],
      "userIntents": [
        "How do I pdf ocr?",
        "PDF OCR — Extract Text from Scanned PDFs online",
        "Free pdf ocr no signup",
        "PDF OCR — Extract Text from Scanned PDFs that doesn't upload my data",
        "PDF OCR — Extract Text from Scanned PDFs in my browser",
        "Best ocr pdf compared"
      ],
      "privacy": "The PDF is rendered and recognized in your browser. Nothing is uploaded to a server.",
      "related": [
        "ocr",
        "pdf-to-jpg",
        "pdf-merge",
        "pdf-split",
        "pdf-compressor",
        "word-counter",
        "character-counter"
      ],
      "inputs": "A PDF file",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Choose a PDF",
          "detail": "Up to 50 MB. The first run on a language downloads the model (~10 MB), cached after."
        },
        {
          "title": "Pick the language",
          "detail": "Match the language in the document. English is the default."
        },
        {
          "title": "Extract text",
          "detail": "Each page is rendered at 300 DPI equivalent, then recognized. Large PDFs may take a few minutes."
        },
        {
          "title": "Copy or download",
          "detail": "Per-page text in a tab, combined text in a single block, or download as .txt."
        }
      ],
      "examples": [
        {
          "title": "A scanned book chapter",
          "description": "Take a PDF of a scanned book chapter, run the tool, and get clean text you can paste into a note-taking app or a search box. The combined export gives you one block; the per-page view lets you copy a single page.",
          "input": "A 12-page scanned PDF of a chapter in English.",
          "output": "12 page results, each with the recognized text. Combined: ~15,000 characters with 90%+ average confidence on printed text."
        },
        {
          "title": "A scanned receipt or invoice",
          "description": "Snap or scan a paper receipt, save as PDF, drop it in. The tool returns the text with a per-page boundary, ready to paste into a spreadsheet or accounting tool.",
          "input": "A 1-page scanned receipt.",
          "output": "1 page result with the merchant, line items, total, and date. Confidence is usually 90%+ on printed receipts."
        },
        {
          "title": "A government form in another language",
          "description": "Match the language dropdown to the form. Switching languages downloads a new model on first use.",
          "input": "A 3-page French form.",
          "output": "3 page results, recognized in French. Pick French from the dropdown before extracting."
        }
      ],
      "faq": [
        {
          "question": "Is my PDF uploaded?",
          "answer": "No. The PDF is rendered and recognized in your browser. Nothing is sent to a server, and the file is gone when you close the tab."
        },
        {
          "question": "What size PDF can I process?",
          "answer": "Up to 50 MB. A typical scanned page at 300 DPI is ~1 MB, so 50 MB is roughly 50 pages of dense scans. For larger documents, split the PDF first using the PDF Split tool."
        },
        {
          "question": "How long does it take?",
          "answer": "A typical page takes 1-3 seconds after the language model is loaded. A 20-page PDF runs in 1-2 minutes. The first page on a new language is slower (10-30s) because the model downloads."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/pdf-ocr.md",
      "markdownDoc": "https://uttir.com/pdf-ocr.md"
    },
    {
      "slug": "reading-level",
      "name": "Reading Level Calculator",
      "shortDescription": "Check how hard your text is to read. Six readability formulas (Flesch Reading Ease, Flesch-Kincaid Grade, Gunning Fog, SMOG, Coleman-Liau, Automated Readability Index) in one tool, all in your browser, no upload.",
      "url": "https://uttir.com/reading-level",
      "categories": [
        "text-tools",
        "calculators"
      ],
      "keywords": [
        "reading level",
        "reading level calculator",
        "flesch kincaid",
        "flesch reading ease",
        "gunning fog",
        "smog index",
        "coleman liau",
        "readability score",
        "text difficulty",
        "grade level"
      ],
      "useCases": [
        "Use for reading level",
        "Use for reading level calculator",
        "Use for flesch kincaid",
        "Use for flesch reading ease",
        "Use for gunning fog"
      ],
      "userIntents": [
        "How do I reading level?",
        "Reading Level Calculator online",
        "Free reading level no signup",
        "Reading Level Calculator that doesn't upload my data",
        "Reading Level Calculator in my browser",
        "Best reading level calculator compared"
      ],
      "privacy": "Your text is analyzed in your browser. Nothing is uploaded to a server.",
      "related": [
        "word-counter",
        "character-counter",
        "character-frequency",
        "reading-time",
        "sentence-counter",
        "paragraph-counter",
        "sentence-length-checker"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A check result (pass/fail, length, ratio, etc.)",
      "howTo": [
        {
          "title": "Paste your text",
          "detail": "A few sentences to several pages. The formulas need at least 3 sentences for accurate SMOG."
        },
        {
          "title": "Read the six scores",
          "detail": "Each formula answers a slightly different question. Look at them together."
        },
        {
          "title": "Read the interpretation",
          "detail": "The Flesch Reading Ease score comes with a one-line plain-English interpretation."
        }
      ],
      "examples": [
        {
          "title": "Aiming for general-audience writing",
          "description": "For a blog, a landing page, or marketing copy, the target is Flesch Reading Ease 60+ (8th-9th grade). If your score is below 50, your text is college-level — most of your audience will bounce.",
          "input": "The utilization of synergistic optimization paradigms facilitates the operationalization of comprehensive deliverables.",
          "output": "Flesch Reading Ease ~5, Flesch-Kincaid Grade ~20. Way above the average reader. Rewrite in plain English."
        },
        {
          "title": "Checking academic writing",
          "description": "For a journal article, a textbook, or technical documentation, Flesch-Kincaid Grade 12-16 is normal. Below 10 reads as too casual; above 18 reads as needlessly dense.",
          "input": "The results demonstrate a statistically significant correlation (p < 0.05) between exposure and outcome.",
          "output": "Flesch-Kincaid Grade ~12. Appropriate for a journal or technical doc."
        }
      ],
      "faq": [
        {
          "question": "Which score should I trust?",
          "answer": "Flesch-Kincaid Grade Level is the most commonly cited because it is the US Department of Defense standard. Flesch Reading Ease is the most intuitive because the scale runs 0-100 (higher = easier). The other four formulas are all reasonable for the same purpose; use whichever your industry references."
        },
        {
          "question": "Is my text uploaded?",
          "answer": "No. The analysis runs entirely in your browser. The text never leaves the page."
        },
        {
          "question": "Why does it ask for at least 3 sentences?",
          "answer": "The SMOG formula is calibrated against a 30-sentence sample. With fewer than 3 sentences the estimate is unreliable; the tool shows 0 and you should rely on the other five formulas."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/reading-level.md",
      "markdownDoc": "https://uttir.com/reading-level.md"
    },
    {
      "slug": "aes-encrypt",
      "name": "AES Encrypt / Decrypt",
      "shortDescription": "Encrypt or decrypt text with a password using AES-256-GCM. The encryption runs entirely in your browser, the password never leaves the page, and the result is a portable text envelope you can paste into an email, a chat, or a file.",
      "url": "https://uttir.com/aes-encrypt",
      "categories": [
        "security-tools",
        "developer-tools",
        "encoding-tools"
      ],
      "keywords": [
        "aes encrypt",
        "aes decrypt",
        "aes-256",
        "aes gcm",
        "encrypt text online",
        "decrypt text online",
        "password encrypt",
        "encrypt with password",
        "pbkdf2",
        "text encryption"
      ],
      "useCases": [
        "Encrypt a message with a password using AES",
        "Decrypt an AES-encrypted message with a password",
        "Use a strong, password-based encryption for short messages",
        "See the encryption and decryption in the browser"
      ],
      "userIntents": [
        "How do I aes encrypt?",
        "AES Encrypt / Decrypt online",
        "Free aes encrypt no signup",
        "AES Encrypt / Decrypt that doesn't upload my data",
        "AES Encrypt / Decrypt in my browser",
        "Best aes decrypt compared"
      ],
      "privacy": "Encryption and decryption run in your browser. The password and the message never leave the page.",
      "related": [
        "password-generator",
        "password-strength-checker",
        "hash-generator",
        "jwt-decoder",
        "base64-encoder",
        "base64-decoder",
        "url-encoder"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Choose encrypt or decrypt",
          "detail": "Two modes. Same password field, different input and output sides."
        },
        {
          "title": "Pick a strong password",
          "detail": "A random 20-character string is the right pick for sensitive data. Use the password generator if you do not have one."
        },
        {
          "title": "Encrypt or decrypt",
          "detail": "The result is a portable text envelope you can paste anywhere."
        }
      ],
      "examples": [
        {
          "title": "Send a one-time secret in an email",
          "description": "Encrypt a password, a token, or a short message with a passphrase. Send the ciphertext in an email, share the passphrase by phone. The recipient pastes the ciphertext, enters the passphrase, and gets the original.",
          "input": "Plaintext: \"Meeting at 3pm, use the back door\"\nPassword: \"blue-river-42\"",
          "output": "A v1:base64... envelope that decrypts only with \"blue-river-42\"."
        },
        {
          "title": "Encrypt a note for yourself",
          "description": "Store a ciphertext in a note-taking app, a password manager, or a file. Decrypt it from any device with the password. Useful for API keys, recovery codes, or anything you do not want in plaintext.",
          "input": "Plaintext: an API key\nPassword: a strong password you remember",
          "output": "The ciphertext is safe to store. Only the password unlocks it."
        }
      ],
      "faq": [
        {
          "question": "Is my password uploaded?",
          "answer": "No. The password, the plaintext, and the ciphertext all stay in your browser. The encryption runs locally using the Web Crypto API. Close the tab when you are done and there is no trace."
        },
        {
          "question": "Which algorithm is used?",
          "answer": "AES-256-GCM (authenticated encryption) for the message, PBKDF2-HMAC-SHA256 with 250,000 iterations for key derivation. These are the standard choices for password-based encryption in 2026 and are well above the threshold for brute-force resistance."
        },
        {
          "question": "What is the \"v1:\" prefix?",
          "answer": "A version marker for the envelope format. If the parameters ever change (more iterations, a different hash, a different cipher), a new version is introduced and old envelopes still decrypt. Today everything is v1."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/aes-encrypt.md",
      "markdownDoc": "https://uttir.com/aes-encrypt.md"
    },
    {
      "slug": "subtitle-converter",
      "name": "Subtitle Converter (SRT, VTT, SUB)",
      "shortDescription": "Convert subtitles between SRT, WebVTT, and MicroDVD SUB. Paste or drop a file, pick the source and target format, and copy the converted text. Includes a timing-shift and a time-scale tool. Free, in your browser, no upload.",
      "url": "https://uttir.com/subtitle-converter",
      "categories": [
        "media-tools",
        "developer-tools"
      ],
      "keywords": [
        "subtitle converter",
        "srt to vtt",
        "vtt to srt",
        "srt to sub",
        "sub to srt",
        "webvtt converter",
        "microdvd converter",
        "subtitle timing",
        "shift subtitles",
        "scale subtitle timing"
      ],
      "useCases": [
        "Use for subtitle converter",
        "Use for srt to vtt",
        "Use for vtt to srt",
        "Use for srt to sub",
        "Use for sub to srt"
      ],
      "userIntents": [
        "How do I subtitle converter?",
        "Subtitle Converter (SRT, VTT, SUB) online",
        "Free subtitle converter no signup",
        "Subtitle Converter (SRT, VTT, SUB) that doesn't upload my data",
        "Subtitle Converter (SRT, VTT, SUB) in my browser",
        "Best srt to vtt compared"
      ],
      "privacy": "Subtitles are parsed and converted in your browser. Nothing is uploaded to a server.",
      "related": [
        "ocr",
        "pdf-ocr",
        "character-counter",
        "word-counter",
        "text-diff",
        "json-formatter",
        "morse-code-translator"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A formatted (pretty-printed) version of the input",
      "howTo": [
        {
          "title": "Pick the source format",
          "detail": "SRT, VTT, or SUB. Auto-detect works on most files."
        },
        {
          "title": "Paste or drop a file",
          "detail": "Plain text in, plain text out. Up to ~5 MB works fine in the browser."
        },
        {
          "title": "Pick the target format",
          "detail": "Or use shift / scale to keep the format and adjust timing."
        },
        {
          "title": "Copy or download the result",
          "detail": "The output is a clean text file ready to use."
        }
      ],
      "examples": [
        {
          "title": "SRT to WebVTT for an HTML5 video",
          "description": "You have an SRT from a video editor. The web player needs WebVTT. Drop the SRT, pick VTT, copy.",
          "input": "SRT: 1\n00:00:00,000 --> 00:00:03,500\nHello world",
          "output": "WEBVTT\n\n00:00:00.000 --> 00:00:03.500\nHello world"
        },
        {
          "title": "Shift subtitles 500 ms later",
          "description": "Your audio and subtitles are out of sync. The audio leads the text by half a second. Use the shift tool to push every cue 500 ms later.",
          "input": "00:00:00,000 --> 00:00:01,500\nFirst line",
          "output": "After +500ms shift:\n00:00:00,500 --> 00:00:02,000\nFirst line"
        },
        {
          "title": "SRT to SUB at 23.976 fps",
          "description": "A video editor needs frame-numbered SUBs. Pick the target fps (23.976 for film, 25 for PAL, 29.97 for NTSC, 30 for web).",
          "input": "SRT: 1\n00:00:00,000 --> 00:00:01,000\nA",
          "output": "At 23.976 fps: {0}{24}A"
        }
      ],
      "faq": [
        {
          "question": "Are my subtitles uploaded?",
          "answer": "No. Parsing and conversion happen in your browser. The subtitles never leave the page. Close the tab and there is no trace."
        },
        {
          "question": "Which formats are supported?",
          "answer": "SRT (SubRip), WebVTT (the HTML5 video standard), and MicroDVD SUB (frame-number based). ASS / SSA is not supported in this version — the format is more complex and the demand is much lower."
        },
        {
          "question": "What is the difference between SRT and WebVTT?",
          "answer": "Almost identical wire format. SRT uses comma for the millisecond decimal (00:00:00,000), WebVTT uses dot (00:00:00.000). WebVTT also requires a \"WEBVTT\" header line and supports styling blocks. For a plain-text caption track, the two are interchangeable once you fix the separator and add the header."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/subtitle-converter.md",
      "markdownDoc": "https://uttir.com/subtitle-converter.md"
    },
    {
      "slug": "qr-decoder",
      "name": "QR Code Decoder",
      "shortDescription": "Read the text or URL hidden in any QR code image. Drop in a screenshot, a photo, or a saved QR, and get the decoded payload. Detects URLs, emails, Wi-Fi credentials, and vCards. Free, in your browser, no upload.",
      "url": "https://uttir.com/qr-decoder",
      "categories": [
        "image-tools",
        "developer-tools"
      ],
      "keywords": [
        "qr decoder",
        "qr code reader",
        "qr scanner",
        "read qr code",
        "qr code from image",
        "decode qr online",
        "qr reader from image",
        "scan qr code",
        "qr code scanner online"
      ],
      "useCases": [
        "Decode a QR code image to see its content",
        "Read a QR code from a screenshot or photo",
        "Extract a URL, vCard, or WiFi network from a QR code",
        "Verify that a QR code points where you expect"
      ],
      "userIntents": [
        "How do I qr decoder?",
        "QR Code Decoder online",
        "Free qr decoder no signup",
        "QR Code Decoder that doesn't upload my data",
        "QR Code Decoder in my browser",
        "Best qr code reader compared"
      ],
      "privacy": "The image is decoded in your browser. Nothing is uploaded to a server.",
      "related": [
        "qr-code-generator",
        "image-to-base64",
        "url-encoder",
        "url-decoder",
        "base64-encoder",
        "base64-decoder",
        "image-color-picker"
      ],
      "inputs": "An image file (JPG, PNG, WebP, HEIC, or other)",
      "outputs": "A decoded string (Base64, URL, HTML entity, JWT, etc.)",
      "howTo": [
        {
          "title": "Choose an image",
          "detail": "JPG, PNG, or WebP. Screenshots and photos both work."
        },
        {
          "title": "See the result",
          "detail": "The decoded text appears with a label for the payload type (URL, email, Wi-Fi, vCard, plain text)."
        },
        {
          "title": "Copy or open",
          "detail": "Copy the text, or open the URL directly. Wi-Fi and vCard payloads get a copy-credentials button."
        }
      ],
      "examples": [
        {
          "title": "Decode a screenshot of a QR code",
          "description": "A screenshot from a chat, an email, or a website often contains a QR code. Drop the screenshot in and get the URL or text in one click.",
          "input": "A screenshot of a QR code linking to https://example.com/signup",
          "output": "Detected: URL. Decoded: \"https://example.com/signup\". One click to copy or open."
        },
        {
          "title": "Read a Wi-Fi QR from a sticker or a card",
          "description": "Many routers, cafes, and offices print a QR code that connects a phone to Wi-Fi without typing the password. Drop the QR in and get the network name and password ready to copy.",
          "input": "A photo of a \"WIFI:T:WPA;S:CoffeeShop;P:hello123;;\" QR code",
          "output": "Detected: Wi-Fi. Network: CoffeeShop. Password: hello123."
        },
        {
          "title": "Decode a vCard QR (contact card)",
          "description": "Business cards increasingly ship as QR codes. Drop the QR in and the vCard is decoded to plain text you can save or paste into a contact manager.",
          "input": "A QR code containing a vCard with name, phone, and email",
          "output": "Detected: vCard. Decoded plain text shows the full contact block."
        }
      ],
      "faq": [
        {
          "question": "Is my image uploaded?",
          "answer": "No. The image is decoded in your browser using an in-process library. Nothing leaves the page. Close the tab when you are done and the image is gone."
        },
        {
          "question": "Which QR code formats are supported?",
          "answer": "Standard QR codes (any version, any error correction level) including the variants that encode URLs, plain text, email addresses, Wi-Fi credentials (WIFI:), vCards (BEGIN:VCARD), and most other text payloads. Micro QR codes (a much smaller variant used in some industrial labels) are not supported."
        },
        {
          "question": "Why does my QR not decode?",
          "answer": "The most common causes: low resolution (the QR is fewer than ~200 pixels wide), heavy blur, the QR is on a complex background without enough contrast, the image is rotated by a non-trivial angle, or the QR is partially cropped. Try a higher-resolution image, a straight-on photo with even lighting, and make sure all four corners of the QR are visible."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/qr-decoder.md",
      "markdownDoc": "https://uttir.com/qr-decoder.md"
    },
    {
      "slug": "text-to-speech",
      "name": "Text to Speech",
      "shortDescription": "Read any text aloud using your browser's built-in voice. Pick from the voices your operating system provides, set the speed and pitch, and click play. Free, in your browser, no upload, no signup.",
      "url": "https://uttir.com/text-to-speech",
      "categories": [
        "media-tools",
        "text-tools"
      ],
      "keywords": [
        "text to speech",
        "tts",
        "speak text",
        "read aloud",
        "voice reader",
        "text reader online",
        "speech synthesizer",
        "tts free",
        "say this out loud",
        "read text aloud"
      ],
      "useCases": [
        "Convert text to spoken audio in your browser",
        "Listen to an article or document without reading it",
        "Use a custom voice, rate, and pitch",
        "Download the audio as a file (where supported)"
      ],
      "userIntents": [
        "How do I text to speech?",
        "Text to Speech online",
        "Free text to speech no signup",
        "Text to Speech that doesn't upload my data",
        "Text to Speech in my browser",
        "Best tts compared"
      ],
      "privacy": "Speech is generated by your browser using its built-in voice. The text never leaves the page.",
      "related": [
        "character-counter",
        "word-counter",
        "reading-time",
        "reading-level",
        "paragraph-counter",
        "sentence-counter",
        "ocr"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A random selection from the input list",
      "howTo": [
        {
          "title": "Pick a voice",
          "detail": "The dropdown shows every voice your browser exposes. Voices vary by OS — try a few to find the one you like."
        },
        {
          "title": "Paste your text",
          "detail": "A few sentences to several pages. The browser chunks very long text into separate utterances automatically."
        },
        {
          "title": "Set speed and pitch",
          "detail": "Most voices are tuned for normal reading; 1.0× is the right starting point. Lower the speed for technical content; raise the pitch for a friendlier delivery."
        },
        {
          "title": "Play / pause / stop",
          "detail": "Standard transport controls. The progress bar shows where the speech is."
        }
      ],
      "examples": [
        {
          "title": "Proofread an article by listening",
          "description": "Hearing your own writing read back is the fastest way to spot awkward sentences, run-ons, and missing words. Paste a draft, pick a clear voice, and play at 0.9× so the cadence feels natural.",
          "input": "Any draft text — a blog post, an essay, a chapter",
          "output": "Audio playback in the browser. No file is generated, no upload."
        },
        {
          "title": "Listen to a long article while you work",
          "description": "Paste an article and let it play in the background. Pause anytime with the stop button. Adjust the speed up to 1.5× for skimming, down to 0.7× for dense material.",
          "input": "A 2,000-word article",
          "output": "~10 minutes of audio at default speed. Save your eyes for the work that needs them."
        },
        {
          "title": "Test a non-English voice",
          "description": "Most operating systems ship with voices for several languages. Paste text in another language and pick the matching voice to hear it read by a native speaker.",
          "input": "A short paragraph in the target language",
          "output": "Audio in the chosen voice. Useful for pronunciation checks and language learning."
        }
      ],
      "faq": [
        {
          "question": "Is my text uploaded?",
          "answer": "No. The browser's built-in speech engine generates the audio locally. The text never leaves the page. For text you would not paste into a server — a draft, a private message, a contract — this is the safe option."
        },
        {
          "question": "Which voice will I get?",
          "answer": "It depends on your operating system and browser. macOS and iOS ship a high-quality set of system voices (Samantha, Daniel, Karen, and many more). Windows ships Microsoft voices. Linux uses espeak. Android uses Google TTS. Chrome on any platform adds the Google online voices. The dropdown shows whatever your browser exposes."
        },
        {
          "question": "Can I download the audio?",
          "answer": "Not in this version. The tool plays audio in the page; it does not produce a file. If you need an MP3, a dedicated TTS tool with a downloadable output is the right pick."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/text-to-speech.md",
      "markdownDoc": "https://uttir.com/text-to-speech.md"
    },
    {
      "slug": "headline-analyzer",
      "name": "Headline Analyzer",
      "shortDescription": "Score any headline on word count, character count, power words, sentiment, and clarity. Get a letter grade and a per-dimension tip. Free, in your browser, no upload.",
      "url": "https://uttir.com/headline-analyzer",
      "categories": [
        "seo-tools",
        "text-tools",
        "developer-tools"
      ],
      "keywords": [
        "headline analyzer",
        "headline score",
        "blog headline analyzer",
        "title analyzer",
        "headline tester",
        "seo title checker",
        "headline grader",
        "headline score",
        "blog title analyzer",
        "email subject analyzer"
      ],
      "useCases": [
        "Analyse a headline for length, word balance, and emotional impact",
        "See a score for the headline’s likely engagement",
        "Compare two headlines side by side",
        "Get suggestions for improving the headline"
      ],
      "userIntents": [
        "How do I headline analyzer?",
        "Headline Analyzer online",
        "Free headline analyzer no signup",
        "Headline Analyzer that doesn't upload my data",
        "Headline Analyzer in my browser",
        "Best headline score compared"
      ],
      "privacy": "Your headline is scored in your browser. Nothing is uploaded to a server.",
      "related": [
        "meta-tag-generator",
        "serp-preview",
        "meta-description-checker",
        "title-length-checker",
        "keyword-density-checker",
        "reading-level",
        "word-counter"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A count (words, characters, sentences, paragraphs)",
      "howTo": [
        {
          "title": "Type or paste a headline",
          "detail": "A few words. The score updates as you type."
        },
        {
          "title": "Read the overall grade",
          "detail": "Letter grade A+ through F. The breakdown is below."
        },
        {
          "title": "Improve the lowest dimension",
          "detail": "Each dimension has a one-line tip explaining what to change."
        }
      ],
      "examples": [
        {
          "title": "A blog post title",
          "description": "Pick a title that lands in the SEO sweet spot: 6-12 words, 50-70 characters, with one or two power words and at least one specific noun or number.",
          "input": "How to write a headline that gets clicks",
          "output": "Grade B or A. Word count 8 (good). Power words: 0 (consider one). Specific: 1 (good)."
        },
        {
          "title": "An email subject line",
          "description": "Email subject lines truncate around 50 characters on most clients. Aim for 30-50 characters, with one emotional trigger word.",
          "input": "Your weekly digest is here",
          "output": "Grade C. Word count 5 (good). No power words. No specific (no number, name, or outcome)."
        },
        {
          "title": "A YouTube video title",
          "description": "YouTube titles are the single biggest driver of click-through rate. Aim for under 60 characters with one emotional or curiosity word.",
          "input": "I tried X for 30 days — here is what happened",
          "output": "Grade B. Word count 11 (good). Specific: 3 (X, 30 days, \"what happened\"). No power words."
        }
      ],
      "faq": [
        {
          "question": "What does the score actually measure?",
          "answer": "Eight dimensions: word count, character count, common-vs-specific word balance, presence of power words, presence of emotional words, overall sentiment, and clarity (no repeated words). Each gets a 0-100 score and a letter grade. The overall grade is a weighted average."
        },
        {
          "question": "What is a \"power word\"?",
          "answer": "A word that carries emotional weight — \"amazing\", \"shocking\", \"free\", \"essential\", \"irresistible\". One or two in a headline is good. Three or more reads as clickbait and erodes trust."
        },
        {
          "question": "Why is character count important?",
          "answer": "Google typically displays up to 60 characters of a page title. Twitter truncates around 280 characters. Email subject lines truncate around 50-70 characters. The character-count score rewards headlines that fit the target without being truncated."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/headline-analyzer.md",
      "markdownDoc": "https://uttir.com/headline-analyzer.md"
    },
    {
      "slug": "cofounder-equity",
      "name": "Co-founder Equity Calculator",
      "shortDescription": "Split startup equity between co-founders, see the 4-year vesting schedule with 1-year cliff, and simulate dilution from a future funding round. Free, in your browser, no upload.",
      "url": "https://uttir.com/cofounder-equity",
      "categories": [
        "calculators",
        "generators"
      ],
      "keywords": [
        "cofounder equity calculator",
        "equity calculator",
        "startup equity",
        "cofounder equity split",
        "founder vesting",
        "vesting schedule",
        "equity dilution",
        "safe dilution",
        "cap table",
        "founder split calculator"
      ],
      "useCases": [
        "Use for cofounder equity calculator",
        "Use for equity calculator",
        "Use for startup equity",
        "Use for cofounder equity split",
        "Use for founder vesting"
      ],
      "userIntents": [
        "How do I cofounder equity calculator?",
        "Co-founder Equity Calculator online",
        "Free cofounder equity calculator no signup",
        "Co-founder Equity Calculator that doesn't upload my data",
        "Co-founder Equity Calculator in my browser",
        "Best equity calculator compared"
      ],
      "privacy": "Your team and dilution numbers stay in your browser. Nothing is uploaded to a server.",
      "related": [
        "loan-calculator",
        "mortgage-calculator",
        "break-even-calculator",
        "vat-calculator",
        "salary-calculator",
        "percentage-calculator",
        "currency-converter"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Add co-founders",
          "detail": "Name and equity percent. The split must add up to 100% for the calculator to work."
        },
        {
          "title": "Set the vesting terms",
          "detail": "Default: 4 years total, 1-year cliff, monthly. Adjust per founder if needed."
        },
        {
          "title": "Optionally add a funding round",
          "detail": "Pre-money, raise, and (for SAFEs) cap. The dilution simulator estimates post-money ownership."
        }
      ],
      "examples": [
        {
          "title": "Two co-founders, 50/50 split",
          "description": "The classic equal split. Both vest 4 years with a 1-year cliff, so neither can leave with half the company after 3 months.",
          "input": "Founder A: 50%, Founder B: 50%",
          "output": "Each founder vests 25% after year 1, then ~2% per month. Total vested at month 48: 100%."
        },
        {
          "title": "Three-person team, weighted split",
          "description": "The technical co-founder gets more, the part-timer gets less, the business co-founder is in the middle. Adjust until the team agrees.",
          "input": "Tech: 45%, Biz: 35%, Part-time: 20%",
          "output": "At a $5M pre-money, $1M raise, the cap table shifts: Tech 36%, Biz 28%, Part-time 16%, Investors 20%."
        },
        {
          "title": "Simulating a SAFE round",
          "description": "You have $200K from a SAFE at a $5M cap. A year later, you raise a $2M priced round at $10M pre. See the founder dilution.",
          "input": "SAFE $200K @ $5M cap + Priced round $2M @ $10M pre",
          "output": "SAFE converts at 4% of the cap table, priced round adds 20%, founders are diluted accordingly."
        }
      ],
      "faq": [
        {
          "question": "Is my cap table uploaded?",
          "answer": "No. The math runs in your browser. The names, equity percentages, vesting dates, and dilution numbers never leave the page."
        },
        {
          "question": "What vesting terms should I use?",
          "answer": "The standard for US tech startups is 4 years total with a 1-year cliff, monthly vesting after the cliff. Some teams use 3 years, or 6-month cliffs, or no cliff. The calculator lets you change these per founder."
        },
        {
          "question": "What is a cliff?",
          "answer": "The cliff is the minimum time a co-founder has to stay before any equity vests. With a 1-year cliff, a co-founder who leaves in month 6 walks away with 0%. At month 12, 25% vests in one tranche (1/4 of the total). After the cliff, the remaining equity vests monthly."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/cofounder-equity.md",
      "markdownDoc": "https://uttir.com/cofounder-equity.md"
    },
    {
      "slug": "writing-style",
      "name": "Writing Style Analyzer",
      "shortDescription": "Highlight adverbs, passive voice, complex words, and hard sentences in your text. Paste any draft and see the issues in real time. Free, in your browser, no upload.",
      "url": "https://uttir.com/writing-style",
      "categories": [
        "text-tools",
        "developer-tools"
      ],
      "keywords": [
        "writing style analyzer",
        "hemingway editor",
        "writing analyzer",
        "passive voice detector",
        "adverb detector",
        "writing checker",
        "readability editor",
        "text editor online",
        "prose editor",
        "sentence clarity"
      ],
      "useCases": [
        "Use for writing style analyzer",
        "Use for hemingway editor",
        "Use for writing analyzer",
        "Use for passive voice detector",
        "Use for adverb detector"
      ],
      "userIntents": [
        "How do I writing style analyzer?",
        "Writing Style Analyzer online",
        "Free writing style analyzer no signup",
        "Writing Style Analyzer that doesn't upload my data",
        "Writing Style Analyzer in my browser",
        "Best hemingway editor compared"
      ],
      "privacy": "Your text is analyzed in your browser. Nothing is uploaded to a server.",
      "related": [
        "reading-level",
        "word-counter",
        "character-counter",
        "reading-time",
        "sentence-counter",
        "paragraph-counter",
        "sentence-length-checker"
      ],
      "inputs": "A text input (typed or pasted)",
      "outputs": "A live timer or stopwatch",
      "howTo": [
        {
          "title": "Paste your draft",
          "detail": "Plain text. The score updates as you type."
        },
        {
          "title": "Read the highlights",
          "detail": "Adverbs in blue, passive voice in amber, complex words in purple, hard sentences in red."
        },
        {
          "title": "Rewrite and re-check",
          "detail": "Cut the adverbs, switch to active voice, shorten the long sentences."
        }
      ],
      "examples": [
        {
          "title": "A draft blog post",
          "description": "Paste a draft, see the adverbs, see the long sentences, see the passive voice. Rewrite the worst offenders and re-check.",
          "input": "The implementation was quickly completed by the team, but unfortunately the documentation was not really updated.",
          "output": "Adverbs: \"quickly\", \"unfortunately\", \"really\" · Passive: \"was completed\", \"was updated\" · Complex: \"implementation\", \"documentation\""
        },
        {
          "title": "A marketing email",
          "description": "Marketing copy should be punchy. The analyzer flags long sentences and weak verbs so the draft reads tighter before send.",
          "input": "In order to maximize the impact of your campaign, it is recommended that you carefully consider the timing, the audience, and the messaging.",
          "output": "Sentence flagged as hard (28 words, 1.8 syllables/word). \"Recommended\" + \"is\" passive. Rewrite: \"To maximize impact, pick your timing, audience, and messaging carefully.\""
        }
      ],
      "faq": [
        {
          "question": "Is my text uploaded?",
          "answer": "No. The text is parsed and analyzed in your browser. Nothing leaves the page. For a draft you would not paste into a server — a private email, a confidential memo — this is the safe option."
        },
        {
          "question": "What does each color mean?",
          "answer": "Adverbs (words ending in -ly) are blue. Passive voice is amber. Complex words (3+ syllables) are purple. Hard sentences (over 22 words or 1.7+ syllables per word) are red. Very hard sentences (over 30 words or 2.0+ syllables per word) are darker red. Plain text is unmarked."
        },
        {
          "question": "Are all adverbs bad?",
          "answer": "No. Some adverbs are necessary (\"only\", \"almost\", \"just\") and some are stylistic choices. The tool flags every adverb so you can see them — then you decide which to keep and which to cut. Hemingway's rule of thumb: if you can cut the adverb and the sentence still reads correctly, cut it."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/writing-style.md",
      "markdownDoc": "https://uttir.com/writing-style.md"
    },
    {
      "slug": "business-name",
      "name": "Business Name Generator",
      "shortDescription": "Generate brand-name ideas for your startup, product, or project. Pick a style (modern, classic, playful, technical) and get a batch of names with the .com domain suggestion. Free, in your browser, no upload.",
      "url": "https://uttir.com/business-name",
      "categories": [
        "generators",
        "developer-tools"
      ],
      "keywords": [
        "business name generator",
        "startup name generator",
        "company name ideas",
        "brand name generator",
        "project name generator",
        "random business name",
        "name ideas for business",
        "startup name ideas",
        "product name generator",
        "app name generator"
      ],
      "useCases": [
        "Generate a business or product name from a description",
        "See available domain name suggestions for each idea",
        "Save favourite names for later review",
        "Filter by style (modern, classic, playful, technical)"
      ],
      "userIntents": [
        "How do I business name generator?",
        "Business Name Generator online",
        "Free business name generator no signup",
        "Business Name Generator that doesn't upload my data",
        "Business Name Generator in my browser",
        "Best startup name generator compared"
      ],
      "privacy": "Names are generated in your browser. Nothing is uploaded to a server.",
      "related": [
        "lorem-ipsum-generator",
        "uuid-generator",
        "random-number-generator",
        "random-picker",
        "whois-lookup",
        "dns-lookup",
        "password-generator"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A generated value (UUID, password, QR code, palette, etc.)",
      "howTo": [
        {
          "title": "Pick a style",
          "detail": "Modern, classic, playful, technical, or any."
        },
        {
          "title": "Generate a batch",
          "detail": "10-20 names at a time. The pattern is random within the style."
        },
        {
          "title": "Shortlist and verify",
          "detail": "Pick your favorites, then check the domain with the WHOIS Lookup tool."
        }
      ],
      "examples": [
        {
          "title": "A tech startup name",
          "description": "Use the \"Technical\" or \"Modern\" style. Look for short, punchy names that hint at what the product does.",
          "input": "Style: Technical, 10 names",
          "output": "Names like \"Cipher Stack\", \"Apex Cloud\", \"Vector Mesh\", \"Signal Forge\", \"Kernel Stream\""
        },
        {
          "title": "A creative agency or studio",
          "description": "Use \"Modern\" or \"Playful\". Look for names that suggest taste, craft, or personality.",
          "input": "Style: Modern, 10 names",
          "output": "Names like \"Bloom Studio\", \"Lumen Field\", \"Quill & Drift\", \"North & Forge\""
        },
        {
          "title": "A consumer brand or product",
          "description": "Use \"Playful\" for friendly, memorable names that are easy to say out loud.",
          "input": "Style: Playful, 10 names",
          "output": "Names like \"Bumble Noodle\", \"Cosmic Cookie\", \"Jolly Pickle\", \"Sunny Waffle\""
        }
      ],
      "faq": [
        {
          "question": "Are the names checked for domain availability?",
          "answer": "No — that would require a network call for every suggestion, and most short names are already taken. Pick your favorites and run them through the WHOIS Lookup tool to check .com, .io, .co, and other extensions."
        },
        {
          "question": "Are the names checked for trademark conflicts?",
          "answer": "No. Trademark checking requires a paid database search and the results are jurisdiction-specific. Before you commit to a name, do a USPTO search (or your local trademark office) and a Google search. The tool is for brainstorming, not legal clearance."
        },
        {
          "question": "How does the generator work?",
          "answer": "It pulls from curated adjective and noun word lists (modern, classic, playful, technical) and combines them with a few composition patterns: two-word, three-word, prefix + noun, spliced compound, and single-word. The output is random within the chosen style."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/business-name.md",
      "markdownDoc": "https://uttir.com/business-name.md"
    },
    {
      "slug": "random-name",
      "name": "Random Name Generator",
      "shortDescription": "Generate random first and last names for mockups, test data, or placeholder content. Filter by gender (any, male, female, neutral) and region (English, Spanish, French, German, Japanese, Chinese, Arabic). Free, in your browser, no upload.",
      "url": "https://uttir.com/random-name",
      "categories": [
        "generators",
        "developer-tools"
      ],
      "keywords": [
        "random name generator",
        "fake name generator",
        "name generator",
        "random names",
        "mockup names",
        "test data names",
        "placeholder names",
        "ui names",
        "design names",
        "fake user names"
      ],
      "useCases": [
        "Use for random name generator",
        "Use for fake name generator",
        "Use for name generator",
        "Use for random names",
        "Use for mockup names"
      ],
      "userIntents": [
        "How do I random name generator?",
        "Random Name Generator online",
        "Free random name generator no signup",
        "Random Name Generator that doesn't upload my data",
        "Random Name Generator in my browser",
        "Best fake name generator compared"
      ],
      "privacy": "Names are generated in your browser. Nothing is uploaded to a server.",
      "related": [
        "lorem-ipsum-generator",
        "business-name",
        "uuid-generator",
        "random-number-generator",
        "random-picker",
        "password-generator"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A generated value (UUID, password, QR code, palette, etc.)",
      "howTo": [
        {
          "title": "Pick a gender and a region",
          "detail": "Any / male / female / neutral × 7 regions. The default is \"any\" for both."
        },
        {
          "title": "Generate a batch",
          "detail": "5-50 names at a time. Click again to regenerate."
        },
        {
          "title": "Copy what you need",
          "detail": "Click the copy button on any single name, or copy the whole list."
        }
      ],
      "examples": [
        {
          "title": "Mockup data for a user list",
          "description": "Need 20 plausible names for a screenshot or a test database? Pick \"Any / Any\", set the count to 20, copy the list.",
          "input": "Gender: Any, Region: Any, Count: 20",
          "output": "A mix of male, female, and neutral first names from English, Spanish, French, German, Japanese, Chinese, and Arabic traditions."
        },
        {
          "title": "Localized sample for a Spanish-language demo",
          "description": "For a Spanish-language UI demo, the names should look Spanish, not a mix. Pick Region: Spanish to get only Spanish first and last names.",
          "input": "Gender: Any, Region: Spanish, Count: 10",
          "output": "Names like \"Carmen Ruiz\", \"Javier López\", \"Sofía Marín\" — all with Spanish first + last names."
        }
      ],
      "faq": [
        {
          "question": "Is the data uploaded?",
          "answer": "No. The names are picked from a static list bundled with the page. Nothing is sent to a server."
        },
        {
          "question": "Where do the names come from?",
          "answer": "Public-domain name lists curated from common first-and-last combinations across the supported regions. Not tied to any real person."
        },
        {
          "question": "Can I use these names in a real product?",
          "answer": "They are common names that real people have. For a test database, fine. For a published demo, prefer placeholder names that are obviously fake (Test User, Sample Person) so no one is impersonated by mistake."
        }
      ],
      "addedAt": null,
      "popular": false,
      "skillDoc": "https://uttir.com/.well-known/skills/random-name.md",
      "markdownDoc": "https://uttir.com/random-name.md"
    },
    {
      "slug": "signature",
      "name": "Signature Maker",
      "shortDescription": "Draw a handwritten signature in your browser with mouse, trackpad, or touch. Pick a pen color, set the stroke width, and download the result as a transparent PNG. Free, no upload.",
      "url": "https://uttir.com/signature",
      "categories": [
        "image-tools",
        "generators"
      ],
      "keywords": [
        "signature maker",
        "electronic signature",
        "digital signature",
        "online signature",
        "create signature",
        "signature generator",
        "handwritten signature",
        "e signature",
        "sign online",
        "png signature"
      ],
      "useCases": [
        "Create a handwritten signature for documents and emails",
        "Draw a signature with mouse, trackpad, or touch",
        "Download the signature as a transparent PNG",
        "Save a signature for repeated use"
      ],
      "userIntents": [
        "How do I signature maker?",
        "Signature Maker online",
        "Free signature maker no signup",
        "Signature Maker that doesn't upload my data",
        "Signature Maker in my browser",
        "Best electronic signature compared"
      ],
      "privacy": "Your signature is drawn in the browser. Nothing is uploaded to a server.",
      "related": [
        "meme-generator",
        "image-resizer",
        "image-cropper",
        "favicon-generator",
        "email-signature-generator",
        "image-to-base64",
        "color-picker"
      ],
      "inputs": "A color value (hex, RGB, or HSL)",
      "outputs": "A random selection from the input list",
      "howTo": [
        {
          "title": "Pick a pen color and width",
          "detail": "Black, blue, and brown are the standard picks. Width 2-4 reads like a real pen on screen."
        },
        {
          "title": "Draw your signature",
          "detail": "Mouse, trackpad, or touch. Use the stroke for a natural rhythm — small movements produce smoother curves."
        },
        {
          "title": "Download the PNG",
          "detail": "Transparent background, ready to drop into a document or an email signature."
        }
      ],
      "examples": [
        {
          "title": "Email signature",
          "description": "Make a handwritten-style signature for the bottom of your emails. Combine with the Email Signature Generator for a complete signature block.",
          "input": "Draw your signature, pick a blue pen",
          "output": "A transparent PNG you can paste at the bottom of your email."
        },
        {
          "title": "PDF signing",
          "description": "Most PDF editors let you drop a PNG signature onto a signature line. Generate the signature here, place it on the line.",
          "input": "A simple signature in black",
          "output": "A clean PNG signature, drop into the PDF editor on the signature line."
        },
        {
          "title": "Document header or business card",
          "description": "Drop the signature PNG into a design tool as a transparent overlay. It will sit on any background color or image.",
          "input": "A wide signature in dark brown",
          "output": "A transparent PNG that overlays cleanly on any background."
        }
      ],
      "faq": [
        {
          "question": "Is my signature uploaded?",
          "answer": "No. The signature is drawn into a local HTML5 canvas, exported to a PNG data URL, and downloaded. Nothing is sent to a server. For sensitive documents, this is the safe option."
        },
        {
          "question": "What is the canvas size?",
          "answer": "The default is 800×300 pixels, which gives plenty of room for a flowing signature. The PNG export is the same size. For a tiny signature, use a smaller canvas; for a long signature with flourishes, the default is fine."
        },
        {
          "question": "Is the PNG background transparent?",
          "answer": "Yes. The export uses a transparent background so the signature drops onto any color or image without a white box around it."
        }
      ],
      "addedAt": null,
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/signature.md",
      "markdownDoc": "https://uttir.com/signature.md"
    },
    {
      "slug": "typing-test",
      "name": "Typing Test",
      "shortDescription": "Test your typing speed with famous book passages. Live WPM and accuracy as you type. Cryptographically fair timer.",
      "url": "https://uttir.com/typing-test",
      "categories": [
        "text-tools",
        "generators"
      ],
      "keywords": [
        "typing test",
        "typing speed test",
        "wpm test",
        "words per minute",
        "typing practice",
        "touch typing",
        "typing accuracy"
      ],
      "useCases": [
        "Take a timed typing test (1, 2, or 5 minutes)",
        "See your WPM (words per minute) and accuracy",
        "Practise with a random text or a custom passage",
        "Track your typing speed over time"
      ],
      "userIntents": [
        "How do I typing test?",
        "Typing Test online",
        "Free typing test no signup",
        "Typing Test that doesn't upload my data",
        "Typing Test in my browser",
        "Best typing speed test compared"
      ],
      "privacy": "Your keystrokes and timing are processed entirely in your browser. Nothing is sent to a server.",
      "related": [
        "word-counter",
        "character-counter",
        "sentence-counter",
        "reading-time",
        "writing-style"
      ],
      "inputs": "A date or time value",
      "outputs": "A live timer or stopwatch",
      "howTo": [
        {
          "title": "Read the prompt",
          "detail": "A passage from a famous novel or essay appears. Take a moment to scan it."
        },
        {
          "title": "Start typing",
          "detail": "The timer starts on your first keystroke. Type at your natural pace."
        },
        {
          "title": "Read the score",
          "detail": "WPM, accuracy, elapsed time, and error count update live as you type."
        },
        {
          "title": "Try another",
          "detail": "Click \"New prompt\" for a different passage, or try to beat your previous score on the same one."
        }
      ],
      "examples": [
        {
          "title": "A typical session",
          "description": "A 60-second test with 95% accuracy on a 300-character passage.",
          "output": "About 57 WPM with 5 errors. Average adult typing speed is 40 WPM; 60+ is considered fast."
        },
        {
          "title": "What good looks like",
          "description": "WPM benchmarks for different roles.",
          "output": "Casual user: 30-40 WPM. Office worker: 50-60 WPM. Programmer: 70-90 WPM. Professional typist: 100+ WPM."
        }
      ],
      "faq": [
        {
          "question": "How is WPM calculated?",
          "answer": "WPM uses the industry-standard 5-characters-per-word convention. The score is `(correctly typed characters / 5) / minutes`. Incorrect keystrokes do not inflate the score — only the characters that match the prompt count."
        },
        {
          "question": "How is accuracy calculated?",
          "answer": "Accuracy is `correct keystrokes / total keystrokes`. Backspace corrections count as keystrokes, so they slightly lower the accuracy percentage even when you fix the error. This is the same convention used by most popular typing-test sites."
        },
        {
          "question": "Does the timer start automatically?",
          "answer": "Yes — the timer starts on your first keystroke. The first keystroke is the \"go\" signal, and the test ends when you have typed the entire prompt correctly. No manual start or stop button needed."
        }
      ],
      "addedAt": "2026-08-19",
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/typing-test.md",
      "markdownDoc": "https://uttir.com/typing-test.md"
    },
    {
      "slug": "coin-flip",
      "name": "Coin Flip",
      "shortDescription": "Flip a virtual coin or roll dice. Cryptographically fair randomness, runs in your browser, history tracked per session.",
      "url": "https://uttir.com/coin-flip",
      "categories": [
        "generators",
        "math-tools"
      ],
      "keywords": [
        "coin flip",
        "flip a coin",
        "coin toss",
        "roll a dice",
        "dice roller",
        "random coin",
        "heads or tails",
        "random dice"
      ],
      "useCases": [
        "Flip a fair coin (heads or tails) with no real coin handy",
        "Make a quick binary decision (yes/no, this/that)",
        "Generate many coin flips for a probability experiment",
        "Roll a fair, cryptographically-secure random coin flip"
      ],
      "userIntents": [
        "How do I coin flip?",
        "Coin Flip online",
        "Free coin flip no signup",
        "Coin Flip that doesn't upload my data",
        "Coin Flip in my browser",
        "Best flip a coin compared"
      ],
      "privacy": "Every flip and roll uses your browser's cryptographically-secure random number generator. Nothing is sent to a server.",
      "related": [
        "random-number-generator",
        "random-picker",
        "random-name"
      ],
      "inputs": "A user input appropriate to the tool (see the tool page for details)",
      "outputs": "A result appropriate to the tool (see the tool page for details)",
      "howTo": [
        {
          "title": "Click \"Flip the coin\"",
          "detail": "The coin rotates for a moment, then lands on heads or tails with equal probability."
        },
        {
          "title": "Pick dice type and count",
          "detail": "Choose the number of dice and the number of sides (d4, d6, d8, d10, d12, d20, d100)."
        },
        {
          "title": "Roll and read the result",
          "detail": "Each die shows its face. The total appears next to the individual rolls."
        }
      ],
      "examples": [
        {
          "title": "Quick decision",
          "description": "Heads we eat out, tails we cook at home.",
          "output": "Heads — you eat out tonight."
        },
        {
          "title": "Tabletop RPG attack roll",
          "description": "Roll 1d20 + 5 to hit.",
          "output": "Roll the d20, add 5. 18+ hits most AC values."
        },
        {
          "title": "Multiple dice",
          "description": "Roll 3d6 for a D&D ability score.",
          "output": "Sum the three results. The total is between 3 and 18, with an average of 10.5."
        }
      ],
      "faq": [
        {
          "question": "Is the coin flip really random?",
          "answer": "Yes. The result is drawn from the browser's cryptographically-secure random number generator, which is the same API used for TLS connections and password generation. The result is not based on the time of the click or any other predictable signal."
        },
        {
          "question": "What dice types are supported?",
          "answer": "d4, d6, d8, d10, d12, d20, and d100. You can roll 1-20 dice at a time. The result for each die is independent; rolling 3d6 is equivalent to rolling one d6 three times and summing the results."
        },
        {
          "question": "Why is the distribution not exactly 50/50?",
          "answer": "Over a small number of flips, the heads/tails split is unlikely to be exactly even. Over 100 flips, the split is almost always between 40/60 and 60/40; over 1,000 flips, the split is almost always between 47/53 and 53/47. The expected split is 50/50, but the observed split converges to that only over many trials."
        }
      ],
      "addedAt": "2026-08-19",
      "popular": true,
      "skillDoc": "https://uttir.com/.well-known/skills/coin-flip.md",
      "markdownDoc": "https://uttir.com/coin-flip.md"
    }
  ]
}