diff --git a/src/pages/category/[category].astro b/src/pages/category/[category].astro new file mode 100644 index 0000000..ceabfdb --- /dev/null +++ b/src/pages/category/[category].astro @@ -0,0 +1,86 @@ +--- +import { ChevronRight } from 'lucide-react'; +import Base from '@/layouts/Base.astro'; +import { tools } from '@/registry/tools'; +import { categories, categoryColors, categoryDescriptions, categorySlug } from '@/registry/categories'; +import { SITE_URL, SITE_NAME } from '@/config'; +import type { Category } from '@/types/tool'; + +export function getStaticPaths() { + return categories + .filter(category => tools.some(t => t.category === category && !t.desktopOnly)) + .map(category => ({ params: { category: categorySlug(category) }, props: { category } })); +} + +const { category } = Astro.props as { category: Category }; +const categoryTools = tools.filter(t => t.category === category && !t.desktopOnly); +const pageTitle = `${category} Tools`; +const description = categoryDescriptions[category]; +const pageUrl = new URL(`/category/${categorySlug(category)}`, SITE_URL).href; + +const breadcrumbJsonLd = { + '@context': 'https://schema.org', + '@type': 'BreadcrumbList', + itemListElement: [ + { '@type': 'ListItem', position: 1, name: 'Home', item: SITE_URL + '/' }, + { '@type': 'ListItem', position: 2, name: pageTitle, item: pageUrl }, + ], +}; +const itemListJsonLd = { + '@context': 'https://schema.org', + '@type': 'ItemList', + name: `${category} tools on ${SITE_NAME}`, + numberOfItems: categoryTools.length, + itemListElement: categoryTools.map((t, i) => ({ + '@type': 'ListItem', + position: i + 1, + name: t.name, + url: new URL(t.route, SITE_URL).href, + })), +}; +--- + + +
+ + +
+
+ +

{pageTitle}

+ ({categoryTools.length}) +
+

{description}

