{"id":4307,"date":"2026-05-17T15:04:02","date_gmt":"2026-05-17T15:04:02","guid":{"rendered":"https:\/\/primetoolhub.com\/?page_id=4307"},"modified":"2026-07-13T12:26:46","modified_gmt":"2026-07-13T12:26:46","slug":"free-web-tools-by-category","status":"publish","type":"page","link":"https:\/\/schoolict.net\/tools\/free-web-tools-by-category\/","title":{"rendered":"Browse Free Web Tools by Category &#8211; Prime Tool Hub"},"content":{"rendered":"\n<style>\n.pth-intro-band{max-width:1400px;margin:0 auto 45px;padding:0 20px;box-sizing:border-box;font-family:'Inter',system-ui,sans-serif}\n.pth-intro-band *{box-sizing:border-box;min-width:0}\n.pth-intro-lead{background:linear-gradient(180deg,#f8fafc 0%,#ffffff 100%);border:1px solid #e2e8f0;border-left:5px solid #2563eb;border-radius:14px;padding:28px 30px;margin-bottom:22px}\n.pth-intro-badge{display:inline-flex;align-items:center;gap:7px;background:#eff6ff;color:#1d4ed8;font-size:12px;font-weight:800;letter-spacing:.6px;text-transform:uppercase;padding:6px 12px;border-radius:20px;border:1px solid #bfdbfe;margin-bottom:14px}\n.pth-intro-lead h2{font-size:1.55rem;font-weight:800;color:#0f172a;margin:0 0 10px;line-height:1.3}\n.pth-intro-lead p{color:#1e293b;font-weight:500;font-size:1.05rem;line-height:1.7;margin:0}\n.pth-intro-lead strong{color:#0f172a;font-weight:800}\n.pth-intro-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:18px}\n.pth-intro-card{background:#fff;border:1px solid #e2e8f0;border-radius:14px;padding:22px;box-shadow:0 4px 6px -1px rgba(0,0,0,.02);transition:transform .25s ease,box-shadow .25s ease,border-color .25s ease}\n.pth-intro-card:hover{transform:translateY(-4px);border-color:#bfdbfe;box-shadow:0 12px 22px -8px rgba(37,99,235,.18)}\n.pth-intro-icon{width:44px;height:44px;border-radius:12px;background:#eff6ff;border:1px solid #bfdbfe;display:flex;align-items:center;justify-content:center;font-size:21px;margin-bottom:14px}\n.pth-intro-card h3{font-size:1.02rem;font-weight:800;color:#0f172a;margin:0 0 8px;line-height:1.35}\n.pth-intro-card p{font-size:.93rem;color:#1e293b;font-weight:500;line-height:1.62;margin:0}\n.pth-intro-card.pth-green .pth-intro-icon{background:#ecfdf5;border-color:#a7f3d0}\n.pth-intro-card.pth-green:hover{border-color:#a7f3d0;box-shadow:0 12px 22px -8px rgba(5,150,105,.16)}\n.pth-intro-card.pth-amber .pth-intro-icon{background:#fffbeb;border-color:#fde68a}\n.pth-intro-card.pth-amber:hover{border-color:#fde68a;box-shadow:0 12px 22px -8px rgba(146,64,14,.16)}\n@media(max-width:768px){.pth-intro-band{padding:0 10px;margin-bottom:32px}.pth-intro-lead{padding:22px 20px}.pth-intro-lead h2{font-size:1.35rem}.pth-intro-lead p{font-size:1rem}}\n<\/style>\n\n<div class=\"pth-intro-band\">\n\n  <div class=\"pth-intro-lead\">\n    <span class=\"pth-intro-badge\"><span aria-hidden=\"true\">\ud83d\uddc2\ufe0f<\/span> Grouped by job, not by hype<\/span>\n    <h2>Browse the Tools by Category<\/h2>\n    <p>Each card below is one category, with a live count and the full list of tools inside it \u2014 scroll the box to read every name before you click. Hit <strong>Explore Category<\/strong> and the main directory opens with that filter already applied.<\/p>\n  <\/div>\n\n  <div class=\"pth-intro-grid\">\n\n    <div class=\"pth-intro-card\">\n      <div class=\"pth-intro-icon\" aria-hidden=\"true\">\ud83d\udd22<\/div>\n      <h3>The Count Is Live, Not Typed<\/h3>\n      <p>Every &#8220;12 Tools&#8221; badge is counted from the tool registry when the page loads. When a tool is added or merged into a studio, the number here changes on its own \u2014 no stale lists.<\/p>\n    <\/div>\n\n    <div class=\"pth-intro-card pth-green\">\n      <div class=\"pth-intro-icon\" aria-hidden=\"true\">\ud83d\udc40<\/div>\n      <h3>See Inside Before You Click<\/h3>\n      <p>The grey box on each card lists every tool in that category by name. If what you need is not on that list, you have saved yourself a page load.<\/p>\n    <\/div>\n\n    <div class=\"pth-intro-card pth-amber\">\n      <div class=\"pth-intro-icon\" aria-hidden=\"true\">\ud83d\udd00<\/div>\n      <h3>A Tool Can Sit in Two Places<\/h3>\n      <p>The JWT Decoder is a Security tool and a Developer tool, so it is counted in both. That is deliberate \u2014 you should find it from whichever direction you came.<\/p>\n    <\/div>\n\n  <\/div>\n\n<\/div>\n\n\n<style>\r\n\/* ==========================================================\r\n   PTH MASTER CATEGORY DIRECTORY \u2014 v2.0\r\n   Human copy \u00b7 WCAG AA \u00b7 Zero CLS \u00b7 ES5 \u00b7 No inline handlers\r\n   ========================================================== *\/\r\n.pth-cat-page-wrapper { max-width: 1400px; margin: 40px auto; padding: 0 20px; font-family: 'Inter', system-ui, sans-serif; box-sizing: border-box; }\r\n.pth-cat-page-wrapper * { box-sizing: border-box; min-width: 0; }\r\n\r\n.pth-cat-grid-container { display: grid; grid-template-columns: repeat(1, 1fr); gap: 24px; }\r\n@media (min-width: 768px)  { .pth-cat-grid-container { grid-template-columns: repeat(2, 1fr); } }\r\n@media (min-width: 1280px) { .pth-cat-grid-container { grid-template-columns: repeat(3, 1fr); } }\r\n\r\n.pth-cat-card-lite {\r\n    background: #ffffff; border: 1px solid #e2e8f0; border-radius: 16px; padding: 24px;\r\n    display: flex; flex-direction: column; text-decoration: none !important;\r\n    transition: border-color .3s ease, box-shadow .3s ease, transform .3s ease;\r\n    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);\r\n    height: 460px;\r\n}\r\n.pth-cat-card-lite:hover { border-color: #bfdbfe; box-shadow: 0 12px 24px -8px rgba(37,99,235,0.15); transform: translateY(-4px); }\r\n\r\n.pth-cat-header-lite { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 12px; }\r\n.pth-cat-title-lite { font-size: 22px; font-weight: 800; color: #0f172a; margin: 0; display: flex; align-items: center; gap: 10px; line-height: 1.25; }\r\n.pth-cat-count-badge { background: #eff6ff; color: #1d4ed8; padding: 4px 12px; border-radius: 20px; font-size: 12px; font-weight: 800; border: 1px dashed #bfdbfe; white-space: nowrap; }\r\n\r\n.pth-cat-desc-lite { font-size: 14px; color: #334155; font-weight: 500; line-height: 1.55; margin: 0 0 16px 0; }\r\n\r\n\/* Scrollable tools box *\/\r\n.pth-cat-featured-box {\r\n    background: #f8fafc; border-radius: 12px; padding: 16px; border: 1px solid #f1f5f9;\r\n    transition: background .3s ease, border-color .3s ease;\r\n    flex-grow: 1; overflow-y: auto; padding-right: 10px;\r\n}\r\n.pth-cat-card-lite:hover .pth-cat-featured-box { background: #eff6ff; border-color: #dbeafe; }\r\n.pth-cat-featured-box::-webkit-scrollbar { width: 5px; }\r\n.pth-cat-featured-box::-webkit-scrollbar-track { background: transparent; }\r\n.pth-cat-featured-box::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 10px; }\r\n.pth-cat-card-lite:hover .pth-cat-featured-box::-webkit-scrollbar-thumb { background: #94a3b8; }\r\n\r\n.pth-cat-featured-title { font-size: 12px; color: #334155; font-weight: 800; text-transform: uppercase; letter-spacing: .5px; margin-bottom: 12px; display: block; }\r\n\r\n.pth-cat-tools-list { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 12px; list-style: none; padding: 0; margin: 0; }\r\n.pth-cat-tools-list li { font-size: 12px; color: #334155; font-weight: 600; display: flex; align-items: center; gap: 6px; overflow: hidden; }\r\n.pth-cat-tools-list li span.tool-name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\r\n\r\n\/* CTA *\/\r\n.pth-cat-cta-btn {\r\n    display: flex; align-items: center; justify-content: center; width: 100%; padding: 12px; margin-top: 16px;\r\n    background: #f8fafc; color: #1d4ed8; font-weight: 700; font-size: 14px; border-radius: 8px;\r\n    border: 1px solid #bfdbfe; transition: all .3s ease;\r\n}\r\n.pth-cat-card-lite:hover .pth-cat-cta-btn { background: #2563eb; color: #ffffff; border-color: #2563eb; box-shadow: 0 4px 10px rgba(37,99,235,.2); }\r\n\r\n\/* Pagination *\/\r\n.pth-cat-pagination { display: flex; justify-content: center; align-items: center; gap: 8px; margin-top: 40px; flex-wrap: wrap; }\r\n.pth-page-btn { background: #ffffff; border: 1px solid #cbd5e1; color: #334155; padding: 8px 16px; border-radius: 8px; font-size: 14px; font-weight: 700; cursor: pointer; transition: all .2s; }\r\n.pth-page-btn:hover:not(:disabled) { background: #f1f5f9; border-color: #64748b; color: #1d4ed8; }\r\n.pth-page-btn.active { background: #2563eb; color: #ffffff; border-color: #2563eb; }\r\n.pth-page-btn:disabled { opacity: .5; cursor: not-allowed; }\r\n\r\n\/* ==========================================================\r\n   ZERO-CLS RESERVATION\r\n   ========================================================== *\/\r\n#pth-cat-pagination-wrap { min-height: 96px; }\r\n\r\n.pth-cat-skel {\r\n    background: #ffffff; border: 1px solid #e2e8f0; border-radius: 16px; padding: 24px;\r\n    display: flex; flex-direction: column; gap: 14px; height: 460px; pointer-events: none;\r\n}\r\n.pth-skel-row {\r\n    border-radius: 8px; background: #eef2f7;\r\n    background-image: linear-gradient(90deg, #eef2f7 0%, #f8fafc 50%, #eef2f7 100%);\r\n    background-size: 200% 100%;\r\n    animation: pth-skel-shimmer 1.4s linear infinite;\r\n}\r\n.pth-skel-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; }\r\n.pth-skel-h-title { width: 55%; height: 22px; }\r\n.pth-skel-h-badge { width: 74px; height: 24px; border-radius: 20px; flex-shrink: 0; }\r\n.pth-skel-line { width: 100%; height: 12px; }\r\n.pth-skel-line.pth-short { width: 72%; }\r\n.pth-skel-box { flex-grow: 1; border-radius: 12px; }\r\n.pth-skel-cta { width: 100%; height: 43px; border-radius: 8px; }\r\n@keyframes pth-skel-shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }\r\n@media (prefers-reduced-motion: reduce) { .pth-skel-row { animation: none; } }\r\n<\/style>\r\n\r\n<div class=\"pth-cat-page-wrapper\">\r\n    <div id=\"pth-category-grid\" class=\"pth-cat-grid-container\"><\/div>\r\n    <div id=\"pth-cat-pagination-wrap\"><\/div>\r\n<\/div>\r\n\r\n<script data-no-optimize=\"1\" data-no-minify=\"1\" data-cfasync=\"false\">\r\n(function () {\r\n    'use strict';\r\n\r\n    var CATS_PER_PAGE = 6;\r\n\r\n    window.pthCatDirApp = window.pthCatDirApp || { initialized: false, page: 1 };\r\n    var App = window.pthCatDirApp;\r\n\r\n    \/* ---------- Zero-CLS skeleton (runs at parse time) ---------- *\/\r\n    var grid = document.getElementById('pth-category-grid');\r\n    if (grid && grid.children.length === 0) {\r\n        var skel = '<div class=\"pth-cat-skel\" aria-hidden=\"true\">' +\r\n            '<div class=\"pth-skel-head\">' +\r\n                '<div class=\"pth-skel-row pth-skel-h-title\"><\/div>' +\r\n                '<div class=\"pth-skel-row pth-skel-h-badge\"><\/div>' +\r\n            '<\/div>' +\r\n            '<div class=\"pth-skel-row pth-skel-line\"><\/div>' +\r\n            '<div class=\"pth-skel-row pth-skel-line pth-short\"><\/div>' +\r\n            '<div class=\"pth-skel-row pth-skel-box\"><\/div>' +\r\n            '<div class=\"pth-skel-row pth-skel-cta\"><\/div>' +\r\n        '<\/div>';\r\n        var skelHtml = '';\r\n        for (var s = 0; s < CATS_PER_PAGE; s++) { skelHtml += skel; }\r\n        grid.innerHTML = skelHtml;\r\n    }\r\n\r\n    \/* ---------- Human category descriptions ---------- *\/\r\n    var CAT_DESC = {\r\n        \"ai-tools\": \"Transcribe an audio file, shorten a long article, or read the tone of a block of text. The models run in your browser, so the file never leaves your machine.\",\r\n        \"video-media\": \"Trim, merge, compress, crop and convert clips, plus record your screen. Short clips are fine on a phone; a half-gigabyte file is a laptop job.\",\r\n        \"image-tools\": \"Compress and resize photos, strip a background, blur faces before you post, or check whether a picture has been edited. Batch export included.\",\r\n        \"audio-voice\": \"Cut and convert audio, kill background noise, pull vocals out of a track, or turn typed text into speech. Recording and dictation are here too.\",\r\n        \"text-ai\": \"Count words, switch between title case and camelCase, write meta tags with a live SERP preview, and pull random words when you need placeholder copy.\",\r\n        \"pdf-tools\": \"Merge, split and reorder pages, annotate a PDF, or export Markdown straight to print-ready PDF. No file ever gets uploaded.\",\r\n        \"document-tools\": \"Sort messy folders of Word, Excel and text files, spot duplicates, and convert Markdown to clean HTML you can paste anywhere.\",\r\n        \"web-development\": \"Minify HTML, CSS and JS, preview a page across device widths, build box-shadows visually, and audit a page for layout-shift and accessibility problems.\",\r\n        \"developer-tools\": \"The daily-driver set: format and query JSON, test a regex with live match highlighting, diff two files line by line, and mock an API response.\",\r\n        \"server-utilities\": \"Write a cron expression without guessing the field order, and convert epoch timestamps to a real date in the timezone you actually care about.\",\r\n        \"data-converters\": \"Move data between formats \u2014 hex to HSL, decimal to binary, CSV to SQL INSERT statements, percent-encoded URLs back to readable text.\",\r\n        \"generators\": \"Passwords with real entropy scoring, SHA and bcrypt hashes, UUIDs, QR codes, and dummy JSON records for seeding a test database.\",\r\n        \"calculators\": \"Work out how many photos fit on a card, how many calories are in a recipe, or how a Boolean expression reduces to its minimal form.\",\r\n        \"security\": \"Decode a JWT to see why it expired, verify a bcrypt hash, encode Base64 with proper UTF-8 handling, and check an image's EXIF for signs of editing.\",\r\n        \"electronics\": \"Built for logic-design coursework: truth tables, K-map minimisation, NAND\/NOR conversion with Verilog export, and 7400-series IC pinouts.\",\r\n        \"marketing\": \"Check the sentiment of a review before you reply, and write title tags and OG descriptions that actually fit inside Google's pixel limit.\",\r\n        \"health-fitness\": \"Add up the macros in a recipe you cooked, and build a weekly meal plan around a calorie target you set yourself.\",\r\n        \"prompt-engineering\": \"Build detailed prompts for image and video models \u2014 camera angle, lens, lighting and mood, assembled from parts instead of typed from memory.\",\r\n        \"utilities\": \"The small jobs that eat five minutes each: quick conversions, quick lookups, quick fixes. Open one, do the thing, close the tab.\"\r\n    };\r\n\r\n    function esc(str) {\r\n        return String(str == null ? '' : str)\r\n            .replace(\/&\/g, '&amp;').replace(\/<\/g, '&lt;').replace(\/>\/g, '&gt;')\r\n            .replace(\/\"\/g, '&quot;').replace(\/'\/g, '&#39;');\r\n    }\r\n\r\n    function buildCatList() {\r\n        var data = window.pthMasterData;\r\n        var out = [];\r\n        var i, j;\r\n\r\n        for (i = 0; i < data.categories.length; i++) {\r\n            var cat = data.categories[i];\r\n            if (cat.id === 'Directory' || cat.id === 'all') { continue; }\r\n\r\n            var tools = [];\r\n            for (j = 0; j < data.tools.length; j++) {\r\n                var t = data.tools[j];\r\n                var cats = Object.prototype.toString.call(t.category) === '[object Array]' ? t.category : [t.category];\r\n                var k, hit = false;\r\n                for (k = 0; k < cats.length; k++) {\r\n                    if (cats[k] === cat.id) { hit = true; break; }\r\n                }\r\n                if (hit) { tools.push(t); }\r\n            }\r\n\r\n            if (tools.length > 0) {\r\n                out.push({ id: cat.id, name: cat.name, icon: cat.icon, toolsList: tools, count: tools.length });\r\n            }\r\n        }\r\n        return out;\r\n    }\r\n\r\n    function render() {\r\n        var container = document.getElementById('pth-category-grid');\r\n        var pagWrap = document.getElementById('pth-cat-pagination-wrap');\r\n        if (!container || !window.pthMasterData) { return; }\r\n\r\n        var cats = buildCatList();\r\n        var totalPages = Math.ceil(cats.length \/ CATS_PER_PAGE);\r\n        if (App.page > totalPages) { App.page = totalPages; }\r\n        if (App.page < 1) { App.page = 1; }\r\n\r\n        var start = (App.page - 1) * CATS_PER_PAGE;\r\n        var pageCats = cats.slice(start, start + CATS_PER_PAGE);\r\n\r\n        var html = '';\r\n        var i, j;\r\n\r\n        for (i = 0; i < pageCats.length; i++) {\r\n            var cat = pageCats[i];\r\n            var desc = CAT_DESC[cat.id] || ('All the ' + esc(cat.name) + ' tools on the site, grouped in one place.');\r\n\r\n            var toolsHtml = '';\r\n            for (j = 0; j < cat.toolsList.length; j++) {\r\n                var tool = cat.toolsList[j];\r\n                toolsHtml += '<li title=\"' + esc(tool.title) + '\">' +\r\n                    '<span class=\"icon\" aria-hidden=\"true\">' + (tool.icon || '\ud83d\udd38') + '<\/span>' +\r\n                    '<span class=\"tool-name\">' + esc(tool.title) + '<\/span>' +\r\n                '<\/li>';\r\n            }\r\n\r\n            html += '<a href=\"\/free-web-tools-directory-prime-tool-hub\/?cat=' + encodeURIComponent(cat.id) + '\" ' +\r\n                    'class=\"pth-cat-card-lite\" aria-label=\"Browse all ' + esc(cat.name) + ' tools\">' +\r\n                '<div class=\"pth-cat-header-lite\">' +\r\n                    '<h3 class=\"pth-cat-title-lite\"><span aria-hidden=\"true\">' + (cat.icon || '') + '<\/span> ' + esc(cat.name) + '<\/h3>' +\r\n                    '<div class=\"pth-cat-count-badge\">' + cat.count + ' Tools<\/div>' +\r\n                '<\/div>' +\r\n                '<p class=\"pth-cat-desc-lite\">' + desc + '<\/p>' +\r\n                '<div class=\"pth-cat-featured-box\">' +\r\n                    '<span class=\"pth-cat-featured-title\">Included Tools<\/span>' +\r\n                    '<ul class=\"pth-cat-tools-list\">' + toolsHtml + '<\/ul>' +\r\n                '<\/div>' +\r\n                '<span class=\"pth-cat-cta-btn\">Explore Category \u2192<\/span>' +\r\n            '<\/a>';\r\n        }\r\n\r\n        container.innerHTML = html;\r\n\r\n        var pagHtml = '';\r\n        if (totalPages > 1) {\r\n            pagHtml += '<div class=\"pth-cat-pagination\">';\r\n            pagHtml += '<button type=\"button\" class=\"pth-page-btn\" data-pth-page=\"' + (App.page - 1) + '\" aria-label=\"Previous page\"' + (App.page === 1 ? ' disabled' : '') + '>\u00ab Prev<\/button>';\r\n            for (i = 1; i <= totalPages; i++) {\r\n                pagHtml += '<button type=\"button\" class=\"pth-page-btn' + (i === App.page ? ' active' : '') + '\" data-pth-page=\"' + i + '\" aria-label=\"Page ' + i + '\">' + i + '<\/button>';\r\n            }\r\n            pagHtml += '<button type=\"button\" class=\"pth-page-btn\" data-pth-page=\"' + (App.page + 1) + '\" aria-label=\"Next page\"' + (App.page === totalPages ? ' disabled' : '') + '>Next \u00bb<\/button>';\r\n            pagHtml += '<\/div>';\r\n        }\r\n        if (pagWrap) { pagWrap.innerHTML = pagHtml; }\r\n    }\r\n\r\n    \/* ---------- Pagination via delegation (no inline onclick) ---------- *\/\r\n    function attachEvents() {\r\n        var pagWrap = document.getElementById('pth-cat-pagination-wrap');\r\n        if (!pagWrap || pagWrap.getAttribute('data-pth-bound') === '1') { return; }\r\n        pagWrap.setAttribute('data-pth-bound', '1');\r\n\r\n        pagWrap.addEventListener('click', function (ev) {\r\n            var btn = ev.target;\r\n            if (!btn || !btn.getAttribute || !btn.getAttribute('data-pth-page')) { return; }\r\n            if (btn.disabled) { return; }\r\n\r\n            var next = parseInt(btn.getAttribute('data-pth-page'), 10);\r\n            if (isNaN(next)) { return; }\r\n\r\n            App.page = next;\r\n            render();\r\n\r\n            var wrap = document.querySelector('.pth-cat-page-wrapper');\r\n            if (wrap) {\r\n                var top = wrap.getBoundingClientRect().top + window.pageYOffset - 50;\r\n                if (window.scrollTo) { window.scrollTo(0, top); }\r\n            }\r\n        });\r\n    }\r\n\r\n    \/* ---------- Bootstrap: wait for pthMasterData, capped ---------- *\/\r\n    function runInit() {\r\n        if (App.initialized) { return; }\r\n        if (!document.getElementById('pth-category-grid')) { return; }\r\n        if (!window.pthMasterData || !window.pthMasterData.categories || !window.pthMasterData.tools) { return; }\r\n\r\n        App.initialized = true;\r\n        render();\r\n        attachEvents();\r\n    }\r\n\r\n    var tries = 0;\r\n    function poll() {\r\n        runInit();\r\n        tries++;\r\n        if (!App.initialized && tries < 100) { setTimeout(poll, 100); }\r\n    }\r\n\r\n    poll();\r\n    if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', runInit); }\r\n    window.addEventListener('load', function () { setTimeout(runInit, 50); });\r\n})();\r\n<\/script>\n\n\n<style id=\"pth-nt10-styles\">\r\n.pth-recent-container{max-width:1480px;margin:40px auto;padding:0 20px;box-sizing:border-box;font-family:'Inter',system-ui,sans-serif}\r\n.pth-recent-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:25px;flex-wrap:wrap;gap:15px}\r\n.pth-recent-title{font-size:20px;font-weight:800;color:#0f172a;margin:0;display:flex;align-items:center;gap:10px;text-transform:uppercase;letter-spacing:.5px;flex-wrap:wrap}\r\n.pth-recent-count-badge{background:#0f172a;color:#fff;font-size:14px;font-weight:800;padding:4px 12px;border-radius:20px;text-transform:none;letter-spacing:normal;display:inline-flex;align-items:center;justify-content:center}\r\n.pth-recent-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap}\r\n.pth-recent-dir-btn{font-size:14px;font-weight:700;color:#fff;background:#047857;padding:8px 18px;border-radius:30px;text-decoration:none;transition:background .2s;display:inline-flex;align-items:center;gap:6px;border:1px solid #047857}\r\n.pth-recent-dir-btn:hover{background:#064e3b;color:#fff}\r\n.pth-recent-video-btn{font-size:14px;font-weight:700;color:#fff;background:#b91c1c;padding:8px 18px;border-radius:30px;text-decoration:none;transition:background .2s;display:inline-flex;align-items:center;gap:6px;border:1px solid #b91c1c}\r\n.pth-recent-video-btn:hover{background:#991b1b;color:#fff}\r\n.pth-recent-view-all{font-size:14px;font-weight:700;color:#2563eb;background:#eff6ff;padding:8px 18px;border-radius:30px;text-decoration:none;transition:background .2s,color .2s;display:inline-flex;align-items:center;gap:6px}\r\n.pth-recent-view-all:hover{background:#2563eb;color:#fff}\r\n.pth-recent-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:20px}\r\n.pth-recent-card{background:#fff;border:1px solid #e2e8f0;border-radius:12px;overflow:hidden;display:flex;flex-direction:column;height:100%;transition:transform .3s ease,box-shadow .3s ease,border-color .3s ease;box-shadow:0 4px 10px rgba(0,0,0,.02);text-decoration:none!important}\r\n.pth-recent-card:hover{transform:translateY(-5px);box-shadow:0 15px 30px rgba(0,0,0,.08);border-color:#93c5fd}\r\n.pth-img-wrap{position:relative;width:100%;padding-bottom:56.25%;background-color:#f1f5f9;border-bottom:1px solid #e2e8f0;flex-shrink:0}\r\n@supports(aspect-ratio:16\/9){.pth-img-wrap{padding-bottom:0;aspect-ratio:16\/9}}\r\n.pth-img-wrap img{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;display:block}\r\n.pth-recent-content{padding:15px;display:flex;flex-direction:column;flex-grow:1}\r\n.pth-recent-meta{font-size:11px;color:#64748b;font-weight:700;margin-bottom:10px;display:flex;align-items:center;gap:6px;text-transform:uppercase;min-height:16px}\r\n.pth-recent-cat{color:#0f172a;background:#e2e8f0;padding:3px 8px;border-radius:4px}\r\n.pth-meta-updated{color:#2563eb;font-weight:600;margin-left:4px;padding-left:6px;border-left:1px solid #cbd5e1;text-transform:none}\r\n.pth-recent-post-title{font-size:15px;font-weight:800;color:#0f172a;margin:0 0 12px;line-height:1.4;transition:color .2s;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;min-height:63px}\r\n.pth-recent-card:hover .pth-recent-post-title{color:#2563eb}\r\n.pth-recent-btn{margin-top:auto;display:flex;align-items:center;justify-content:center;background:#f8fafc;color:#2563eb;border:1px solid #bfdbfe;padding:8px 16px;border-radius:8px;font-size:12px;font-weight:700;transition:background .2s,color .2s;width:100%;box-sizing:border-box}\r\n.pth-recent-card:hover .pth-recent-btn{background:#2563eb;color:#fff;border-color:#2563eb}\r\n@media(min-width:992px) and (max-width:1200px){.pth-recent-grid{grid-template-columns:repeat(3,1fr)}}\r\n@media(max-width:991px){.pth-recent-container{display:none!important}}\r\n<\/style>\r\n\r\n<div class=\"pth-recent-container\">\r\n    <div class=\"pth-recent-header\">\r\n        <h2 class=\"pth-recent-title\">\r\n            <span style=\"font-size:1.2em;\" aria-hidden=\"true\">\ud83d\udcdd<\/span>\r\n            LATEST TECHNICAL GUIDES\r\n            <span class=\"pth-recent-count-badge\">58<\/span>\r\n        <\/h2>\r\n        <div class=\"pth-recent-actions\">\r\n            <a href=\"https:\/\/schoolict.net\/tools\/free-web-tools-directory-prime-tool-hub\/\" class=\"pth-recent-dir-btn\" aria-label=\"Browse all free web tools\">\r\n                <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><polygon points=\"12 2 2 7 12 12 22 7 12 2\"><\/polygon><polyline points=\"2 17 12 22 22 17\"><\/polyline><polyline points=\"2 12 17 22 22 12\"><\/polyline><\/svg>\r\n                All Web Tools\r\n            <\/a>\r\n            <a href=\"https:\/\/schoolict.net\/tools\/free-web-tools-by-category\/\" class=\"pth-recent-video-btn\" aria-label=\"Browse tools by category\">\r\n                <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\"><\/path><\/svg>\r\n                Categories\r\n            <\/a>\r\n            <a href=\"\/ultimate-free-web-tools\/\" class=\"pth-recent-view-all\">View All Articles \u2192<\/a>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"pth-recent-grid\">\r\n            <a href=\"https:\/\/schoolict.net\/tools\/how-to-convert-csv-to-sql\/\" class=\"pth-recent-card\">\r\n            <div class=\"pth-img-wrap\">\r\n                <img src=\"https:\/\/schoolict.net\/tools\/wp-content\/uploads\/2026\/08\/how-to-convert-csv-to-sql-400x223.jpeg\"\r\n                     alt=\"How to Convert CSV to SQL: Types, Dialects &amp; Safe INSERT Statementshow-to-convert-csv-to-sql\"\r\n                     width=\"640\" height=\"360\"\r\n                     loading=\"eager\"\r\n                     decoding=\"async\"\r\n                     data-no-lazy=\"1\"\r\n                      fetchpriority=\"high\">\r\n            <\/div>\r\n            <div class=\"pth-recent-content\">\r\n                <div class=\"pth-recent-meta\">\r\n                    <span class=\"pth-recent-cat\">\ud83d\udcc2 Data Converters<\/span>\r\n                    <span aria-hidden=\"true\">\u2022<\/span>\r\n                    <span>\ud83d\udcc5 Aug 9                                            <\/span>\r\n                <\/div>\r\n                <h3 class=\"pth-recent-post-title\">How to Convert CSV to SQL: Types, Dialects &amp; Safe INSERT Statementshow-to-convert-csv-to-sql<\/h3>\r\n                <span class=\"pth-recent-btn\">\ud83d\udcd6 Read More<\/span>\r\n            <\/div>\r\n        <\/a>\r\n            <a href=\"https:\/\/schoolict.net\/tools\/how-pdf-files-work\/\" class=\"pth-recent-card\">\r\n            <div class=\"pth-img-wrap\">\r\n                <img src=\"https:\/\/schoolict.net\/tools\/wp-content\/uploads\/2026\/08\/how-PDF-files-work-400x223.jpeg\"\r\n                     alt=\"How PDF Files Work Inside &#8211; Text, Pages and Why Redaction Is Hard\"\r\n                     width=\"640\" height=\"360\"\r\n                     loading=\"lazy\"\r\n                     decoding=\"async\"\r\n                     data-no-lazy=\"1\"\r\n                     >\r\n            <\/div>\r\n            <div class=\"pth-recent-content\">\r\n                <div class=\"pth-recent-meta\">\r\n                    <span class=\"pth-recent-cat\">\ud83d\udcc2 Document Tool<\/span>\r\n                    <span aria-hidden=\"true\">\u2022<\/span>\r\n                    <span>\ud83d\udcc5 Aug 9                                            <\/span>\r\n                <\/div>\r\n                <h3 class=\"pth-recent-post-title\">How PDF Files Work Inside &#8211; Text, Pages and Why Redaction Is Hard<\/h3>\r\n                <span class=\"pth-recent-btn\">\ud83d\udcd6 Read More<\/span>\r\n            <\/div>\r\n        <\/a>\r\n            <a href=\"https:\/\/schoolict.net\/tools\/how-to-spot-ai-written-content\/\" class=\"pth-recent-card\">\r\n            <div class=\"pth-img-wrap\">\r\n                <img src=\"https:\/\/schoolict.net\/tools\/wp-content\/uploads\/2026\/08\/Spotting_AI_written_content-400x223.jpeg\"\r\n                     alt=\"How to Spot AI Written Content \u2014 And Why Detector Tools Keep Getting It Wrong\"\r\n                     width=\"640\" height=\"360\"\r\n                     loading=\"lazy\"\r\n                     decoding=\"async\"\r\n                     data-no-lazy=\"1\"\r\n                     >\r\n            <\/div>\r\n            <div class=\"pth-recent-content\">\r\n                <div class=\"pth-recent-meta\">\r\n                    <span class=\"pth-recent-cat\">\ud83d\udcc2 Text &amp; SEO Tools<\/span>\r\n                    <span aria-hidden=\"true\">\u2022<\/span>\r\n                    <span>\ud83d\udcc5 Aug 9                                            <\/span>\r\n                <\/div>\r\n                <h3 class=\"pth-recent-post-title\">How to Spot AI Written Content \u2014 And Why Detector Tools Keep Getting It Wrong<\/h3>\r\n                <span class=\"pth-recent-btn\">\ud83d\udcd6 Read More<\/span>\r\n            <\/div>\r\n        <\/a>\r\n            <a href=\"https:\/\/schoolict.net\/tools\/how-sentiment-analysis-works\/\" class=\"pth-recent-card\">\r\n            <div class=\"pth-img-wrap\">\r\n                <img src=\"https:\/\/schoolict.net\/tools\/wp-content\/uploads\/2026\/08\/How-Sentiment-Analysis-Works-400x223.jpeg\"\r\n                     alt=\"How Sentiment Analysis Works \u2014 And Why &#8220;Not Bad&#8221; Is So Hard\"\r\n                     width=\"640\" height=\"360\"\r\n                     loading=\"lazy\"\r\n                     decoding=\"async\"\r\n                     data-no-lazy=\"1\"\r\n                     >\r\n            <\/div>\r\n            <div class=\"pth-recent-content\">\r\n                <div class=\"pth-recent-meta\">\r\n                    <span class=\"pth-recent-cat\">\ud83d\udcc2 AI assistant<\/span>\r\n                    <span aria-hidden=\"true\">\u2022<\/span>\r\n                    <span>\ud83d\udcc5 Aug 9                                            <\/span>\r\n                <\/div>\r\n                <h3 class=\"pth-recent-post-title\">How Sentiment Analysis Works \u2014 And Why &#8220;Not Bad&#8221; Is So Hard<\/h3>\r\n                <span class=\"pth-recent-btn\">\ud83d\udcd6 Read More<\/span>\r\n            <\/div>\r\n        <\/a>\r\n            <a href=\"https:\/\/schoolict.net\/tools\/how-product-tours-work\/\" class=\"pth-recent-card\">\r\n            <div class=\"pth-img-wrap\">\r\n                <img src=\"https:\/\/schoolict.net\/tools\/wp-content\/uploads\/2026\/08\/How-Product-Tours-Work-400x223.jpeg\"\r\n                     alt=\"How Product Tours Work Under the Hood\"\r\n                     width=\"640\" height=\"360\"\r\n                     loading=\"lazy\"\r\n                     decoding=\"async\"\r\n                     data-no-lazy=\"1\"\r\n                     >\r\n            <\/div>\r\n            <div class=\"pth-recent-content\">\r\n                <div class=\"pth-recent-meta\">\r\n                    <span class=\"pth-recent-cat\">\ud83d\udcc2 Web Development<\/span>\r\n                    <span aria-hidden=\"true\">\u2022<\/span>\r\n                    <span>\ud83d\udcc5 Aug 7                                                    <span class=\"pth-meta-updated\">(Updated: Aug 9)<\/span>\r\n                                            <\/span>\r\n                <\/div>\r\n                <h3 class=\"pth-recent-post-title\">How Product Tours Work Under the Hood<\/h3>\r\n                <span class=\"pth-recent-btn\">\ud83d\udcd6 Read More<\/span>\r\n            <\/div>\r\n        <\/a>\r\n        <\/div>\r\n<\/div>\n\n\n<div id=\"start-seo-article\"><\/div>\n<p><!-- ============================================================\n     BLOCK 1 \u2014 FEATURE BOXES + STEPS\n     free-web-tools-by-category | paste as WP HTML block\n     ============================================================ --><\/p>\n<p><!-- ============================================================\n     BLOCK 2 \u2014 ARTICLE BODY\n     paste in WP Code Editor mode (TOC heading detection)\n     ============================================================ --><\/p>\n\n\n<p class=\"wp-block-paragraph\">Last updated: July 2026<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd34 <strong>Why the Category Counts Add Up to More Than the Tool Count<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Add every badge on this page together and you get a bigger number than the number of tools on the site. That is not a bug. A tool can belong to more than one category, and several do.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Take the <a href=\"https:\/\/schoolict.net\/tools\/jwt-decoder-inspector\/\">JWT Decoder &amp; Inspector<\/a>. Someone debugging a failed login looks for it under <strong>Developer Tools<\/strong>. Someone auditing a token&#8217;s expiry claim looks under <strong>Security<\/strong>. Filing it in one place would mean half the people who need it never find it, so it sits in both and gets counted twice. The <a href=\"https:\/\/schoolict.net\/tools\/free-ai-image-detector-forensic-analyzer\/\">AI Forensic Analyzer<\/a> does the same across Image Tools, AI Tools and Security. This kind of multi-label grouping is called <a href=\"https:\/\/en.wikipedia.org\/wiki\/Faceted_classification\" rel=\"noreferrer noopener\" target=\"_blank\">faceted classification<\/a>, and it is the right trade-off when people arrive from very different directions.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udfe1 <strong>Categories or the Full Directory: Which One Should You Open?<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Two different jobs, two different pages.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udd35 <strong>Use this page when you are browsing.<\/strong> You know roughly what area you are in \u2014 &#8220;something for audio&#8221;, &#8220;something for my logic-design assignment&#8221; \u2014 but not which tool. The scroll box lets you read every name in the category before committing to a click.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udfe0 <strong>Use the <a href=\"https:\/\/schoolict.net\/tools\/free-web-tools-directory-prime-tool-hub\/\">full tools directory<\/a> when you already know the feature.<\/strong> Its search box matches the feature lines on each card, not just titles. Typing <em>Verilog<\/em> there lands you on the Logic Gate Converter Pro straight away; scrolling categories to find that would take three times as long.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udfe2 <strong>Why Some Categories Look Smaller Than You Expect<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Video Tools shows two cards, and people ask where the merger, the trimmer, the GIF exporter and the watermark tool went. They are all inside the <a href=\"https:\/\/schoolict.net\/tools\/turbo-video-editor\/\">Video Studio<\/a> as tabs. Publishing them as separate pages would inflate the count and give you four near-identical thin pages to choose between. One page with tabs is a smaller number and a better afternoon.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">What These Cards Will Not Tell You<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Being straight about it. The card lists tool <em>names<\/em>, not features \u2014 a name like &#8220;Advanced Image Studio Pro&#8221; does not tell you it can batch-export a ZIP, so for feature-level questions you still need the directory search or the tool page itself. The categories are a rough grouping, not a taxonomy: &#8220;Utilities&#8221; is a catch-all and always will be. And nothing here indicates which tools are heavy \u2014 a phone will handle the Word Counter and choke on a 500 MB video, and no badge on this page warns you about that. If you want the reasoning behind grouping related tools into tabbed studios instead of separate pages, that is written up here: <a href=\"https:\/\/schoolict.net\/tools\/ultimate-free-web-tools\/\">why fewer, deeper tool pages beat many thin ones<\/a>.<\/p>\n\n\n\n<style>\n.pth-faq-section{margin:50px auto 40px;font-family:inherit;max-width:1400px;padding:0 20px;box-sizing:border-box}\n.pth-faq-header{font-size:1.8rem;font-weight:800;color:#0f172a;margin-bottom:25px;border-bottom:2px solid #e2e8f0;padding-bottom:10px;display:flex;align-items:center;gap:10px}\n.pth-faq-grid{display:grid;grid-template-columns:1fr;gap:20px}\n@media(min-width:768px){.pth-faq-grid{grid-template-columns:repeat(2,1fr)}}\n@media(min-width:1024px){.pth-faq-grid{grid-template-columns:repeat(3,1fr)}}\n.pth-faq-card{background:#f8fafc;padding:24px;border-radius:12px;border:1px solid #e2e8f0;transition:transform .2s ease;break-inside:avoid}\n.pth-faq-card:hover{transform:translateY(-3px);box-shadow:0 4px 12px rgba(0,0,0,.05)}\n.pth-faq-q{color:#0f172a;font-size:1rem;font-weight:700;margin:0 0 12px;line-height:1.4}\n.pth-faq-a{margin:0;font-size:.95rem;color:#1e293b;line-height:1.6;font-weight:500}\n<\/style>\n\n<div class=\"pth-faq-section\">\n  <div class=\"pth-faq-header\">\u2753 Frequently Asked Questions<\/div>\n  <div class=\"pth-faq-grid\">\n\n    <div class=\"pth-faq-card\">\n      <p class=\"pth-faq-q\">Why does the same tool appear in two categories?<\/p>\n      <p class=\"pth-faq-a\">Because two different people would look for it in two different places. A JWT decoder is a developer tool to one person and a security tool to another. Duplicating the listing costs nothing and saves a search.<\/p>\n    <\/div>\n\n    <div class=\"pth-faq-card\">\n      <p class=\"pth-faq-q\">Do the tool counts update automatically?<\/p>\n      <p class=\"pth-faq-a\">Yes. Each badge is counted from the tool registry when the page loads, not typed into the card. Add a tool and the number moves without anyone editing this page.<\/p>\n    <\/div>\n\n    <div class=\"pth-faq-card\">\n      <p class=\"pth-faq-q\">What does the Explore Category button actually do?<\/p>\n      <p class=\"pth-faq-a\">It opens the main directory with that category filter already applied, through a link ending in <code>?cat=<\/code>. The URL is stable, so you can bookmark it or send it to someone and they land on the same filtered view.<\/p>\n    <\/div>\n\n    <div class=\"pth-faq-card\">\n      <p class=\"pth-faq-q\">A category I expected is missing. Where is it?<\/p>\n      <p class=\"pth-faq-a\">Empty categories are not rendered. If a category has zero tools right now \u2014 usually because its tools were merged into a studio filed elsewhere \u2014 the card is skipped instead of showing a hollow &#8220;0 Tools&#8221; box.<\/p>\n    <\/div>\n\n    <div class=\"pth-faq-card\">\n      <p class=\"pth-faq-q\">Why does Video Tools only have a couple of cards?<\/p>\n      <p class=\"pth-faq-a\">The merger, trimmer, GIF exporter, watermark tool and colour grader all live inside the Video Studio as tabs. One page with tabs beats five near-identical pages, so the count is small on purpose.<\/p>\n    <\/div>\n\n    <div class=\"pth-faq-card\">\n      <p class=\"pth-faq-q\">Can I search from this page?<\/p>\n      <p class=\"pth-faq-a\">Not here \u2014 this page is for browsing. The search box on the main directory is the one that matches feature text, so if you know the feature you want, start there instead of scrolling categories.<\/p>\n    <\/div>\n\n    <div class=\"pth-faq-card\">\n      <p class=\"pth-faq-q\">Is there a limit on how many tools I can use?<\/p>\n      <p class=\"pth-faq-a\">No. There is no account, no quota, and no paid tier. Every tool on every category card is open, and each runs in your browser rather than on a server, so there is nothing to meter.<\/p>\n    <\/div>\n\n    <div class=\"pth-faq-card\">\n      <p class=\"pth-faq-q\">Do the category pages work on a phone?<\/p>\n      <p class=\"pth-faq-a\">Yes. The grid drops to a single column and the included-tools box stays scrollable. Everything remains readable and nothing is hidden \u2014 the full text is in the mobile page, not stripped out of it.<\/p>\n    <\/div>\n\n    <div class=\"pth-faq-card\">\n      <p class=\"pth-faq-q\">How are new tools assigned to a category?<\/p>\n      <p class=\"pth-faq-a\">By what someone would be trying to do when they go looking for it, not by what technology it uses internally. That is why an EXIF viewer sits under Image Tools rather than under a &#8220;metadata&#8221; heading nobody searches for.<\/p>\n    <\/div>\n\n  <\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\uddc2\ufe0f Grouped by job, not by hype Browse the Tools by Category Each card below is one category, with a live count and the full list of tools inside it \u2014 scroll the box to read every name before you click. Hit Explore Category and the main directory opens with that filter already applied. \ud83d\udd22 &#8230; <a title=\"How Product Tours Work Under the Hood\" class=\"read-more\" href=\"https:\/\/schoolict.net\/tools\/how-product-tours-work\/\" aria-label=\"Read more about How Product Tours Work Under the Hood\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":4315,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-4307","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/schoolict.net\/tools\/wp-json\/wp\/v2\/pages\/4307","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/schoolict.net\/tools\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/schoolict.net\/tools\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/schoolict.net\/tools\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/schoolict.net\/tools\/wp-json\/wp\/v2\/comments?post=4307"}],"version-history":[{"count":1,"href":"https:\/\/schoolict.net\/tools\/wp-json\/wp\/v2\/pages\/4307\/revisions"}],"predecessor-version":[{"id":6713,"href":"https:\/\/schoolict.net\/tools\/wp-json\/wp\/v2\/pages\/4307\/revisions\/6713"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/schoolict.net\/tools\/wp-json\/wp\/v2\/media\/4315"}],"wp:attachment":[{"href":"https:\/\/schoolict.net\/tools\/wp-json\/wp\/v2\/media?parent=4307"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}