+
+ +
+ {categoryTools.map(tool => { + const Icon = tool.icon; + return ( + + + + + + {tool.name} + {tool.summary} + + + ); + })} +
+
+ diff --git a/src/pages/tools/[tool].astro b/src/pages/tools/[tool].astro index 0b05376..277a399 100644 --- a/src/pages/tools/[tool].astro +++ b/src/pages/tools/[tool].astro @@ -4,6 +4,8 @@ import Base from '@/layouts/Base.astro'; import ToolHost from '@/islands/ToolHost'; import ShareButton from '@/islands/share/ShareButton'; import { tools, getToolById } from '@/registry/tools'; +import { getToolSeo } from '@/registry/tool-seo'; +import { categoryColors, categorySlug } from '@/registry/categories'; import { SITE_URL, SITE_NAME } from '@/config'; export function getStaticPaths() { @@ -16,14 +18,25 @@ export function getStaticPaths() { const { toolId } = Astro.props; const tool = getToolById(toolId)!; const toolUrl = new URL(tool.route, SITE_URL).href; -// Sharper, keyword-aware description for search results. -const metaDescription = `${tool.summary}. Free, on-device, and private — runs entirely in your browser with no uploads. Part of ${SITE_NAME}.`; +const seo = getToolSeo(tool.id); + +// Authored copy where present; otherwise fall back to the registry summary. +const lead = seo?.intro ?? tool.summary; +const metaDescription = + seo?.description ?? + `${tool.summary}. Free, on-device, and private — runs entirely in your browser with no uploads. Part of ${SITE_NAME}.`; + +// Category hub (breadcrumb + related links). +const catPath = `/category/${categorySlug(tool.category)}`; +const relatedTools = tools + .filter(t => t.category === tool.category && t.id !== tool.id && !t.desktopOnly) + .slice(0, 6); const softwareJsonLd = { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: tool.name, - description: tool.summary, + description: metaDescription, applicationCategory: 'UtilitiesApplication', operatingSystem: 'Any (web browser)', url: toolUrl, @@ -37,26 +50,47 @@ const breadcrumbJsonLd = { '@type': 'BreadcrumbList', itemListElement: [ { '@type': 'ListItem', position: 1, name: 'Home', item: SITE_URL + '/' }, - { '@type': 'ListItem', position: 2, name: tool.name, item: toolUrl }, + { '@type': 'ListItem', position: 2, name: `${tool.category} Tools`, item: new URL(catPath, SITE_URL).href }, + { '@type': 'ListItem', position: 3, name: tool.name, item: toolUrl }, ], }; +const jsonLd: Record[] = [softwareJsonLd, breadcrumbJsonLd]; +if (seo?.howTo && seo.howTo.length > 0) { + jsonLd.push({ + '@context': 'https://schema.org', + '@type': 'HowTo', + name: `How to use ${tool.name}`, + step: seo.howTo.map((text, i) => ({ '@type': 'HowToStep', position: i + 1, text })), + }); +} +if (seo?.faqs && seo.faqs.length > 0) { + jsonLd.push({ + '@context': 'https://schema.org', + '@type': 'FAQPage', + mainEntity: seo.faqs.map(f => ({ + '@type': 'Question', + name: f.q, + acceptedAnswer: { '@type': 'Answer', text: f.a }, + })), + }); +} ---
diff --git a/src/registry/categories.ts b/src/registry/categories.ts index 6e499a8..94ebd05 100644 --- a/src/registry/categories.ts +++ b/src/registry/categories.ts @@ -34,3 +34,21 @@ export const categoryColors: Record = { export const categoryNotes: Partial> = { Network: 'These tools connect two devices directly (peer-to-peer). By default a minimal signaling server only introduces the devices — your media and files never pass through it — and you can switch to a fully serverless manual mode or bring your own STUN/TURN servers.', }; + +/** URL slug for a category hub page, e.g. 'PDF' → 'pdf'. */ +export function categorySlug(category: Category): string { + return category.toLowerCase(); +} + +/** SEO lead copy for each category hub page (unique, keyword-aware). */ +export const categoryDescriptions: Record = { + Dev: 'Free developer utilities that run entirely in your browser — format and validate JSON, encode Base64 and URLs, hash and diff text, generate UUIDs, and more. Nothing is uploaded.', + PDF: 'Work with PDFs privately in your browser — merge, split, compress, convert, repair, protect and edit. Your documents never leave your device, so even confidential files stay safe.', + Image: 'Edit and convert images on your device — resize, crop, compress, convert formats, remove backgrounds, upscale, blur faces, extract text and more. No uploads, no watermarks.', + Files: 'Everyday file utilities that keep your data local — archive, extract, encrypt and inspect files right in the browser with nothing sent to a server.', + Draw: 'Simple drawing and diagramming tools that run in your browser — sketch, annotate and create diagrams without an account or any upload.', + Media: 'Private audio and video utilities — convert, trim, record and transcribe media entirely on your device using on-device processing. Your recordings never leave your browser.', + Network: 'Peer-to-peer tools that connect two devices directly to transfer files or communicate — your data flows device to device, not through a server.', + Maps: 'Open-source mapping tools — convert coordinates, explore and export maps, and view GeoJSON, GPX and KML files. Built on open map data, running in your browser.', + Playground: 'Interactive playgrounds and experiments to explore and learn — all running client-side in your browser.', +}; diff --git a/src/registry/tool-seo.ts b/src/registry/tool-seo.ts new file mode 100644 index 0000000..bb5510a --- /dev/null +++ b/src/registry/tool-seo.ts @@ -0,0 +1,1279 @@ +import type { ToolSeoContent } from '@/types/tool'; + +/** + * Per-tool SEO content, keyed by tool id. Authored (not templated) so each page + * carries unique title/description + on-page copy (intro, how-to, FAQ) that also + * feeds FAQPage/HowTo structured data. Tools without an entry fall back to the + * registry name/summary. Titles include the word "Tool" (captures " tool" + * long-tail searches); descriptions/intros keep the in-browser/no-upload hook. + */ +export const toolSeo: Record = { + 'json-format': { + title: 'Free JSON Formatter Tool — Validate & Minify', + description: 'A free online JSON formatter tool to format, beautify, minify and validate JSON — 100% private. Your JSON is processed in your browser and never uploaded.', + intro: 'This free JSON formatter tool turns messy or minified JSON into clean, properly-indented, readable output — or minifies it back down for production. Everything runs on your device, so even sensitive payloads never leave your browser.', + howTo: [ + 'Paste or type your JSON into the input area.', + 'The tool validates it as you go and flags any syntax error with its location.', + 'Choose Format to pretty-print with indentation, or Minify to strip whitespace.', + 'Copy the result or download it — your data never leaves your browser.', + ], + faqs: [ + { q: 'Is my JSON data uploaded to a server?', a: 'No. All formatting, validation and minifying happens locally in your browser with JavaScript. Your JSON never leaves your device, which makes it safe for confidential or proprietary data.' }, + { q: 'Why is my JSON showing as invalid?', a: 'It means the text doesn\'t follow JSON syntax rules — commonly a missing comma, an unclosed bracket or brace, single quotes instead of double quotes, or a trailing comma. The tool points to where the problem is so you can fix it.' }, + { q: 'What\'s the difference between formatting and minifying?', a: 'Formatting adds indentation and line breaks so JSON is easy to read. Minifying removes all unnecessary whitespace to make the file as small as possible.' }, + { q: 'Does the JSON formatter work offline?', a: 'Yes. GoodWebTools is a PWA, so once the page has loaded once it keeps working with no internet connection.' }, + ], + }, + 'base64': { + title: 'Free Base64 Encode & Decode Tool Online', + description: 'A free Base64 encoder and decoder tool that converts text to Base64 and back in seconds. Everything runs in your browser, so nothing is ever uploaded.', + intro: 'This free Base64 tool encodes plain text into Base64 and decodes Base64 strings back to readable text. Type or paste your input, pick a direction, and copy the result — it all happens on your device, so nothing leaves your browser.', + howTo: [ + 'Type or paste your text into the Input box.', + 'Click \'Encode →\' to turn text into Base64, or \'← Decode\' to turn Base64 back into text.', + 'The result updates live as you edit the input.', + 'Copy the result with one click, or hit Clear to start over.', + ], + faqs: [ + { q: 'Is my text uploaded to a server when I encode or decode?', a: 'No. Encoding and decoding both run locally in your browser with JavaScript. Your input never leaves your device, so it\'s safe for private strings, tokens, or credentials.' }, + { q: 'Why do I get an \'Invalid Base64 input\' error?', a: 'That message appears when the text you\'re decoding isn\'t valid Base64 — usually because it has stray characters, is truncated, or is actually plain text. Switch to Encode if you meant to convert text into Base64.' }, + { q: 'Does it handle emoji and non-English characters?', a: 'Yes. The tool encodes full Unicode text, so emoji, accents, and non-Latin scripts round-trip correctly through encode and decode.' }, + { q: 'Does this tool work offline?', a: 'Yes. GoodWebTools is a PWA, so once the page has loaded it keeps encoding and decoding even with no internet connection.' }, + ], + }, + 'url-encode': { + title: 'Free URL Encode / Decode Tool — Online', + description: 'A free online URL encoder and decoder tool to percent-encode or decode URL components in your browser. Nothing is uploaded, so your links and query strings stay private.', + intro: 'This free URL encode / decode tool percent-encodes text so it\'s safe to drop into a link, or decodes an encoded URL back to readable characters. Paste your text, pick a direction, and copy the result — everything runs on your device, so nothing is ever uploaded.', + howTo: [ + 'Paste or type your text or URL into the input area.', + 'Click Encode to percent-encode it, or Decode to turn an encoded string back to plain text.', + 'The result updates instantly and re-runs as you keep editing the input.', + 'Copy the result with one click, or hit Clear to start over.', + ], + faqs: [ + { q: 'Is my text uploaded to a server when I encode or decode it?', a: 'No. The tool uses your browser\'s built-in encodeURIComponent and decodeURIComponent functions, so all processing happens locally. Nothing you paste ever leaves your device.' }, + { q: 'Why do I get an \'invalid input\' error when decoding?', a: 'Decoding fails when the string contains a malformed percent-escape — for example a stray % that isn\'t followed by two valid hex digits. Check that every %XX sequence is complete and try again.' }, + { q: 'What\'s the difference between encoding and decoding a URL?', a: 'Encoding replaces characters like spaces, &, ? and / with percent-escapes such as %20 so they can travel safely inside a URL. Decoding reverses that, turning the escapes back into the original readable characters.' }, + { q: 'Does the URL encoder work offline?', a: 'Yes. GoodWebTools is a PWA, so once the page has loaded once it keeps working with no internet connection.' }, + ], + }, + 'jwt-decode': { + title: 'Free JWT Decoder Tool — Read Header & Payload', + description: 'A free online JWT decoder tool to reveal a token\'s header and payload as readable JSON, in your browser. Nothing is uploaded and no signature is verified.', + intro: 'This free JWT decoder tool takes any JSON Web Token you paste in and splits it into its readable header and payload JSON so you can inspect claims like sub, exp and iat. Decoding happens entirely on your device, so even tokens from production never leave your browser.', + howTo: [ + 'Paste your JWT into the input box — it looks like three dot-separated segments.', + 'Click Decode to expand the token.', + 'Read the Header and Payload panels shown as formatted JSON.', + 'Use the copy button on either panel to grab the JSON, or Clear to start over.', + ], + faqs: [ + { q: 'Is my token sent to a server?', a: 'No. The token is split and Base64-decoded locally in your browser with JavaScript. Nothing is uploaded, so it is safe to inspect access tokens or other sensitive JWTs.' }, + { q: 'Does this verify the JWT signature?', a: 'No — this is a decoder only. It reads the header and payload but does not check the signature, so it never tells you whether a token is authentic or has been tampered with.' }, + { q: 'Why am I getting a \'not a valid JWT\' error?', a: 'A JWT needs at least two dot-separated segments (header and payload). If your input is missing a dot or isn\'t a real token, the decoder can\'t split it and will flag it.' }, + { q: 'Can I read expired tokens?', a: 'Yes. Decoding works regardless of expiry — check the exp claim in the payload to see the expiry time yourself.' }, + ], + }, + 'uuid-gen': { + title: 'Free UUID Generator Tool — Random v4 IDs', + description: 'A free online UUID generator tool to create random v4 identifiers in bulk, then copy them instantly. Generated in your browser — nothing is uploaded.', + intro: 'This free UUID generator tool creates random version 4 UUIDs on demand — pick how many you need and generate them all at once. The IDs are produced by your browser\'s built-in crypto, so nothing is sent to a server.', + howTo: [ + 'Set the Count field to how many UUIDs you want (from 1 up to 500).', + 'Click Generate to create that many random v4 UUIDs.', + 'Click the copy icon next to any single UUID to copy it on its own.', + 'Use Copy all to grab the whole list at once, one UUID per line.', + ], + faqs: [ + { q: 'Are the UUIDs generated on a server?', a: 'No. Each UUID is created locally with your browser\'s crypto.randomUUID(). Nothing is sent anywhere, so the values never leave your device.' }, + { q: 'What kind of UUIDs does this tool make?', a: 'It generates version 4 (random) UUIDs — the standard 36-character format with random bits, suitable for database keys, request IDs, and test data.' }, + { q: 'How many UUIDs can I generate at once?', a: 'Anywhere from 1 to 500 per click. Enter the count you need and press Generate; you can copy them individually or all together.' }, + { q: 'Does the UUID generator work offline?', a: 'Yes. GoodWebTools is a PWA, so once the page has loaded it keeps generating IDs with no internet connection.' }, + ], + }, + 'password-gen': { + title: 'Free Password Generator Tool — Strong & Random', + description: 'A free password generator tool that creates strong, random passwords right in your browser. Nothing is uploaded, so your passwords never leave your device.', + intro: 'This free password generator tool builds strong, random passwords to your exact spec — set the length, pick which character types to include, and copy the result. Every password is generated on your device, so it never travels over the network.', + howTo: [ + 'Set the length with the slider, or adjust the min and max character bounds.', + 'Toggle lowercase, uppercase, numbers and symbols to control which characters are used.', + 'Optionally set a minimum count of numbers or special characters, and tick \'Avoid ambiguous characters\' to skip look-alikes.', + 'Watch the strength meter, then click Copy — or the refresh icon to roll a new one.', + ], + faqs: [ + { q: 'Are the generated passwords sent anywhere?', a: 'No. Passwords are generated locally in your browser with JavaScript and are never uploaded or logged. Nothing leaves your device, so it is safe for real accounts.' }, + { q: 'How do I make a stronger password?', a: 'Increase the length and enable more character types — lowercase, uppercase, numbers and symbols. The strength meter updates live as you change the settings so you can see the effect.' }, + { q: 'What does \'avoid ambiguous characters\' do?', a: 'It excludes easily-confused look-alikes such as the letter O and zero, or lowercase l and the number 1, which makes a password easier to read and type correctly.' }, + { q: 'Does the password generator work offline?', a: 'Yes. GoodWebTools is a PWA, so once the page has loaded it keeps generating passwords with no internet connection.' }, + ], + }, + 'text-diff': { + title: 'Free Text Diff Tool — Compare Two Texts', + description: 'A free online text diff tool to compare two texts line by line and see exactly what changed. Runs 100% in your browser — nothing is ever uploaded.', + intro: 'This free text diff tool compares two blocks of text line by line and highlights every addition and removal, so you can spot exactly what changed between two versions. Paste both sides or load files from your device — everything runs locally, so even confidential text never leaves your browser.', + howTo: [ + 'Paste or type your original text on the left and the changed version on the right, or use Load file to pull each side from a file.', + 'The tool compares automatically as you type, or click Compare to run it manually.', + 'Read the result: red minus lines are in the original only, green plus lines are in the changed version only, and dots are unchanged.', + 'Switch between Unified and Split (side-by-side) views to suit how you read.', + 'Copy the diff or download it as diff.txt — your text never leaves your browser.', + ], + faqs: [ + { q: 'Is my text uploaded to a server?', a: 'No. The comparison runs entirely in your browser with JavaScript, so both texts stay on your device. That makes it safe for private code, contracts or notes.' }, + { q: 'What do the colors and symbols mean?', a: 'A red line marked with a minus exists only in the original, a green line marked with a plus exists only in the changed version, and a dotted line is identical in both. The header also counts how many lines were added or removed.' }, + { q: 'Can I compare whole files instead of pasting?', a: 'Yes. Each side has a Load file button that accepts common text formats like .txt, .md, .json, .csv, .log and source code files, filling that side for you.' }, + { q: 'What is the difference between Unified and Split view?', a: 'Unified stacks all changes in one column like a patch, while Split shows the original and changed text side by side like GitHub or GitLab. You can toggle between them at any time.' }, + ], + }, + 'json-compare': { + title: 'Free JSON Compare Tool — Deep Diff Objects', + description: 'A free online JSON compare tool to deep-diff two objects and spot every difference — 100% private. Your JSON is processed in your browser and never uploaded.', + intro: 'This free JSON compare tool takes two JSON objects and tells you whether they are structurally identical, listing every difference by path when they aren\'t. Property order is ignored, and everything runs on your device so even sensitive payloads never leave your browser.', + howTo: [ + 'Paste your first JSON into the left box and your second JSON into the right box.', + 'Each side is validated as you type and shows a green checkmark or the exact syntax error.', + 'Read the verdict — Equal, or Not Equal with a count of differences.', + 'Scan the differences list, where each mismatch is shown by its path and value.', + 'Toggle \'Ignore array order\' to treat arrays as sets or compare them position by position.', + ], + faqs: [ + { q: 'Is my JSON uploaded to a server to compare it?', a: 'No. Both objects are parsed and compared locally in your browser with JavaScript. Nothing is sent anywhere, so it\'s safe for confidential or proprietary data.' }, + { q: 'Does property order affect the comparison?', a: 'No. The tool compares structure and values, not key order, so two objects with the same keys in a different order are reported as equal.' }, + { q: 'What does \'Ignore array order\' do?', a: 'When it\'s on, arrays are compared like sets — the same items in any order count as equal. Turn it off to compare arrays strictly by position and flag differences per index.' }, + { q: 'Why does it say my JSON is invalid?', a: 'One side doesn\'t follow JSON syntax — often a missing comma, an unclosed bracket, single quotes, or a trailing comma. The tool shows the parser\'s error message so you can fix it.' }, + ], + }, + 'csv-json': { + title: 'Free CSV to JSON Tool — Convert Both Ways', + description: 'A free online CSV to JSON tool to convert data both directions with any delimiter — 100% private. Everything runs in your browser and nothing is uploaded.', + intro: 'This free CSV ↔ JSON tool converts a table of comma-, semicolon-, tab- or pipe-separated values into clean JSON, or turns a JSON array back into CSV. Paste your data or load a .csv, .tsv or .json file, and it all happens on your device — nothing is sent to a server.', + howTo: [ + 'Paste your CSV or JSON into the input area, or click Load .csv / .json file to open one.', + 'Pick the delimiter your data uses — Comma, Semicolon, Tab or Pipe.', + 'Click CSV → JSON or JSON → CSV; the result updates live as you edit.', + 'Review the table preview, then copy the result or download it as .json / .csv.', + ], + faqs: [ + { q: 'Is my data uploaded when I convert CSV to JSON?', a: 'No. The conversion runs entirely in your browser with JavaScript, so your rows and fields never leave your device. That makes it safe for spreadsheets containing private or business data.' }, + { q: 'Which delimiters can it handle?', a: 'You can choose comma, semicolon, tab or pipe. Loading a .tsv file automatically switches the delimiter to tab, and .json files convert straight to CSV.' }, + { q: 'Can I convert JSON back into a spreadsheet file?', a: 'Yes. Choose JSON → CSV to turn a JSON array of objects into delimited rows you can download as a .csv and open in Excel, Google Sheets or Numbers.' }, + { q: 'Why is my conversion failing?', a: 'Usually the input doesn\'t match the direction or delimiter selected — for example JSON that isn\'t a valid array, or CSV with the wrong separator chosen. The tool shows the error so you can fix it.' }, + ], + }, + 'json-yaml': { + title: 'Free JSON to YAML Converter Tool — Both Ways', + description: 'A free online tool to convert JSON to YAML and YAML back to JSON in one click. It runs entirely in your browser, so your config data is never uploaded anywhere.', + intro: 'This free JSON ↔ YAML converter tool turns JSON into clean YAML, or parses YAML back into valid JSON, so you can move config and data between the two formats without hand-editing. Everything is converted on your device, so nothing you paste ever leaves your browser.', + howTo: [ + 'Paste or type your JSON or YAML into the input box, or load a .json/.yaml/.yml file.', + 'Click JSON → YAML to convert one way, or YAML → JSON to convert the other.', + 'Fix any syntax problem the tool flags, and it re-converts as you edit.', + 'Copy the result or download it as a converted file — your data never leaves your browser.', + ], + faqs: [ + { q: 'Is my JSON or YAML uploaded to a server?', a: 'No. The conversion runs locally in your browser with JavaScript, so your config and data stay on your device. That makes it safe for secrets, credentials or internal config files.' }, + { q: 'Can it convert in both directions?', a: 'Yes. Use the JSON → YAML button to turn JSON into YAML, and the YAML → JSON button to parse YAML back into valid JSON. Loading a .yaml file auto-converts it to JSON.' }, + { q: 'Why does my YAML or JSON show an error?', a: 'It means the input doesn\'t parse — commonly bad indentation or tabs in YAML, or a missing comma, quote or bracket in JSON. The tool reports the problem so you can correct it.' }, + { q: 'Does the converter work offline?', a: 'Yes. GoodWebTools is a PWA, so once the page has loaded it keeps converting with no internet connection.' }, + ], + }, + 'json-xml': { + title: 'Free JSON to XML Tool — Convert Both Ways', + description: 'A free online tool to convert JSON to XML and XML back to JSON in one click, then copy or download. Everything runs in your browser and nothing is uploaded.', + intro: 'This free JSON to XML tool converts data both ways: paste JSON to get clean XML, or paste XML to get structured JSON. It all runs on your device, so even private payloads never leave your browser.', + howTo: [ + 'Paste or type your JSON or XML into the input box, or use Load file to open a .json or .xml file.', + 'Click JSON → XML or XML → JSON to pick the direction you want.', + 'Watch the converted result appear, syntax-highlighted, as you edit.', + 'Copy the output or download it — your data never leaves your browser.', + ], + faqs: [ + { q: 'Is my data uploaded when I convert JSON and XML?', a: 'No. The conversion runs entirely in your browser with JavaScript. Nothing is sent to a server, so it\'s safe for confidential or internal data.' }, + { q: 'Can I convert XML back into JSON?', a: 'Yes. The tool works in both directions — click XML → JSON to turn XML into structured JSON, or JSON → XML to go the other way.' }, + { q: 'Why does my input show a conversion error?', a: 'It usually means the input isn\'t valid for the source format — for example malformed JSON syntax or an unclosed XML tag. Fix the flagged issue and the result updates automatically.' }, + { q: 'Does the converter work offline?', a: 'Yes. GoodWebTools is a PWA, so once the page has loaded it keeps converting with no internet connection.' }, + ], + }, + 'json-toml': { + title: 'Free JSON to TOML Converter Tool Online', + description: 'A free JSON to TOML converter tool that turns JSON into TOML and back both ways. Runs entirely in your browser, so your config data is never uploaded.', + intro: 'This free JSON ↔ TOML tool converts JSON into TOML and TOML back into JSON, so you can move config between formats in a click. Paste text or load a file, pick a direction, and copy or download the result — all processed on your device.', + howTo: [ + 'Paste JSON or TOML into the Input box, or use \'Load JSON / TOML file\' to open one from your computer.', + 'Click \'JSON → TOML\' or \'TOML → JSON\' to convert in that direction.', + 'Loading a .toml file auto-converts to JSON; a .json file auto-converts to TOML.', + 'Copy the highlighted result or download it as a file — invalid input shows a clear error instead.', + ], + faqs: [ + { q: 'Is my config data sent to a server?', a: 'No. The conversion between JSON and TOML runs entirely in your browser. Your data stays on your device, which makes it safe for private or proprietary configuration files.' }, + { q: 'Why is my conversion failing?', a: 'It usually means the input isn\'t valid for the direction you picked — for example malformed JSON syntax, or TOML that doesn\'t parse. The tool shows the parser\'s error message so you can find the issue.' }, + { q: 'Can I load a file instead of pasting?', a: 'Yes. Use the \'Load JSON / TOML file\' button to open a .json or .toml file. The tool detects the type and converts it to the other format automatically.' }, + { q: 'Does the converter work offline?', a: 'Yes. As a PWA, GoodWebTools keeps working once loaded, so you can convert JSON and TOML with no internet connection.' }, + ], + }, + 'markdown': { + title: 'Free Markdown Preview Tool — Live Editor', + description: 'A free online Markdown preview tool with a live side-by-side editor. Type Markdown, see rendered HTML instantly — all in your browser, with nothing uploaded.', + intro: 'This free Markdown preview tool renders your Markdown to formatted HTML the moment you type, with the editor on the left and a live preview on the right. Everything runs on your device and the output is sanitized locally, so nothing you write is ever uploaded.', + howTo: [ + 'Type or paste your Markdown into the editor on the left.', + 'Watch the formatted preview update live on the right pane.', + 'Use standard Markdown — headings, bold, lists, links and inline code all render.', + 'Copy the rendered text straight from the preview when you\'re done.', + ], + faqs: [ + { q: 'Is my Markdown uploaded anywhere?', a: 'No. The Markdown is parsed and rendered entirely in your browser with JavaScript, and the HTML is sanitized locally before display. Your text never leaves your device.' }, + { q: 'Which Markdown features are supported?', a: 'It uses the marked parser, so common Markdown works — headings, bold and italic, bullet and numbered lists, links, blockquotes, and inline or fenced code.' }, + { q: 'Is the rendered HTML safe?', a: 'Yes. Output is run through DOMPurify in your browser, which strips unsafe scripts and markup so the preview can\'t run malicious code.' }, + { q: 'Does the Markdown preview work offline?', a: 'Yes. GoodWebTools is a PWA, so once the page has loaded once it keeps working with no internet connection.' }, + ], + }, + 'qr-gen': { + title: 'Free QR Code Generator Tool — Text or URL', + description: 'A free online QR code generator tool to turn any text or URL into a scannable QR code, in your browser. Download as PNG, SVG, JPEG, WebP or AVIF — nothing uploaded.', + intro: 'This free QR code generator tool turns any text or link you type into a crisp, scannable QR code you can download or copy. It renders live as you type and runs entirely on your device, so your content never leaves your browser.', + howTo: [ + 'Type or paste the text or URL you want to encode — the QR code updates instantly.', + 'Pick an error-correction level (Low to High) for more resilience to damage or scaling.', + 'Click Download and choose a format: PNG, JPEG, WebP, AVIF or SVG.', + 'Or copy the QR image to your clipboard, or send it to the annotator to edit.', + ], + faqs: [ + { q: 'Is my text or URL uploaded anywhere?', a: 'No. The QR code is generated locally in your browser with JavaScript. Your text or link never leaves your device, so it is safe for private URLs and data.' }, + { q: 'Which download formats are available?', a: 'You can save as PNG, JPEG, WebP or SVG, plus AVIF when your browser supports it. SVG is a vector format that stays sharp at any size.' }, + { q: 'What does the error-correction level do?', a: 'Higher levels add redundancy so the code still scans if part of it is dirty, damaged or covered by a logo — at the cost of a denser pattern. Medium is a good default.' }, + { q: 'My text won\'t fit — why?', a: 'QR codes have a capacity limit. If you see \'text too long\', shorten the content or use a link instead of a full block of text.' }, + ], + }, + 'qr-read': { + title: 'Free QR Code Reader Tool — Decode from Image', + description: 'A free online QR code reader tool that decodes a QR from any image and copies the text or link. It runs in your browser — the image is never uploaded.', + intro: 'This free QR code reader tool pulls the hidden text or URL out of any QR image — just drop a photo or screenshot and read the decoded content. The decoding happens entirely in your browser, so the image stays on your device.', + howTo: [ + 'Drop a QR image onto the box, click to browse for a file, or paste one with Ctrl/Cmd+V.', + 'The tool decodes the QR code and shows its content below.', + 'If the content is a link it appears as a clickable URL; otherwise it shows as plain text.', + 'Click Copy to put the decoded content on your clipboard.', + ], + faqs: [ + { q: 'Is my QR image uploaded to a server?', a: 'No. The image is read and decoded locally in your browser with JavaScript, so it never leaves your device — safe for screenshots that contain private data.' }, + { q: 'It says no QR code was found — why?', a: 'The tool couldn\'t locate a readable QR pattern in the image. Try a sharper, less cropped picture where the whole code is visible and reasonably in focus.' }, + { q: 'What can I decode with it?', a: 'Any standard QR code stored as an image — a photo, screenshot, or exported PNG/JPG. The result can be a URL, plain text, or any data the code holds.' }, + { q: 'Does the QR reader work offline?', a: 'Yes. As a PWA, GoodWebTools keeps decoding QR images even with no internet once the page has loaded.' }, + ], + }, + 'timestamp': { + title: 'Free Unix Timestamp Converter Tool — Epoch to Date', + description: 'A free timestamp converter tool to turn Unix epoch time into readable dates and back — all in your browser. Nothing is uploaded, so your data stays private.', + intro: 'This free timestamp converter tool turns a Unix epoch value or a date string into readable dates across ISO 8601, UTC, local and any time zone — and back again. It all runs on your device, so nothing you paste is sent anywhere.', + howTo: [ + 'Paste a Unix timestamp or a date string, then click Convert — or click Now for the current moment.', + 'Alternatively use the date & time picker and choose whether to read it as Local or UTC.', + 'Read the results: Unix seconds and millis, ISO 8601, UTC and local time.', + 'Pick any zone from \'Convert to time zone\' to add that view, and copy any row you need.', + ], + faqs: [ + { q: 'Is my timestamp data uploaded to a server?', a: 'No. All parsing and conversion happens locally in your browser. Nothing you enter is sent to a server, so it is safe for private or internal timestamps.' }, + { q: 'Does it auto-detect seconds, milliseconds or nanoseconds?', a: 'Yes. When you enter an all-digit value the tool detects whether it is Unix seconds, milliseconds, microseconds or nanoseconds and tells you how it interpreted it.' }, + { q: 'Can I convert a date into a different time zone?', a: 'Yes. After converting, choose a zone from the \'Convert to time zone\' dropdown and the tool adds that formatted time to the results alongside UTC and local.' }, + { q: 'Does the converter work offline?', a: 'Yes. GoodWebTools is a PWA, so once loaded it keeps converting timestamps with no internet connection.' }, + ], + }, + 'base-convert': { + title: 'Free Number Base Converter Tool — Bin Hex', + description: 'A free online number base converter tool to convert between binary, octal, decimal and hex instantly. Runs in your browser — nothing is uploaded.', + intro: 'This free number base converter tool takes a value in binary, octal, decimal or hex and instantly shows it in all four bases at once. Type a number, pick its base, and copy any result — everything runs on your device, with no uploads.', + howTo: [ + 'Type or paste your number into the Value box.', + 'Choose the base of what you entered — Binary, Octal, Decimal or Hex — from the Input base menu.', + 'Read the converted results, shown at the same time in binary, octal, decimal and hexadecimal.', + 'Click the copy button next to any result to grab it — nothing ever leaves your browser.', + ], + faqs: [ + { q: 'Is my input sent anywhere?', a: 'No. The conversion is pure JavaScript that runs locally in your browser, so the numbers you enter never leave your device.' }, + { q: 'Which bases can I convert between?', a: 'You can enter a value in binary (base 2), octal (base 8), decimal (base 10) or hexadecimal (base 16), and every conversion is shown for all four bases at once.' }, + { q: 'Why does it say my number is invalid?', a: 'It means the value contains characters that do not belong to the base you selected — for example letters other than A–F in hex, or digits above 1 in binary. Fix the value or switch the input base to match.' }, + { q: 'Does the converter work offline?', a: 'Yes. GoodWebTools is a PWA, so once the page has loaded it keeps converting even with no internet connection.' }, + ], + }, + 'color-convert': { + title: 'Free Color Converter Tool — HEX, RGB, HSL', + description: 'A free online color converter and picker tool to convert between HEX, RGB and HSL instantly — 100% private. Everything runs in your browser, nothing uploaded.', + intro: 'This free color converter tool lets you type or pick a color and instantly see it in HEX, RGB and HSL, each ready to copy. It all runs on your device — no uploads, works offline.', + howTo: [ + 'Type a color into the box as a hex code (#7c3aed) or an rgb(r, g, b) value.', + 'Or click the color swatch to pick a color visually.', + 'See a live preview plus the HEX, RGB and HSL values update instantly.', + 'Click the copy button next to any format to grab that value.', + ], + faqs: [ + { q: 'Which color formats can I convert between?', a: 'You can enter a HEX code or an rgb(r, g, b) value and read the result back as HEX, RGB and HSL, all at once.' }, + { q: 'Is anything sent to a server?', a: 'No. The conversion runs entirely in your browser with JavaScript, so no color values or data ever leave your device.' }, + { q: 'Can I pick a color instead of typing one?', a: 'Yes. Click the swatch to open your system color picker, and the HEX, RGB and HSL values update to match your selection.' }, + { q: 'Why is my color showing as invalid?', a: 'The input has to be a valid hex code like #rrggbb or an rgb(r, g, b) value. Check for a missing # or a typo, and the tool will convert it once the format is right.' }, + ], + }, + 'pdf-merge': { + title: 'Free Merge PDF Tool — Combine PDFs Online', + description: 'A free online tool to merge multiple PDFs into a single file, in any order — 100% private. Your PDFs are combined in your browser and never uploaded.', + intro: 'This free Merge PDF tool combines two or more PDF files into one document in whatever order you choose. Drop your files in, reorder them, and the merge happens entirely on your device — nothing is uploaded.', + howTo: [ + 'Drop your PDFs onto the drop zone, or click to browse and add two or more files.', + 'Reorder the list with the up and down arrows, or remove any file with the X.', + 'Click Merge to combine them into a single PDF.', + 'Preview the result, then download the merged file — your PDFs never leave your browser.', + ], + faqs: [ + { q: 'Are my PDFs uploaded to a server to merge them?', a: 'No. The merge runs completely in your browser, so your documents stay on your device. Nothing is uploaded, which keeps confidential contracts and records private.' }, + { q: 'Can I control the order of the merged pages?', a: 'Yes. Each added file appears in a numbered list, and you can move any file up or down before merging so the final document is in exactly the order you want.' }, + { q: 'How many PDFs can I combine at once?', a: 'You need at least two files, and you can add as many as you like. Everything is processed locally, so very large batches depend on your device\'s memory.' }, + { q: 'Does the merge tool work offline?', a: 'Yes. GoodWebTools is a PWA, so once the page has loaded you can merge PDFs with no internet connection.' }, + ], + }, + 'pdf-split': { + title: 'Free Split PDF Tool — Extract Pages & Ranges', + description: 'A free online tool to split a PDF and pull chosen pages or ranges into a brand-new file. It runs in your browser, so your document is never uploaded anywhere.', + intro: 'This free Split PDF tool lets you drop in a PDF and extract exactly the pages you want — single pages, ranges, or any mix — into a fresh PDF. The whole document is processed on your device, so even confidential files never leave your browser.', + howTo: [ + 'Drop a PDF onto the page or click to browse — the tool reads it and shows the page count.', + 'Type the pages to extract, like 1, 3, 7, 10 or 2-5, 8.', + 'Check the live preview of which pages will be pulled, then click Extract pages.', + 'Preview the new PDF and download it — nothing is uploaded at any point.', + ], + faqs: [ + { q: 'Is my PDF uploaded anywhere?', a: 'No. The PDF is read and split entirely in your browser, so the document never leaves your device. That makes it safe for contracts, statements and other sensitive files.' }, + { q: 'How do I choose which pages to extract?', a: 'Enter individual pages and ranges separated by commas, for example 1, 3, 7 or 2-5, 8. The tool shows exactly which pages will end up in the new PDF before you extract.' }, + { q: 'Can I extract a single page?', a: 'Yes. Just type that one page number and click Extract pages to get a one-page PDF.' }, + { q: 'Does it work offline?', a: 'Yes. GoodWebTools is a PWA, so after the first load the splitter keeps working without an internet connection.' }, + ], + }, + 'pdf-rotate': { + title: 'Free Rotate PDF Tool — Turn Every Page', + description: 'A free online tool to rotate every page of a PDF by 90, 180 or 270 degrees, then download it. Runs entirely in your browser — your PDF is never uploaded.', + intro: 'This free Rotate PDF tool spins every page of a document 90, 180 or 270 degrees so it reads the right way up. Drop a file in and it\'s fixed on your device — nothing is uploaded.', + howTo: [ + 'Drop a PDF onto the box or click to browse for one.', + 'Choose how far to turn it: 90°, 180° or 270°.', + 'Click Rotate PDF and check the preview of the result.', + 'Download the rotated PDF — the file never leaves your browser.', + ], + faqs: [ + { q: 'Is my PDF uploaded to rotate it?', a: 'No. The rotation happens locally in your browser, so your document never leaves your device — safe for private or sensitive files.' }, + { q: 'Does it rotate all pages or just one?', a: 'It rotates every page in the document by the angle you pick. This is ideal for scans or exports that came out sideways or upside down.' }, + { q: 'Which rotation should I choose?', a: 'Pick 90° to turn a page a quarter clockwise, 270° for a quarter counter-clockwise, or 180° to flip an upside-down page right side up.' }, + { q: 'Does the tool work offline?', a: 'Yes. GoodWebTools is a PWA, so once loaded it keeps rotating PDFs with no internet connection.' }, + ], + }, + 'pdf-to-image': { + title: 'Free PDF to Image Tool — PDF to PNG & JPG', + description: 'A free PDF to image tool that renders every PDF page to a PNG or JPG. Converts in your browser with nothing uploaded, and downloads all pages as a ZIP.', + intro: 'This free PDF to image tool renders each page of a PDF into a crisp PNG or JPG that you can download one by one or all at once as a ZIP. Just drop in a PDF — every page is rasterized on your device, so the file never leaves your browser.', + howTo: [ + 'Drop a PDF onto the box or click to browse and open one.', + 'Choose a scale (1×, 2×, or 3×) for resolution and pick PNG or JPG.', + 'Preview pages in the grid, using the arrows to page through if there are many.', + 'Download individual pages, edit one in the annotator, or click \'Download all (ZIP)\' to save every page.', + ], + faqs: [ + { q: 'Is my PDF uploaded anywhere?', a: 'No. The PDF is opened and rendered entirely in your browser with an on-device render engine. Nothing is uploaded, so even confidential documents stay private.' }, + { q: 'What image formats and quality can I export?', a: 'You can export each page as a PNG or a JPG, and choose 1×, 2×, or 3× scale — higher scales produce larger, sharper images. Each thumbnail shows its exact pixel dimensions.' }, + { q: 'Can I convert a whole multi-page PDF at once?', a: 'Yes. Click \'Download all (ZIP)\' and the tool renders every page at your chosen scale and format, then packages them into a single ZIP file.' }, + { q: 'Does it work offline?', a: 'Yes. GoodWebTools is a PWA, so after the first load the render engine is cached and PDF-to-image conversion keeps working without an internet connection.' }, + ], + }, + 'images-to-pdf': { + title: 'Free Images to PDF Tool — Combine PNG/JPG', + description: 'A free online tool to combine PNG and JPG images into a single PDF, one image per page. Runs entirely in your browser — your images are never uploaded.', + intro: 'This free images-to-PDF tool merges your PNG and JPG images into one PDF, with each image on its own page in the order you choose. Drop your images, reorder them, and build — everything happens on your device, so nothing is ever uploaded.', + howTo: [ + 'Drop your PNG or JPG images onto the box, or click to browse and select them.', + 'Reorder the list with the up and down arrows, or remove any image you don\'t want.', + 'Click Create PDF to combine them, one image per page.', + 'Preview the result, then download the PDF — your images never leave your browser.', + ], + faqs: [ + { q: 'Are my images uploaded to a server?', a: 'No. The PDF is built entirely in your browser with JavaScript, so your images stay on your device and are never uploaded.' }, + { q: 'What image formats can I combine?', a: 'PNG and JPG (JPEG) images. Each selected image becomes one page of the PDF, in the order shown in the list.' }, + { q: 'Can I change the page order?', a: 'Yes. Use the up and down arrows next to each image to rearrange them, or the X button to remove one, before you create the PDF.' }, + { q: 'Does the images-to-PDF tool work offline?', a: 'Yes. GoodWebTools is a PWA, so once the page has loaded once it keeps working with no internet connection.' }, + ], + }, + 'pdf-delete': { + title: 'Free Delete PDF Pages Tool — Remove Pages', + description: 'A free online tool to delete pages from a PDF right in your browser. Enter the pages to remove and download the trimmed file — nothing is ever uploaded.', + intro: 'This free tool removes the pages you don\'t want from a PDF — a single page, a list, or a range like 5-7. Drop the file in, type the pages to delete, and download the cleaned-up PDF. Everything runs on your device, so confidential documents never leave your browser.', + howTo: [ + 'Drop a PDF onto the box or click to browse — the tool shows its page count.', + 'In \'Pages to remove\', enter pages like 1, 3, 5-7.', + 'Click Remove pages to build the trimmed PDF.', + 'Preview the result, then download the edited PDF — or Clear to start again.', + ], + faqs: [ + { q: 'Is my PDF uploaded to a server?', a: 'No. The PDF is opened and rewritten entirely in your browser with JavaScript. The file never leaves your device, which makes it safe for contracts, statements and other private documents.' }, + { q: 'How do I specify which pages to remove?', a: 'Type page numbers separated by commas and use a dash for ranges — for example 1, 3, 5-7 removes pages 1, 3, 5, 6 and 7. Page numbers start at 1.' }, + { q: 'Will this change the rest of my PDF?', a: 'No. Only the pages you list are dropped; the remaining pages keep their original order and content in the downloaded file.' }, + { q: 'Does it work offline?', a: 'Yes. GoodWebTools is a PWA, so once the page has loaded it keeps working with no internet connection. The first run loads the PDF engine, then it stays ready.' }, + ], + }, + 'pdf-watermark': { + title: 'Free Watermark PDF Tool — Stamp Every Page', + description: 'A free online tool to add a text watermark across every page of a PDF, with a live preview. It runs in your browser — your PDF is never uploaded.', + intro: 'This free watermark PDF tool stamps custom text like CONFIDENTIAL or DRAFT across every page, with a live preview as you tweak it. Drop a PDF, style the mark, and download the result — the file is processed entirely on your device.', + howTo: [ + 'Drop your PDF onto the box or click to browse for it.', + 'Type the watermark text and pick a layout: Diagonal, Tiled, or Horizontal.', + 'Choose a size, then adjust the opacity slider and color to taste.', + 'Check the live page-1 preview, click Add watermark, and download the stamped PDF.', + ], + faqs: [ + { q: 'Is my PDF uploaded to a server?', a: 'No. The watermark is applied locally in your browser, so the document never leaves your device — safe for confidential contracts and drafts.' }, + { q: 'Does the watermark appear on every page?', a: 'Yes. The chosen text is stamped onto every page of the PDF using your selected layout, size, opacity, and color.' }, + { q: 'Can I control how the watermark looks?', a: 'Yes. Pick a Diagonal, Tiled, or Horizontal layout, choose Small, Medium, or Large size, set opacity from 5% to 60%, and pick any color.' }, + { q: 'Does the watermark tool work offline?', a: 'Yes. GoodWebTools is a PWA, so once loaded it keeps watermarking PDFs with no internet connection.' }, + ], + }, + 'pdf-compress': { + title: 'Free Compress PDF Tool — Reduce PDF File Size', + description: 'A free compress PDF tool that shrinks PDF file size right in your browser. Your PDF is never uploaded, so even confidential documents stay private.', + intro: 'This free compress PDF tool reduces the size of a PDF by recompressing its streams, images and fonts and dropping unused objects — no quality dialog to fuss with. The whole process runs on your device, so your document never leaves the browser.', + howTo: [ + 'Drop a PDF onto the box or click to browse for one.', + 'Click Compress PDF and wait a moment while it processes on your device.', + 'See the new size and the percentage saved, and preview the result inline.', + 'Download the compressed PDF — it was never uploaded anywhere.', + ], + faqs: [ + { q: 'Is my PDF uploaded to a server to compress it?', a: 'No. Compression runs entirely in your browser, so the file never leaves your device. That makes it safe for contracts, statements and other confidential PDFs.' }, + { q: 'Why did my PDF barely shrink?', a: 'PDFs that are mostly text or vector graphics are already well-compressed, so there is little to remove. This tool saves the most on image-heavy PDFs like scans and photo-filled documents.' }, + { q: 'Will compressing reduce the quality?', a: 'The tool recompresses streams, images and fonts and removes unused objects to cut size. Text and vector content stays sharp; heavily image-based pages may be re-encoded to save space.' }, + { q: 'Does the compress PDF tool work offline?', a: 'Yes. GoodWebTools is a PWA, so once the page has loaded it keeps compressing PDFs with no internet connection.' }, + ], + }, + 'pdf-protect': { + title: 'Free Protect PDF Tool — Add Password AES-256', + description: 'A free online tool to password-protect a PDF with AES-256 encryption. Runs entirely in your browser — your PDF is never uploaded.', + intro: 'This free Protect PDF tool encrypts a PDF with a password using AES-256, so it can only be opened by someone who knows the password. Drop in your file, set a password (or generate a strong one), and download the protected copy — the PDF is encrypted on your device and never uploaded.', + howTo: [ + 'Drop a PDF onto the box or click to browse for one.', + 'Type a password and confirm it, or click Generate password and pick a length to create a strong one.', + 'Optionally tick Show to check what you typed.', + 'Click Protect PDF to encrypt it with AES-256.', + 'Download the protected file — remember the password, because it is required to open the PDF and cannot be recovered.', + ], + faqs: [ + { q: 'Is my PDF uploaded to a server to encrypt it?', a: 'No. Encryption happens entirely in your browser on your device, so the PDF and its password never leave your computer. That makes it safe for sensitive or confidential documents.' }, + { q: 'What encryption does it use?', a: 'The PDF is encrypted with AES-256, a strong standard supported by modern PDF readers. Anyone opening the file will be prompted for the password you set.' }, + { q: 'What happens if I forget the password?', a: 'There is no way to recover it. The password is never stored or sent anywhere, so keep a copy somewhere safe before you close the tool.' }, + { q: 'Are there characters I can\'t use in the password?', a: 'Commas and equals signs are not allowed because of how the PDF encryption options are written. The built-in password generator automatically avoids them.' }, + ], + }, + 'pdf-unlock': { + title: 'Free Unlock PDF Tool — Remove PDF Password', + description: 'A free online tool to unlock a password-protected PDF and save a copy that opens freely — 100% private. Your PDF never leaves your browser.', + intro: 'This free unlock PDF tool takes a password-protected PDF, checks whether it\'s encrypted, and gives you back a copy that opens without a password. Everything happens on your device, so your document and its password are never uploaded.', + howTo: [ + 'Drop your PDF onto the box or click to browse for it.', + 'The tool reads the file and tells you whether it\'s password-protected.', + 'If it is, enter the password (use Show to check it as you type).', + 'Click Remove password, then preview and download the unlocked copy.', + ], + faqs: [ + { q: 'Is my PDF or password uploaded anywhere?', a: 'No. The PDF is read and unlocked entirely in your browser, and the password you enter never leaves your device. Nothing is sent to a server.' }, + { q: 'Do I need to know the password to unlock the PDF?', a: 'Yes. This tool removes a known password so the copy opens freely — it does not crack or bypass a password you don\'t have.' }, + { q: 'What if the PDF isn\'t actually protected?', a: 'The tool checks first and, if there\'s no password, it tells you there\'s nothing to remove so you don\'t waste a step.' }, + { q: 'Does it change the contents of my PDF?', a: 'No. It only removes the password protection and hands you an unlocked copy — the pages and content stay the same.' }, + ], + }, + 'pdf-repair': { + title: 'Free Repair PDF Tool — Fix a Broken PDF', + description: 'A free online tool to repair a damaged or corrupted PDF so it opens again — 100% private. Your file is rebuilt right in your browser and never uploaded.', + intro: 'This free Repair PDF tool rebuilds a corrupted PDF — a broken cross-reference table, a damaged trailer, or junk after the end of the file — so it opens again. Drop the file in and the recovery runs on your device; nothing is uploaded.', + howTo: [ + 'Drop your damaged PDF onto the drop zone, or click to browse for it.', + 'Click Repair PDF to fix the structural damage.', + 'If it still won\'t open, click Force rebuild to reconstruct the document page-by-page from whatever pages are still readable.', + 'Check the preview, confirm how many pages were recovered, then download the repaired file.', + ], + faqs: [ + { q: 'Is my PDF uploaded to fix it?', a: 'No. The repair runs entirely in your browser, so a damaged file you may not fully trust never leaves your device and nothing is sent to a server.' }, + { q: 'What\'s the difference between Repair and Force rebuild?', a: 'Repair fixes structural damage like a broken cross-reference table or damaged trailer. Force rebuild is more aggressive — it reconstructs the file from whatever pages are still readable, for badly damaged PDFs.' }, + { q: 'Can it recover a PDF that lost content?', a: 'It fixes structural problems that stop a file from opening, but content that is physically missing from the file can\'t be recovered. Always check the preview before saving.' }, + { q: 'Why won\'t my file repair?', a: 'If a normal repair can\'t produce an openable document, try Force rebuild for a more aggressive recovery. Some files are too damaged to rebuild if the underlying page data is gone.' }, + ], + }, + 'image-convert': { + title: 'Free Image Converter Tool — PNG, JPEG, WebP', + description: 'A free online image converter tool for PNG, JPEG, WebP, AVIF, GIF, ICO and SVG, with a quality slider. It runs in your browser and nothing is ever uploaded.', + intro: 'This free image converter tool takes any image you drop, paste or browse to and re-encodes it as PNG, JPEG, WebP, AVIF, GIF, an ICO favicon, or an SVG wrapper. All conversion happens on your device, so your images never leave your browser.', + howTo: [ + 'Drop an image, click to browse, or paste one with ⌘V / Ctrl+V.', + 'Pick an output format: PNG, JPEG, WebP, AVIF (where supported), GIF, ICO, or SVG.', + 'For lossy formats, drag the Quality slider to balance size against sharpness.', + 'Click Convert, then download the result — your image is never uploaded.', + ], + faqs: [ + { q: 'Are my images uploaded to a server?', a: 'No. Every conversion happens locally in your browser using the canvas and built-in encoders, so your images stay on your device.' }, + { q: 'Which formats can I convert to?', a: 'PNG, JPEG, WebP, GIF, a multi-size ICO favicon (16, 32 and 48px), and SVG that embeds the image. AVIF is also offered when your browser can encode it.' }, + { q: 'What does the quality slider do?', a: 'For lossy formats like JPEG, WebP and AVIF it sets compression from 10% to 100% — lower makes smaller files, higher keeps more detail. PNG is lossless and ignores it.' }, + { q: 'Does the converter work offline?', a: 'Yes. GoodWebTools is a PWA, so once loaded it keeps converting images with no internet connection.' }, + ], + }, + 'image-viewer': { + title: 'Free Image Viewer Tool — Dimensions & EXIF', + description: 'A free online tool to view any image and read its dimensions, type, EXIF orientation, GPS and ICO sizes. Runs in your browser — images are never uploaded.', + intro: 'This free image viewer tool opens any image — including .ico files — and shows its name, type, size, pixel dimensions, EXIF details and embedded icon sizes. It all happens on your device, so your images never leave your browser.', + howTo: [ + 'Drop an image on the box, click to browse, or paste one with ⌘V / Ctrl+V.', + 'Zoom and pan the preview to inspect the image closely.', + 'Read the metadata panel: name, type, size, dimensions, EXIF orientation and GPS, plus ICO sizes.', + 'Download the file or send it to the annotator or converter if you want to edit it.', + ], + faqs: [ + { q: 'Are my images uploaded to view their metadata?', a: 'No. The image is read and inspected entirely in your browser, so it never leaves your device — safe for private photos and screenshots.' }, + { q: 'What metadata does it show?', a: 'For any image it shows the file name, type, size and pixel dimensions. JPEGs also show EXIF orientation and whether GPS location is embedded, and .ico files list the icon sizes they contain.' }, + { q: 'Can it open .ico icon files?', a: 'Yes. It reads .ico files and lists every size packed inside, alongside the usual image details.' }, + { q: 'Does the viewer work offline?', a: 'Yes. GoodWebTools is a PWA, so once loaded it keeps working with no internet connection.' }, + ], + }, + 'svg-viewer': { + title: 'Free SVG Viewer & Converter Tool Online', + description: 'A free SVG viewer and converter tool to preview any SVG and export it as a PNG, JPEG, or WebP. Everything runs in your browser, so nothing is ever uploaded.', + intro: 'This free SVG viewer tool renders any SVG file or pasted markup, then exports it to a PNG, JPEG, or WebP at the scale you choose. Drop a file or paste code — it\'s sanitized and rendered on your device, so nothing is uploaded.', + howTo: [ + 'Drop an SVG file onto the box, or paste SVG markup into the text area.', + 'Preview the rendered image and zoom in to inspect it; its width, height, and viewBox are shown.', + 'Pick an export format — PNG, JPEG, or WebP — and drag the Scale slider from 1× up to 8×.', + 'For JPEG or WebP, adjust the Quality slider, then click Export to download the image.', + ], + faqs: [ + { q: 'Is my SVG uploaded to a server?', a: 'No. The SVG is sanitized and rendered entirely in your browser, and export runs on your device too. Your file and its contents never leave your computer.' }, + { q: 'Which formats can I convert an SVG to?', a: 'You can export to PNG (lossless), or JPEG and WebP (with an adjustable quality slider). You can also scale the output from 1× up to 8× for higher-resolution raster images.' }, + { q: 'Can I paste SVG code instead of a file?', a: 'Yes. Paste your SVG markup straight into the text area and it renders immediately — handy when you have the code but not a saved file.' }, + { q: 'Does the SVG viewer work offline?', a: 'Yes. As a PWA, GoodWebTools keeps viewing and converting SVGs once the page has loaded, even with no connection.' }, + ], + }, + 'monochrome': { + title: 'Free Monochrome Tool — Grayscale & B/W Images', + description: 'A free online tool to convert images to grayscale, black & white, or dithered. Adjust the threshold live in your browser — your image is never uploaded.', + intro: 'This free black & white and monochrome tool converts any image to grayscale, a hard black-and-white threshold, or a Floyd–Steinberg dithered look. Drop or paste an image, pick a mode, and preview the result instantly — all on your device, so nothing is ever uploaded.', + howTo: [ + 'Drop an image onto the box, click to browse, or paste one with Ctrl/Cmd+V.', + 'Choose a mode: Grayscale, Black & White, or Dithered B/W.', + 'For Black & White, drag the threshold slider to control how much becomes black vs white.', + 'The preview updates live — download the finished PNG when you\'re happy.', + ], + faqs: [ + { q: 'Is my image uploaded to a server?', a: 'No. All conversion is done in your browser on a canvas, so the image never leaves your device — safe for private or sensitive photos.' }, + { q: 'What\'s the difference between the three modes?', a: 'Grayscale desaturates using luminance, Black & White applies a hard threshold to pure black or white, and Dithered B/W uses Floyd–Steinberg dithering to fake smoother tone from just two colors.' }, + { q: 'What does the threshold slider do?', a: 'In Black & White mode it sets the cutoff (0–255): pixels brighter than the threshold become white and darker ones become black, so you can tune how light or dark the result looks.' }, + { q: 'Does the monochrome tool work offline?', a: 'Yes. GoodWebTools is a PWA, so once the page has loaded once it keeps working with no internet connection.' }, + ], + }, + 'image-compress': { + title: 'Free Image Compressor Tool — Shrink File Size', + description: 'A free online image compressor tool to shrink JPEG, PNG and other images by re-encoding them as WebP or JPEG, in your browser. Nothing is ever uploaded.', + intro: 'This free image compressor tool re-encodes your photo to WebP or JPEG at the quality you choose, cutting the file size while keeping it looking good. Drop or paste an image and it processes entirely on your device, so nothing is uploaded.', + howTo: [ + 'Drop an image on the box, click to browse, or paste one with Ctrl/Cmd V.', + 'Choose an output format — WebP for the smallest file, or JPEG.', + 'Drag the Quality slider (10-100%) to trade size against sharpness.', + 'Click Compress, then download the result and compare it to the original size.', + ], + faqs: [ + { q: 'Is my image uploaded to a server?', a: 'No. The image is decoded and re-encoded locally in your browser using a canvas. It never leaves your device, so private photos and screenshots stay private.' }, + { q: 'Should I pick WebP or JPEG?', a: 'WebP usually produces a noticeably smaller file at the same quality and is widely supported. Choose JPEG if you need maximum compatibility with older software.' }, + { q: 'How much should I lower the quality?', a: 'Around 75% is a good balance for photos. Lower it further for bigger savings, or raise it toward 100% if you start seeing blur or blockiness.' }, + { q: 'Does compressing change the image dimensions?', a: 'No. This tool re-encodes at the same resolution to reduce file size; it doesn\'t resize the picture.' }, + ], + }, + 'image-resize': { + title: 'Free Image Resizer Tool — Exact Pixel Sizes', + description: 'A free online image resizer tool to scale any image to exact pixel dimensions by dragging or typing. It runs in your browser — nothing is uploaded.', + intro: 'This free image resizer tool scales any photo or graphic to the exact width and height you want — drag the corner handle for a live preview or type precise pixel values. Everything happens on your device, so your image never leaves the browser.', + howTo: [ + 'Drop an image onto the box, click to browse, or paste one with Ctrl/Cmd+V.', + 'Drag the corner handle to resize live, or type an exact Width and Height.', + 'Keep Lock aspect ratio on to scale proportionally, or turn it off to stretch freely.', + 'Click Resize, then download the result in its original PNG, JPG, or WebP format.', + ], + faqs: [ + { q: 'Is my image uploaded to a server?', a: 'No. Resizing is done locally in your browser on a canvas, so the image never leaves your device — safe for private photos and screenshots.' }, + { q: 'Can I set an exact pixel size?', a: 'Yes. Type the precise Width and Height you need, or drag the corner handle; a live badge shows the current pixel size and scale percentage.' }, + { q: 'Will resizing keep the proportions?', a: 'With Lock aspect ratio enabled, changing one dimension updates the other automatically. Turn it off if you want to set width and height independently.' }, + { q: 'What format is the resized image saved in?', a: 'It keeps your source format — JPG stays JPG, WebP stays WebP, and anything else is saved as PNG.' }, + ], + }, + 'image-annotate': { + title: 'Free Image Annotator Tool — Arrows, Text & Blur', + description: 'A free image annotator tool to mark up screenshots with arrows, shapes, text, highlighter and blur — in your browser. Nothing is uploaded, so your images stay private.', + intro: 'This free image annotator tool lets you drop or paste a screenshot and mark it up with arrows, rectangles, ellipses, lines, freehand pencil, a highlighter, text labels and blur to hide sensitive bits. Everything is drawn on your device, so the image never leaves your browser.', + howTo: [ + 'Drop, paste or browse for an image to load it onto the canvas.', + 'Pick a tool — arrow, rectangle, ellipse, line, pencil, highlighter, text or blur — and set the color and stroke width.', + 'Draw on the image; use blur to cover private details, and Select to move, resize or rename anything (double-click text to edit).', + 'Undo or redo as needed, then Download PNG or copy the annotated image to your clipboard.', + ], + faqs: [ + { q: 'Is my screenshot uploaded when I annotate it?', a: 'No. The image loads into a canvas and every edit is rendered locally in your browser. Nothing is uploaded, so screenshots with sensitive information stay on your device.' }, + { q: 'Can I blur out private information?', a: 'Yes. Choose the blur tool and drag over any area — passwords, faces, account numbers — to hide it behind a blurred patch before you export.' }, + { q: 'How do I move or edit something I already drew?', a: 'Switch to the Select tool, then drag a shape to move it or drag a handle to resize it. Double-click a text label to rename it, and press Delete to remove the selected item.' }, + { q: 'How do I save my annotated image?', a: 'Click Download PNG to save it, or use the copy button to place the annotated image directly on your clipboard for pasting into a chat or doc.' }, + ], + }, + 'image-crop': { + title: 'Free Image Cropper Tool — Crop Photos Online', + description: 'A free online image cropper tool to trim a photo by dragging a selection box. Runs in your browser — your image is never uploaded.', + intro: 'This free image cropper tool lets you drag a selection box over any photo and cut out just the part you want, keeping the original format. Drop, browse or paste an image, frame your crop, and download the result — everything happens on your device, so your picture never leaves your browser.', + howTo: [ + 'Drop an image onto the box, click to browse, or paste one with Ctrl/Cmd+V.', + 'Drag the highlighted box to move it, or pull any corner handle to resize the crop — the live pixel size is shown as you go.', + 'Click Crop to cut out the selected area.', + 'Download the cropped image — it keeps the original format and never leaves your browser.', + ], + faqs: [ + { q: 'Is my image uploaded anywhere?', a: 'No. Cropping is done locally in your browser using a canvas, so the image stays on your device and is never sent to a server.' }, + { q: 'How do I set the exact crop area?', a: 'Drag the blue box to reposition it and drag the corner handles to resize it. A label shows the current selection size in pixels so you can frame it precisely.' }, + { q: 'What format is the cropped image saved in?', a: 'The crop keeps your original image\'s format, and the download filename includes the new pixel dimensions so it\'s easy to identify.' }, + { q: 'Can I paste a screenshot instead of a file?', a: 'Yes. Copy any image to your clipboard and press Ctrl or Cmd+V on the tool to load it straight in for cropping.' }, + ], + }, + 'image-watermark': { + title: 'Free Image Watermark Tool — Stamp Text on Photos', + description: 'A free online image watermark tool to stamp custom text across any photo — 100% private. Your image is processed in your browser and never uploaded.', + intro: 'This free image watermark tool lets you drop or paste an image and stamp your own text across it — diagonal, tiled, or in the corner — with control over size, opacity and color. Everything runs on your device, so your images never leave your browser.', + howTo: [ + 'Drop or paste an image, or click to browse for one.', + 'Type your watermark text and choose a layout: Diagonal, Tiled or Corner.', + 'Adjust the scale, opacity and color sliders to taste.', + 'Click Add watermark, then download the finished image.', + ], + faqs: [ + { q: 'Is my image uploaded to add the watermark?', a: 'No. The watermark is drawn onto your image locally in your browser using a canvas, so the photo never leaves your device.' }, + { q: 'What watermark layouts can I choose?', a: 'Three: Diagonal across the image, Tiled repeating over the whole picture, or a single Corner stamp in the bottom-right.' }, + { q: 'Can I control how the watermark looks?', a: 'Yes. You can set the text, pick any color, and use sliders to adjust its scale and opacity so it\'s as subtle or bold as you want.' }, + { q: 'What format is the watermarked image saved in?', a: 'The download keeps your image\'s original format where possible, so a JPEG stays a JPEG and a PNG stays a PNG.' }, + ], + }, + 'image-stamp': { + title: 'Free Image Stamp Tool — Mark CONFIDENTIAL & PAID', + description: 'A free online image stamp tool to add CONFIDENTIAL, PAID and other marks to a photo — 100% private. The image is stamped in your browser and never uploaded.', + intro: 'This free Image Stamp tool overlays a status mark like CONFIDENTIAL, PAID or DRAFT onto any image, with control over text, color, font, placement, size and opacity. Drop or paste an image and the stamp is drawn on your device — nothing is uploaded.', + howTo: [ + 'Drop or paste an image, or click to browse for one.', + 'Pick a preset like CONFIDENTIAL or PAID, or type your own stamp text.', + 'Choose placement, font and style, and set a color; adjust the Scale and Opacity sliders.', + 'Click Apply stamp, then download the stamped image — it never leaves your browser.', + ], + faqs: [ + { q: 'Is my image uploaded when I add a stamp?', a: 'No. The stamp is drawn onto the image directly in your browser, so the file never leaves your device. That keeps sensitive documents and photos private.' }, + { q: 'What stamp marks can I add?', a: 'You get quick presets such as CONFIDENTIAL and PAID, or you can type any text you like. You control the color, font, bold/italic, an optional border box, placement and how big and opaque the stamp is.' }, + { q: 'Where can I position the stamp on the image?', a: 'Choose from center or any of the four corners — top-left, top-right, bottom-left or bottom-right — and use the Scale slider to size it to the image.' }, + { q: 'What format is the stamped image saved in?', a: 'The tool keeps your original image\'s format where possible, so a PNG stays a PNG and a JPEG stays a JPEG when you download the result.' }, + ], + }, + 'image-qr': { + title: 'Free Add QR to Image Tool — Overlay a QR Code', + description: 'A free online tool to overlay a QR code onto any corner of an image, with size control and a white backing card. It runs in your browser — nothing is uploaded.', + intro: 'This free Add QR to Image tool drops a QR code — pointing at any text or URL you type — onto a corner of your photo or graphic, sized however you like. The image and the QR are generated on your device, so nothing you add ever leaves your browser.', + howTo: [ + 'Drop an image, click to browse, or paste one with ⌘V / Ctrl+V.', + 'Type the text or URL the QR code should encode.', + 'Pick a corner, drag the Size slider, and toggle the White card backing on or off.', + 'Click Add QR, then download the finished image — it never leaves your browser.', + ], + faqs: [ + { q: 'Is my image or QR content uploaded anywhere?', a: 'No. Both the QR code and the combined image are generated locally in your browser, so your picture and the link or text you encode stay on your device.' }, + { q: 'Where can I place the QR code?', a: 'In any of the four corners — top left, top right, bottom left or bottom right — and you can set its size as a percentage of the image.' }, + { q: 'What is the white card backing for?', a: 'It puts the QR on a solid white panel so scanners can read it reliably even over busy or dark parts of the image. You can turn it off if you prefer.' }, + { q: 'Does it work offline?', a: 'Yes. GoodWebTools is a PWA, so after the first load you can add QR codes to images with no internet connection.' }, + ], + }, + 'image-merge': { + title: 'Free Merge Images Tool — Combine Into One', + description: 'A free online tool to combine multiple images into one PNG — stacked, side by side or in a grid. Runs in your browser and your images are never uploaded.', + intro: 'This free merge images tool joins several pictures into a single image, arranged vertically, horizontally or in a grid. You reorder them, set spacing and background right here — everything runs on your device, so your images never leave your browser.', + howTo: [ + 'Drop your images on the box, click to browse, or paste them with ⌘V / Ctrl+V.', + 'Reorder the list with the up and down arrows, and remove any you don\'t want.', + 'Choose a direction — Vertical, Horizontal or Grid — and for Grid pick the number of columns.', + 'Set the gap, match widths or heights, and pick a background color or Transparent.', + 'Click Merge and download the combined PNG — your images never leave your browser.', + ], + faqs: [ + { q: 'Are my images uploaded to merge them?', a: 'No. The images are combined on a canvas in your browser, so they never leave your device — safe for private or unpublished pictures.' }, + { q: 'Can I arrange images in a grid?', a: 'Yes. Pick the Grid direction and choose how many columns you want; the tool lays your images out in that grid and shows the resulting rows.' }, + { q: 'What format is the merged image?', a: 'The result is saved as a PNG. You can keep a solid background color or tick Transparent to preserve transparency.' }, + { q: 'Does the tool work offline?', a: 'Yes. GoodWebTools is a PWA, so once loaded it keeps merging images with no internet connection.' }, + ], + }, + 'image-upscale': { + title: 'Free Image Upscaler Tool — Enlarge 2–4× AI', + description: 'A free AI image upscaler tool that enlarges photos and logos 2–8× with an on-device ESRGAN model. Runs in your browser, so images are never uploaded.', + intro: 'This free image upscaler tool enlarges your image 2×, 3×, 4×, or 8× using an on-device ESRGAN AI model, adding detail instead of just stretching pixels. Drop or paste an image — it\'s upscaled right in your browser, so it never leaves your device.', + howTo: [ + 'Drop an image onto the box, click to browse, or paste one with ⌘V / Ctrl+V.', + 'Pick a scale — 2×, 3×, 4×, or 8× (8× runs two AI passes).', + 'Wait as the model runs; a progress bar shows each pass and the AI model downloads once, then caches.', + 'Review the before/after dimensions, then Download the PNG, copy it, or open it in the annotator.', + ], + faqs: [ + { q: 'Is my image uploaded to a server to be upscaled?', a: 'No. The ESRGAN AI model runs entirely in your browser, so the image never leaves your device. The model weights download once (about 1 MB each) and are then cached locally.' }, + { q: 'What scales are supported and are there size limits?', a: 'You can upscale 2×, 3×, 4×, or 8×. To keep the result within browser memory limits the output is capped at roughly 20 megapixels, so larger scales require a smaller input image — the tool warns you if an image is too big.' }, + { q: 'What images does it work best on?', a: 'It works best on smaller images like icons, logos, and old photos. 2–4× use native AI models, while 8× chains a 4× and a 2× pass for extra enlargement.' }, + { q: 'Does the upscaler work offline?', a: 'Yes. Once the page and model have loaded, GoodWebTools works as a PWA, so you can upscale images with no internet connection.' }, + ], + }, + 'image-object-remove': { + title: 'Free Object Remover Tool — AI Erase from Photos', + description: 'A free online object remover tool: paint over an object and erase it with AI inpainting (LaMa). Runs entirely in your browser — your photo is never uploaded.', + intro: 'This free object remover tool lets you paint over an unwanted object or person and erase it, filling the gap with an AI inpainting model (LaMa). Drop or paste a photo, brush the area, and remove — the whole thing runs on your device, so your image is never uploaded.', + howTo: [ + 'Drop a photo onto the box, click to browse, or paste one with Ctrl/Cmd+V.', + 'Adjust the brush size, then paint a red mask over the object you want gone.', + 'Click Remove object and confirm — the first run downloads the ~200 MB model, then it\'s cached.', + 'Wait for the AI to inpaint, then download the result as a PNG or copy it.', + ], + faqs: [ + { q: 'Is my photo uploaded to a server?', a: 'No. The AI inpainting runs entirely in your browser with onnxruntime-web, so your image never leaves your device even though it uses a large model.' }, + { q: 'Why does the first run download so much?', a: 'It fetches the LaMa inpainting model (~200 MB) the first time you use it, then caches it, so later removals start much faster. Plan for a modern desktop browser with at least 4 GB of RAM.' }, + { q: 'How do I tell it what to remove?', a: 'Pick a brush size and paint over the object — the red mask marks exactly what gets erased and filled in. You can clear the mask and repaint if you miss.' }, + { q: 'Why did it run out of memory or fail?', a: 'This is an experimental, heavy model that needs a powerful device. On low-end or mobile devices it can run out of memory, so try a smaller image or a desktop browser.' }, + ], + }, + 'image-portrait-blur': { + title: 'Free Portrait Blur Tool — Blur Photo Background', + description: 'A free online portrait blur tool that keeps your subject sharp and blurs the background for a bokeh look, in your browser. AI runs on-device — nothing uploaded.', + intro: 'This free portrait blur tool uses on-device AI to find the person or subject in your photo, keep them crisp, and blur everything behind them for a soft portrait-mode background. Drop or paste a picture and it all runs in your browser, so the photo never leaves your device.', + howTo: [ + 'Drop a photo on the box, click to browse, or paste one with Ctrl/Cmd V.', + 'Wait while the AI model downloads once and isolates your subject.', + 'Drag the Background blur slider (2-40px) to set how strong the bokeh is — it re-renders instantly.', + 'Download the PNG, copy it, or open it in the annotator.', + ], + faqs: [ + { q: 'Is my photo uploaded to process it?', a: 'No. Subject detection and blurring run entirely in your browser with an on-device AI model. Your photo never leaves your device.' }, + { q: 'Why is there a download the first time?', a: 'The tool fetches the AI background-detection model once, then caches it. After that first load, processing is fast and works even offline.' }, + { q: 'Can I change the blur amount after processing?', a: 'Yes. The subject cutout is cached, so moving the Background blur slider re-blurs the background instantly without re-running the AI.' }, + { q: 'What file do I get back?', a: 'A PNG with your subject sharp and the background blurred. You can download it, copy it to the clipboard, or send it to the annotator for further edits.' }, + ], + }, + 'image-face-blur': { + title: 'Free Face Blur Tool — Hide Faces with AI', + description: 'A free online face blur tool that auto-detects faces and blurs, pixelates, or blacks them out. On-device AI — your image is never uploaded.', + intro: 'This free face blur tool finds every face in a photo with on-device AI and hides it — blur it, pixelate it, or cover it with a solid block. Detection and editing run entirely in your browser, so the image never leaves your device.', + howTo: [ + 'Drop an image onto the box, click to browse, or paste one with Ctrl/Cmd+V.', + 'Pick an effect: Blur, Pixelate, or Solid (a solid block can\'t be reversed).', + 'The tool detects faces automatically and shows how many it hid.', + 'Download the PNG, copy it, or open it in the annotator for further edits.', + ], + faqs: [ + { q: 'Is my image uploaded to detect faces?', a: 'No. Face detection uses an on-device AI model that runs in your browser, so the image and the result never leave your device.' }, + { q: 'Which effect is safest for privacy?', a: 'Use Solid. Blur and pixelate can sometimes be partly reversed, but a solid block permanently removes the face pixels.' }, + { q: 'Why is the first run slower?', a: 'The first time you use it, the tool downloads a small face-detection model. After that it\'s cached, so later runs start much faster.' }, + { q: 'What if no faces are detected?', a: 'You\'ll see a note that none were found. Try a clearer, better-lit image where faces are larger and facing the camera.' }, + ], + }, + 'image-ocr': { + title: 'Free Image to Text OCR Tool — Extract Text', + description: 'A free OCR tool to extract text from images and PDFs with on-device AI — no uploads. Your files are read in your browser, so they never leave your device.', + intro: 'This free image-to-text OCR tool pulls the words out of a photo, screenshot or PDF using an AI model that runs entirely on your device. Drop, paste or snap a picture, run OCR, then copy or download the recognized text — nothing is ever uploaded.', + howTo: [ + 'Drop or paste an image or PDF, click to browse, or use your camera.', + 'Optionally rotate 90° or tick \'Clean up image\' and adjust the threshold to sharpen faint text before reading.', + 'Click Run OCR — the first run downloads the recognition model once, then it reads on-device.', + 'Copy the recognized text or download it as a .txt file; tick \'Parse as receipt\' to pull out structured fields.', + ], + faqs: [ + { q: 'Are my images or PDFs uploaded for OCR?', a: 'No. Text recognition runs on-device using an AI model in your browser, so your files never leave your device. That makes it safe for IDs, receipts and confidential documents.' }, + { q: 'Why does the first run take longer?', a: 'The OCR model is downloaded once on first use and then cached. After that, recognition is faster because the model is already on your device.' }, + { q: 'Can I read a specific page of a PDF?', a: 'Yes. Multi-page PDFs get Prev and Next controls so you can move to the page you want, then run OCR on just that page.' }, + { q: 'Can it pull fields out of a receipt?', a: 'Yes. After OCR, tick \'Parse as receipt\' and the tool extracts structured fields like merchant, totals and line items from the recognized text.' }, + ], + }, + 'image-receipt-scanner': { + title: 'Free Receipt Scanner Tool — Extract Totals', + description: 'A free online receipt scanner tool that reads merchant, date and totals from a receipt on-device with OCR. Nothing is uploaded — it all runs in your browser.', + intro: 'This free receipt scanner tool uses on-device OCR to pull the merchant, date, currency, subtotal, tax and total out of a photo or PDF of a receipt, then lets you fix any field and export to JSON or CSV. Drop an image, snap one with your camera, or load a PDF — the scan runs entirely in your browser, so your receipts never leave your device.', + howTo: [ + 'Drop a receipt image or PDF, click to browse, paste one, or tap Use camera to snap it.', + 'Optionally rotate the image or turn on Clean up to sharpen faint text, then click Run OCR (the first run downloads the OCR model once).', + 'Review the extracted merchant, date, currency, subtotal, tax and total, and edit any field that was misread.', + 'Export the fields as JSON or CSV, or open Raw recognized text to copy everything the scanner read.', + ], + faqs: [ + { q: 'Are my receipts uploaded to a server?', a: 'No. The OCR and parsing run entirely on your device in the browser, so receipt images and the data pulled from them never leave your computer.' }, + { q: 'Why does the first scan take a moment?', a: 'The first time you run OCR the tool downloads its recognition model once. After that it\'s cached, so later scans start much faster.' }, + { q: 'What information does it pull out?', a: 'It tries to detect the merchant name, the date, the currency, and the subtotal, tax and total amounts. Every field is editable, so you can correct anything the OCR got wrong before exporting.' }, + { q: 'Can I scan a PDF receipt or use my camera?', a: 'Yes. You can drop or browse for a PDF (with page navigation for multi-page files) or use the Use camera button to capture a receipt directly.' }, + ], + }, + 'camera-capture': { + title: 'Free Camera Capture Tool — Take a Webcam Photo', + description: 'A free online camera capture tool to take a photo with your webcam or phone camera — 100% private. The photo stays in your browser and is never uploaded.', + intro: 'This free camera capture tool opens your webcam or phone camera right in the browser so you can snap a photo, retake it, and download or copy the result. Nothing is uploaded — the picture stays on your device.', + howTo: [ + 'Allow camera access when your browser asks.', + 'Frame your shot in the live preview and click Capture.', + 'On a phone, tap Switch camera to flip front and back, or use device camera to open the OS camera app.', + 'Download or copy the photo, or click Retake to try again.', + ], + faqs: [ + { q: 'Is my photo uploaded to a server?', a: 'No. The camera feed and the captured photo stay entirely in your browser on your device — nothing is sent anywhere.' }, + { q: 'Why won\'t the camera turn on?', a: 'Your browser needs camera permission and a secure (https) page. If access is blocked or unavailable, use the \'Use device camera\' button to open your phone\'s built-in camera app instead.' }, + { q: 'Can I switch between front and back cameras?', a: 'Yes. When more than one camera is detected, a Switch camera button appears so you can flip between them.' }, + { q: 'What can I do with the photo after capturing?', a: 'You can download it, copy it to your clipboard, edit it in the Annotator, or hit Retake to shoot a new one.' }, + ], + }, + 'image-bg-remove': { + title: 'Free Background Remover Tool — On-Device AI', + description: 'A free online background remover tool that cuts out an image background with on-device AI — 100% private. Your photo is processed in-browser and never uploaded.', + intro: 'This free Background Remover tool uses an on-device AI model to erase the background from a photo and give you a clean transparent PNG. Drop or paste an image and it\'s processed entirely in your browser — the picture never leaves your device.', + howTo: [ + 'Drop or paste an image, or click to browse for one.', + 'Wait as the AI model loads on first run (about 40 MB, then cached) and processes the image.', + 'Watch the progress bar while the background is removed on your device.', + 'Download the transparent PNG, copy it, or open it in the annotator to keep editing.', + ], + faqs: [ + { q: 'Is my photo uploaded to remove the background?', a: 'No. The AI model runs entirely in your browser, so the image never leaves your device and nothing is sent to a server — safe for private or client photos.' }, + { q: 'Why does the first run take longer?', a: 'The first time you use it, the tool downloads the AI model (around 40 MB). After that it\'s cached in your browser, so later runs start much faster.' }, + { q: 'What format is the result?', a: 'You get a transparent PNG with the subject cut out, which you can download, copy to the clipboard, or send to the annotator for further editing.' }, + { q: 'Does it work without an internet connection?', a: 'After the AI model has been downloaded and cached once, the background remover keeps working offline as part of the GoodWebTools PWA.' }, + ], + }, + 'image-scrub': { + title: 'Free Image Metadata Scrubber Tool — Strip EXIF', + description: 'A free online tool to strip EXIF, GPS location and all metadata from an image before you share it. It runs in your browser, so the photo is never uploaded.', + intro: 'This free image metadata scrubber tool removes EXIF, GPS coordinates, camera details and timestamps by re-encoding your photo cleanly. It all happens on your device, so the original picture and its hidden data never leave your browser.', + howTo: [ + 'Drop an image, click to browse, or paste one with ⌘V / Ctrl+V.', + 'Click Remove metadata to re-encode a clean copy in the same format.', + 'Confirm the success notice that no EXIF or GPS data remains.', + 'Download the cleaned image — nothing was ever uploaded.', + ], + faqs: [ + { q: 'Is my photo uploaded to strip its metadata?', a: 'No. The image is re-encoded entirely in your browser, so neither the photo nor its EXIF and GPS data ever leaves your device.' }, + { q: 'What metadata does it remove?', a: 'Re-encoding drops EXIF camera info, GPS location coordinates, timestamps and any other embedded metadata, leaving just the pixels.' }, + { q: 'Does it change the image format or quality?', a: 'It keeps the original format — JPEG, WebP or PNG — and re-saves at high quality, so the picture looks the same but carries no hidden data.' }, + { q: 'Does it work offline?', a: 'Yes. GoodWebTools is a PWA, so once loaded you can scrub image metadata with no internet connection.' }, + ], + }, + 'file-transfer': { + title: 'Free P2P File Transfer Tool — Device to Device', + description: 'A free tool to send a file directly to another device, peer-to-peer, in your browser. Your file transfers device to device and never passes through a server.', + intro: 'This free P2P file transfer tool sends a file straight from your device to someone else\'s over an encrypted peer-to-peer connection. Share a link or copy-paste a connection code — either way, your file never passes through a server.', + howTo: [ + 'Open the tool and click Continue; optionally add your own STUN/TURN servers under Advanced settings.', + 'In automatic mode, copy the share link and send it to the other device, which opens it to join.', + 'Or switch to manual mode and copy-paste the offer and answer codes between the two devices — no server at all.', + 'Drop the file you want to send; it transfers directly once the other device connects.', + 'On the receiving side, click Download file when the transfer finishes.', + ], + faqs: [ + { q: 'Does my file get uploaded to a server?', a: 'No. The file travels directly between the two devices, peer-to-peer. In automatic mode a small signaling server only exchanges a ~2 KB handshake to introduce the devices; in manual mode no server is used at all.' }, + { q: 'What\'s the difference between automatic and manual mode?', a: 'Automatic mode gives you a link to share and uses a tiny signaling server just to connect the devices. Manual mode uses no server — you copy-paste an offer code and an answer code between the two people yourself.' }, + { q: 'Why won\'t the connection complete?', a: 'Peer-to-peer connections are best-effort and can fail on strict or corporate networks. Adding your own TURN server under Advanced settings makes connections work in those cases.' }, + { q: 'Is there a file size limit?', a: 'There\'s no fixed cap — because the file streams directly between devices rather than through a server, large files are practical as long as both devices stay connected.' }, + ], + }, + 'video-call': { + title: 'Free Video Call Tool — P2P, No Sign-Up', + description: 'A free peer-to-peer video call tool with screen sharing and chat. Media travels directly between devices and never passes through a server — no sign-up.', + intro: 'This free video call tool connects two devices directly over WebRTC for face-to-face video, screen sharing, and text chat. Share a link or copy-paste an invite code — your video, audio, and chat travel peer-to-peer and never pass through our server.', + howTo: [ + 'Open the tool, review the privacy note, and click Continue to grant camera and microphone access.', + 'In automatic mode, copy the share link and send it to the other person, who joins by opening it.', + 'Or switch to manual mode under Advanced settings to copy-paste invite and answer codes with no server at all.', + 'Once connected, mute the mic, toggle the camera, share your screen, flip cameras, or open the chat panel; click Hang up to end.', + ], + faqs: [ + { q: 'Does my video and audio go through your server?', a: 'No. Video, audio, and chat travel directly between the two devices, peer-to-peer. In automatic mode a tiny signaling server only exchanges connection details (about 2 KB) to introduce the devices; in manual mode no server is used at all.' }, + { q: 'Do I need an account to make a call?', a: 'No. There\'s no sign-up or login. You just share a link or an invite code with the person you want to call and connect directly.' }, + { q: 'The call won\'t connect — why?', a: 'Peer-to-peer connections are best-effort and can fail on restrictive networks or corporate firewalls. You can add your own STUN/TURN servers under Advanced connection settings to make calls work on strict networks.' }, + { q: 'Can I share my screen and chat during the call?', a: 'Yes. During a call you can share your screen, send text messages in the chat panel, mute your mic, turn your camera on or off, and flip between cameras on devices that have more than one.' }, + ], + }, + 'optical-transfer': { + title: 'Free Optical File Transfer Tool — QR Beam', + description: 'A free tool to beam a file device-to-device with animated QR codes — no network, no accounts. One screen shows codes, the other\'s camera reads them, fully offline.', + intro: 'This free optical file transfer tool moves a file between two devices using nothing but a screen and a camera: one device displays a stream of animated QR codes and the other reads them with its camera. There\'s no network, no server and no accounts — the file never travels over the internet.', + howTo: [ + 'On the sending device, choose Send a file and drop the file to beam.', + 'The screen shows an animated QR code that loops until the file is fully received.', + 'On the second device, choose Receive a file and allow camera access.', + 'Point the camera at the animated code and hold steady until the progress bar completes, then download the received file.', + ], + faqs: [ + { q: 'Is my file sent over the internet or to a server?', a: 'No. The file is encoded into QR codes shown on one screen and read by the other device\'s camera — nothing is uploaded, and no network connection is used at all.' }, + { q: 'How big a file can I transfer this way?', a: 'It\'s best for small files like text, keys, docs and small images. Larger files (beyond about 256 KB) still work but the optical channel is slow and can take several minutes, so keep both devices steady.' }, + { q: 'Why does the QR code keep animating and looping?', a: 'The file is split into blocks sent as a fountain-coded stream, so the code cycles through frames continuously; the receiver collects enough frames to rebuild the file and verifies it with a checksum.' }, + { q: 'Do both devices need to be online?', a: 'No. Because transfer happens purely through screen and camera, it works fully offline — and as a PWA the tool keeps running once the page has loaded once.' }, + ], + }, + 'coord-convert': { + title: 'Free Coordinate Converter Tool — DD, DMS, UTM', + description: 'A free online coordinate converter tool to switch GPS coordinates between decimal, DMS, UTM and geohash, in your browser. Nothing is uploaded and it works offline.', + intro: 'This free coordinate converter tool takes a location in any format — decimal degrees, DMS, UTM or geohash — and instantly shows it in every other format plus a map link. It all runs on your device, so your coordinates never leave your browser.', + howTo: [ + 'Pick your input format: Decimal (DD), DMS, Geohash or UTM.', + 'Type the coordinate, or click My location to fill in where you are.', + 'Read the converted values — DD, DMS, UTM, geohash and an OpenStreetMap link — below.', + 'Use the copy button next to any output to grab that format.', + ], + faqs: [ + { q: 'Are my coordinates sent to a server?', a: 'No. Every conversion runs locally in your browser with JavaScript. Your coordinates never leave your device, including when you use the My location button.' }, + { q: 'What formats can it convert between?', a: 'Decimal degrees (DD), degrees-minutes-seconds (DMS), UTM (zone, hemisphere, easting, northing) and geohash. Enter any one and it fills in all the others at once.' }, + { q: 'How does \'My location\' work?', a: 'It asks your browser for your device\'s GPS position and drops it in as decimal degrees. You\'ll be prompted to grant location permission, and the reading stays on your device.' }, + { q: 'Does it work offline?', a: 'Yes. GoodWebTools is a PWA, so once loaded the converter keeps working without an internet connection.' }, + ], + }, + 'map-explorer': { + title: 'Free Map Explorer Tool — Pin & Measure', + description: 'A free online map tool to search places, drop a pin for its coordinates in multiple formats, and measure distance. Coordinates are computed in your browser.', + intro: 'This free map explorer tool lets you search for a place, click anywhere to drop a pin and read its coordinates, and measure distance point to point. Coordinate conversions and measurements are computed right in your browser as you go.', + howTo: [ + 'Type a place in the search box and press Enter, or click Locate to jump to your position.', + 'Click anywhere on the map to drop a pin and read its Decimal, DMS, UTM, and Geohash coordinates.', + 'Copy any coordinate format with the copy button beside it.', + 'Click Measure, then tap points along the map to get the total distance between them.', + ], + faqs: [ + { q: 'Are my coordinates or pins sent anywhere?', a: 'No. Dropping a pin and converting its coordinates to DMS, UTM, or Geohash happens locally in your browser. Only place-name searches call an external map service to find matching locations.' }, + { q: 'What coordinate formats does it show?', a: 'For each pin you get Decimal degrees, DMS (degrees-minutes-seconds), UTM, and a Geohash, each with a one-click copy button.' }, + { q: 'How do I measure distance?', a: 'Click the Measure button, then click points along your route on the map. The tool sums the segments and shows the total distance.' }, + { q: 'Can I change the map style?', a: 'Yes. Pick from the built-in styles — including an Auto option that follows the site\'s light or dark theme — and your choice is remembered next time.' }, + ], + }, + 'geo-viewer': { + title: 'Free GeoJSON, GPX & KML Viewer Tool — Map Files', + description: 'A free GeoJSON, GPX and KML viewer tool that plots your geo files on a map in your browser. The file is never uploaded, so it stays on your device.', + intro: 'This free GeoJSON, GPX and KML viewer tool drops your geo file straight onto an interactive map so you can see tracks, points and shapes and inspect their properties. The file is parsed on your device and never uploaded.', + howTo: [ + 'Drop a GeoJSON, GPX or KML file onto the box, or click to browse.', + 'The tool parses it and fits the map to your data automatically.', + 'Switch the map Style, and use \'Fit to data\' to re-frame the features any time.', + 'Click any feature on the map to view its properties in the panel below.', + ], + faqs: [ + { q: 'Is my geo file uploaded to a server?', a: 'No. The file is read and parsed locally in your browser, so it never leaves your device. Base map tiles come from OpenFreeMap, but your GeoJSON, GPX or KML data stays local.' }, + { q: 'Which file formats does it support?', a: 'It reads GeoJSON, GPX and KML files, and plots their points, lines and polygons together on one map.' }, + { q: 'How do I see a feature\'s attributes?', a: 'Click the feature on the map. Its properties appear in the panel underneath, listing each key and value from the file.' }, + { q: 'Can I change how the map looks?', a: 'Yes. Pick from the Style buttons to switch base maps, and the map follows your light or dark theme automatically.' }, + ], + }, + 'static-map': { + title: 'Free Static Map Maker Tool — Export Map PNG', + description: 'A free online static map maker tool to frame any location and export the view as a PNG image. The map renders in your browser — no account needed.', + intro: 'This free static map maker tool lets you search a place, pan and zoom to frame the view you want, then export it as a ready-to-use PNG image. Pick a map style, drop an optional center pin, and download — the image is rendered right in your browser.', + howTo: [ + 'Search for a place by name, or click the locate button to jump to your current location.', + 'Pan and zoom the map to frame exactly the view you want.', + 'Pick a map style, and toggle Center pin if you want a marker on the middle of the map.', + 'Click Download PNG to save the framed view as an image with map attribution burned in.', + ], + faqs: [ + { q: 'Is the map image rendered on my device?', a: 'Yes. The map is drawn in your browser and the PNG is generated locally, so the finished image is never sent to a server. Place search does query OpenStreetMap to look up locations.' }, + { q: 'What can I do with the exported PNG?', a: 'The download is a standard PNG of your framed map view, with the required OpenStreetMap and OpenFreeMap attribution included, so you can drop it into documents, slides or posts.' }, + { q: 'Can I add a marker to the map?', a: 'Yes. Turn on Center pin to place a red marker at the middle of the map; it follows the center as you pan so it always marks the spot you framed.' }, + { q: 'Which map styles are available?', a: 'You can switch between several map styles, including an auto option that matches your light or dark theme, then export whichever look you prefer.' }, + ], + }, + 'file-crypt': { + title: 'Free File Encrypt Tool — AES-256 Encrypt & Decrypt', + description: 'A free online tool to password-encrypt or decrypt any file with AES-256 — 100% private. Your file and password never leave your browser.', + intro: 'This free file encryption tool locks any file with a password using AES-256, and decrypts your .gwtenc files back to the original. Both the file and the password stay on your device — nothing is ever uploaded.', + howTo: [ + 'Choose Encrypt to lock a file, or Decrypt to unlock a .gwtenc file.', + 'Drop your file onto the box or click to browse for it.', + 'Type a strong password (8+ characters, a passphrase is best).', + 'Click Encrypt file or Decrypt file, then download the result.', + ], + faqs: [ + { q: 'Is my file or password uploaded anywhere?', a: 'No. Encryption and decryption run entirely in your browser using the Web Crypto API. The file and password never leave your device.' }, + { q: 'What encryption does it use?', a: 'AES-256-GCM, with the key derived from your password via PBKDF2 using 250,000 SHA-256 iterations — strong, standard, browser-native cryptography.' }, + { q: 'What happens if I forget the password?', a: 'There is no recovery. Without the exact password the file cannot be decrypted, so store it somewhere safe before you close the tab.' }, + { q: 'What file do I get, and does it work offline?', a: 'Encrypting produces a .gwtenc file to keep; decrypting restores the original. As a PWA the tool keeps working offline once the page has loaded.' }, + ], + }, + 'zip': { + title: 'Free Zip & Unzip Tool — Create and Extract ZIPs', + description: 'A free online tool to zip files into one archive or unzip and extract a .zip — 100% private. Everything runs in your browser and nothing is uploaded.', + intro: 'This free Zip / Unzip tool bundles any files into a single .zip archive, or opens an existing .zip to list its contents and pull out individual files. Drop your files in and it all happens in your browser — nothing is uploaded.', + howTo: [ + 'Choose Create ZIP to bundle files, or Extract ZIP to open an archive.', + 'In Create mode, drop the files you want to package and remove any you don\'t need.', + 'Click Create ZIP to build and download the archive.', + 'In Extract mode, drop a .zip to list its files, then download any file individually.', + ], + faqs: [ + { q: 'Are my files uploaded when I zip or unzip them?', a: 'No. Both zipping and extracting run entirely in your browser, so your files never leave your device. That makes it safe for private or sensitive documents.' }, + { q: 'What file types can I add to a ZIP?', a: 'Any files — documents, images, code, anything. You can drop in multiple files at once, see each one\'s size and the total, and remove any before creating the archive.' }, + { q: 'Can I extract just one file from a ZIP?', a: 'Yes. Extract mode lists every file inside the archive, and you can download individual files one at a time rather than the whole thing.' }, + { q: 'Does the tool work offline?', a: 'Yes. GoodWebTools is a PWA, so once loaded you can create and extract ZIP archives with no internet connection.' }, + ], + }, + 'archive-extract': { + title: 'Free Archive Extractor Tool — RAR, 7z, ZIP, TAR', + description: 'A free online tool to extract RAR, 7z, ZIP, TAR, GZ and many more archives right in your browser. Files are decoded on your device and never uploaded.', + intro: 'This free archive extractor tool opens RAR, 7z, ZIP, TAR, GZ and many other archives, lists what\'s inside, and lets you download any file individually. Everything is decoded on your device, so the archive and its contents never leave your browser.', + howTo: [ + 'Drop an archive onto the page or click to browse (RAR, 7z, ZIP, TAR, GZ, XZ, ZST and more).', + 'Wait a moment on first use while a small decoder loads and caches.', + 'Browse the list of files and their sizes that the archive contains.', + 'Click the download icon on any file to save it — nothing is uploaded.', + ], + faqs: [ + { q: 'Are my archive files uploaded to a server?', a: 'No. The archive is opened and decoded entirely in your browser using a WebAssembly decoder, so its contents stay on your device.' }, + { q: 'Which archive formats are supported?', a: 'Extraction covers RAR, 7z, ZIP, TAR, GZ/TGZ, BZ2, XZ, ZST, CAB, ISO, CPIO and more. It is extract-only — creating .rar or .7z isn\'t possible client-side.' }, + { q: 'Why won\'t my archive open?', a: 'It may be corrupt, password-protected, or an unsupported format — the tool will tell you. Password-protected archives can\'t be decrypted here.' }, + { q: 'Does it work offline?', a: 'Yes. GoodWebTools is a PWA and the decoder is cached after first use, so you can extract archives with no internet connection.' }, + ], + }, + 'file-split': { + title: 'Free File Split & Join Tool — Cut Into Parts', + description: 'A free online tool to split a large file into fixed-size parts, or rejoin the parts back into one. Runs in your browser — files are never uploaded.', + intro: 'This free file split and join tool cuts any large file into fixed-size pieces so it\'s easier to store or send, then rejoins those pieces back into the original. Everything runs on your device, so your files never leave your browser.', + howTo: [ + 'Choose Split or Join at the top.', + 'To split: drop a file, set the part size in MB, and click Split into parts.', + 'Download each numbered part — they save with an ordered name.', + 'To join: drop all the parts (they\'re ordered by name automatically), reorder if needed, and click Join.', + 'The rejoined file downloads straight to your device.', + ], + faqs: [ + { q: 'Are my files uploaded to split or join them?', a: 'No. The file is sliced and reassembled entirely in your browser, so it never leaves your device — safe for large or private files.' }, + { q: 'How do I rejoin the parts later?', a: 'Switch to Join mode and drop all the parts in. They\'re sorted by name automatically, but you can reorder them, then click Join to rebuild the original file.' }, + { q: 'What part size should I pick?', a: 'Set any size in MB that suits your target — for example to fit an upload limit or an email attachment cap. The tool shows how many parts you\'ll get before you split.' }, + { q: 'Does the tool work offline?', a: 'Yes. GoodWebTools is a PWA, so once loaded it keeps splitting and joining files with no internet connection.' }, + ], + }, + 'hash': { + title: 'Free File Hash Tool — MD5, SHA-256 Checksum', + description: 'A free file hash tool to generate MD5, SHA-1, SHA-256, and SHA-512 checksums. All hashing runs in your browser, so your file is never uploaded anywhere.', + intro: 'This free file hash tool computes a cryptographic checksum — MD5, SHA-1, SHA-256, or SHA-512 — for any file so you can verify integrity or compare copies. Drop a file in and it\'s hashed on your device in a background worker, so it never leaves your browser.', + howTo: [ + 'Drop a file onto the box or click to browse and select one.', + 'Pick an algorithm: MD5, SHA-1, SHA-256, or SHA-512 (SHA-256 is the default).', + 'Watch the progress bar as the file is streamed and hashed in chunks — this handles large files.', + 'Copy the resulting hash, or download it as a checksum file; switch algorithms to re-hash the same file.', + ], + faqs: [ + { q: 'Is my file uploaded to compute the hash?', a: 'No. The file is read and hashed entirely in your browser using a background worker. Nothing is uploaded, so even sensitive files stay on your device.' }, + { q: 'Which hash algorithms are available?', a: 'You can generate MD5, SHA-1, SHA-256, and SHA-512 hashes. SHA-256 is selected by default, and you can switch algorithms at any time to re-hash the same file.' }, + { q: 'Can it handle large files?', a: 'Yes. The file is streamed and hashed in chunks inside a worker, with a progress bar, so it works on large files without freezing the page.' }, + { q: 'Does the hash tool work offline?', a: 'Yes. GoodWebTools is a PWA, so once loaded it keeps generating checksums with no internet connection.' }, + ], + }, + 'video-to-gif': { + title: 'Free Video to GIF Tool — Convert Clips Online', + description: 'A free online video to GIF tool to turn a video clip into an animated GIF. Set FPS, width and a trim range — it runs in your browser and your video is never uploaded.', + intro: 'This free video-to-GIF tool converts a video clip into an animated GIF right in your browser, with control over frame rate, width and which section to use. Drop a video, tweak the settings, and convert — it runs on ffmpeg.wasm on your device, so the video never leaves your browser.', + howTo: [ + 'Drop a video onto the box or click to browse and select one.', + 'Set the FPS, output width, and optionally a start time and length to trim the clip.', + 'Click Convert to GIF — the first run downloads the ~31 MB video engine, then it builds a color palette and encodes.', + 'Preview the animated GIF and download it when it\'s ready.', + ], + faqs: [ + { q: 'Is my video uploaded to a server?', a: 'No. Conversion runs entirely in your browser via ffmpeg.wasm, so the video stays on your device and is never uploaded.' }, + { q: 'How do I keep the GIF small and fast?', a: 'Trim to a short section with the start and length fields, and keep the FPS and width modest — long or large videos with a high width can be slow and produce big files.' }, + { q: 'Can I convert just part of a video?', a: 'Yes. Enter a start time in seconds and a length in seconds to export only that segment; leave length blank to convert to the end of the clip.' }, + { q: 'Does the video-to-GIF tool work offline?', a: 'Yes. GoodWebTools is a PWA, so after the page and engine have loaded once it keeps working with no internet connection.' }, + ], + }, + 'voice-to-text': { + title: 'Free Voice to Text Tool — Transcribe & Subtitles', + description: 'A free online voice-to-text tool that transcribes audio and video on-device with Whisper AI, with SRT/VTT export. Runs in your browser — nothing uploaded.', + intro: 'This free voice-to-text tool transcribes speech from a recording or an audio/video file into editable text, timestamps and subtitles using on-device Whisper AI. You can record right in the page or drop a file, and everything is processed in your browser, so your audio never leaves your device.', + howTo: [ + 'Click Record to capture from your mic, or drop an audio or video file (mp3, wav, m4a, mp4…).', + 'Pick a model — fast English, accurate English, or multilingual — and, for multilingual, choose the spoken language.', + 'Click Transcribe; the model downloads once on first use, then runs on your device.', + 'Switch between Text, Timestamped and Subtitles tabs, edit the text, and download .txt, .srt or .vtt.', + ], + faqs: [ + { q: 'Is my audio uploaded to a server?', a: 'No. Transcription runs entirely in your browser with an on-device Whisper model. Your recording or file never leaves your device, so private conversations stay private.' }, + { q: 'Can it transcribe languages other than English?', a: 'Yes. Choose one of the multilingual models and select the spoken language — Indonesian, Malay, Japanese, Spanish and many more — for the best accuracy. Auto-detect is also available.' }, + { q: 'Can I export subtitles?', a: 'Yes. Open the Subtitles tab and download SRT or VTT files with timestamps, or grab plain text (.txt) or a timestamped version instead.' }, + { q: 'Why does the first run take a while?', a: 'The AI model is downloaded and cached on first use, and larger or \'Better\' models are slower — especially on phones. After the initial download it loads from cache, and transcription runs locally on your device.' }, + ], + }, + 'video-convert': { + title: 'Free Video Converter Tool — Convert & Compress', + description: 'A free online video converter tool to convert, compress, trim, or resize video to MP4, WebM, or MOV. Runs in your browser — nothing is uploaded.', + intro: 'This free video converter tool changes your clip\'s format, shrinks its size, trims it, or scales it down — all through ffmpeg running in your browser. Drop a video, set your options, and download the result without anything leaving your device.', + howTo: [ + 'Drop a video onto the box or click to browse for one.', + 'Choose an output format — MP4 (H.264), WebM (VP9), or MOV — and set the CRF quality slider.', + 'Optionally set a target width, a start time and length to trim, or tick Drop audio.', + 'Click Convert, watch the progress bar, then preview and download the result.', + ], + faqs: [ + { q: 'Is my video uploaded to a server?', a: 'No. Transcoding runs entirely in your browser via ffmpeg.wasm, so the video never leaves your device — good for private or large files.' }, + { q: 'How do I make the file smaller?', a: 'Raise the CRF value for more compression, set a smaller target width, and optionally drop the audio track. The result shows its size as a percentage of the original.' }, + { q: 'Can I trim the video?', a: 'Yes. Enter a Start time in seconds and a Length in seconds to export just that portion; leave them blank to convert the whole clip.' }, + { q: 'Why is the first run slow?', a: 'The first conversion downloads the video engine (about 31 MB) and transcoding is CPU-bound, so long or high-resolution clips take longer. After the first load the engine is cached.' }, + ], + }, + 'video-to-audio': { + title: 'Free Video to Audio Tool — Extract Audio Track', + description: 'A free video to audio tool that rips the audio out of a video as MP3, M4A, WAV or Opus — in your browser. The file is never uploaded and stays on your device.', + intro: 'This free video-to-audio tool extracts the soundtrack from a video and saves it as MP3, M4A, WAV or Opus, with optional start and length trimming. It runs entirely in your browser via ffmpeg.wasm, so the video never leaves your device.', + howTo: [ + 'Drop a video (or audio) file onto the box, or click to browse.', + 'Choose an output format — MP3, M4A (AAC), WAV or Opus.', + 'Optionally set a Start time and Length in seconds to grab just a clip.', + 'Click Extract audio, then preview the result and Download it.', + ], + faqs: [ + { q: 'Is my video uploaded to extract the audio?', a: 'No. The conversion runs in your browser with ffmpeg.wasm, so the file never leaves your device. Nothing is uploaded to a server.' }, + { q: 'Which audio formats can I export?', a: 'You can save the audio as MP3, M4A (AAC), WAV (PCM) or Opus. Pick the one you need from the Format dropdown before extracting.' }, + { q: 'Can I extract only part of the video?', a: 'Yes. Enter a Start time and a Length in seconds to trim the output to just that section; leave Length blank to grab everything from the start point on.' }, + { q: 'Why does the first run download something?', a: 'The audio engine (ffmpeg.wasm, around 31 MB) is fetched once on first use, then reused. After that, extractions start faster.' }, + ], + }, + 'audio-convert': { + title: 'Free Audio Converter Tool — Convert & Trim', + description: 'A free online audio converter tool to convert, re-encode and trim audio between MP3, M4A, Opus, WAV and FLAC. Runs in your browser — nothing is uploaded.', + intro: 'This free audio converter tool converts audio between MP3, M4A, Opus, WAV and FLAC, lets you set the bitrate, and can trim to a start and length — all powered by ffmpeg running in your browser. Drop a file, choose your options, and download the result without anything ever being uploaded.', + howTo: [ + 'Drop an audio (or video) file onto the box or click to browse.', + 'Pick an output format — MP3, M4A, Opus, WAV or FLAC — and choose a bitrate for the lossy formats.', + 'Optionally set a Start time and Length in seconds to trim just the section you want.', + 'Click Convert (the first run downloads the audio engine once), then preview and download the result.', + ], + faqs: [ + { q: 'Is my audio uploaded to a server?', a: 'No. Conversion runs entirely in your browser via ffmpeg.wasm, so your file never leaves your device — safe for private recordings.' }, + { q: 'Which formats can I convert to?', a: 'You can export to MP3, M4A (AAC), Opus, WAV or FLAC. WAV and FLAC are lossless, while the others let you choose a bitrate from 96 up to 320 kbps.' }, + { q: 'Can I trim the audio while converting?', a: 'Yes. Enter a Start time in seconds and a Length in seconds to keep only that section; leave Length blank to convert through to the end.' }, + { q: 'Why does the first conversion take longer?', a: 'The first run downloads the roughly 31 MB audio engine once. After that it\'s cached, so subsequent conversions start much faster.' }, + ], + }, + 'screen-recorder': { + title: 'Free Screen Recorder Tool — Record Screen & Tab', + description: 'A free online screen recorder tool to capture your screen, window or tab with optional mic audio — 100% private. Everything is recorded in your browser, nothing uploaded.', + intro: 'This free screen recorder tool captures your whole screen, a single window or a browser tab, encodes it locally, and hands you a video to download. Nothing is uploaded — the recording is made and saved entirely on your device.', + howTo: [ + 'Click Start recording and choose the screen, window or tab to share.', + 'Tick \'Also record microphone\' first if you want your voice included.', + 'Watch the running timer while you record.', + 'Click Stop, then preview the clip and Download it as WebM.', + ], + faqs: [ + { q: 'Is my recording uploaded to a server?', a: 'No. The screen is captured and encoded locally in your browser, and the finished video stays on your device until you download it. Nothing is uploaded.' }, + { q: 'Can I record system or tab audio too?', a: 'System and tab audio are included when your browser allows it during the share prompt, and you can also tick \'Also record microphone\' to add your voice.' }, + { q: 'What format is the video saved in?', a: 'Recordings are saved as WebM (VP9 or VP8 where supported), which you download with one click after stopping.' }, + { q: 'Why does it say screen recording isn\'t supported?', a: 'The tool needs a browser with the getDisplayMedia and MediaRecorder APIs. Update to a current desktop browser, since some mobile browsers don\'t offer screen capture.' }, + ], + }, + 'screenshot': { + title: 'Free Screenshot Tool — Capture Screen & Crop', + description: 'A free online screenshot tool to capture your screen with a countdown, then crop it — 100% private. Frames are grabbed in your browser and never uploaded.', + intro: 'This free Screenshot tool captures a screen, window or browser tab after a countdown, then lets you drag out a crop region before saving. The frame is drawn to a canvas locally, so your screen contents never leave your device.', + howTo: [ + 'Set a countdown in seconds to give yourself time to arrange the target window or tab.', + 'Click Capture screen and pick the screen, window or tab to grab.', + 'Drag on the captured image to select a crop region, or export the whole shot.', + 'Choose PNG or JPG, then export and download, copy, or open the result in the annotator.', + ], + faqs: [ + { q: 'Is my screenshot uploaded anywhere?', a: 'No. The frame is captured and drawn to a canvas entirely in your browser, so your screen contents never leave your device and nothing is sent to a server.' }, + { q: 'How do I capture only part of the screen?', a: 'After capturing, drag a rectangle on the preview image to mark a crop region — a live pixel readout shows its size — then click Export crop. You can also Export full for the whole screenshot.' }, + { q: 'Why is some content captured as black?', a: 'DRM-protected content, such as certain video players, captures as black. That\'s a browser security rule, not a bug in the tool.' }, + { q: 'What image formats can I save in?', a: 'You can export the screenshot as either a PNG or a JPG, then download it, copy it to the clipboard, or send it to the annotator to mark it up.' }, + ], + }, + 'code-scratchpad': { + title: 'Free Code Scratchpad Tool — Multi-File Editor', + description: 'A free online multi-file code editor tool with syntax highlighting and autosave. Runs in your browser and keeps everything on your device — nothing uploaded.', + intro: 'This free Code Scratchpad tool is a VS Code-grade editor with tabs, so you can jot, paste and edit code across multiple files with real syntax highlighting. Your tabs autosave locally and everything stays on your device — nothing is uploaded.', + howTo: [ + 'Start typing or paste code — the extension in the file name sets the language.', + 'Click + to add a tab, double-click a tab to rename it, or use Open to load a file from disk.', + 'Edit with familiar shortcuts like ⌘D to select the next match and ⌥↑/↓ to move lines.', + 'Use Copy to grab the active file, or Save to write it back to disk — tabs autosave locally.', + ], + faqs: [ + { q: 'Is my code uploaded or synced to a server?', a: 'No. The editor runs entirely in your browser and tabs are saved locally on your device, so your code never leaves your machine.' }, + { q: 'Will my tabs still be there when I come back?', a: 'Yes. Open files autosave to local browser storage a moment after each change and are restored the next time you open the tool.' }, + { q: 'How does it know which language to highlight?', a: 'It picks the language from the file name\'s extension — for example naming a tab app.py highlights Python — and updates when you rename the tab.' }, + { q: 'Does it work offline?', a: 'Yes. GoodWebTools is a PWA, so once loaded the scratchpad keeps working with no internet connection.' }, + ], + }, + 'sqlite-playground': { + title: 'Free SQLite Playground Tool — Run SQL Online', + description: 'A free online tool to run SQL against a real SQLite database right in your browser, with schema browsing and CSV export. Your database is never uploaded.', + intro: 'This free SQLite playground tool lets you write and run SQL against a real SQLite database that lives entirely in your browser. Create tables, query data, or open an existing .sqlite file — nothing is ever uploaded.', + howTo: [ + 'Write SQL in the editor and click Run or press ⌘⏎ / Ctrl+Enter to execute it (or just the selected text).', + 'Load sample to explore a ready-made database, or Open .sqlite to bring in your own file.', + 'Browse tables from the schema panel and read results in the grid; click any cell to copy it.', + 'Export a result as CSV or JSON, or Export .sqlite to save the whole database to your device.', + ], + faqs: [ + { q: 'Is my database uploaded to a server?', a: 'No. The SQLite engine runs in your browser and the database stays on your device — nothing is sent anywhere, so it\'s safe for private data.' }, + { q: 'Is my data saved when I close the tab?', a: 'When your browser supports OPFS the database persists locally between visits, and your last query is remembered too. If persistence isn\'t available you\'ll see a warning — export the database to keep it.' }, + { q: 'Can I open an existing SQLite file?', a: 'Yes. Click Open .sqlite to load a .sqlite, .db or .sqlite3 file, then query it right away. You can also export the current database back out at any time.' }, + { q: 'Does the playground work offline?', a: 'Yes. GoodWebTools is a PWA, so once loaded it keeps running SQL with no internet connection.' }, + ], + }, + 'whiteboard': { + title: 'Free Whiteboard Tool — Sketch & Diagram Online', + description: 'A free online whiteboard tool to sketch, diagram, flowchart, and mind-map on an infinite canvas. Runs in your browser and saves locally — nothing uploaded.', + intro: 'This free whiteboard tool gives you an infinite canvas for sketches, diagrams, flowcharts, and mind maps, powered by Excalidraw. Draw right in your browser — your board autosaves to this device and can be exported as PNG, SVG, or a reusable .excalidraw file.', + howTo: [ + 'Start drawing on the canvas with the shape, arrow, text, and freehand tools.', + 'Your board autosaves locally every 30 seconds; a \'Saved\' indicator shows the status and you can save now anytime.', + 'Click Expand to fill the screen, and optionally hide the navbar for maximum canvas space.', + 'Export your work as PNG, SVG, or a reusable .excalidraw file from Excalidraw\'s menu.', + ], + faqs: [ + { q: 'Is my whiteboard saved to a server or shared?', a: 'No. Your drawing is saved locally in your own browser and everything runs on your device. Nothing is uploaded, so your ideas stay private to you.' }, + { q: 'Will I lose my drawing if I close the tab?', a: 'No. The board autosaves to your browser every 30 seconds and also saves when you leave or hide the tab, and it\'s restored the next time you open the tool on the same device.' }, + { q: 'What can I export?', a: 'You can export your board as a PNG or SVG image, or as a reusable .excalidraw file that you can reopen and keep editing later, including at excalidraw.com.' }, + { q: 'Does the whiteboard work offline?', a: 'Yes. GoodWebTools is a PWA, so once the page has loaded the whiteboard keeps working with no internet connection.' }, + ], + }, + 'db-diagram': { + title: 'Free DB Diagram Tool — DBML to ER Diagram & SQL', + description: 'A free online DB diagram tool to design database schemas in DBML with a live ER diagram, SQL export and image export. Runs in your browser — nothing is uploaded.', + intro: 'This free DB diagram tool turns a schema written in DBML into a live entity-relationship diagram you can drag to arrange, then export as SQL for your database or as an image. Everything runs in your browser and your schema is saved locally, so nothing you design is ever uploaded.', + howTo: [ + 'Write your schema in DBML in the left editor — the ER diagram updates live on the right.', + 'Drag tables to arrange them, or drag column to column to add a relationship.', + 'Pick a SQL dialect (PostgreSQL, MySQL, SQL Server, Oracle, SQLite or ClickHouse) and click Export SQL.', + 'Export the diagram as a PNG, JPEG, WebP or SVG image, or save the project to reopen later.', + ], + faqs: [ + { q: 'Is my database schema uploaded anywhere?', a: 'No. Parsing, diagramming and SQL generation all happen in your browser, and your DBML and layout are saved locally in your browser — nothing is sent to a server.' }, + { q: 'What SQL dialects can I export?', a: 'You can generate CREATE TABLE SQL for PostgreSQL, MySQL, SQL Server, Oracle, SQLite and ClickHouse, then copy it or download a .sql file.' }, + { q: 'Will I lose my work if I close the tab?', a: 'No. Your schema and table layout autosave in your browser, so they reload next time. You can also save a project file or export a .dbml to keep a portable copy.' }, + { q: 'How do I add a relationship between tables?', a: 'Either write a Ref line in the DBML, or drag from one table\'s column handle to another column on the canvas — the tool writes the matching Ref into your DBML automatically.' }, + ], + }, + 'signature': { + title: 'Free Signature Pad Tool — Draw & Export PNG/SVG', + description: 'A free online signature pad tool to draw your signature and export it as a transparent PNG or SVG, in your browser. Nothing is uploaded and it works offline.', + intro: 'This free signature pad tool lets you draw your signature with a mouse, trackpad or finger and save it as a clean PNG or SVG for documents and forms. Everything stays in your browser, so your signature never leaves your device.', + howTo: [ + 'Sign in the box with your mouse, trackpad or finger.', + 'Set the pen color and stroke width, and toggle Transparent background on or off.', + 'Download as PNG (transparent or on white) or as scalable SVG.', + 'Copy the signature to your clipboard or open it in the annotator, or Clear to redraw.', + ], + faqs: [ + { q: 'Is my signature uploaded anywhere?', a: 'No. The signature is drawn and exported entirely in your browser. It never leaves your device, so it\'s safe for signing documents and forms.' }, + { q: 'Should I export PNG or SVG?', a: 'PNG is a ready-to-paste image, and with Transparent background it drops cleanly onto any document. SVG is a vector file that stays crisp at any size — ideal for scaling or further editing.' }, + { q: 'Can I sign on my phone?', a: 'Yes. The pad supports touch input, so you can sign with your finger on a phone or tablet, or with a stylus.' }, + { q: 'Does the transparent option really remove the background?', a: 'Yes. With Transparent background on, the PNG is exported with no fill behind the strokes; turn it off to flatten the signature onto a white background instead.' }, + ], + }, +}; + +export function getToolSeo(id: string): ToolSeoContent | undefined { + return toolSeo[id]; +} diff --git a/src/types/tool.ts b/src/types/tool.ts index 25aab17..c319527 100644 --- a/src/types/tool.ts +++ b/src/types/tool.ts @@ -9,6 +9,31 @@ export interface AssetRef { description: string; } +export interface ToolFaq { + q: string; + a: string; +} + +/** + * Per-tool SEO content, authored and keyed by tool id (see registry/tool-seo). + * All fields optional — a tool with no entry renders exactly as before. This is + * the raw material for richer /description, on-page copy, and FAQPage/ + * HowTo structured data. Kept out of ToolDef so the registry stays lean and this + * layer can go per-language later. + */ +export interface ToolSeoContent { + /** Optimized <title> body ("| GoodWebTools" is appended). ~45-55 chars. */ + title?: string; + /** Unique meta/OG description. ~150-160 chars. */ + description?: string; + /** Lead paragraph shown under the H1 (unique, keyword-aware). */ + intro?: string; + /** "How to use" steps → rendered on-page + HowTo JSON-LD. */ + howTo?: string[]; + /** FAQ → rendered on-page + FAQPage JSON-LD. */ + faqs?: ToolFaq[]; +} + export interface ToolDef { id: string; name: string;