From 313eef2aec4c88275283efe380c462c96c1da9a5 Mon Sep 17 00:00:00 2001 From: dikshajangra12918-oss Date: Fri, 31 Jul 2026 21:53:42 +0530 Subject: [PATCH 1/3] Add: tfidf-search-engine --- data/tools.json | 2680 ++++---------------------------- tools/tfidf-search-engine.html | 822 ++++++++++ 2 files changed, 1163 insertions(+), 2339 deletions(-) create mode 100644 tools/tfidf-search-engine.html diff --git a/data/tools.json b/data/tools.json index d1ebf57..c720805 100644 --- a/data/tools.json +++ b/data/tools.json @@ -79,23 +79,8 @@ "shortDescription": "Parse, validate, mask, search, and export .env files entirely in the browser.", "longDescription": "## .env Parser & Validator\n\nA privacy-first developer utility for inspecting .env configuration files locally without uploads, servers, or dependencies.\n\n### Features\n\n- Paste, upload, or drag and drop .env files\n- Parses comments, blank lines, quoted values, escaped characters, empty values, and spaces around equals signs\n- Detects duplicate keys, malformed lines, invalid names, whitespace issues, empty values, invalid quotes, unused comments, and suspicious values\n- Masks sensitive variables such as API keys, secrets, passwords, tokens, private keys, and database URLs by default\n- Live search, filtering, sorting, pagination, and validation statistics\n- Exports pretty or minified JSON and cleaned .env files with duplicate and comment options\n- Keyboard shortcuts for opening, clearing, searching, and downloading\n- Works completely offline in a single browser-only HTML file", "category": "utilities", - "tags": [ - "configuration", - "developer-tools", - "dotenv", - "env", - "offline", - "parser", - "security", - "validator" - ], - "techStack": [ - "Clipboard API", - "CSS3", - "FileReader API", - "HTML5", - "Vanilla JS" - ], + "tags": ["configuration", "developer-tools", "dotenv", "env", "offline", "parser", "security", "validator"], + "techStack": ["Clipboard API", "CSS3", "FileReader API", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -105,22 +90,8 @@ "shortDescription": "Parse .env files under strict rules, with detailed line-by-line validation, quick-fix suggestions, and metrics.", "longDescription": "## .env Parser & Validator (Strict Mode)\n\nA highly precise developer utility for strict validation of .env configuration files. Detects syntax anomalies, invalid characters, unclosed quotes, duplicate definitions, and style issues, complete with actionable inline fixes.\n\n### Features\n\n- Strict key validation: enforces alphanumeric character sets and correct start characters\n- Line-by-line visual analyzer showing green, yellow (warning), and red (error) status\n- Actionable 'Quick Fix' options to automatically correct spaces, quote wrapping, keys, and duplicate definitions\n- Dashboard displaying summary metrics (valid, empty, duplicate, warning, and error keys)\n- Normalization/Sanitization export options: trim spaces, enforce uppercase keys, strip/keep inline comments, normalize quotes\n- Fast local processing: all parses happen in-browser offline with zero server uploads", "category": "utilities", - "tags": [ - "configuration", - "developer-tools", - "dotenv", - "env", - "offline", - "parser", - "security", - "validator" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["configuration", "developer-tools", "dotenv", "env", "offline", "parser", "security", "validator"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -130,22 +101,8 @@ "shortDescription": "Generate a comprehensive accessibility matrix comparing all background and foreground color combinations against WCAG 2.1 contrast guidelines.", "longDescription": "## A11y Contrast Grid Generator\n\nAn interactive utility to evaluate a color palette's accessibility by generating a comprehensive grid comparing all background/foreground color combinations against WCAG 2.1 contrast guidelines.\n\n### Features\n\n- **Interactive Palette Manager**: Add, edit, or delete custom colors (HEX, RGB, HSL) with real-time swatch previews.\n- **Accessibility Compliance Matrix**: Generates a matrix comparing every color as background against every color as foreground, displaying contrast ratios and WCAG status (AA, AAA, or Fail) for normal and large text.\n- **Intelligent Filtering**: Filter the grid to show only compliant combinations, only AA-compliant, or only AAA-compliant pairs.\n- **Design Tokens Export**: Export color combinations as Tailwind configurations, CSS custom properties, SCSS variables, or JSON.\n- **Export Capabilities**: Export the final contrast grid as an SVG, CSV, or formatted HTML snippet.", "category": "accessibility", - "tags": [ - "a11y", - "accessibility", - "color", - "contrast", - "css", - "design-system", - "developer-tools", - "ui", - "wcag" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["a11y", "accessibility", "color", "contrast", "css", "design-system", "developer-tools", "ui", "wcag"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -155,24 +112,8 @@ "shortDescription": "Visually create and customize robots.txt files with support for multiple user-agents, crawl rules, sitemaps, and instant code generation.", "longDescription": "## Advanced Robots.txt Generator\n\nGenerate a valid robots.txt file through an intuitive visual interface. Configure multiple user-agent groups, Allow/Disallow directives, Crawl-delay values, optional Host directives, and XML Sitemaps while seeing the generated robots.txt update instantly.\n\n### Features\n\n- Visual editor for robots.txt generation\n- Support for multiple User-agent groups\n- Add Allow and Disallow rules with one click\n- Optional Crawl-delay directive for each user-agent\n- Optional Host directive support\n- Add multiple XML Sitemap URLs\n- Built-in presets including Allow All, Disallow All, Standard SEO, and WordPress Base\n- Live syntax-highlighted robots.txt preview\n- Copy generated robots.txt to the clipboard\n- Download the generated file as robots.txt\n- Fully responsive interface with modern dark theme\n- Built with HTML, CSS, and Vanilla JavaScript with no backend required", "category": "web-seo", - "tags": [ - "crawler", - "generator", - "robots", - "robots-txt", - "search-engine", - "seo", - "sitemap", - "user-agent", - "webmaster", - "website" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["crawler", "generator", "robots", "robots-txt", "search-engine", "seo", "sitemap", "user-agent", "webmaster", "website"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -182,21 +123,8 @@ "shortDescription": "Draft image alt text and get instant feedback on whether it's clear, concise, and accessible.", "longDescription": "## Alt Text Helper\n\nPreview an image locally, draft its alt text, and get instant guidance on whether the description is too vague, too long, repetitive, or missing detail β€” with a scaffold to help you start. Runs fully offline.\n\n### Features\n\n- Upload or drag-and-drop an image to preview it locally (never uploaded)\n- Insert a guided fill-in scaffold to start a description\n- Flags common issues: too vague, too long, repetitive, redundant \"image of\" openers, unfilled placeholders, and filenames\n- Live character counter with screen-reader-friendly length guidance\n- Tips for writing accessible, context-aware alt text\n- Copy the final alt text to the clipboard\n- Clear and start over with one click\n- Fully responsive, keyboard accessible, and works offline", "category": "accessibility", - "tags": [ - "a11y", - "accessibility", - "alt-text", - "content", - "image", - "utility", - "web" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["a11y", "accessibility", "alt-text", "content", "image", "utility", "web"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -206,21 +134,8 @@ "shortDescription": "Visually create and customize CSS cubic-bezier() easing functions with a live animation preview.", "longDescription": "## Animation Cubic-Bezier Editor\n\nA professional visual editor for crafting custom CSS easing functions.\n\n### Features\n\n- **Interactive Canvas:** Draggable control points to visually sculpt your bezier curve.\n- **Live Preview:** Real-time animation box to instantly test how your easing feels.\n- **Smart Presets:** One-click load standard easings (`ease`, `ease-in`, `ease-out`, `ease-in-out`, `linear`).\n- **Instant Export:** Auto-generates standard-compliant `cubic-bezier()` CSS syntax with a 1-click copy feature.\n- **Offline First:** Operates entirely client-side using Vanilla JS and native SVG manipulation.", "category": "css", - "tags": [ - "animation", - "bezier", - "css", - "easing", - "frontend", - "generator", - "transition" - ], - "techStack": [ - "CSS3", - "HTML5", - "SVG", - "Vanilla JS" - ], + "tags": ["animation", "bezier", "css", "easing", "frontend", "generator", "transition"], + "techStack": ["CSS3", "HTML5", "SVG", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -232,20 +147,8 @@ "name": "API Response Mocker", "shortDescription": "Define custom JSON responses and simulate API endpoints directly in the browser.", "status": "live", - "tags": [ - "api", - "developer-tools", - "endpoint", - "json", - "mock", - "response", - "testing" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ] + "tags": ["api", "developer-tools", "endpoint", "json", "mock", "response", "testing"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"] }, { "id": "aria-role-reference", @@ -253,22 +156,8 @@ "shortDescription": "A fast, offline reference for common WAI-ARIA roles with attributes, semantic alternatives, and examples.", "longDescription": "## ARIA Role Reference\n\nBrowse and search common WAI-ARIA roles as a quick offline reference. Each role shows its purpose, commonly used attributes, the preferred semantic HTML alternative, a copyable code example, and common mistakes to avoid.\n\n### Features\n\n- Searchable, category-grouped list of common ARIA roles\n- Instant filtering by role name, category, or purpose\n- Purpose and description for each role\n- Commonly used ARIA attributes shown as chips\n- Semantic HTML alternative highlighted where one exists\n- Copyable code example demonstrating correct usage\n- Common accessibility mistakes for each role\n- Fully responsive, keyboard accessible, and works offline", "category": "accessibility", - "tags": [ - "a11y", - "accessibility", - "aria", - "html", - "reference", - "semantic-html", - "utility", - "web-development" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["a11y", "accessibility", "aria", "html", "reference", "semantic-html", "utility", "web-development"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -278,23 +167,8 @@ "shortDescription": "Encode plain text characters into binary byte structures, or translate stream bits back into readable text.", "longDescription": "## ASCII / UTF-8 Text to Binary Converter\n\nA lightweight, client-side educational utility for mapping character strings directly to binary sequences. Input plain text strings to watch them translate instantly into formatted 8-bit octet blocks, or paste raw binary bitstreams to decode them back into standard plain-text strings.\n\n### Features\n\n- Real-time bidirectional encoding and decoding actions\n- Formatted 8-bit visual grid displaying text character mapping highlights\n- One-click copy-to-clipboard functionality\n- Sample configurations loaded automatically on click\n- Session clearing functions\n- Dark and light theme configurations derived from system values\n- Privacy-first layout executing entirely client-side with no network data transfers", "category": "text", - "tags": [ - "ascii", - "binary", - "converter", - "decoder", - "encoder", - "low-level", - "math", - "science", - "text", - "utf-8" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["ascii", "binary", "converter", "decoder", "encoder", "low-level", "math", "science", "text", "utf-8"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -304,21 +178,8 @@ "shortDescription": "Calculate and simplify aspect ratios instantly. Supports common presets and outputs decimal ratio and CSS padding-bottom values.", "longDescription": "## Aspect Ratio Calculator\n\nA quick utility for calculating and simplifying aspect ratios from any width and height.\n\n### Features\n\n- Real-time calculation as you type\n- Simplified ratio (e.g. 16:9, 4:3)\n- Decimal ratio for CSS and design tools\n- CSS padding-bottom percentage for responsive containers\n- Common presets (16:9, 4:3, 1:1, 21:9)\n- Copy result to clipboard\n- Light and dark mode support\n- Works completely offline", "category": "image", - "tags": [ - "aspect-ratio", - "calculator", - "design", - "frontend", - "image", - "responsive", - "utility" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["aspect-ratio", "calculator", "design", "frontend", "image", "responsive", "utility"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -328,19 +189,8 @@ "shortDescription": "A simple, offline utility to encode raw text into Base64 format and decode Base64 strings back to text.", "longDescription": "## Base64 Encoder / Decoder\n\nA simple, offline utility to encode raw text into Base64 format and decode Base64 strings back into human-readable text.\n\n### Features\n\n- **Instant Conversion:** Real-time encoding and decoding as you type.\n- **File Upload:** Select small files (like images) and instantly convert them to Base64 data URIs.\n- **Offline First:** Operates entirely client-side using Vanilla JS.\n- **Error Detection:** Automatically identifies invalid Base64 input and prevents UI crashes.", "category": "utilities", - "tags": [ - "base64", - "decoder", - "developer-tools", - "encoder", - "text", - "utility" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["base64", "decoder", "developer-tools", "encoder", "text", "utility"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -350,21 +200,8 @@ "shortDescription": "Convert images to Base64 data URIs, or decode Base64 strings back into viewable images.", "longDescription": "## Base64 Image Converter\n\nConvert an image to a Base64 data URI, or decode a Base64 string / data URI back into a viewable image β€” entirely offline, with no upload.\n\n### Features\n\n- Encode: upload or drag-and-drop an image to get its Base64 data URI\n- Copy the Base64 string or a ready-to-use CSS `url()` value\n- Decode: paste a data URI or raw Base64 to preview and download the image\n- Live preview with file size and encoded length shown\n- Clear/reset either panel independently\n- Fully responsive, keyboard accessible, and works offline", "category": "image", - "tags": [ - "base64", - "converter", - "decoder", - "encoder", - "image", - "utility" - ], - "techStack": [ - "CSS3", - "FileReader API", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["base64", "converter", "decoder", "encoder", "image", "utility"], + "techStack": ["CSS3", "FileReader API", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -374,21 +211,8 @@ "shortDescription": "A simulated bash terminal to play with and learn common commands, entirely in your browser.", "longDescription": "## Bash Sandbox\n\nA simulated bash terminal environment that runs entirely in your browser. It's a safe and fun way to learn and experiment with common shell commands like `ls`, `cd`, `cat`, `mkdir`, and `echo` without any risk to your system. The sandbox operates on a virtual file system that resets on every page load.\n\n### Features\n\n- A realistic terminal-like interface.\n- Support for core commands: `ls`, `cd`, `cat`, `mkdir`, `touch`, `pwd`, `echo`, `clear`, and `help`.\n- A virtual file system to navigate and manipulate.\n- Command history using up/down arrow keys.\n- Tab autocompletion for paths.\n- Works entirely offline.", "category": "utilities", - "tags": [ - "bash", - "cli", - "command-line", - "learning", - "offline", - "sandbox", - "shell", - "terminal" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["bash", "cli", "command-line", "learning", "offline", "sandbox", "shell", "terminal"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -398,18 +222,8 @@ "shortDescription": "Convert between binary, decimal, hexadecimal, and octal.", "longDescription": "## Binary Decimal Converter\n\nConvert between binary, decimal, hexadecimal, and octal.\n\n### Features\n\n- Single HTML file\n- Works offline\n- Dark mode support\n- Responsive design", "category": "utilities", - "tags": [ - "binary", - "converter", - "decimal", - "hex", - "numbers" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["binary", "converter", "decimal", "hex", "numbers"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -419,21 +233,8 @@ "shortDescription": "Design CSS box shadows visually with live preview, presets, and copy-ready output.", "longDescription": "## Box Shadow Generator\n\nA visual CSS box-shadow designer for developers and designers.\n\n### Features\n\n- Interactive sliders for offset X/Y, blur radius, spread, and opacity\n- Color picker for shadow color\n- Inset shadow toggle\n- Multiple shadow layers support\n- Preset shadow styles\n- Live preview with customizable element\n- One-click copy of generated CSS code\n- Responsive, mobile-friendly design\n- Works completely offline", "category": "css", - "tags": [ - "box-shadow", - "css", - "design", - "frontend", - "generator", - "shadow", - "ui" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["box-shadow", "css", "design", "frontend", "generator", "shadow", "ui"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -443,21 +244,8 @@ "shortDescription": "Analyze HTML to verify canonical URL implementation and identify common SEO issues.", "longDescription": "## Canonical URL Checker\n\nAnalyze pasted HTML to detect missing, duplicate, invalid, relative, or incorrectly placed canonical tags.\n\n### Features\n- Detects missing canonical tags\n- Identifies duplicate canonical tags\n- Validates absolute canonical URLs\n- Detects relative or empty canonical URLs\n- Checks if the canonical tag is placed inside the section\n- Provides SEO recommendations\n- Copy analysis report\n- Download report as a text file\n- Works completely offline", "category": "web-seo", - "tags": [ - "canonical", - "html", - "meta", - "search-engine-optimization", - "seo", - "url", - "validation", - "web" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["canonical", "html", "meta", "search-engine-optimization", "seo", "url", "validation", "web"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -467,20 +255,8 @@ "shortDescription": "Analyze HTML to verify canonical URL implementation and identify common SEO issues.", "longDescription": "## Canonical URL Checker\n\nPaste your HTML source to verify canonical URL implementation and detect common SEO issues like missing or duplicate canonical tags.\n\n### Features\n\n- Paste HTML source for instant analysis.\n- Detects missing, duplicate, or malformed canonical tags.\n- Highlights common SEO pitfalls.\n- Single HTML file, works offline.\n- Responsive design with dark mode support.", "category": "web-seo", - "tags": [ - "canonical", - "checker", - "html", - "seo", - "url", - "validation", - "web" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["canonical", "checker", "html", "seo", "url", "validation", "web"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -490,18 +266,8 @@ "shortDescription": "Transform text between UPPERCASE, lowercase, camelCase, snake_case, and more.", "longDescription": "## Case Converter\n\nA tool that transforms input text between different case and casing conventions. Useful for developers who need to quickly reformat variable names, headings, or copy between styles (e.g. converting a sentence into camelCase for a JS variable, or into CONSTANT_CASE for an env var), as well as writers who want quick title-casing or sentence-casing for headings and copy.\n\n### Features\n- Convert text to UPPERCASE, lowercase, Title Case, and Sentence case\n- Convert to programming case styles: camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE\n- Fun/novelty conversions: aLtErNaTiNg CaSe and iNVERSE CaSe\n- Live character and word count for the input\n- One-click \"Copy result\" button with confirmation feedback\n- Smart word-splitting that correctly re-splits existing camelCase/snake_case/kebab-case input before converting to a new format\n- Fully keyboard accessible, dark mode support", "category": "text", - "tags": [ - "case", - "developer-tools", - "formatting", - "string-manipulation", - "text" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["case", "developer-tools", "formatting", "string-manipulation", "text"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -511,21 +277,8 @@ "shortDescription": "Interactively build Unix file permissions and get the numeric and symbolic chmod values.", "longDescription": "## Chmod Calculator\n\nToggle read, write, and execute permissions for owner, group, and others to instantly generate the numeric (octal) and symbolic chmod representations, with plain-English explanations.\n\n### Features\n\n- Interactive permission matrix for owner, group, and others\n- Live numeric (octal) output (e.g. 755, 644, 777)\n- Live symbolic representation (e.g. rwxr-xr-x)\n- Special permission bits: SetUID, SetGID, sticky bit\n- Ready-to-use `chmod` command line\n- Plain-English explanation of the current permission set\n- Common presets (644, 755, 600, 700, 777, 664, 775)\n- One-click copy for numeric, symbolic, and command values\n- Fully responsive, keyboard accessible, and works entirely offline", "category": "utilities", - "tags": [ - "chmod", - "developer-tools", - "filesystem", - "linux", - "permissions", - "unix", - "utility" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["chmod", "developer-tools", "filesystem", "linux", "permissions", "unix", "utility"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -535,20 +288,8 @@ "shortDescription": "Visually synchronize and convert time across multiple global timezones.", "longDescription": "## Chrono / Timezone Converter\n\nA visual timezone converter and timeline slider designed to help developers and remote teams coordinate meetings and server deployment windows across the globe.\n\n### Features\n- Select and add multiple timezones to your dashboard\n- Interactive timeline scrubber to see synced local times\n- Highlight working hours (9 AM - 5 PM) to easily spot overlapping availability\n- Reset to current 'Now' time with a single click\n- 100% offline using native Intl API", "category": "utilities", - "tags": [ - "converter", - "time", - "timeline", - "timezone", - "utility", - "world-clock" - ], - "techStack": [ - "CSS3", - "HTML5", - "Intl API", - "Vanilla JS" - ], + "tags": ["converter", "time", "timeline", "timezone", "utility", "world-clock"], + "techStack": ["CSS3", "HTML5", "Intl API", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -558,20 +299,8 @@ "shortDescription": "A color space analysis canvas that plots custom colors onto a CIE 1931 chromaticity diagram against sRGB, Display P3, and Rec.2020 gamut boundaries.", "longDescription": "## CIE Chromaticity Gamut Visualizer\n\nStandard web utilities convert values between code formats but hide the physical constraints of display hardware. This tool provides an interactive environment that maps color coordinates directly onto the formal CIE 1931 chromaticity horseshoe layout, allowing developers and designers to verify real-world device limitations.\n\n### Features\n\n- **Interactive Horseshoe Blueprint**: A crisp, high-performance coordinate space mapping spectral locus coordinates instantly through client rendering loops.\n- **Gamut Matrix Overlays**: Side-by-side color space comparison vectors demonstrating the coverage deltas between sRGB, wide-gamut Display P3, and ultra-wide Rec.2020.\n- **Clipping & Gamut Warning**: Automatic transformation algebra that alerts you when a selected color is clipped by standard display limitations.\n- **Multi-Format Plotting**: Drop in standard web inputs like HEX, RGB, HSL, or modern high-definition spaces like LCH and Lab to observe their real physical footprint.\n- **Zero-Dependency Core**: A standalone color diagnostic environment configured completely inside a single self-contained document using native JS mathematics.", "category": "color", - "tags": [ - "cie-1931", - "color-space", - "display-p3", - "gamut-mapping", - "srgb", - "visualizer" - ], - "techStack": [ - "Canvas API", - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["cie-1931", "color-space", "display-p3", "gamut-mapping", "srgb", "visualizer"], + "techStack": ["Canvas API", "CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -581,20 +310,8 @@ "shortDescription": "Visually create complex CSS clip-path shapes and instantly copy the generated code.", "longDescription": "## Clip Path Generator\n\nA visual CSS `clip-path` generator for developers and designers.\n\n### Features\n\n- Interactive visual editor with draggable control points\n- Preset shapes (Triangle, Chevron, Star, Hexagon, Circle, etc.) for a quick start\n- Real-time preview of the CSS clip-path effect\n- One-click \"Copy CSS\" functionality for the generated code\n- Responsive, mobile-friendly design\n- Works completely offline", "category": "css", - "tags": [ - "clip-path", - "css", - "design", - "frontend", - "generator", - "ui" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["clip-path", "css", "design", "frontend", "generator", "ui"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -604,21 +321,8 @@ "shortDescription": "Store, categorize, and retrieve code snippets with syntax highlighting, entirely offline.", "longDescription": "## Code Snippet Manager\n\nA personal, offline code snippet manager that allows developers to store, categorize, and quickly retrieve frequently used code blocks. It features syntax highlighting for various programming languages, a search function, and one-click copy-to-clipboard functionality. All snippets are stored locally in the browser's `localStorage`.\n\n### Features\n\n- Add, edit, and delete code snippets.\n- Assign a language (e.g., JavaScript, Python, CSS) to each snippet.\n- Syntax highlighting via a lightweight CDN library (Highlight.js).\n- Search and filter snippets by name, language, or tags.\n- One-click copy to clipboard.\n- Persist snippets in `localStorage`.\n- Import/Export snippets as a JSON file.", "category": "utilities", - "tags": [ - "code", - "developer-tools", - "manager", - "offline", - "snippet", - "storage", - "syntax-highlighting" - ], - "techStack": [ - "CSS3", - "HTML5", - "LocalStorage API", - "Vanilla JS" - ], + "tags": ["code", "developer-tools", "manager", "offline", "snippet", "storage", "syntax-highlighting"], + "techStack": ["CSS3", "HTML5", "LocalStorage API", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -628,17 +332,8 @@ "shortDescription": "Simulate how colors and images appear with Protanopia, Deuteranopia, Tritanopia, and Achromatopsia to design more accessible interfaces.", "longDescription": "## Color Blindness Simulator\n\nSimulate how colors and images appear under different types of color vision deficiency. Upload an image or pick a color to see how it looks with Protanopia, Deuteranopia, Tritanopia, and Achromatopsia.\n\n### Features\n\n- Single HTML file\n- Works offline\n- Dark mode support\n- Responsive design", "category": "color", - "tags": [ - "accessibility", - "color", - "design", - "vision" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["accessibility", "color", "design", "vision"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -648,21 +343,8 @@ "shortDescription": "Preview how colors and images appear under different types of color vision deficiency.", "longDescription": "## Color Blindness Simulator\n\nAn accessibility-focused tool that simulates how colors and images appear to people with different types of color vision deficiencies. Designers and developers can test UI elements, graphics, and uploaded images to create more inclusive experiences.\n\n### Features\n\n- Live color picker with instant simulation\n- Upload images for accessibility preview\n- Simulate Protanopia, Deuteranopia, Tritanopia, and Achromatopsia\n- Side-by-side comparison with the original\n- Copy HEX and RGB color values\n- Responsive, offline-first design\n- Works entirely in the browser without external APIs", "category": "color", - "tags": [ - "accessibility", - "color", - "color-blindness", - "design", - "image", - "simulation", - "ui" - ], - "techStack": [ - "Canvas API", - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["accessibility", "color", "color-blindness", "design", "image", "simulation", "ui"], + "techStack": ["Canvas API", "CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -672,22 +354,8 @@ "shortDescription": "Blend two colors to generate a mixed color and a five-shade palette instantly.", "longDescription": "## Color Mixer\n\nBlend two colors using a perceptually accurate color mixing algorithm to generate a mixed color and a harmonious five-shade palette. Adjust the mix ratio, view RGB and HSL values, copy color codes with one click, and switch between light and dark themes.\n\n### Features\n\n- Mix two colors with a live preview\n- Adjustable color mix ratio slider\n- Generates a five-shade color palette\n- Displays HEX, RGB, and HSL color values\n- One-click HEX code copying\n- Light and dark theme support\n- Responsive and mobile-friendly design\n- Fully offline and self-contained", "category": "color", - "tags": [ - "color", - "color-mixer", - "design", - "hex", - "hsl", - "offline", - "palette", - "responsive", - "rgb" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["color", "color-mixer", "design", "hex", "hsl", "offline", "palette", "responsive", "rgb"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -697,17 +365,8 @@ "shortDescription": "Mix colors and generate harmonious color palettes.", "longDescription": "## Color Mixer Tool\n\nMix colors and generate harmonious color palettes.\n\n### Features\n\n- Single HTML file\n- Works offline\n- Dark mode support\n- Responsive design", "category": "color", - "tags": [ - "color", - "harmony", - "mixer", - "palette" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["color", "harmony", "mixer", "palette"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -717,22 +376,8 @@ "shortDescription": "Extract dominant colors and generate beautiful palettes directly from images in your browser.", "longDescription": "## Color Palette Extractor\n\nA client-side image utility that allows users to upload an image and automatically extracts its most dominant colors, generating a beautiful, harmonious color palette.\n\n### Features\n\n- Drag-and-drop or click to upload an image file (JPG, PNG, WebP)\n- Automatically extracts the top 5-7 dominant colors using client-side canvas processing and color quantization algorithms\n- Displays a visual palette of the extracted colors with one-click \"Copy HEX\" and \"Copy RGB\" buttons\n- Interactive preview of the uploaded image\n- Works completely offline and entirely in the browser with no backend servers\n- Responsive, beautiful dark-mode UI with subtle glassmorphism effects", "category": "image", - "tags": [ - "canvas", - "colors", - "design", - "extraction", - "image", - "palette", - "utility" - ], - "techStack": [ - "Canvas API", - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["canvas", "colors", "design", "extraction", "image", "palette", "utility"], + "techStack": ["Canvas API", "CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -742,19 +387,8 @@ "shortDescription": "Generate beautiful random color combinations for designers and frontend developers.", "longDescription": "## Color Palette Generator\n\nA modern tool that creates beautiful color combinations for designers and frontend developers. Press spacebar to rapidly generate new palettes.\n\n### Features\n\n- Generate 5-color palettes instantly\n- Lock individual colors (πŸ”’/πŸ”“) while regenerating the rest\n- Click to instantly copy HEX codes to your clipboard\n- Export as CSS root variables\n- Export as a JSON array file\n- Fully responsive layout for mobile testing", "category": "color", - "tags": [ - "color", - "css", - "design", - "hex", - "palette", - "ui" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["color", "css", "design", "hex", "palette", "ui"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -764,23 +398,8 @@ "shortDescription": "Pick a color and view it in HEX, RGB, HSL, and HSV, with generated shades and recent colors.", "longDescription": "## Color Picker\n\nPick a color visually and instantly see its value across HEX, RGB, HSL, and HSV. Edit any format to synchronize the rest, generate a shade strip, and build a running palette of recently used colors.\n\n### Features\n\n- Interactive color picker using the native browser color input\n- Live values in HEX, RGB, HSL, and HSV\n- Edit any supported format to synchronize the others\n- Live contrast preview against white and black\n- One-click copy for each format\n- Recently selected colors palette\n- Generated lighter/darker shade strip\n- Clear/reset to the default color\n- Fully responsive, keyboard accessible, and works entirely offline", "category": "color", - "tags": [ - "color", - "css", - "developer-tools", - "hex", - "hsl", - "hsv", - "picker", - "rgb", - "ui" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["color", "css", "developer-tools", "hex", "hsl", "hsv", "picker", "rgb", "ui"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -790,21 +409,8 @@ "shortDescription": "Load multiple commands and copy them one at a time with a terminal-style interface.", "longDescription": "## Command Step Loader\n\nA terminal-inspired productivity tool for developers who frequently execute multiple commands sequentially.\n\n### Features\n\n- Paste multiple commands at once\n- Load commands line-by-line\n- Previous and Next navigation\n- One-click copy for the current command\n- Progress indicator showing current position\n- Terminal-style interface with CRT effects\n- Works completely offline", "category": "utilities", - "tags": [ - "commands", - "copy", - "developer-tools", - "git", - "loader", - "terminal", - "workflow" - ], - "techStack": [ - "Clipboard API", - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["commands", "copy", "developer-tools", "git", "loader", "terminal", "workflow"], + "techStack": ["Clipboard API", "CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -814,20 +420,8 @@ "shortDescription": "Paste a git log excerpt and generate interactive-rebase plans + normalized Conventional Commits suggestions.", "longDescription": "## Commit Message & Range Cleaner\n\nParse git log outputs and visually design interactive rebases. Automatically audit and normalize commit messages into compliant Conventional Commits standards.\n\n### Features\n\n- Parse standard multiline git log outputs or compact git log --oneline listings\n- Order commits sequentially from oldest to newest to match Git rebase workflow expectations\n- Automatically translate messy commit subjects into Conventional Commits patterns\n- Flag unquoted keywords, casing, periods, and length violations with inline visual warnings\n- Customize rebase actions (pick, reword, squash, fixup, drop, edit) on an interactive planner dashboard\n- Copy generated git-rebase-todo contents directly to terminal rebase sessions\n- Export summaries of reworded changelogs and download configurations as JSON files", "category": "utilities", - "tags": [ - "developer-tools", - "git", - "offline", - "planner", - "rebase", - "utility" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["developer-tools", "git", "offline", "planner", "rebase", "utility"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -837,21 +431,8 @@ "shortDescription": "Build Conventional Commits-formatted commit messages with live preview and validation.", "longDescription": "## Commit Message Generator\n\nBuild a properly formatted commit message following the Conventional Commits specification. Choose a type, optional scope, description, body, and footer β€” including breaking-change notes β€” with a live preview as you type.\n\n### Features\n\n- Full set of Conventional Commits types (feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert)\n- Plain-English explanation and a clickable example for each type\n- Optional scope, body, and footer sections\n- BREAKING CHANGE footer generation with the `!` header marker\n- Live preview that updates as fields change\n- Character counter for the subject line (recommended ≀50 characters)\n- Validation against common Conventional Commits mistakes\n- One-click copy to the clipboard\n- Clear/reset the form with a single click\n- Fully responsive, keyboard accessible, and works entirely offline", "category": "utilities", - "tags": [ - "commit", - "conventional-commits", - "developer-tools", - "git", - "github", - "utility", - "version-control" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["commit", "conventional-commits", "developer-tools", "git", "github", "utility", "version-control"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -861,18 +442,8 @@ "shortDescription": "A visual builder and live tester for CSS Container Queries (@container) that react to parent dimensions rather than the viewport.", "longDescription": "## Container Query Sandbox\n\nResponsive design is moving beyond the browser window. Container Queries allow components to adapt based on their parent container's size, but testing them can be tedious. This sandbox provides a visual environment to define named containers, set breakpoint rules, and resize the parent element in real-time to watch your component reflow.\n\n### Features\n\n- **Live Container Resizing:** Drag-resizable demo stages (width and height) to test responsive behavior without browser window manipulation.\n- **Real CSS Application:** Generates and injects actual `@container` CSS, ensuring 100% browser-accurate rendering.\n- **Visual Rule Builder:** Add or remove breakpoints (`min-width`/`max-width`) and edit associated CSS declarations via an intuitive UI.\n- **Active Breakpoint Badges:** Real-time feedback indicators that highlight which query is currently firing.\n- **CQ Units Demo:** Includes a sample element using container query length units (`cqw`, `cqi`) to demonstrate context-aware scaling.\n- **Zero-Dependency Engine:** High-performance, responsive layout tool built entirely in a single HTML file using Vanilla JS and CSS.", "category": "css", - "tags": [ - "container-queries", - "css", - "layout", - "responsive-design", - "visual-builder" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["container-queries", "css", "layout", "responsive-design", "visual-builder"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -882,20 +453,8 @@ "shortDescription": "A performance debugging tool that visualizes content-visibility: auto states to help developers track layout and paint skipping.", "longDescription": "## Content-Visibility & Intersection Debugger\n\nModern browser optimizations like `content-visibility: auto` are powerful but often invisible. This debugger renders a long, complex page and overlays live status indicators for every section. It uses the `contentvisibilityautostatechange` event to show exactly when off-screen sections are skipped from layout and paint cycles.\n\n### Features\n\n- **Live Rendering Monitor:** Real-time visual overlays show whether sections are currently rendered or skipped.\n- **Event Visualization:** Tracks `contentvisibilityautostatechange` events to log the exact moment the browser optimizes rendering.\n- **Performance Insight:** Helps developers understand the impact of CSS containment on browser performance and Web Vitals.\n- **Interactive Demo:** Manipulate a tall, heavy DOM structure to stress-test browser optimization.\n- **Zero-Dependency Engine:** High-performance, responsive performance visualization tool built entirely in a single HTML file using Vanilla JS and CSS.", "category": "utilities", - "tags": [ - "css", - "debug", - "intersection-observer", - "performance", - "rendering", - "web-vitals" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS", - "Web Performance API" - ], + "tags": ["css", "debug", "intersection-observer", "performance", "rendering", "web-vitals"], + "techStack": ["CSS3", "HTML5", "Vanilla JS", "Web Performance API"], "difficulty": "Medium", "status": "live" }, @@ -905,22 +464,8 @@ "shortDescription": "Check the WCAG 2.1 contrast ratio between two colors with AA/AAA compliance and a live text preview.", "longDescription": "## Contrast Checker\n\nEvaluate the contrast ratio between a foreground and background color against WCAG 2.1 guidelines. Pick or enter colors in HEX, RGB, or HSL and instantly see the ratio, compliance status, and a live text preview.\n\n### Features\n\n- Foreground and background color pickers or HEX/RGB/HSL text entry\n- Real-time WCAG 2.1 contrast ratio\n- Compliance status for AA and AAA, normal and large text\n- Live preview of normal and large text using the selected colors\n- One-click swap of foreground and background\n- Double-click to copy any color value\n- Reset to default colors\n- Fully responsive, keyboard accessible, and works entirely offline", "category": "color", - "tags": [ - "a11y", - "accessibility", - "color", - "contrast", - "css", - "developer-tools", - "ui", - "wcag" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["a11y", "accessibility", "color", "contrast", "css", "developer-tools", "ui", "wcag"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -930,21 +475,8 @@ "shortDescription": "WCAG 2.1 AA/AAA contrast checker with live UI previews and an automatic fix suggestion.", "longDescription": "## Contrast Checker (A11y)\n\nEvaluate foreground/background color combinations against WCAG 2.1 contrast guidelines, with live previews of real UI elements and an automatic suggestion when a combination fails.\n\n### Features\n\n- Foreground/background color pickers or HEX/RGB/HSL text entry\n- Real-time WCAG 2.1 contrast ratio with AA/AAA pass/fail badges (normal and large text)\n- Live preview of headings, body text, buttons, and links using the selected colors\n- Automatic suggestion of an accessible foreground color when AA fails, with one-click apply\n- Swap foreground/background colors\n- Copy any color value to the clipboard\n- Reset to accessible default colors\n- Brief explanation of why AA and AAA matter\n- Fully responsive, keyboard accessible, and works entirely offline", "category": "accessibility", - "tags": [ - "a11y", - "accessibility", - "color", - "contrast", - "css", - "developer-tools", - "ui", - "wcag" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["a11y", "accessibility", "color", "contrast", "css", "developer-tools", "ui", "wcag"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -954,19 +486,8 @@ "shortDescription": "Inspect, create, edit, delete, and search cookies for the current site β€” no dev tools required.", "longDescription": "## Cookie Viewer\n\nA browser-based cookie management tool that lets you work with cookies on the current origin without opening DevTools.\n\n### Features\n\n- View all JavaScript-readable cookies for the current page\n- Search cookies by name or value in real time\n- Create new cookies with configurable value, max-age, and SameSite attributes\n- Edit existing cookie values inline and save changes\n- Delete individual cookies or clear all at once\n- Copy cookie names and values to clipboard\n- Displays metadata (path, domain, secure status) for each cookie\n- Note explaining that HttpOnly cookies are not visible to JavaScript", "category": "browser-network", - "tags": [ - "browser", - "cookies", - "developer-tools", - "inspector", - "privacy", - "storage" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["browser", "cookies", "developer-tools", "inspector", "privacy", "storage"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -976,20 +497,8 @@ "shortDescription": "Build and customize cron schedules with presets, instant validation, explanations, and upcoming run previews.", "longDescription": "## Cron Expression Builder\n\nDesign cron schedules with an elegant interface, common presets, instant validation, human-readable explanations, and next-run previews.", "category": "utilities", - "tags": [ - "automation", - "cron", - "devops", - "expression", - "jobs", - "scheduler", - "time" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["automation", "cron", "devops", "expression", "jobs", "scheduler", "time"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -999,23 +508,8 @@ "shortDescription": "Visualize upcoming cron run times across multiple timezones with a timeline and export.", "longDescription": "## Cron Run Planner\n\nValidate and build cron expressions while visualizing future run executions across multiple global timezones on an interactive timeline grid.\n\n### Features\n\n- Build cron expressions with a step-by-step visual form builder\n- Instant syntax validation using the Croner engine\n- Translate cron syntax to plain English description using cRonstrue\n- Set local base timezone and compare run executions in multiple target zones\n- Detect and badge target working hours (9 AM - 5 PM on weekdays)\n- Interactive horizontal timeline plotting next runs (10, 30, or 50 events)\n- Export scheduled runs as CSV or JSON format data", "category": "utilities", - "tags": [ - "cron", - "developer-tools", - "offline", - "planner", - "scheduler", - "time", - "timezone" - ], - "techStack": [ - "croner", - "cronstrue", - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["cron", "developer-tools", "offline", "planner", "scheduler", "time", "timezone"], + "techStack": ["croner", "cronstrue", "CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -1025,17 +519,8 @@ "shortDescription": "Visually create CSS animations and export keyframes without manually writing CSS.", "longDescription": "## CSS Animation Builder\n\nA visual tool for creating CSS animations with keyframe editing and live preview.\n\n### Features\n\n- Visual keyframe editor\n- Live animation preview\n- Export generated CSS keyframes\n- Dark mode support", "category": "css", - "tags": [ - "animation", - "css", - "generator", - "keyframes" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["animation", "css", "generator", "keyframes"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -1045,24 +530,8 @@ "shortDescription": "Convert between Hex, RGB, HSL, HSLA, and OKLCH color formats instantly with a visual picker.", "longDescription": "## CSS Color Converter\n\nA comprehensive color format converter with an integrated visual color picker for developers and designers.\n\n### Features\n\n- Convert between Hex, RGB, HSL, HSLA, and OKLCH color formats\n- Interactive color picker with saturation/lightness spectrum canvas\n- HSL sliders for fine-tuned color adjustment\n- Preset color palette for quick selection\n- Nearest CSS named color detection\n- One-click copy for all output formats\n- Real-time preview swatch with hex display\n- Light and dark mode support\n- Responsive, mobile-friendly design\n- Works completely offline", "category": "color", - "tags": [ - "color", - "color-picker", - "converter", - "css", - "hex", - "hsl", - "oklch", - "rgb" - ], - "techStack": [ - "Canvas API", - "Clipboard API", - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["color", "color-picker", "converter", "css", "hex", "hsl", "oklch", "rgb"], + "techStack": ["Canvas API", "Clipboard API", "CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -1072,19 +541,8 @@ "shortDescription": "A visual analyzer for deeply nested CSS var() fallback chains that tracks down evaluation paths and silent invalid-value bugs.", "longDescription": "## CSS Custom Property Fallback Chain Debugger\n\nDeeply nested CSS custom property chains like `var(--a, var(--b, var(--c, red)))` can become black boxes when troubleshooting layouts. This debugger isolates your custom property chains and visualizes their resolution logic cell-by-cell. It exposes complex browser behaviors, such as when a variable is defined but carries a value invalid for its context, causing the browser to silently fall through to the next declaration.\n\n### Features\n\n- **Visual Chain Mapping:** Paste any CSS rule containing nested custom properties to see an instant, hierarchical tree of its fallback execution path.\n- **State Simulation Panels:** Experiment by flagging variables as missing, properly set, or explicitly invalid at computed-value time to observe structural reactions.\n- **Silent Failure Detection:** Highlights the exact point where an invalid property causes a silent failureβ€”a notorious and elusive modern CSS bug.\n- **Production Blueprint Analysis:** View the precise computed result alongside detailed W3C spec compliance summaries explaining the layout engine's choice.\n- **Zero-Dependency Engine:** High-fidelity, instantly updating execution trace built entirely natively in a single HTML file using Vanilla JS.", "category": "css", - "tags": [ - "css", - "custom-properties", - "debugging", - "layout", - "parser", - "variables" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["css", "custom-properties", "debugging", "layout", "parser", "variables"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -1094,22 +552,8 @@ "shortDescription": "Compare multiple CSS easing curves side-by-side on a shared graph and in an animated race preview.", "longDescription": "## CSS Easing Visualizer\n\nCompare multiple CSS easing curves side-by-side β€” see their shape on a shared graph and watch them race in an animated preview, so you can pick the right motion feel by comparison rather than editing one curve in isolation.\n\n### Features\n\n- Add and remove multiple curves (named presets or custom cubic-bezier values)\n- Shared, color-coded SVG graph plotting each curve's progress over time\n- Animated race track with one ball per curve, driven by the Web Animations API\n- Adjustable shared duration for a fair comparison\n- Legend showing each curve's resolved CSS easing value\n- Runs completely offline", "category": "css", - "tags": [ - "animation", - "comparison", - "css", - "cubic-bezier", - "easing", - "frontend" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "SVG", - "Vanilla JS", - "Web Animations API" - ], + "tags": ["animation", "comparison", "css", "cubic-bezier", "easing", "frontend"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "SVG", "Vanilla JS", "Web Animations API"], "difficulty": "Medium", "status": "live" }, @@ -1119,20 +563,8 @@ "shortDescription": "Compare multiple CSS easing curves side-by-side on a shared graph and in an animated race preview.", "longDescription": "## CSS Easing Visualizer\n\nVisualize and compare multiple CSS easing curves on a shared graph with a live animated race preview.\n\n### Features\n\n- Side-by-side easing curve comparison.\n- Animated race preview for timing functions.\n- Supports cubic-bezier and named easings.\n- Interactive graph with overlaid curves.\n- Single HTML file, works offline.\n- Responsive design with dark mode support.", "category": "css", - "tags": [ - "animation", - "css", - "cubic-bezier", - "easing", - "timing", - "transition", - "visualizer" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["animation", "css", "cubic-bezier", "easing", "timing", "transition", "visualizer"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -1142,21 +574,8 @@ "shortDescription": "Build CSS Grid layouts visually with configurable columns, rows, gap, and sizing options.", "longDescription": "## CSS Grid Generator\n\nA visual CSS Grid layout builder for developers and designers.\n\n### Features\n\n- Configurable columns (1–12) and rows (1–8) via sliders\n- Adjustable gap size with live preview\n- Column sizing modes: Equal (1fr), Auto, Responsive (minmax), Max-content\n- Row sizing modes: Equal (1fr), Auto, Min-content, Max-content\n- Live grid preview with numbered cells\n- One-click copy of generated CSS code\n- Responsive, mobile-friendly design\n- Works completely offline", "category": "css", - "tags": [ - "css", - "css-grid", - "design", - "frontend", - "generator", - "layout", - "ui" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["css", "css-grid", "design", "frontend", "generator", "layout", "ui"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -1166,20 +585,8 @@ "shortDescription": "Visually design, warp, and generate complex, modern mesh gradients using draggable color pins and control handles.", "longDescription": "## CSS Mesh Gradient Generator\n\nA visual playground to design, warp, and generate complex, modern mesh gradients using draggable color pins and control handles, exporting CSS and clean SVG code.\n\n### Features\n\n- **Visual Warp Canvas**: Interactive canvas with dynamic color points and editable major/minor control handles.\n- **Color Pin Adjustments**: Drag-and-drop color pins to warp, adjust coordinates, and customize individual colors.\n- **Aesthetics Controls**: Customize blend radius, background noise overlay, opacity, and base color.\n- **Design Presets**: Built-in visual presets (Aurora Borealis, Sunset Dreams, Holographic Pearl, Cotton Candy) for quick inspiration.\n- **Instant Exports**: Copies Layered CSS, Single-Class CSS, and clean SVG code.", "category": "css", - "tags": [ - "css", - "designer", - "developer-tools", - "gradient", - "mesh-gradient", - "svg", - "ui" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["css", "designer", "developer-tools", "gradient", "mesh-gradient", "svg", "ui"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -1189,18 +596,8 @@ "shortDescription": "Break down CSS selectors into their specificity score and see which rule wins a conflict.", "longDescription": "## CSS Specificity Calculator\n\nPaste CSS selectors or a full stylesheet and see each selector's specificity broken down into ID, class, and element counts, ranked by which rule would win.\n\n### Features\n\n- Parses individual selectors or a full pasted stylesheet\n- Breaks down specificity into ID, class/attribute/pseudo-class, and element/pseudo-element counts\n- Correctly handles :is(), :not(), :has(), and :where() per the CSS specification\n- Ranks selectors to show which one wins a conflict\n- Flags !important usage separately\n- Syntax-highlighted selector display\n- Copy results as plain text\n- Light and dark mode support\n- Works completely offline", "category": "css", - "tags": [ - "css", - "debugging", - "frontend", - "selector", - "specificity" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["css", "debugging", "frontend", "selector", "specificity"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -1210,19 +607,8 @@ "shortDescription": "Instantly convert between px, rem, em, vw, vh, and percentages.", "longDescription": "## CSS Unit Converter\n\nA professional utility for frontend developers to instantly convert between absolute and relative CSS units.\n\n### Features\n\n- **Comprehensive Conversions:** Supports `px`, `rem`, `em`, `vw`, `vh`, `%`, and `pt`.\n- **Dynamic Base Context:** Set custom base font sizes and viewport dimensions for highly accurate relative calculations.\n- **Real-Time Engine:** Values update instantly across all unit fields as you type.\n- **One-Click Copy:** Copy individual values instantly to your clipboard.\n- **Offline First:** Zero dependencies, running entirely within the browser memory.", "category": "css", - "tags": [ - "converter", - "css", - "design", - "frontend", - "units", - "web" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["converter", "css", "design", "frontend", "units", "web"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -1232,19 +618,8 @@ "shortDescription": "Extract, edit, preview, copy, and download CSS custom properties with a live theme preview.", "longDescription": "## CSS Variable Explorer\n\nA standalone tool to extract CSS custom properties (variables), edit them visually, preview theme changes in real time, and export the updated CSS.\n\n### Features\n\n- Extract CSS variables from pasted CSS\n- Search variables instantly\n- Edit variable values\n- Color picker for color variables\n- Live theme preview\n- Copy generated CSS\n- Download updated CSS file\n- Fully offline and self-contained", "category": "css", - "tags": [ - "color-picker", - "css", - "custom-properties", - "preview", - "theme", - "variables" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["color-picker", "css", "custom-properties", "preview", "theme", "variables"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -1254,18 +629,8 @@ "shortDescription": "Explore, edit, and export CSS custom properties with live preview and a glassmorphism UI.", "longDescription": "## CSS Variable Explorer & Theme Generator\n\nA glassmorphism-styled tool for exploring and editing CSS custom properties.\n\n### Features\n\n- Browse and edit CSS variables in real time\n- Live preview of changes\n- Export generated theme\n- Glassmorphism UI design", "category": "css", - "tags": [ - "css", - "custom-properties", - "explorer", - "theme", - "variables" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["css", "custom-properties", "explorer", "theme", "variables"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -1275,21 +640,8 @@ "shortDescription": "Construct ready-to-run cURL commands for REST APIs with headers, auth, body types, query params, and file uploads.", "longDescription": "## Curl Builder\n\nBuild and copy shell-ready cURL commands with support for query parameters, headers, auth modes, JSON/form/raw bodies, and multipart file upload.\n\n### Features\n\n- Select HTTP method and request URL\n- Add query parameters and custom headers\n- Basic auth and bearer token support\n- JSON / form / raw body payload support\n- Multipart file upload field support\n- Copy command to clipboard instantly\n- Offline-first single HTML file with no dependencies", "category": "json-api", - "tags": [ - "api", - "command", - "curl", - "developer-tools", - "http", - "request", - "rest", - "terminal" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["api", "command", "curl", "developer-tools", "http", "request", "rest", "terminal"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -1299,23 +651,8 @@ "shortDescription": "Query DNS records for any domain via DNS-over-HTTPS, with no terminal or backend required.", "longDescription": "## DNS Record Lookup\n\nQuery common DNS record types for any domain using public DNS-over-HTTPS (DoH) endpoints, directly from your browser.\n\n### Features\n\n- Lookup A, AAAA, MX, TXT, CNAME, NS, SOA, and CAA records\n- Choose between Cloudflare and Google Public DNS providers\n- Displays TTL, response status, and response time\n- Human-readable explanations for common DNS errors (NXDOMAIN, SERVFAIL, REFUSED)\n- Color-coded badges per record type\n- Copy individual records or the full JSON response\n- Download results as a JSON file\n- Session query history for quick re-lookups\n- Fully responsive, keyboard accessible, and works entirely in the browser", "category": "browser-network", - "tags": [ - "browser", - "debugging", - "developer-tools", - "dns", - "dns-over-https", - "doh", - "domain", - "network" - ], - "techStack": [ - "CSS3", - "Fetch API", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["browser", "debugging", "developer-tools", "dns", "dns-over-https", "doh", "domain", "network"], + "techStack": ["CSS3", "Fetch API", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -1325,19 +662,8 @@ "shortDescription": "Generate a complete favicon pack and integration tags from any image, offline.", "longDescription": "## Favicon Generator\n\nA client-side tool that turns any image into a full favicon pack β€” no server, no upload.\n\n### Features\n\n- Generates 7 sizes (16, 32, 48, 64, 180, 192, 512px)\n- Center-crop auto-resize via Canvas\n- Live preview grid with individual downloads\n- Ready-to-paste HTML `` tags\n- One-click ZIP export of the full pack\n- Works completely offline", "category": "utilities", - "tags": [ - "developer-tools", - "favicon", - "generator", - "image", - "offline" - ], - "techStack": [ - "Canvas API", - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["developer-tools", "favicon", "generator", "image", "offline"], + "techStack": ["Canvas API", "CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -1347,17 +673,8 @@ "shortDescription": "Experiment with Flexbox properties visually and copy the generated CSS.", "longDescription": "## Flexbox Playground\n\nA visual tool for experimenting with CSS Flexbox layouts in real time.\n\n### Features\n\n- Configure flex-direction, justify-content, align-items, align-content, flex-wrap, and gap\n- Live preview with configurable item count\n- Copy generated CSS to clipboard\n- Responsive layout β€” works on desktop and mobile\n- Dark mode via prefers-color-scheme", "category": "css", - "tags": [ - "css", - "flexbox", - "layout", - "playground" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["css", "flexbox", "layout", "playground"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -1367,21 +684,8 @@ "shortDescription": "Visual calculator and simulator for generating CSS clamp() fluid typography and spacing expressions.", "longDescription": "## Fluid Typography & CSS clamp() Calculator Studio\n\nA privacy-first client-side tool to calculate, preview, and generate responsive fluid typography and spacing using CSS `clamp(min, preferred, max)`.\n\n### Features\n\n- Visual Fluid Math Engine: Auto-calculates linear interpolation formulas (`clamp(min, calc(rem + vw), max)`) based on target viewports\n- Interactive Viewport Simulator: Drag-resizable stage to test fluid text reflow live across mobile, tablet, and desktop dimensions\n- Modular Type Ramp Generator: Quick-generate full typography scales (`sm`, `base`, `lg`, `xl`, `2xl`, `3xl`) using popular ratio presets (Major Second, Major Third, Golden Ratio)\n- One-Click CSS Variable Export: Export formatted CSS custom properties or utility class blocks (`--text-base: clamp(...)`)\n- Persistent Dark/Light theme mode", "category": "css", - "tags": [ - "calculation", - "clamp", - "css", - "css-variables", - "developer-tools", - "fluid-typography", - "responsive", - "typography" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["calculation", "clamp", "css", "css-variables", "developer-tools", "fluid-typography", "responsive", "typography"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -1391,20 +695,8 @@ "shortDescription": "A comprehensive, 100% offline PDF utility to merge, split, rotate, watermark, and reorder pages locally using pdf-lib.", "longDescription": "## Full Client-Side PDF Toolkit\n\nStop relying on third-party web apps that require uploading sensitive documents to remote servers or installing heavy desktop software just to rearrange a few pages. This toolkit brings a complete, production-grade PDF editor directly into your browser using `pdf-lib`.\n\n### Features\n\n- **Client-Side Merging & Splitting:** Combine separate PDF files or slice documents into individual page ranges locally.\n- **Visual Page Management:** Interactive thumbnail layout to drag-and-drop, rotate, or delete pages on the fly.\n- **Watermarking & Page Numbers:** Easily overlay custom text watermarks and apply professional page numbers.\n- **Selective Page Extraction:** Export targeted subsections of a document into new, clean files instantly.\n- **Absolute Privacy:** 100% client-side execution means your confidential documents never touch an external server.\n- **Zero-Dependency Core:** High-performance responsive UI built completely in a single self-contained HTML file.", "category": "utilities", - "tags": [ - "client-side", - "document-editor", - "offline", - "pdf", - "pdf-lib", - "utilities" - ], - "techStack": [ - "CSS3", - "HTML5", - "pdf-lib", - "Vanilla JS" - ], + "tags": ["client-side", "document-editor", "offline", "pdf", "pdf-lib", "utilities"], + "techStack": ["CSS3", "HTML5", "pdf-lib", "Vanilla JS"], "difficulty": "Hard", "status": "live" }, @@ -1414,19 +706,8 @@ "shortDescription": "An interactive accessibility tester that parses raw HTML to compute tab-order overlays, flag positive tabindex errors, and simulate keyboard navigation.", "longDescription": "## Full Keyboard Navigation & Focus Order Auditor\n\nTesting keyboard accessibility shouldn't rely on guesswork or static checklists. This auditor parses raw HTML inputs and dynamically calculates the true, computed focus sequenceβ€”factoring in natural DOM order, `tabindex` rules, and hidden element states.\n\n### Features\n\n- **Computed Tab-Order Overlays:** Visualizes the exact traversal sequence with numbered pathway indicators overlaid directly onto your markup.\n- **Anti-Pattern Diagnostics:** Automatically detects and warns against destructive layout practices like positive `tabindex` values and missing focus indicators.\n- **Interactive Navigation Simulator:** Step forward and backward through the focus loop using standard keyboard inputs to verify user flow.\n- **Deep Element Inspection:** Inspect why specific elements receive focus, ensuring compliance with modern accessibility (a11y) standards.\n- **Zero-Dependency Core:** A completely client-side performance and accessibility suite built natively in a single self-contained file.", "category": "accessibility", - "tags": [ - "a11y", - "accessibility", - "focus-order", - "keyboard-navigation", - "testing", - "utilities" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["a11y", "accessibility", "focus-order", "keyboard-navigation", "testing", "utilities"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Hard", "status": "live" }, @@ -1436,18 +717,8 @@ "shortDescription": "Explain any Git command in plain English, with full flag-by-flag breakdowns for the most commonly used commands.", "longDescription": "## Git Command Explainer\n\nType or paste a Git command and get a clear, accurate explanation. Every Git porcelain command gets a command-level explanation, and the most commonly used commands get a full flag-by-flag breakdown.\n\n### Features\n\n- Command-level explanations covering the full range of Git porcelain commands\n- Deep flag-by-flag breakdown for 26 high-usage commands (add, commit, push, pull, fetch, merge, rebase, reset, checkout, switch, restore, branch, stash, log, diff, cherry-pick, revert, tag, clone, remote, clean, blame, init, show, worktree, config)\n- Correctly parses combined short flags (e.g. -am splits into -a and -m) and flag arguments\n- Flags destructive or irreversible operations with a clear warning (e.g. reset --hard, push --force, clean -fd)\n- Honest fallback for unrecognized commands or flags instead of guessing\n- Clickable example commands to try instantly\n- Light and dark mode support\n- Works completely offline", "category": "utilities", - "tags": [ - "cli", - "developer-tools", - "explainer", - "git", - "version-control" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["cli", "developer-tools", "explainer", "git", "version-control"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -1457,18 +728,8 @@ "shortDescription": "Generate boilerplate .gitignore files for various technologies instantly, offline.", "longDescription": "## Git Ignore Generator\n\nA simple, offline tool to generate .gitignore files.\n\n### Features\n\n- Select from popular templates (Node, Python, Java, C++, Go, Ruby, PHP, React, Vue, Angular, Rust, macOS, Windows, Linux, VSCode, IntelliJ, Vim, Android, iOS)\n- Real-time preview\n- Searchable tag interface\n- Copy to clipboard\n- Download .gitignore file\n- Works completely offline", "category": "utilities", - "tags": [ - "developer-tools", - "generator", - "git", - "gitignore", - "offline" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["developer-tools", "generator", "git", "gitignore", "offline"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -1478,21 +739,8 @@ "shortDescription": "Generate a professional GitHub profile README with live stats and an editable preview.", "longDescription": "## GitHub Profile README Generator\n\nThis tool helps developers create a professional and visually appealing README for their GitHub profile. It provides a simple form to input personal details and automatically generates the corresponding Markdown, complete with social links, skill badges, and live-fetched GitHub statistics.\n\n### Features\n\n- Live Markdown editor with a rendered preview tab.\n- Fetches and displays GitHub stats (total stars, forks, contributions) automatically.\n- Generates sections for a bio, tech stack (with badges), and social media links (with icons).\n- Allows for direct editing of the generated Markdown.\n- Provides \"Copy Markdown\" and \"Download README.md\" functionality.\n- Runs entirely in the browser, ensuring user privacy.", "category": "utilities", - "tags": [ - "api", - "developer-tools", - "generator", - "github", - "markdown", - "profile", - "readme" - ], - "techStack": [ - "CSS3", - "Fetch API", - "HTML5", - "Vanilla JS" - ], + "tags": ["api", "developer-tools", "generator", "github", "markdown", "profile", "readme"], + "techStack": ["CSS3", "Fetch API", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -1502,21 +750,8 @@ "shortDescription": "Validate GitHub Personal Access Tokens against the GitHub API with a sleek glass-themed UI.", "longDescription": "## GitHub Token Validator (Glass)\n\nA glass-themed GitHub token validator that checks Personal Access Tokens against the GitHub API.\n\n### Features\n\n- Validates classic PATs, fine-grained PATs, OAuth tokens, and GitHub App tokens\n- Displays user identity, scopes, and rate limit info\n- Token type detection with format-based badges\n- Show/hide token toggle for privacy\n- Dark and light mode with aurora backdrop\n- Responsive glass-style UI\n- Works in the browser β€” no server required", "category": "utilities", - "tags": [ - "api", - "developer-tools", - "github", - "glassmorphism", - "security", - "token", - "validator" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["api", "developer-tools", "github", "glassmorphism", "security", "token", "validator"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -1526,18 +761,8 @@ "shortDescription": "Glassmorphism-themed GitHub Token Validator tool that allows users to validate GitHub Personal Access Tokens directly in the browser.", "longDescription": "## GitHub Token Validator (Glassmorphism)\n\nA Glassmorphism-themed GitHub token validator that checks Personal Access Tokens against the GitHub API.\n\n### Features\n\n- Glassmorphism-style UI with command-line aesthetics\n- Validates GitHub Personal Access Tokens (classic, fine-grained, or OAuth)\n- Displays user identity, scopes, and token metadata\n- Real-time validation with clear status indicators\n- Works in the browser β€” no server required", "category": "utilities", - "tags": [ - "github", - "terminal", - "token", - "validator" - ], - "techStack": [ - "CSS3", - "Fetch API", - "HTML5", - "Vanilla JS" - ], + "tags": ["github", "terminal", "token", "validator"], + "techStack": ["CSS3", "Fetch API", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -1547,18 +772,8 @@ "shortDescription": "Validate GitHub Personal Access Tokens with a sleek, modern interface. Token never leaves your browser.", "longDescription": "## GitHub Token Validator (Modern)\n\nA modern-themed GitHub token validator with clean UI.\n\n### Features\n\n- Validate GitHub Personal Access Tokens\n- Display user identity and scopes\n- Token never leaves the browser\n- Modern, clean design", "category": "utilities", - "tags": [ - "developer-tools", - "github", - "security", - "token", - "validation" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["developer-tools", "github", "security", "token", "validation"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -1568,18 +783,8 @@ "shortDescription": "Validate GitHub Personal Access Tokens with a terminal-style UI that displays user identity and scopes.", "longDescription": "## GitHub Token Validator (Terminal)\n\nA terminal-themed GitHub token validator that checks Personal Access Tokens against the GitHub API.\n\n### Features\n\n- Terminal-style UI with command-line aesthetics\n- Validates GitHub Personal Access Tokens (classic, fine-grained, or OAuth)\n- Displays user identity, scopes, and token metadata\n- Real-time validation with clear status indicators\n- Works in the browser β€” no server required", "category": "utilities", - "tags": [ - "github", - "terminal", - "token", - "validator" - ], - "techStack": [ - "CSS3", - "Fetch API", - "HTML5", - "Vanilla JS" - ], + "tags": ["github", "terminal", "token", "validator"], + "techStack": ["CSS3", "Fetch API", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -1589,19 +794,8 @@ "shortDescription": "Validate GitHub Personal Access Tokens with a clean, modern, and responsive card-based interface GitHub style.", "longDescription": "## GitHub Token Validator GitHub Style\n\nValidate GitHub Personal Access Tokens and inspect owner, scopes, and status with a beautiful, responsive, modern card UI.\n\n### Features\n\n- Modern card-based responsive layout with dark mode support.\n- Validates GitHub Personal Access Tokens (classic, fine-grained, or OAuth tokens) securely in the browser.\n- Displays Token Metadata including user avatar, username, and active scopes.\n- Show/Hide Token Toggle for privacy and easier screen sharing.\n- Real-Time Validation Results with clean status indicators and loading spinners.\n- Built with Tailwind CSS and Vanilla JS with no external build steps.", "category": "utilities", - "tags": [ - "github", - "modern", - "responsive", - "token", - "validator" - ], - "techStack": [ - "Fetch API", - "HTML5", - "Tailwind CSS", - "Vanilla JS" - ], + "tags": ["github", "modern", "responsive", "token", "validator"], + "techStack": ["Fetch API", "HTML5", "Tailwind CSS", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -1611,20 +805,8 @@ "shortDescription": "Validate GitHub Personal Access Tokens with a clean, straightforward interface.", "longDescription": "## GitHub Token Validator\n\nValidate GitHub Personal Access Tokens and inspect owner, scopes, and status with a simple, distraction-free interface.\n\n### Features\n\n- Clean and Minimal UI focused on token validation and inspection\n- Validates GitHub Personal Access Tokens (classic, fine-grained, or OAuth tokens) securely in the browser\n- Displays Token Metadata including username, active scopes/permissions, and response headers\n- Show/Hide Token Toggle for privacy and easier screen sharing\n- Real-Time Validation Results with clear status indicators and error messages\n- Lightweight, Offline-First implementation built with native web technologies and no external dependencies", "category": "utilities", - "tags": [ - "crt", - "github", - "retro", - "terminal", - "token", - "validator" - ], - "techStack": [ - "CSS3", - "Fetch API", - "HTML5", - "Vanilla JS" - ], + "tags": ["crt", "github", "retro", "terminal", "token", "validator"], + "techStack": ["CSS3", "Fetch API", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -1634,20 +816,8 @@ "shortDescription": "Validate GitHub Personal Access Tokens with a retro terminal themed interface.", "longDescription": "## GitHub Token Validator Retro\n\nValidate GitHub Personal Access Tokens and inspect owner, scopes, and status in a classic command-line CRT style.\n\n### Features\n\n- Green CRT Terminal Interface with scanline overlays, flickering, and glowing text\n- Validates GitHub Personal Access Tokens (classic, fine-grained, or OAuth tokens) securely in the browser\n- Displays Token Metadata including username, active scopes/permissions, and headers\n- ASCII Art Terminal Banner and blinking terminal command prompts\n- Show/Hide Token Toggle for privacy when sharing screens\n- Offline-First Styling utilizing native monospace font fallbacks with VT323 font integration", "category": "utilities", - "tags": [ - "crt", - "github", - "retro", - "terminal", - "token", - "validator" - ], - "techStack": [ - "CSS3", - "Fetch API", - "HTML5", - "Vanilla JS" - ], + "tags": ["crt", "github", "retro", "terminal", "token", "validator"], + "techStack": ["CSS3", "Fetch API", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -1657,21 +827,8 @@ "shortDescription": "Generate sleek, frosted-glass UI effects for your components.", "longDescription": "## Glassmorphism Generator\n\nA visual CSS generator that allows developers and designers to instantly create frosted glass effects (glassmorphism) for UI components.\n\n### Features\n\n- Interactive sliders for blur radius, transparency (opacity), and saturation\n- Live preview area showing the glass effect overlaid on a vibrant background image or gradient\n- Color picker to adjust the glass tint (light vs dark glass)\n- Controls for border and shadow to enhance the 3D effect\n- One-click \"Copy CSS\" functionality for the generated code\n- Responsive and modern UI design\n- Works completely offline", "category": "css", - "tags": [ - "css", - "design", - "frontend", - "frosted-glass", - "generator", - "glassmorphism", - "ui" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["css", "design", "frontend", "frosted-glass", "generator", "glassmorphism", "ui"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -1681,22 +838,8 @@ "shortDescription": "Visually build linear or radial CSS gradients with multiple color stops and copy-ready CSS.", "longDescription": "## Gradient Builder\n\nVisually create and customize CSS gradients. Add multiple color stops, drag them to adjust position, switch between linear and radial gradients, and instantly preview the result as production-ready CSS.\n\n### Features\n\n- Linear and radial gradients\n- Add, remove, reorder, and edit multiple color stops\n- Drag color stops on a visual track to adjust position\n- Linear angle (0-360Β°) with preset directions\n- Radial shape (circle/ellipse) and position\n- Live preview updates instantly with every change\n- Generates both `background` and `background-image` CSS\n- One-click copy or download of the generated CSS\n- Fully responsive, keyboard accessible, and works entirely offline", "category": "color", - "tags": [ - "color", - "css", - "designer", - "developer-tools", - "gradient", - "linear-gradient", - "radial-gradient", - "ui" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["color", "css", "designer", "developer-tools", "gradient", "linear-gradient", "radial-gradient", "ui"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -1706,19 +849,8 @@ "shortDescription": "A visual designer for CSS grid-template-areas that validates rectangular constraints and generates production-ready layout code.", "longDescription": "## Grid Areas Architect\n\nStop wrestling with complex ASCII-art string layouts in your CSS. Grid Areas Architect is a visual design tool for CSS `grid-template-areas`. Paint named regions directly onto a grid canvas and let the tool handle the syntax generation.\n\n### Features\n\n- **Visual Painting:** Define layout regions by clicking and dragging on a live grid canvas.\n- **Rectangular Validation:** Automatically enforces CSS Grid constraintsβ€”it validates that each named region forms a perfect rectangle, preventing invalid layout syntax before it reaches your codebase.\n- **Production-Ready Code:** Instantly generates the full `grid-template-areas` string alongside the corresponding per-area `grid-area` CSS blocks.\n- **Live Scoped Preview:** See your layout render in real-time as you paint, ensuring the spatial structure matches your design intent.\n- **Zero-Dependency Engine:** A high-performance, responsive layout tool built entirely in a single HTML file using Vanilla JS and CSS.", "category": "css", - "tags": [ - "css", - "css-grid", - "layout", - "tool", - "ui-design", - "web-dev" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["css", "css-grid", "layout", "tool", "ui-design", "web-dev"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -1728,20 +860,8 @@ "shortDescription": "Generate SHA-1, SHA-256 and SHA-512 hashes instantly in your browser.", "longDescription": "## Hash Generator\n\nGenerate SHA-1, SHA-256 and SHA-512 hashes locally using the browser Web Crypto API.\n\n### Features\n\n- Generate SHA-1, SHA-256 and SHA-512 hashes\n- Live hashing while typing\n- File input support\n- Copy hash to clipboard\n- Uppercase output option\n- Works completely offline", "category": "utilities", - "tags": [ - "crypto", - "developer-tools", - "hash", - "sha1", - "sha256", - "sha512" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS", - "Web Crypto API" - ], + "tags": ["crypto", "developer-tools", "hash", "sha1", "sha256", "sha512"], + "techStack": ["CSS3", "HTML5", "Vanilla JS", "Web Crypto API"], "difficulty": "Medium", "status": "live" }, @@ -1751,24 +871,8 @@ "shortDescription": "Generate and verify MD5, SHA-1, SHA-256, SHA-384, and SHA-512 hashes for text or files entirely in the browser.", "longDescription": "## Hash Generator\n\nGenerate cryptographic hash values for text and files using common hashing algorithms, entirely offline in your browser.\n\n### Features\n\n- Generate MD5, SHA-1, SHA-256, SHA-384, and SHA-512 hashes\n- Hash plain text with live updates\n- Hash files using raw binary data for accurate checksums\n- Display file name, size, and MIME type\n- Copy individual hash values with one click\n- Verify hashes by comparing generated and expected values\n- Clear all inputs and generated hashes with a single action\n- Fully responsive, keyboard accessible, and works entirely offline", "category": "utilities", - "tags": [ - "checksum", - "cryptography", - "developer-tools", - "hash", - "md5", - "security", - "sha1", - "sha256", - "sha384", - "sha512" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS", - "Web Crypto API" - ], + "tags": ["checksum", "cryptography", "developer-tools", "hash", "md5", "security", "sha1", "sha256", "sha384", "sha512"], + "techStack": ["CSS3", "HTML5", "Vanilla JS", "Web Crypto API"], "difficulty": "Easy", "status": "live" }, @@ -1778,24 +882,8 @@ "shortDescription": "Visualize a page's heading hierarchy and catch skipped levels, missing or duplicate H1s.", "longDescription": "## Heading Structure Visualizer\n\nAnalyze HTML content and visualize its heading hierarchy (h1–h6) as an indented outline. Paste HTML or load a webpage via URL to catch skipped heading levels, multiple or missing h1 elements, and other structural accessibility issues.\n\n### Features\n\n- Paste HTML or load a webpage via URL (subject to CORS)\n- Visualizes the heading hierarchy as an indented outline\n- Flags skipped heading levels (e.g. h2 β†’ h4)\n- Detects multiple or missing h1 elements\n- Shows heading text, level, and source order\n- Summary statistics (total headings, count per level)\n- Copy the generated outline to the clipboard\n- Clear/reset with a single click\n- Fully responsive, keyboard accessible, and works entirely offline (except optional URL loading)\n\nPasted or fetched HTML is parsed into a detached document and never rendered live, so no scripts execute and no remote resources load from untrusted markup.", "category": "accessibility", - "tags": [ - "a11y", - "accessibility", - "developer-tools", - "document-outline", - "headings", - "html", - "seo", - "wcag" - ], - "techStack": [ - "CSS3", - "DOMParser API", - "Fetch API", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["a11y", "accessibility", "developer-tools", "document-outline", "headings", "html", "seo", "wcag"], + "techStack": ["CSS3", "DOMParser API", "Fetch API", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -1805,18 +893,8 @@ "shortDescription": "Generate valid hreflang link tags for multilingual and multi-regional websites.", "longDescription": "## Hreflang Tag Generator\n\nGenerate copy-ready HTML hreflang tags for multilingual websites. Supports multiple language-region combinations, x-default, validation, and runs entirely offline.\n\n### Features\n\n- Multiple language and region entries\n- ISO language and region validation\n- x-default support\n- Copy-ready HTML output\n- Runs completely offline", "category": "web-seo", - "tags": [ - "generator", - "hreflang", - "html", - "international", - "seo" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["generator", "hreflang", "html", "international", "seo"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -1826,20 +904,8 @@ "shortDescription": "Generate valid hreflang link tags with a retro CRT terminal aesthetic.", "longDescription": "## Hreflang Tag Generator (Retro)\n\nA retro CRT terminal-styled variant of the Hreflang Tag Generator. Same functionality β€” generate copy-ready HTML, XML Sitemap, or HTTP Header hreflang tags for multilingual websites β€” wrapped in a phosphor-green scanline aesthetic.\n\n### Features\n\n- Multiple language and region entries with live validation\n- ISO language and region validation with inline errors\n- x-default support with URL validation\n- HTML, XML Sitemap, and HTTP Header output formats\n- Duplicate hreflang code detection\n- Non-blocking validation warnings and best-practice hints\n- Copy, download, and share controls\n- Light/dark theme toggle with localStorage persistence\n- Keyboard shortcuts for all actions\n- CRT scanline overlay and phosphor glow effects\n- Runs completely offline", "category": "web-seo", - "tags": [ - "generator", - "hreflang", - "html", - "international", - "retro", - "seo" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["generator", "hreflang", "html", "international", "retro", "seo"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -1849,22 +915,8 @@ "shortDescription": "Encode text into named, decimal, or hex HTML entities, or decode entities back into readable text.", "longDescription": "## HTML Entity Converter\n\nConvert text between plain characters and HTML entities. Encode special characters into named, decimal, or hexadecimal entities, or decode entities back into readable text using the browser's own parser.\n\n### Features\n\n- Encode plain text into HTML entities in real time\n- Decode HTML entities back into readable text\n- Named, decimal, and hexadecimal entity formats\n- Option to preserve safe ASCII letters/digits during encoding\n- Live side-by-side input and output\n- One-click copy of the output, or swap output back into input\n- Clear/reset both panels with a single click\n- Fully responsive, keyboard accessible, and works entirely offline", "category": "text", - "tags": [ - "decoding", - "developer-tools", - "encoding", - "entities", - "html", - "text", - "unicode", - "utility" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["decoding", "developer-tools", "encoding", "entities", "html", "text", "unicode", "utility"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -1874,19 +926,8 @@ "shortDescription": "An interactive playground to simulate and test HTTP headers like Cache-Control, ETag, and Last-Modified across different browser navigation states.", "longDescription": "## HTTP Cache-Control Simulator\n\nHTTP caching rules can feel abstract and difficult to debug in a live production environment. This simulator provides a visual sandbox where you can configure custom response headers and observe exactly how a browser evaluates cache freshness across various navigation actions.\n\n### Features\n\n- **Header Configuration Sandbox:** Tweak `Cache-Control` directives (`max-age`, `no-cache`, `no-store`, `must-revalidate`) and set custom validators like `ETag` and `Last-Modified` tokens.\n- **Navigation Action Triggers:** Simulate explicit user behaviors including fresh page loads, standard reloads, hard refetches, and back/forward browser navigation.\n- **Visual Pipeline Execution:** Real-time feedback showing whether a request results in a network fetch (200 OK), a server revalidation (304 Not Modified), or a local memory/disk cache hit.\n- **Request/Response Inspection:** Watch the client dynamically construct conditional request headers like `If-None-Match` and `If-Modified-Since` based on the current cache state.\n- **Zero-Dependency Architecture:** A completely self-contained responsive dashboard running entirely in the browser using Vanilla JS and native CSS layout structures.", "category": "utilities", - "tags": [ - "browser-internals", - "caching", - "developer-tools", - "http", - "network", - "visualizer" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["browser-internals", "caching", "developer-tools", "http", "network", "visualizer"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -1896,22 +937,8 @@ "shortDescription": "Construct HTTP headers interactively while verifying correctness, format, duplicates, and casing to generate canonical header blocks.", "longDescription": "## HTTP Header Builder & Canonicalization Checker\n\nA professional developer utility to build, validate, and canonicalize HTTP request headers. Supports format audits for Authorization, Content-Type, Cache-Control, and custom headers, complete with multi-casing, deduplication, and code generation.\n\n### Features\n\n- Build request headers interactively with enable/disable, add, edit, and delete controls\n- Autocomplete for common headers with explanation and default placeholder value suggestions\n- Protocol target selectors: checks canonical casing rules for HTTP/1.1 (Pascal-Case) vs HTTP/2+ (lowercase)\n- Duplicate resolver: merges multi-value headers with comma separator, and overrides single-value headers\n- Format validations for Authorization (Basic/Bearer/Token), Content-Type (MIME type check), Connection, Cache-Control, Cookie, and Host\n- One-click normalizing casing and deduplication fixes\n- Output request headers as raw canonical text block, curl flags, fetch dictionary, or Python dictionary", "category": "utilities", - "tags": [ - "api", - "canonicalization", - "curl", - "developer-tools", - "headers", - "http", - "offline", - "validator" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["api", "canonicalization", "curl", "developer-tools", "headers", "http", "offline", "validator"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -1921,21 +948,8 @@ "shortDescription": "Send a request to any URL and inspect its HTTP response headers, status code, and timing.", "longDescription": "## HTTP Header Inspector\n\nSend a request to any URL and inspect the response β€” status code, timing, content type, and all exposed response headers. Useful for debugging caching, security headers, and CORS behavior without opening browser dev tools.\n\n### Features\n\n- URL input with GET / HEAD method selector\n- Status code, response time, and content type shown as status pills\n- Full response headers table, alphabetically sorted\n- Clear note explaining CORS-limited header visibility for cross-origin requests\n- Copy headers as plain text\n- Download the result as JSON\n- Runs entirely client-side", "category": "browser-network", - "tags": [ - "cors", - "developer-tools", - "headers", - "http", - "inspector", - "network" - ], - "techStack": [ - "CSS3", - "Fetch API", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["cors", "developer-tools", "headers", "http", "inspector", "network"], + "techStack": ["CSS3", "Fetch API", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -1945,22 +959,8 @@ "shortDescription": "Inspect HTTP response headers, understand their purpose, and analyze security, caching, CORS, and performance information.", "longDescription": "## HTTP Header Inspector\n\nInspect and analyze HTTP response headers from any URL or pasted raw headers. Learn what each header does through categorized explanations, identify security-related headers, review caching directives, and inspect CORS behavior.\n\n### Features\n\n- Fetch headers directly from a URL\n- Analyze pasted raw HTTP headers\n- Categorized header explanations (Security, CORS, Caching, Cookies, Content, Networking)\n- Search and filter headers instantly\n- Copy individual headers or all headers\n- Responsive design with keyboard accessibility\n- Works completely offline for pasted headers", "category": "browser-network", - "tags": [ - "api", - "caching", - "cors", - "developer-tools", - "headers", - "http", - "network", - "security" - ], - "techStack": [ - "CSS3", - "Fetch API", - "HTML5", - "Vanilla JS" - ], + "tags": ["api", "caching", "cors", "developer-tools", "headers", "http", "network", "security"], + "techStack": ["CSS3", "Fetch API", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -1970,18 +970,8 @@ "shortDescription": "Create, validate, organize, preview, import, and export HTTP request headers locally in your browser.", "longDescription": "## HTTP Request Header Builder\n\nBuild and manage HTTP request headers with validation and export.\n\n### Features\n\n- Create and organize HTTP request headers\n- Header validation\n- Import and export headers\n- Preview formatted output\n- Works entirely offline", "category": "json-api", - "tags": [ - "api", - "headers", - "http", - "request", - "utility" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["api", "headers", "http", "request", "utility"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -1991,20 +981,8 @@ "shortDescription": "A professional browser-based prepress studio for ICC-accurate CMYK conversions, soft-proofing, gamut analysis, and Delta E calculations.", "longDescription": "## ICC-Aware Print Color Converter & Soft Proof Studio\n\nStop opening heavy desktop publishing suites just to verify whether a digital design will reproduce accurately in print. This application brings professional color management and soft-proofing into the browser, replacing naive conversion formulas with advanced device-independent color transformations.\n\n### Features\n\n- **Precise ICC Color Processing:** Simulate standard printing conditions like FOGRA39, SWOP, and GRACoL with correct chromatic adaptation and rendering intents.\n- **Interactive Soft-Proofing Engine:** Evaluate paper white absorption, dot gain, and out-of-gamut clipping side-by-side with before/after controls.\n- **Deep Color Space Synchronization:** Seamless live input mapping across OKLCH, LAB, P3, Adobe RGB, and sRGB color models.\n- **Detailed Print Diagnostics:** Total Ink Coverage (TAC) warnings, rich black detection, registration black checks, and comprehensive Delta E (76, 94, 2000) metrics.\n- **Prepress Utility Suite:** Ink usage estimators, spot color matching, and professional report generation.\n- **Zero-Dependency Architecture:** A lightning-fast, self-contained creative studio built entirely on client-side Vanilla JS and Canvas specifications.", "category": "color", - "tags": [ - "cmyk", - "color-management", - "icc-profile", - "prepress", - "print", - "soft-proof" - ], - "techStack": [ - "Canvas API", - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["cmyk", "color-management", "icc-profile", "prepress", "print", "soft-proof"], + "techStack": ["Canvas API", "CSS3", "HTML5", "Vanilla JS"], "difficulty": "Hard", "status": "live" }, @@ -2014,22 +992,8 @@ "shortDescription": "Inspect an image's width, height, aspect ratio, orientation, size, format, and megapixels locally.", "longDescription": "## Image Dimension Checker\n\nInspect the dimensions and basic properties of any image instantly. Upload or drag in an image to see its width, height, aspect ratio, orientation, file size, format, and megapixel count β€” all processed locally with nothing uploaded.\n\n### Features\n\n- Upload via file picker or drag-and-drop\n- Width and height in pixels\n- Aspect ratio in simplified and decimal forms\n- Orientation detection (Landscape, Portrait, Square)\n- File size and image format\n- Total megapixel count\n- Live image preview\n- Copy image info to the clipboard\n- Clear and reset with one click\n- Fully responsive, keyboard accessible, and works offline", "category": "image", - "tags": [ - "aspect-ratio", - "browser", - "dimensions", - "image", - "metadata", - "resolution", - "utility" - ], - "techStack": [ - "CSS3", - "File API", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["aspect-ratio", "browser", "dimensions", "image", "metadata", "resolution", "utility"], + "techStack": ["CSS3", "File API", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -2039,19 +1003,8 @@ "shortDescription": "Extract and view EXIF, GPS, and other hidden metadata locally without uploading your images.", "longDescription": "## Image Metadata Viewer\n\nAn offline web utility designed to extract and display hidden metadata (EXIF, IPTC, XMP) embedded inside image files. It helps developers, photographers, and privacy-conscious users inspect camera settings, geolocation data, creation dates, and copyright information locally without uploading private photos to an external server.\n\n### Features\n\n- **Drag-and-Drop:** Instantly load and parse images.\n- **Extensive Parsing:** Extracts detailed EXIF data (camera model, exposure, focal length, ISO, GPS coordinates).\n- **Export to JSON:** Download the extracted data for programmatic use.\n- **Offline First:** Operates entirely client-side using Vanilla JS.\n- **Privacy Focused:** Your images never leave your device.", "category": "image", - "tags": [ - "exif", - "image", - "inspector", - "metadata", - "photo", - "viewer" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["exif", "image", "inspector", "metadata", "photo", "viewer"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -2061,20 +1014,8 @@ "shortDescription": "Real-time Abstract Syntax Tree (AST) visualizer and parser studio for JavaScript and JSON code.", "longDescription": "## Interactive AST Visualizer & Parser Studio\n\nA privacy-first client-side tool to inspect, parse, and visualize Abstract Syntax Trees (ASTs) for JavaScript and JSON.\n\n### Features\n\n- Real-Time AST Parser: Recursively tokenizes and parses JS code into structured AST nodes\n- Interactive Tree Inspector: Expandable node tree view with node type badges, line numbers, and node properties\n- Scope & Symbol Table Analyzer: Inspect variable declarations, function parameters, and scope bindings\n- Presets Library: Quick-load sample code (Variable Declarations, Functions, Binary Expressions, Async/Await)\n- One-Click JSON Export: Copy AST JSON or download `.json` file\n- Persistent Dark/Light theme mode", "category": "utilities", - "tags": [ - "ast", - "compiler", - "developer-tools", - "javascript", - "parser", - "syntax-tree", - "tree-visualization" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["ast", "compiler", "developer-tools", "javascript", "parser", "syntax-tree", "tree-visualization"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Hard", "status": "live" }, @@ -2084,21 +1025,8 @@ "shortDescription": "Interactive visual GUI editor for constructing, formatting, and exporting SQL queries across multiple database dialects.", "longDescription": "## Interactive SQL Query Builder & Formatter\n\nA privacy-first client-side tool to visually construct, format, and generate SQL queries (`SELECT`, `INSERT`, `UPDATE`, `DELETE`) across PostgreSQL, MySQL, SQLite, and MS SQL Server.\n\n### Features\n\n- Visual Clause Builder: Construct `SELECT`, `WHERE`, `JOIN` (`INNER`, `LEFT`, `RIGHT`), `GROUP BY`, `ORDER BY`, and `LIMIT` using interactive UI controls\n- Dialect Switcher: Format generated syntax specifically for PostgreSQL, MySQL, SQLite, and SQL Server\n- Preset Schemas: Quick-load mock database schemas (E-Commerce Store, Blog/CMS, SaaS Auth)\n- Instant Code Exports: Copy formatted SQL query or download `.sql` file\n- Persistent Dark/Light theme mode", "category": "json-api", - "tags": [ - "database", - "developer-tools", - "formatter", - "mysql", - "postgresql", - "query-builder", - "sql", - "sqlite" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["database", "developer-tools", "formatter", "mysql", "postgresql", "query-builder", "sql", "sqlite"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -2108,20 +1036,8 @@ "shortDescription": "Interactive tool to create, solve, and print custom Word Search grid puzzles with drag-highlighting.", "longDescription": "## Interactive Word Search Generator & Solver\n\nA privacy-first client-side tool to generate, interactively solve, and export custom Word Search puzzles.\n\n### Features\n\n- Custom Word Lists & Presets: Quick-load preset categories (Programming Languages, Frameworks, Animals, Countries) or type custom word lists\n- Interactive Grid Solver: Click and drag across letters to highlight and find hidden words with real-time progress tracking\n- Customizable Grid Dimensions: Select 10x10, 12x12, or 15x15 puzzle matrix sizes\n- Solution Reveal Toggle: Inspect answer locations with one-click answer highlight mode\n- Print & Export Mode: Clean printable worksheet layout for classroom or offline paper solving\n- Persistent Dark/Light theme mode", "category": "text", - "tags": [ - "developer-tools", - "game", - "generator", - "interactive", - "puzzle", - "text", - "word-search" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["developer-tools", "game", "generator", "interactive", "puzzle", "text", "word-search"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -2131,18 +1047,8 @@ "shortDescription": "Convert between JSON and CSV formats with bidirectional conversion and custom delimiters.", "longDescription": "## JSON CSV Converter\n\nA bidirectional converter between JSON arrays and CSV text, with support for custom delimiters.\n\n### Features\n\n- Two-way conversion: JSON to CSV and CSV to JSON\n- Custom delimiter support (comma, tab, semicolon, pipe)\n- Proper CSV quoting for values containing delimiters or quotes\n- Sample data buttons for quick testing\n- Live row/item count stats\n- Success feedback on conversion\n- Dark mode support via prefers-color-scheme\n- Works completely offline", "category": "json-api", - "tags": [ - "converter", - "csv", - "data", - "json", - "utility" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["converter", "csv", "data", "json", "utility"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -2152,18 +1058,8 @@ "shortDescription": "Compare two JSON objects semantically with added, removed, and modified value highlighting.", "longDescription": "## JSON Diff Viewer\n\nCompare two JSON objects while ignoring formatting differences. Highlights added, removed, and modified values with a clear side-by-side visual diff. Useful for API responses, configuration files, and debugging JSON changes.", "category": "json-api", - "tags": [ - "api", - "compare", - "diff", - "json", - "viewer" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["api", "compare", "diff", "json", "viewer"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -2173,22 +1069,8 @@ "shortDescription": "Format, validate, and minify JSON locally in your browser.", "longDescription": "## JSON Formatter\n\nA clean, offline JSON formatter for quickly validating and transforming JSON without sending data to a server.\n\n### Features\n\n- Format JSON with 2-space or 4-space indentation\n- Minify JSON to a single line\n- Show validation errors with line and column details\n- Count keys, characters, and file size\n- Copy formatted output to the clipboard\n- Download output as a JSON file\n- Automatic and manual dark mode\n- Works completely offline", "category": "json-api", - "tags": [ - "developer-tools", - "formatter", - "json", - "minify", - "offline", - "prettify", - "validator" - ], - "techStack": [ - "Blob API", - "Clipboard API", - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["developer-tools", "formatter", "json", "minify", "offline", "prettify", "validator"], + "techStack": ["Blob API", "Clipboard API", "CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -2198,22 +1080,8 @@ "shortDescription": "Paste a JSON document, build/test JSONPath expressions, and preview matching nodes/values offline.", "longDescription": "## JSON Path Explorer\n\nAn interactive developer utility to evaluate JSONPath expressions against any JSON document locally in the browser.\n\n### Features\n\n- Paste or upload a local JSON file to query\n- Write and test JSONPath expressions with real-time evaluation\n- Custom syntax validator highlighting failing segments in the query path\n- Interactive breadcrumbs and collapsible JSON tree matches\n- Select preset datasets (Book Store, User Profiles, GitHub API) with recommended queries\n- Keep a local query history of past expressions", "category": "json-api", - "tags": [ - "api", - "developer-tools", - "json", - "jsonpath", - "offline", - "query", - "testing" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "jsonpath-plus", - "Vanilla JS" - ], + "tags": ["api", "developer-tools", "json", "jsonpath", "offline", "query", "testing"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "jsonpath-plus", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -2223,17 +1091,8 @@ "shortDescription": "Validate JSON data against a JSON Schema.", "longDescription": "## JSON Schema Validator\n\nValidate JSON data against a JSON Schema.\n\n### Features\n\n- Single HTML file\n- Works offline\n- Dark mode support\n- Responsive design", "category": "json-api", - "tags": [ - "api", - "json", - "schema", - "validation" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["api", "json", "schema", "validation"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -2243,21 +1102,8 @@ "shortDescription": "Validate JSON data against JSON Schema with live error reporting, syntax highlighting, and detailed validation results.", "longDescription": "## JSON Schema Validator\n\nValidate JSON data against a JSON Schema in real time. Edit the schema and JSON side by side, instantly detect validation errors, and view the exact JSON path for every issue.\n\n### Features\n\n- Live JSON Schema validation\n- Real-time syntax highlighting for JSON\n- Detailed validation errors with JSON Pointer paths\n- Built-in sample templates for quick testing\n- Supports Draft-07 JSON Schema features\n- Instant parsing and validation feedback\n- Responsive interface for desktop and mobile\n- Works completely offline in the browser", "category": "json-api", - "tags": [ - "api", - "developer-tools", - "draft-07", - "json", - "json-schema", - "schema", - "validation", - "validator" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["api", "developer-tools", "draft-07", "json", "json-schema", "schema", "validation", "validator"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -2267,16 +1113,8 @@ "shortDescription": "Convert between JSON and CSV formats instantly.", "longDescription": "## JSON to CSV Converter\n\nConvert JSON to CSV and vice versa.", "category": "json-api", - "tags": [ - "converter", - "csv", - "json" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["converter", "csv", "json"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -2286,20 +1124,8 @@ "shortDescription": "Convert raw JSON payloads into strongly-typed definitions for TypeScript, Go, Rust, JSON Schema, JSDoc, Python, or C#.", "longDescription": "## JSON to Type Definitions Converter\n\nConvert raw JSON payloads into strongly-typed definitions for TypeScript interfaces, Go structs, Rust structs, JSON Schema, JSDoc comments, Python TypedDicts, or C# Classes completely client-side in the browser.\n\n### Features\n\n- **Raw JSON Playground**: Instantly validates and formats pasted or uploaded JSON payloads.\n- **Multi-Language Outputs**: Generate definitions for TypeScript, Go, Rust, JSON Schema, JSDoc, Python TypedDict, or C# Classes.\n- **Configuration Controls**: Toggle options for handling optional vs. required fields, handling null/empty structures, and renaming root interfaces.\n- **Advanced Parser**: Smart detection of nested object hierarchies and array items to generate clean, unified schemas.\n- **Developer UX**: Syntax-highlighted output with dark mode, one-click copy-to-clipboard, and direct file download options.", "category": "json-api", - "tags": [ - "api", - "converter", - "developer-tools", - "json", - "parsing", - "typescript", - "utility" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["api", "converter", "developer-tools", "json", "parsing", "typescript", "utility"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -2309,20 +1135,8 @@ "shortDescription": "Generate Schema.org JSON-LD structured data with live preview, copy, and download support.", "longDescription": "## JSON-LD / Schema.org Generator\n\nGenerate valid Schema.org JSON-LD structured data for websites using an intuitive offline interface. Create structured data for Organization, Person, Article, Product, Event, FAQ Page, and Breadcrumb List schemas with real-time JSON preview.\n\n### Features\n\n- Generate JSON-LD structured data\n- Supports Organization, Person, Article, Product, Event, FAQ Page, and Breadcrumb List schemas\n- Dynamic form fields based on selected schema type\n- Real-time JSON-LD preview\n- One-click copy to clipboard\n- Download generated JSON as a `.json` file\n- Reset form\n- Responsive and mobile-friendly design\n- Works completely offline with no external dependencies", "category": "web-seo", - "tags": [ - "generator", - "json", - "jsonld", - "schema", - "schema.org", - "seo", - "structured-data" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["generator", "json", "jsonld", "schema", "schema.org", "seo", "structured-data"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -2332,20 +1146,8 @@ "shortDescription": "Generate Schema.org JSON-LD structured data with live preview, copy, and download support.", "longDescription": "## JSON-LD Schema.org Generator\n\nGenerate valid Schema.org JSON-LD structured data snippets for improved SEO and rich search results.\n\n### Features\n\n- Multiple schema types (Article, Product, FAQ, etc.).\n- Live JSON-LD preview as you type.\n- Copy to clipboard and download support.\n- Validation against Schema.org standards.\n- Single HTML file, works offline.\n- Responsive design with dark mode support.", "category": "web-seo", - "tags": [ - "generator", - "json-ld", - "schema", - "schema.org", - "seo", - "structured-data", - "web" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["generator", "json-ld", "schema", "schema.org", "seo", "structured-data", "web"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -2355,22 +1157,8 @@ "shortDescription": "Build and sign JSON Web Tokens with HS256/HS384/HS512 using Web Crypto API β€” entirely in your browser.", "longDescription": "## JWT Builder & Signer\n\nA client-side JWT generator that lets you compose header and payload JSON, pick an HMAC algorithm, and sign the token β€” all without leaving your browser.\n\n### Features\n\n- Interactive JSON editors for header and payload with live validation status\n- Algorithm selector (HS256, HS384, HS512) that auto-updates the header\n- Secret key input with show/hide toggle\n- Live JWT generation as you type using the Web Crypto API\n- Colour-coded token output (header / payload / signature)\n- Copy the signed JWT to clipboard in one click\n- Reset button to restore defaults\n- Dark/light theme toggle with localStorage persistence\n- Works completely offline β€” nothing leaves your browser", "category": "json-api", - "tags": [ - "api", - "builder", - "encoder", - "json-web-token", - "jwt", - "offline", - "security", - "signing" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS", - "Web Crypto API" - ], + "tags": ["api", "builder", "encoder", "json-web-token", "jwt", "offline", "security", "signing"], + "techStack": ["CSS3", "HTML5", "Vanilla JS", "Web Crypto API"], "difficulty": "Medium", "status": "live" }, @@ -2380,22 +1168,8 @@ "shortDescription": "Decode and inspect JSON Web Tokens β€” header, payload, claims, and expiry β€” entirely in your browser.", "longDescription": "## JWT Decoder\n\nA clean, offline JWT inspector that decodes any JSON Web Token and breaks it down into its three parts with syntax highlighting, standard claim parsing, and expiry detection.\n\n### Features\n\n- Colour-coded token structure (header / payload / signature)\n- Syntax-highlighted JSON for header and payload\n- Standard claims table (iss, sub, aud, exp, nbf, iat, jti) with human-readable timestamps\n- Expiry detection β€” shows Valid, Expired, or Decoded status badge\n- Copy individual parts (header JSON, payload JSON, signature) or all as combined JSON\n- Auto-decode on paste β€” no button click needed\n- Works completely offline β€” nothing leaves your browser", "category": "json-api", - "tags": [ - "auth", - "decoder", - "developer-tools", - "json-web-token", - "jwt", - "offline", - "security", - "token" - ], - "techStack": [ - "Clipboard API", - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["auth", "decoder", "developer-tools", "json-web-token", "jwt", "offline", "security", "token"], + "techStack": ["Clipboard API", "CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -2405,21 +1179,8 @@ "shortDescription": "Paste HTML and get a prioritized offline accessibility audit (labels, headings, ARIA hints, contrast guidance).", "longDescription": "## Local A11y Snapshot Scanner\n\nAudit HTML code snippets locally for common accessibility violations (WCAG compliance) entirely client-side without any server processing.\n\n### Features\n\n- Audit pasted or uploaded HTML snippets locally using native browser DOMParser\n- Categorize findings by severity (Error, Warning, Info) in a visual dashboard summary\n- Scan for labeling gaps: checks input controls, select, textarea, and buttons for accessible text/labels\n- Check heading structural integrity and outline outline sequence hops\n- Audit missing image alternative text tags or empty alt tags on linked graphics\n- Find focus flow conflicts: identifies keyboard-focusable nodes nested in aria-hidden wrappers\n- Copy recommended remediation code snippets directly to resolve issues\n- Export comprehensive audit findings as JSON or copy plain text summaries", "category": "accessibility", - "tags": [ - "a11y", - "accessibility", - "audit", - "html", - "offline", - "scanner", - "testing" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["a11y", "accessibility", "audit", "html", "offline", "scanner", "testing"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -2429,23 +1190,8 @@ "shortDescription": "Browse, search, edit, import, and export localStorage entries for the current origin.", "longDescription": "## LocalStorage Explorer\n\nBrowse, inspect, search, edit, import, and export localStorage entries for the current origin β€” all locally in your browser.\n\n### Features\n\n- Searchable table of all localStorage key-value pairs\n- View, edit, add, and delete entries\n- Automatic JSON detection with pretty-printing\n- Search and filter by key or value\n- Copy keys or values to the clipboard\n- Export all data as a JSON file\n- Import previously exported JSON with validation\n- Storage statistics (entry count and estimated size)\n- Clear all data with a confirmation step\n- Fully responsive, keyboard accessible, and works entirely offline\n\nNote: due to the browser's Same-Origin Policy, this tool can only access localStorage belonging to its own origin, not other websites.", "category": "browser-network", - "tags": [ - "browser", - "debugging", - "developer-tools", - "json", - "localstorage", - "storage", - "utility" - ], - "techStack": [ - "CSS3", - "FileReader API", - "Google Fonts", - "HTML5", - "Vanilla JS", - "Web Storage API" - ], + "tags": ["browser", "debugging", "developer-tools", "json", "localstorage", "storage", "utility"], + "techStack": ["CSS3", "FileReader API", "Google Fonts", "HTML5", "Vanilla JS", "Web Storage API"], "difficulty": "Easy", "status": "live" }, @@ -2455,18 +1201,8 @@ "shortDescription": "Generate placeholder lorem ipsum text for designs and mockups.", "longDescription": "## Lorem Ipsum Generator\n\nGenerate customizable lorem ipsum placeholder text for use in designs, wireframes, and mockups.\n\n### Features\n- Choose number of paragraphs or words\n- Copy to clipboard with one click\n- Works fully offline", "category": "text", - "tags": [ - "generator", - "ipsum", - "lorem", - "placeholder", - "text" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["generator", "ipsum", "lorem", "placeholder", "text"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -2476,18 +1212,8 @@ "shortDescription": "Write and preview Markdown in real time, offline.", "longDescription": "## Markdown Previewer\n\nA standalone Markdown editor with live preview that works completely offline.\n\n### Features\n\n- Live Markdown preview\n- Support for headings, lists, tables, links, images, blockquotes, task lists, and code blocks\n- Copy generated HTML\n- Export rendered HTML\n- Focus mode\n- Word and character count\n- Responsive design\n- Works completely offline", "category": "text", - "tags": [ - "editor", - "html", - "markdown", - "offline", - "preview" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["editor", "html", "markdown", "offline", "preview"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -2497,20 +1223,8 @@ "shortDescription": "Interactive grid editor to create, format, align, and convert Markdown tables.", "longDescription": "## Markdown Table Builder & Converter\n\nA privacy-first client-side developer utility for constructing, formatting, aligning, and converting Markdown tables directly in the browser.\n\n### Features\n\n- Interactive spreadsheet-like grid editor with inline cell editing\n- Dynamic row and column addition and deletion\n- Per-column alignment selectors (Left, Center, Right)\n- Import raw CSV, TSV, or JSON data directly into editable Markdown tables\n- Toggle between visually padded ASCII aligned columns and compact syntax\n- One-click copy and instant .md file download\n- Dark and light theme modes with localStorage persistence\n- Works 100% offline with zero dependencies", "category": "text", - "tags": [ - "converter", - "csv", - "generator", - "markdown", - "table", - "text", - "utility" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["converter", "csv", "generator", "markdown", "table", "text", "utility"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -2520,17 +1234,8 @@ "shortDescription": "Generate Markdown tables easily with this visual tool.", "longDescription": "## Markdown Table Generator\n\nGenerate Markdown tables easily with this visual tool.\n\n### Features\n\n- Single HTML file\n- Works offline\n- Dark mode support\n- Responsive design", "category": "text", - "tags": [ - "formatting", - "generator", - "markdown", - "table" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["formatting", "generator", "markdown", "table"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -2541,19 +1246,8 @@ "shortDescription": "A cute pink-themed Markdown table generator with live preview and one-click copy.", "longDescription": "Markdown Table Generator (Girly) is a charming, pastel-themed utility for creating GitHub-flavored Markdown tables quickly and effortlessly. Users can define the number of rows and columns, edit cell values in an intuitive interface, preview the generated Markdown in real time, and copy the output with a single click. Designed with a playful pink aesthetic, smooth animations, and a responsive layout, it combines productivity with an enjoyable user experience while remaining a lightweight, standalone HTML tool.", "category": "text", - "tags": [ - "editor", - "generator", - "girly", - "markdown", - "productivity", - "table" - ], - "techStack": [ - "CSS", - "HTML", - "JavaScript" - ], + "tags": ["editor", "generator", "girly", "markdown", "productivity", "table"], + "techStack": ["CSS", "HTML", "JavaScript"], "difficulty": "Easy", "status": "live" }, @@ -2563,20 +1257,8 @@ "shortDescription": "Generate essential HTML meta tags with a live preview and copy-ready code.", "longDescription": "## Meta Tag Generator\n\nCreate essential HTML meta tags for your website in real time. This tool helps developers generate SEO-friendly meta tags including title, description, keywords, author, robots, viewport, charset, and theme color.\n\n### Features\n- Live meta tag generation\n- Live preview of page information\n- Character counters for title and description\n- One-click copy to clipboard\n- Reset all fields instantly\n- Responsive design\n- Works completely offline\n- Single self-contained HTML file with no external dependencies", "category": "web-seo", - "tags": [ - "generator", - "head", - "html", - "meta", - "metadata", - "seo", - "web" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["generator", "head", "html", "meta", "metadata", "seo", "web"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -2586,17 +1268,8 @@ "shortDescription": "Create soft, extruded UI elements with customizable neumorphic shadows.", "longDescription": "## Neumorphism Generator\n\nA visual tool for creating soft UI / neumorphic design effects.\n\n### Features\n\n- Convex, concave, and flat shadow styles\n- Adjustable distance, blur, border radius, and intensity\n- Custom background color picker with dynamic shadow colors\n- Live preview that updates in real time\n- Copy generated CSS to clipboard\n- Dark mode via prefers-color-scheme\n- Responsive layout for mobile and desktop", "category": "css", - "tags": [ - "css", - "neumorphism", - "shadow", - "ui" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["css", "neumorphism", "shadow", "ui"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -2606,25 +1279,8 @@ "shortDescription": "Extract text from images entirely offline using client-side OCR.", "longDescription": "## OCR Text Extractor\n\nExtract text from images entirely in your browser using client-side OCR (Tesseract.js).\n\n### Features\n\n- Drag-and-drop image upload (PNG, JPG, WebP)\n- Offline OCR (downloads language data on first run, then reuses cached files)\n- Progress bar for initialization and recognition\n- Canvas preprocessing (upscaling + contrast) to improve accuracy\n- Copy extracted text to clipboard", "category": "text", - "tags": [ - "extractor", - "image", - "ocr", - "offline", - "text", - "utility" - ], - "techStack": [ - "Canvas API", - "Clipboard API", - "CSS3", - "FileReader API", - "HTML5", - "Tesseract.js", - "Vanilla JS", - "WASM", - "Web Workers" - ], + "tags": ["extractor", "image", "ocr", "offline", "text", "utility"], + "techStack": ["Canvas API", "Clipboard API", "CSS3", "FileReader API", "HTML5", "Tesseract.js", "Vanilla JS", "WASM", "Web Workers"], "difficulty": "Hard", "status": "live" }, @@ -2634,23 +1290,8 @@ "shortDescription": "Validate Open Graph tags from any public URL with social previews, health score, and JSON export.", "longDescription": "## Open Graph Checker\n\nFetch and analyze Open Graph metadata from any public URL with tri-proxy fallback, live social previews for Facebook, Twitter/X, and LinkedIn, and actionable recommendations.\n\n### Features\n\n- Tri-proxy CORS fallback for maximum compatibility\n- Social previews for Facebook, Twitter/X, and LinkedIn\n- Weighted OG health score (0–100) with grade\n- Tag-by-tag validation checklist with recommendations\n- Raw extracted meta tag table\n- Copy plain-text report or export full JSON\n- Dark/light theme with system preference\n- Works completely offline UI, fetches on demand", "category": "web-seo", - "tags": [ - "analyzer", - "checker", - "meta-tags", - "open-graph", - "seo", - "social-media", - "validator", - "web" - ], - "techStack": [ - "CSS3", - "DOMParser API", - "Fetch API", - "HTML5", - "Vanilla JS" - ], + "tags": ["analyzer", "checker", "meta-tags", "open-graph", "seo", "social-media", "validator", "web"], + "techStack": ["CSS3", "DOMParser API", "Fetch API", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -2660,21 +1301,8 @@ "shortDescription": "Compare og:* tags with expected profile schemas, audit tag limits or conflicts, and preview social sharing layout cards.", "longDescription": "## Open Graph Debugger & Meta Diff\n\nA visual auditor for SEO metadata elements, validating og:* and twitter:* tags against standard target schemas (Blog, Article, Product). Detects missing fields, invalid types, length truncations, localhost URL links, and casing issues with platform checklist integration.\n\n### Features\n\n- Interactive tag grid comparing expected schema targets vs provided meta values\n- Pre-defined schemas for Basic Open Graph, Rich Article/Blog, and Product/E-Commerce pages\n- Validation tests checking og:type, absolute/localhost URL rules, required tags, and title/description lengths\n- Highlights conflicts: detects discrepancies between og:url and canonical links, or og:* and twitter:* variables\n- Real-time mockup visual preview cards for Facebook and Twitter summary feeds\n- Copy-paste optimized head block generator with customization option switches", "category": "web-seo", - "tags": [ - "api", - "facebook", - "meta", - "open-graph", - "seo", - "twitter", - "validator" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["api", "facebook", "meta", "open-graph", "seo", "twitter", "validator"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -2684,20 +1312,8 @@ "shortDescription": "Generate Open Graph meta tags with a live tri-platform preview (Facebook, Twitter, LinkedIn) and copy-ready HTML.", "longDescription": "## Open Graph Generator\n\nBuild complete Open Graph metadata with real-time validation scores, tri-platform social card previews, and copy-ready HTML output.\n\n### Features\n\n- Live preview for Facebook, Twitter/X, and LinkedIn\n- Real-time OG tag validation with 7-point checklist\n- Character counters with warnings for title (60) and description (155)\n- Dark/light theme with system preference detection\n- One-click copy of clean HTML meta tags\n- Works completely offline", "category": "web-seo", - "tags": [ - "generator", - "meta-tags", - "open-graph", - "preview", - "seo", - "social-media", - "web" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["generator", "meta-tags", "open-graph", "preview", "seo", "social-media", "web"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -2707,26 +1323,8 @@ "shortDescription": "Analyze meta tags, social previews, and SEO metadata for any URL with actionable scores.", "longDescription": "## Open Graph Inspector\n\nA comprehensive Open Graph and meta tag analyzer that fetches any URL and breaks down its social sharing metadata, SEO tags, and rich preview data.\n\n### Features\n\n- **URL or Paste HTML** - Enter a URL to fetch, or paste raw HTML directly\n- **Social Previews** - See exactly how links appear on Facebook, Twitter, LinkedIn, and other platforms\n- **OG Tag Analysis** - Scores your Open Graph tags (og:title, og:description, og:image, etc.) out of 7\n- **Twitter Card Analysis** - Validates Twitter Card meta tags (5-point check)\n- **SEO Metadata Check** - Evaluates standard SEO tags like title, description, canonical, and robots\n- **Actionable Scores** - Color-coded pass/fail indicators with specific recommendations\n- **Favicon Detection** - Finds and displays all linked icons\n- **Keyboard Shortcuts** - Full keyboard navigation support for power users\n- **Export Results** - Download analysis as JSON\n- **Dark Mode** - Automatic dark/light theme with manual toggle\n- **CORS Proxy Fallback** - Multiple proxy strategies for fetching cross-origin URLs\n- **Clipboard Paste** - Paste HTML directly from clipboard for offline analysis", "category": "web-seo", - "tags": [ - "analyzer", - "facebook", - "meta-tags", - "open-graph", - "preview", - "previewer", - "seo", - "social-media", - "twitter-card", - "validator" - ], - "techStack": [ - "Clipboard API", - "CSS3", - "Fetch API", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["analyzer", "facebook", "meta-tags", "open-graph", "preview", "previewer", "seo", "social-media", "twitter-card", "validator"], + "techStack": ["Clipboard API", "CSS3", "Fetch API", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -2736,19 +1334,8 @@ "shortDescription": "Generate unique, collision-free variation color schemes based on color theory metrics, offline.", "longDescription": "## Palette Generator\n\nA modern client-side color utility that creates harmonious, perceptually balanced color palettes instantly.\n\n### Features\n\n- **Harmony Schemes:** Supports Complementary, Analogous, Triadic, Tetradic, and Monochromatic configurations.\n- **Collision-Free Engine:** Uses a perceptually weighted color distance metric to eliminate duplicate or nearly identical colors.\n- **Dynamic Variations:** Instantly shifts brightness, saturation, and hue steps with a non-clamping variation seed system.\n- **Real-Time Interface:** Syncs hex textual data inputs with system color pickers automatically without refreshing.\n- **Export Ecosystem:** One-click JSON generation containing complete schema distributions and formatted strings tagged with active metrics.\n- **Works Completely Offline:** Fully self-contained without tracking servers or external framework dependency overhead.", "category": "color", - "tags": [ - "color", - "color-tools", - "generator", - "offline", - "palette" - ], - "techStack": [ - "Canvas API", - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["color", "color-tools", "generator", "offline", "palette"], + "techStack": ["Canvas API", "CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -2758,20 +1345,8 @@ "shortDescription": "Generate highly secure, cryptographic random passwords instantly. 100% offline, privacy guaranteed.", "longDescription": "## Password Generator\n\nA secure, client-side password generator that creates strong, random passwords. It runs entirely offline in the browser, ensuring that no passwords are ever sent over a network or stored on a server.\n\n### Features\n\n- Interactive slider to choose password length (e.g., 4 to 64 characters)\n- Toggle options for Uppercase, Lowercase, Numbers, and Symbols\n- **New:** Option to exclude ambiguous characters (e.g., i, l, 1, L, o, 0, O) to improve readability\n- Real-time password strength indicator based on entropy\n- \"One-click copy\" to instantly copy the generated password to the clipboard\n- 100% offline and secureβ€”runs entirely in the browser using the native Web Crypto API (`crypto.getRandomValues`) for cryptographic randomness", "category": "utilities", - "tags": [ - "generator", - "offline", - "password", - "privacy", - "security", - "utility" - ], - "techStack": [ - "Crypto API", - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["generator", "offline", "password", "privacy", "security", "utility"], + "techStack": ["Crypto API", "CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -2781,19 +1356,8 @@ "shortDescription": "A professional color science studio for generating perceptually uniform color scales in OKLCH and CIELAB with live UI previews and design system exports.", "longDescription": "## Perceptually Uniform Palette Interpolator\n\nTraditional gradient generators interpolate colors in sRGB or HSL space, resulting in muddy midpoints, severe brightness dips, and unnatural hue shifts. This tool brings professional color science into the browser, allowing designers and developers to build mathematically balanced, perceptually uniform color scales using modern OKLCH and CIELAB mathematics.\n\n### Features\n\n- **Advanced Color Spaces:** Interpolate smoothly across OKLCH, CIELAB, HSL, and RGB with customizable shortest-path, longest-path, increasing, and decreasing hue rules.\n- **Precision Parametric Controls:** Tweak lightness progression curves, chroma scaling, saturation bias, and gamma correction across 5 to 11 scale steps.\n- **Educational Comparison Mode:** Visually isolate and understand the perceptual flaws of legacy color spaces compared to modern human-centric models.\n- **Comprehensive Design Token Output:** Copy or download production-ready code for Tailwind CSS configurations, CSS Custom Properties, SCSS, JSON, and Adobe ASE files.\n- **Live Component Testing:** Real-time UI playground that applies your generated palette to buttons, cards, text badges, and charts to verify visual hierarchy before deployment.\n- **Accessibility Auditing:** Built-in WCAG contrast checks, text color pairing, and color blindness simulation filters.\n- **Zero-Dependency Architecture:** A lightning-fast, self-contained creative application running entirely client-side using Vanilla JS and native Canvas APIs.", "category": "color", - "tags": [ - "accessibility", - "color-science", - "css", - "design-system", - "oklch", - "palette-generator" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["accessibility", "color-science", "css", "design-system", "oklch", "palette-generator"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -2803,19 +1367,8 @@ "shortDescription": "A refactoring tool that converts legacy physical CSS properties to direction-aware logical properties with live RTL/LTR previews.", "longDescription": "## Physical β†’ Logical CSS Properties Translator\n\nMigrating legacy codebases to modern, internationalized layouts is a daunting task. This translator automates the process of identifying physical properties like `margin-left` and `border-right` and converting them into their modern logical equivalents (`margin-inline-start`, `border-inline-end`). \n\n### Features\n\n- **Automated Refactoring:** Quickly convert standard CSS blocks into robust, direction-agnostic styles compatible with `dir=\"rtl\"` and `dir=\"ltr\"` layouts.\n- **Live Symmetry Sandbox:** See exactly how your component reacts to direction changes. The side-by-side preview panel highlights layout breakage caused by fixed physical properties.\n- **Educational Side-by-Side:** Provides a clear breakdown of the transformation logic, helping teams understand why `padding-left` fails when switching to right-to-left languages.\n- **Modern Shorthand Support:** Correctly handles complex shorthand property expansions into their logical block/inline equivalents.\n- **Zero-Dependency Core:** A fast, responsive developer utility built natively to handle heavy CSS parsing entirely client-side.", "category": "css", - "tags": [ - "css", - "i18n", - "internationalization", - "logical-properties", - "refactoring", - "rtl" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["css", "i18n", "internationalization", "logical-properties", "refactoring", "rtl"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -2825,17 +1378,8 @@ "shortDescription": "Bidirectionally convert between JSON and CSV with nested flattening and live preview.", "longDescription": "## Premium JSON/CSV Converter\n\nA beautiful, premium JSON to CSV and CSV to JSON converter featuring automatic flattening of nested JSON objects, custom delimiter support, and a live data preview table.", "category": "json-api", - "tags": [ - "converter", - "csv", - "data", - "json" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["converter", "csv", "data", "json"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -2845,21 +1389,8 @@ "shortDescription": "Generate customizable privacy policies for websites and apps with live preview, copy, and download.", "longDescription": "## Privacy Policy Generator\n\nGenerate customizable privacy policies for websites and apps using a simple form with live preview.\n\n### Features\n\n- Fill-in form with common policy clauses\n- GDPR and CCPA compliance options\n- Live preview of generated policy\n- Copy to clipboard and download\n- Works completely offline", "category": "web-seo", - "tags": [ - "ccpa", - "gdpr", - "generator", - "legal", - "policy", - "privacy", - "seo", - "website" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["ccpa", "gdpr", "generator", "legal", "policy", "privacy", "seo", "website"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -2869,18 +1400,8 @@ "shortDescription": "Generate symmetrical retro 8-bit sprites using cellular automata and random noise.", "longDescription": "## Procedural Pixel Art Sprite Generator & Animator\n\nCreate a web-based pixel art creator and procedural asset generator using HTML, CSS, and JavaScript. The application leverages cellular automata and symmetric random noise to automatically generate retro sprites (e.g. spaceships, monsters, items) and animate them using pixel grid timelines.\n\n### Features\n\n- Educates developers on procedural logic, cellular automata (Conway's rules), and random seeding.\n- Provides an interactive UI for creating, generating, and exporting retro pixel art.\n- Demonstrates timeline frames and sprite sheet generation techniques.", "category": "image", - "tags": [ - "canvas", - "enhancement", - "game-dev", - "javascript", - "procedural-generation" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["canvas", "enhancement", "game-dev", "javascript", "procedural-generation"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -2890,18 +1411,8 @@ "shortDescription": "Instantly generate customizable, high-quality QR codes offline.", "longDescription": "## QR Code Generator\n\nA client-side QR Code Generator that allows users to instantly convert text, URLs, or data into high-quality QR codes. It runs completely offline in the browser.\n\n### Features\n\n- Instant, real-time generation as the user types\n- Input fields for standard Text or URLs\n- Options to customize the QR code (e.g., Foreground color, Background color, and Error Correction Level)\n- Ability to download the generated QR code as a PNG image\n- 100% offlineβ€”no data is sent to external servers", "category": "utilities", - "tags": [ - "developer-tools", - "generator", - "offline", - "qrcode", - "utility" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["developer-tools", "generator", "offline", "qrcode", "utility"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -2911,22 +1422,8 @@ "shortDescription": "Build and parse URL query strings visually, with support for duplicate keys and full URL assembly.", "longDescription": "## Query String Builder\n\nBuild and parse URL query strings without manually encoding values. Add key-value pairs, generate properly encoded query parameters, or paste an existing query string/URL to break it apart into editable rows.\n\n### Features\n\n- Add, edit, and remove query parameter rows dynamically\n- Support for multiple values on the same key\n- Real-time encoded query string generation\n- Parse an existing query string or full URL into editable pairs\n- Build a full URL from a base URL plus parameters\n- Toggle between encoded and readable preview modes\n- Copy the query string or full URL to the clipboard\n- Clear/reset all parameters with a single click\n- Fully responsive, keyboard accessible, and works entirely offline", "category": "json-api", - "tags": [ - "api", - "decoding", - "developer-tools", - "encoding", - "query-string", - "url", - "utility" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "URLSearchParams API", - "Vanilla JS" - ], + "tags": ["api", "decoding", "developer-tools", "encoding", "query-string", "url", "utility"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "URLSearchParams API", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -2936,22 +1433,8 @@ "shortDescription": "Visually create CSS border-radius values with live preview, presets, and copy-ready CSS output.", "longDescription": "## Radii - Border Radius Generator\n\nA visual border-radius playground for creating custom CSS corner shapes.\n\n### Features\n\n- Live preview of border radius changes\n- Individual corner controls\n- Slider and numeric input synchronization\n- PX and % unit support\n- Link all corners mode\n- Preset shapes (Sharp, Soft, Circle, Leaf, Drop)\n- Shuffle/random shape generator\n- Copy CSS output\n- Responsive layout\n- Works completely offline\n\nPerfect for designing cards, buttons, blobs, and modern UI components.", "category": "css", - "tags": [ - "border-radius", - "css", - "design", - "frontend", - "generator", - "playground", - "radius", - "ui" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["border-radius", "css", "design", "frontend", "generator", "playground", "radius", "ui"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -2962,19 +1445,8 @@ "shortDescription": "A modern base converter with real-time conversion, bit manipulation, and light/dark mode.", "longDescription": "RADIX β€” Base Converter is a standalone utility for converting numbers between binary, decimal, hexadecimal, and octal in real time. It features an interactive 8-bit switch bank that lets users flip individual bits and instantly see the converted values across all supported number systems. The tool includes input validation for each base, one-click copy functionality for conversion results, responsive design, keyboard accessibility, and a built-in light/dark theme toggle. Designed with a clean, modern interface, it is useful for students, developers, and anyone working with binary data or number system conversions.", "category": "utilities", - "tags": [ - "base-converter", - "binary", - "decimal", - "hexadecimal", - "number-system", - "octal" - ], - "techStack": [ - "CSS", - "HTML", - "JavaScript" - ], + "tags": ["base-converter", "binary", "decimal", "hexadecimal", "number-system", "octal"], + "techStack": ["CSS", "HTML", "JavaScript"], "difficulty": "Medium", "status": "live" }, @@ -2984,17 +1456,8 @@ "shortDescription": "Generate a professional GitHub README.md with customizable sections. Copy or download instantly.", "longDescription": "## README Template Generator\n\nGenerate a professional GitHub README.md with customizable sections including project title, description, badges, installation, usage, contributing, and license.\n\n### Features\n\n- Single HTML file\n- Customizable sections\n- Copy or download instantly\n- Dark mode support\n- Responsive design", "category": "text", - "tags": [ - "generator", - "markdown", - "readme", - "template" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["generator", "markdown", "readme", "template"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -3004,20 +1467,8 @@ "shortDescription": "A powerful in-browser archive editor to explore directory trees, preview text/images inline, modify file contents, and re-download ZIPs locally.", "longDescription": "## Real Zip Archive Explorer & Editor\n\nStop relying on basic extract-and-list viewers or heavy desktop applications just to tweak a single file inside a compressed archive. This tool brings full archive management directly into your browser window, letting you inspect, modify, and repackage ZIP files on the fly.\n\n### Features\n\n- **Interactive Directory Explorer:** Browse internal file trees, expand nested directories, and navigate complex folder structures effortlessly.\n- **Inline Asset Previews:** View code files, text documents, and image assets directly in the preview pane without extracting them to disk.\n- **Mutative Editing Suite:** Add new files, delete unwanted entries, or replace existing files dynamically within the archive.\n- **Client-Side Repackaging:** Re-compress and download your updated `.zip` file instantly with zero server round-trips.\n- **Complete Privacy:** Operates entirely offline using modern web compression libraries, keeping your files strictly secure on your machine.\n- **Zero-Dependency Core:** A high-performance responsive interface built completely in a single self-contained HTML file.", "category": "utilities", - "tags": [ - "7-zip", - "archive", - "client-side", - "file-explorer", - "utility", - "zip" - ], - "techStack": [ - "CSS3", - "fflate", - "HTML5", - "Vanilla JS" - ], + "tags": ["7-zip", "archive", "client-side", "file-explorer", "utility", "zip"], + "techStack": ["CSS3", "fflate", "HTML5", "Vanilla JS"], "difficulty": "Hard", "status": "live" }, @@ -3027,18 +1478,8 @@ "shortDescription": "Test regular expressions against custom text with live highlighting and replacement.", "longDescription": "## Regex Playground\n\nCreate an interactive Regular Expression Playground where users can test regular expressions against custom input text with live highlighting. The tool supports different regex flags and provides instant feedback.", "category": "utilities", - "tags": [ - "developer-tools", - "javascript", - "regex", - "testing", - "validation" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["developer-tools", "javascript", "regex", "testing", "validation"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -3048,22 +1489,8 @@ "shortDescription": "Visual syntax flowchart generator and plain-English explainer for Regular Expressions.", "longDescription": "## RegEx Railroad Diagram & Explainer\n\nA privacy-first client-side developer utility for parsing Regular Expressions, generating interactive syntax railroad diagrams, and providing plain-English breakdowns.\n\n### Features\n\n- Visual Railroad Flowchart: Renders syntax diagrams showing matching tracks, groups, character classes, and quantifiers\n- Plain-English Breakdown: Explains regex tokens step-by-step in human-readable terms\n- Live Match Inspector: Tests sample strings against pattern with group capture analysis\n- Preset Library: Quick-load patterns for email, URL, IPv4, phone numbers, dates, and hex colors\n- One-click SVG Export and JavaScript Code snippet generator\n- Dark and light theme modes with localStorage persistence\n- Works 100% offline with zero dependencies", "category": "utilities", - "tags": [ - "developer-tools", - "diagram", - "flowchart", - "parser", - "regex", - "regexp", - "utility", - "visualizer" - ], - "techStack": [ - "CSS3", - "HTML5", - "SVG", - "Vanilla JS" - ], + "tags": ["developer-tools", "diagram", "flowchart", "parser", "regex", "regexp", "utility", "visualizer"], + "techStack": ["CSS3", "HTML5", "SVG", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -3073,18 +1500,8 @@ "shortDescription": "A polished regex testing workbench with live matching, flag toggles, and match group inspection.", "longDescription": "## Regexa β€” Pattern Workbench\n\nAn advanced regex testing tool with a developer-focused UI.\n\n### Features\n\n- Live regex matching with highlighting\n- Flag toggles (g, i, m, s, u)\n- Match group inspection\n- JetBrains Mono typography\n- Dark-themed workbench UI", "category": "utilities", - "tags": [ - "developer-tools", - "javascript", - "patterns", - "regex", - "testing" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["developer-tools", "javascript", "patterns", "regex", "testing"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -3094,20 +1511,8 @@ "shortDescription": "Test responsive layouts instantly via URL or raw HTML sandbox with intelligent scaling.", "longDescription": "## Responsive Breakpoint Tester\n\nA professional utility for web developers to preview websites at common device widths and custom breakpoints.\n\n### Features\n\n- **Dual Testing Modes:** Test live URLs or use the Local Sandbox to paste raw HTML/CSS (bypassing `X-Frame-Options` restrictions).\n- **Intelligent Scaling:** Automatically scales down the viewport to fit your screen if the target device resolution exceeds your physical monitor size.\n- **Smart Presets:** Instantly switch between Mobile, Tablet, Laptop, and Desktop resolutions.\n- **Custom Controls:** Define exact custom dimensions and instantly rotate device orientation.\n- **Offline Sandbox:** The HTML paste functionality operates 100% offline within your browser.", "category": "web-seo", - "tags": [ - "breakpoint", - "css", - "design", - "frontend", - "responsive", - "tester", - "ui" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["breakpoint", "css", "design", "frontend", "responsive", "tester", "ui"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -3117,20 +1522,8 @@ "shortDescription": "Preview a srcset/sizes image at common device breakpoints and see which source the browser selects.", "longDescription": "## Responsive Image Simulator\n\nPreview a responsive image (`srcset`/`sizes`) at common device breakpoints and see exactly which source the browser selects and at what rendered width. Useful for debugging responsive image markup without manually resizing a real browser window.\n\n### Features\n\n- Editable srcset, sizes, and fallback src fields with validation\n- Breakpoint tabs for common device widths (mobile, tablet, laptop, desktop, wide)\n- Renders the real `` element at the chosen viewport width and reads its actual `currentSrc`\n- Info cards showing viewport width, selected source, natural image size, and active sizes value\n- Explanatory note on how the simulation reflects real browser image-selection behavior\n- Runs entirely client-side", "category": "image", - "tags": [ - "breakpoints", - "image", - "responsive", - "simulator", - "sizes", - "srcset" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["breakpoints", "image", "responsive", "simulator", "sizes", "srcset"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -3140,21 +1533,8 @@ "shortDescription": "Visually build, manage, and export standard-compliant robots.txt files with live syntax highlighting.", "longDescription": "## Robots.txt Generator\n\nA professional, offline-capable SEO utility designed to help webmasters and developers create valid `robots.txt` files through an intuitive visual interface.\n\n### Features\n\n- **Visual Rule Builder:** Easily add multiple User-Agent groups and configure specific Allow/Disallow directives without writing syntax manually.\n- **Global Directives:** Manage global configurations like XML Sitemaps, Crawl-delay, and Host declarations.\n- **Live Syntax Highlighting:** View your generated `robots.txt` in real-time with an integrated, lightweight syntax highlighter.\n- **1-Click Presets:** Instantly load common SEO configurations (e.g., Allow All, Disallow All, Standard SEO, WordPress Base).\n- **Zero Dependencies:** Operates entirely client-side using the native DOM and Blob API for secure, immediate file generation.\n- **Premium Developer UI:** Designed with a modern, split-screen console layout featuring comprehensive dark/light mode support.", "category": "web-seo", - "tags": [ - "bot", - "crawler", - "generator", - "robots.txt", - "seo", - "sitemap", - "web" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS", - "Web Blob API" - ], + "tags": ["bot", "crawler", "generator", "robots.txt", "seo", "sitemap", "web"], + "techStack": ["CSS3", "HTML5", "Vanilla JS", "Web Blob API"], "difficulty": "Easy", "status": "live" }, @@ -3164,17 +1544,8 @@ "shortDescription": "Test your website at different screen resolutions.", "longDescription": "## Screen Resolution Tester\n\nTest your website at different screen resolutions.\n\n### Features\n\n- Single HTML file\n- Works offline\n- Dark mode support\n- Responsive design", "category": "browser-network", - "tags": [ - "breakpoints", - "responsive", - "testing", - "viewport" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["breakpoints", "responsive", "testing", "viewport"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -3184,18 +1555,8 @@ "shortDescription": "A visual editor to generate pure CSS scroll-driven animations using animation-timeline: scroll() and view().", "longDescription": "## Scroll-Driven Animation Timeline Builder\n\nThe era of relying on heavy JavaScript libraries for scroll animations is over. This tool is a visual builder for the bleeding-edge CSS `animation-timeline` property. Map your `@keyframes` directly to scroll progress or element visibility, and generate pure CSS scroll-linked animations with zero JavaScript.\n\n### Features\n\n- **Visual Timeline Editor:** Tie animation states to scroll percentages or element intersection ranges instead of seconds and milliseconds.\n- **Live Scrollable Demo Pane:** Scrub a mock page up and down to see exactly how your parallax, progress bar, or reveal animation behaves in real-time.\n- **`scroll()` vs `view()` Toggles:** Instantly switch between container-scroll tracking and element-intersection tracking.\n- **View Timeline Ranges:** A visual UI to easily configure complex `entry`, `contain`, and `exit` boundary ranges.\n- **Production-Ready Export:** Generates the exact pure CSS required to drop the scroll-driven animation directly into your project.\n- **Zero-Dependency Engine:** A flawlessly responsive layout and tool interface built entirely natively.", "category": "css", - "tags": [ - "animation", - "css", - "scroll-timeline", - "tool", - "visual-builder" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["animation", "css", "scroll-timeline", "tool", "visual-builder"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -3205,21 +1566,8 @@ "shortDescription": "Build/validate recommended security headers (especially CSP) with rule explanations and safe templates.", "longDescription": "## Security Header Coach\n\nConfigure, audit, and export HTTP security response headers locally in your browser. Features live compliance auditing for Content-Security-Policy (CSP) injection gaps and HSTS preload compatibility rules.\n\n### Features\n\n- Interactively configure HTTP security headers (CSP, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy)\n- Grade your configuration on a scale of A+ to F using our built-in compliance score calculator\n- Scan CSP directives for common scripting vulnerabilities, wildcard domains, and missing quotes on keywords\n- Check HSTS configuration settings against standard Google Chrome/Firefox preloading criteria\n- View detailed coach remediation reports for errors, warnings, and guidelines\n- Copy formatted configs directly for Nginx, Apache (.htaccess), Next.js, Node.js Express, and Cloudflare Workers\n- Export and import your custom configs as JSON files", "category": "web-seo", - "tags": [ - "api", - "csp", - "developer-tools", - "headers", - "hsts", - "security", - "seo" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["api", "csp", "developer-tools", "headers", "hsts", "security", "seo"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -3229,19 +1577,8 @@ "shortDescription": "A standalone Sitemap Generator that helps users create valid XML sitemaps for websites entirely offline.", "longDescription": "## Sitemap Generator\n\nA standalone Sitemap Generator that helps users create valid XML sitemaps for websites.\n\n### Features\n\n- Add multiple website URLs individually.\n- **New:** Bulk Import a list of URLs instantly via copy-paste.\n- Set last modified (lastmod) date.\n- Configure change frequency (changefreq) and priority values.\n- Generate valid XML sitemap with real-time XML preview.\n- One-click copy generated XML or download as sitemap.xml.\n- Works completely offline with no dependencies.", "category": "web-seo", - "tags": [ - "generator", - "offline", - "seo", - "sitemap", - "web", - "xml" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["generator", "offline", "seo", "sitemap", "web", "xml"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -3251,18 +1588,8 @@ "shortDescription": "Generate valid XML sitemaps instantly. Offline, fast, and secure.", "longDescription": "## Sitemap Generator\n\nQuickly generate valid XML sitemaps for your website with configurable URL entries, priorities, and change frequencies.\n\n### Features\n\n- Add multiple URLs with priority and changefreq.\n- Generates valid XML sitemap output.\n- Copy to clipboard and download support.\n- Instant generation, no server required.\n- Single HTML file, works offline.\n- Responsive design with dark mode support.", "category": "web-seo", - "tags": [ - "generator", - "seo", - "sitemap", - "web", - "xml" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["generator", "seo", "sitemap", "web", "xml"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -3272,22 +1599,8 @@ "shortDescription": "Convert any text into a clean, SEO-friendly URL slug with customizable formatting.", "longDescription": "## Slug Generator\n\nConvert titles, headings, or phrases into clean, SEO-friendly URL slugs in real time. Normalizes accented and Unicode characters, strips punctuation, and lets you customize casing, separators, and number handling.\n\n### Features\n\n- Generates slugs in real time as you type\n- Optional lowercase conversion\n- Customizable separator (hyphen or underscore)\n- Removes punctuation, special characters, and extra whitespace\n- Normalizes accented/Unicode characters (e.g. CafΓ© β†’ cafe)\n- Option to keep or remove numbers\n- Live preview of the generated slug\n- One-click copy to the clipboard\n- Clear/reset with a single click\n- Fully responsive, keyboard accessible, and works entirely offline", "category": "web-seo", - "tags": [ - "developer-tools", - "generator", - "seo", - "slug", - "text", - "url", - "utility", - "web-development" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["developer-tools", "generator", "seo", "slug", "text", "url", "utility", "web-development"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -3297,19 +1610,8 @@ "shortDescription": "A serverless bundle size analyzer that decodes raw source maps and VLQ data to map byte weights to original source files.", "longDescription": "## Source Map Explorer\n\nStop setting up heavy terminal configurations just to inspect your production builds. This tool brings advanced bundle analysis directly into a single browser window. By manually parsing Base64 VLQ mapping lines locally, it visualizes the composition of your distribution bundles and reveals exactly which original modules are costing you bytes.\n\n### Features\n\n- **Client-Side VLQ Engine:** Decodes production variable-length quantities entirely via native client JS to cross-reference minified code spots with original locations.\n- **Hierarchical Treemap:** Explore bundle weights dynamically with an interactive canvas breakdown that scales paths from top-level modules down to unique files.\n- **Bloat Detection:** Instantly spot massive third-party packages or accidental duplicate inclusions that are quietly driving up network transfer times.\n- **Comprehensive File Support:** Supports detached `.map` assets, standard production bundles, and modular files containing embedded inline source directives.\n- **Zero-Dependency Core:** A highly performant, single-file diagnostic interface built completely natively without framework layers or network dependencies.", "category": "utilities", - "tags": [ - "bundle-optimization", - "developer-tools", - "source-maps", - "tool", - "visualizer", - "vlq" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["bundle-optimization", "developer-tools", "source-maps", "tool", "visualizer", "vlq"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -3319,21 +1621,8 @@ "shortDescription": "A professional browser-based asset pipeline tool featuring genuine bin-packing algorithms, interactive previews, and multi-format CSS/SVG exports.", "longDescription": "## Sprite Sheet Packer & CSS/SVG Symbol Generator\n\nReplace heavy desktop software and cumbersome plugins with a high-performance, browser-based asset pipeline tool. Powered by true bin-packing algorithms (MaxRects, Guillotine, Skyline), this application packs mixed-size sprites with minimal wasted space, generating optimized texture atlases and production-ready code instantly.\n\n### Features\n\n- **Advanced Bin-Packing Algorithms:** Implements MaxRects, Skyline, and Guillotine strategies to optimize texture space for irregular sprites.\n- **Interactive Visual Preview:** Smooth zoom, pan, bounding box inspection, and checkerboard transparency views for precise quality control.\n- **Multi-Format Code Generation:** Instantly outputs CSS rules, SCSS/LESS mixins, Tailwind configurations, and TexturePacker-compatible JSON metadata.\n- **SVG Symbol Pipelines:** Seamlessly combine vector graphics into optimized SVG symbol sheets with inline or external reference support.\n- **Complete ZIP Export:** Package your sprite sheets, JSON metadata, and style sheets into a single download with one click.\n- **Absolute Privacy:** 100% client-side image processing utilizing modern HTML5 Canvas APIs and JSZip, keeping files secure on your device.", "category": "image", - "tags": [ - "bin-packing", - "css", - "graphics", - "sprite-sheet", - "svg", - "texture-packer" - ], - "techStack": [ - "Canvas API", - "CSS3", - "HTML5", - "JSZip", - "Vanilla JS" - ], + "tags": ["bin-packing", "css", "graphics", "sprite-sheet", "svg", "texture-packer"], + "techStack": ["Canvas API", "CSS3", "HTML5", "JSZip", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -3343,18 +1632,8 @@ "shortDescription": "Translate standard SQL queries instantly into MongoDB Aggregation Pipeline JSON arrays.", "longDescription": "## SQL to MongoDB Translator\n\nDevelopers migrating from relational databases to MongoDB often struggle to write complex NoSQL queries. This tool allows users to write standard SQL queries (including SELECT, WHERE, GROUP BY, ORDER BY, and LIMIT) and instantly translates them into the equivalent MongoDB Aggregation Pipeline JSON array.\n\n### Features\n\n- Write SQL in a clean editor with basic auto-formatting\n- Translates `SELECT/FROM` into `$project` stages\n- Translates `WHERE` conditions into `$match` stages\n- Translates `GROUP BY` into `$group` with basic aggregations (COUNT, SUM, AVG)\n- Translates `ORDER BY` into `$sort`\n- Translates `LIMIT` into `$limit`\n- Client-side parser ensuring privacy (no backend required)\n- Instantly copy the resulting JSON pipeline", "category": "utilities", - "tags": [ - "converter", - "database", - "mongodb", - "nosql", - "sql" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["converter", "database", "mongodb", "nosql", "sql"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -3364,20 +1643,8 @@ "shortDescription": "A serverless, WASM-powered SQLite database browser. Drag in a .sqlite file to browse tables, run real SQL queries, and export results entirely offline.", "longDescription": "## SQLite File Browser & Query Runner\n\nStop installing heavy desktop applications just to peek inside a local database file. This tool is a fully functional SQLite browser that runs entirely in your web browser. By dragging and dropping a raw `.sqlite` or `.db` file into the window, you can instantly explore its contents, run complex SQL queries, and export the results.\n\n### Features\n\n- **Client-Side Execution:** Powered by `sql.js` (WebAssembly), meaning no servers are involved and your database files never leave your machine.\n- **Schema Inspector:** Easily navigate through database tables, inspect column data types, and view row counts at a glance.\n- **Live Query Editor:** Write and execute real SQL queries with a responsive data grid displaying the output.\n- **Export Results:** Download the results of your queries instantly as CSV or JSON files.\n- **Zero-Dependency UI:** A fast, responsive, and clean dashboard layout built natively in a single HTML file.", "category": "utilities", - "tags": [ - "database", - "offline", - "sql", - "sqlite", - "tool", - "wasm" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS", - "WebAssembly" - ], + "tags": ["database", "offline", "sql", "sqlite", "tool", "wasm"], + "techStack": ["CSS3", "HTML5", "Vanilla JS", "WebAssembly"], "difficulty": "Medium", "status": "live" }, @@ -3387,19 +1654,8 @@ "shortDescription": "Compress and optimize raw SVG code by removing unnecessary metadata, empty tags, and comments.", "longDescription": "## SVG Optimizer\n\nA single-file tool to compress and optimize raw SVG code by removing unnecessary metadata, empty tags, and comments.\n\n### Features\n\n- Paste raw SVG code for instant optimization\n- Removes ``, `<desc>`, `<!-- comments -->`, and empty tags\n- Live visual preview container to ensure SVG integrity\n- Instantly copy or download optimized minified SVG\n- Works completely offline locally in your browser", "category": "image", - "tags": [ - "compressor", - "image-tools", - "minify", - "optimizer", - "svg" - ], - "techStack": [ - "CSS3", - "DOMParser", - "HTML5", - "Vanilla JS" - ], + "tags": ["compressor", "image-tools", "minify", "optimizer", "svg"], + "techStack": ["CSS3", "DOMParser", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -3409,22 +1665,8 @@ "shortDescription": "Interactive vector canvas editor to manipulate SVG path commands, Bezier curves, and export clean SVG code.", "longDescription": "## SVG Path Visualizer & Curve Editor\n\nA privacy-first client-side tool to draw, edit, and inspect SVG paths and Bezier curves (`<path d=\"...\">`).\n\n### Features\n\n- Interactive Vector Canvas: Visualizes anchor nodes and Bezier control handles for path commands\n- Command Breakdown: Human-readable step-by-step breakdown of commands (Move, Line, Cubic Bezier, Close Path)\n- Shape Presets: Quick-load preset vector shapes (Heart, Star, Shield, Cloud, Arrow, Checkmark)\n- Instant Code Exports: Copy raw path `d` attribute, full `<svg>` markup, or download `.svg` file\n- Persistent Dark/Light theme mode", "category": "image", - "tags": [ - "bezier", - "canvas", - "developer-tools", - "graphics", - "icon", - "path", - "svg", - "vector" - ], - "techStack": [ - "CSS3", - "HTML5", - "SVG", - "Vanilla JS" - ], + "tags": ["bezier", "canvas", "developer-tools", "graphics", "icon", "path", "svg", "vector"], + "techStack": ["CSS3", "HTML5", "SVG", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -3434,23 +1676,8 @@ "shortDescription": "Paste raw SVG markup and preview it instantly, with validation and quick export options.", "longDescription": "## SVG Previewer\n\nPaste raw SVG markup and see it rendered instantly. Validates the markup, shows a checkerboard background to reveal transparency, and offers quick export to `.svg`, `.png`, a data URI, or the clipboard.\n\n### Features\n\n- Instant live preview as you type\n- Validation with clear error messages for malformed markup\n- Checkerboard, white, black, and dark background options\n- Zoom control for inspecting fine detail\n- Shows viewBox, width/height, element count, and file size\n- Basic format/indent for messy markup\n- Copy the SVG source or a data URI\n- Download as `.svg` or rasterized `.png`\n- Fully responsive, keyboard accessible, and works entirely offline", "category": "image", - "tags": [ - "converter", - "image", - "preview", - "previewer", - "svg", - "utility", - "vector" - ], - "techStack": [ - "Canvas API", - "CSS3", - "DOMParser API", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["converter", "image", "preview", "previewer", "svg", "utility", "vector"], + "techStack": ["Canvas API", "CSS3", "DOMParser API", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -3460,19 +1687,8 @@ "shortDescription": "Paste Tailwind utility classes and get the equivalent hand-written CSS rule.", "longDescription": "## Tailwind β†’ Vanilla CSS Converter\n\nPaste a string of Tailwind utility classes and get the equivalent hand-written CSS rule. Useful for learning what a Tailwind class compiles to, or migrating a small component away from Tailwind without pulling in the framework.\n\n### Features\n\n- Editable CSS selector plus a Tailwind class input\n- Covers spacing, flex/grid layout, sizing, typography, a color palette subset, borders, radius, and shadow utilities\n- Handles responsive/state prefixes (`md:`, `hover:`) by converting the base utility with a note\n- Lists any unrecognized classes instead of failing silently\n- One-click copy of the generated CSS\n- Runs completely offline", "category": "css", - "tags": [ - "converter", - "css", - "frontend", - "tailwind", - "utility-classes" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["converter", "css", "frontend", "tailwind", "utility-classes"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -3482,23 +1698,8 @@ "shortDescription": "Find the closest matching Tailwind CSS color and shade for any HEX, RGB, or HSL input.", "longDescription": "## Tailwind Color Finder\n\nEnter a color using a picker, HEX, RGB, or HSL, and instantly find the closest matching Tailwind CSS color and shade using RGB distance. Displays the matching utility classes and lets you browse the full default palette.\n\n### Features\n\n- Input via color picker, HEX, RGB, or HSL β€” all kept in sync\n- Finds the closest Tailwind color and shade (e.g. blue-500, emerald-600)\n- Shows matching bg-/text-/border-/fill-/stroke- utility classes\n- Side-by-side comparison of your color and the matched color\n- Similarity score based on color distance\n- One-click copy of any class name or hex value\n- Searchable browser for the complete Tailwind default palette\n- Fully responsive, keyboard accessible, and works entirely offline", "category": "color", - "tags": [ - "color", - "css", - "developer-tools", - "frontend", - "hex", - "palette", - "rgb", - "tailwind", - "utility" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["color", "css", "developer-tools", "frontend", "hex", "palette", "rgb", "tailwind", "utility"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -3508,18 +1709,8 @@ "shortDescription": "Paste Tailwind utility classes and get the equivalent hand-written CSS rule.", "longDescription": "## Tailwind to Vanilla CSS Converter\n\nConvert Tailwind CSS utility classes into their equivalent vanilla CSS properties for learning or migration.\n\n### Features\n\n- Paste Tailwind classes to get vanilla CSS output.\n- Supports common utility classes.\n- Instant conversion with live preview.\n- Copy output to clipboard.\n- Single HTML file, works offline.\n- Responsive design with dark mode support.", "category": "css", - "tags": [ - "converter", - "css", - "developer-tools", - "tailwind", - "utility" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["converter", "css", "developer-tools", "tailwind", "utility"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -3529,18 +1720,8 @@ "shortDescription": "Calculate your current average and find out exactly what you need on the final.", "longDescription": "## Target Grade & GPA Forecaster\n\nCalculate your current average and find out exactly what you need on the final exam to achieve your target grade.", "category": "utilities", - "tags": [ - "calculator", - "education", - "grades", - "student", - "university" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["calculator", "education", "grades", "student", "university"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -3550,19 +1731,8 @@ "shortDescription": "Compare two blocks of text and see line-level and word-level differences, side-by-side or unified.", "longDescription": "## Text Diff Viewer\n\nCompare two blocks of plain text and instantly see what changed, with both unified and side-by-side split views.\n\n### Features\n\n- Line-level diff highlighting (added / removed / modified)\n- Word-level highlighting within modified lines for precise change detection\n- Toggle between Unified and Split view modes\n- Hide unchanged lines to focus on differences\n- Copy diff output in plain-text unified format\n- Light and dark mode support\n- Works completely offline", "category": "text", - "tags": [ - "compare", - "diff", - "text", - "utility", - "viewer" - ], - "techStack": [ - "Clipboard API", - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["compare", "diff", "text", "utility", "viewer"], + "techStack": ["Clipboard API", "CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -3572,21 +1742,8 @@ "shortDescription": "Convert Unix timestamps to human-readable dates and back, with local time, UTC, and relative time.", "longDescription": "## Timestamp Converter\n\nConvert Unix timestamps to human-readable dates, or dates back to Unix time, in either direction. Useful for developers, testers, and analysts working with logs, APIs, and scheduling systems.\n\n### Features\n\n- Convert Unix timestamps (seconds or milliseconds) to readable dates\n- Convert a date/time back to a Unix timestamp\n- Results shown in local time, UTC, ISO 8601, and relative (\"3 hours ago\") form\n- Live conversion as you type\n- One-click \"Use current time\" button\n- Per-value copy to clipboard\n- Clear/reset with a single click\n- Fully responsive, keyboard accessible, and works entirely offline", "category": "utilities", - "tags": [ - "converter", - "date", - "developer-tools", - "time", - "timestamp", - "unix", - "utility" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["converter", "date", "developer-tools", "time", "timestamp", "unix", "utility"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -3596,22 +1753,8 @@ "shortDescription": "Preview how Twitter/X cards appear with live updates for Summary and Summary Large Image layouts.", "longDescription": "## Twitter / X Card Preview\n\nPreview how your content may appear when shared on Twitter/X. Enter a title, description, image URL, website URL, and choose between Summary or Summary Large Image card layouts to see a live preview.\n\n### Features\n\n- Live Twitter/X card preview\n- Supports Summary and Summary Large Image card types\n- Real-time preview updates\n- Website domain extraction from URL\n- Reset form functionality\n- Responsive and mobile-friendly design\n- Fully offline and self-contained", "category": "web-seo", - "tags": [ - "offline", - "preview", - "responsive", - "seo", - "social-media", - "twitter", - "twitter-card", - "web", - "x" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["offline", "preview", "responsive", "seo", "social-media", "twitter", "twitter-card", "web", "x"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -3621,22 +1764,8 @@ "shortDescription": "Inspect every character's Unicode code point, UTF-8/UTF-16 bytes, category, and escape sequences.", "longDescription": "## Unicode Inspector\n\nInspect Unicode characters in real time as you type or paste text. See each character's code point, best-effort name or category, UTF-8/UTF-16 byte representation, HTML entity, and JavaScript escape sequence β€” with invisible and whitespace characters flagged.\n\n### Features\n\n- Real-time character-by-character inspection\n- Unicode code point (e.g. U+1F600)\n- Character name where available, else Unicode category via native \\p{} property detection\n- UTF-8 and UTF-16 byte/code-unit representations\n- HTML entity and JavaScript Unicode escape sequences\n- Highlights invisible/whitespace characters (tabs, newlines, NBSP, zero-width spaces, BOM, etc.)\n- Total character and UTF-16 code unit counts\n- One-click copy of any code point\n- Clear/reset with a single click\n- Fully responsive, keyboard accessible, and works entirely offline", "category": "text", - "tags": [ - "character", - "developer-tools", - "encoding", - "text", - "unicode", - "utf16", - "utf8", - "utility" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["character", "developer-tools", "encoding", "text", "unicode", "utf16", "utf8", "utility"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -3646,21 +1775,8 @@ "shortDescription": "Encode and decode URLs or percent-encoded strings instantly using native browser APIs.", "longDescription": "## URL Encoder / Decoder\n\nA fast, offline utility for encoding and decoding URLs, query parameters, and percent-encoded strings using native JavaScript APIs.\n\n### Features\n- Encode complete URLs using encodeURI()\n- Encode query parameters using encodeURIComponent()\n- Decode percent-encoded strings using decodeURIComponent()\n- Real-time conversion as you type\n- Detects invalid or malformed percent-encoded strings\n- Character counters for input and output\n- Copy output to clipboard\n- Swap input and output\n- Load built-in examples\n- Fully responsive design with dark mode support\n- Works completely offline with no external dependencies", "category": "json-api", - "tags": [ - "decode", - "decoder", - "encode", - "encoder", - "percent-encoding", - "uri", - "url", - "utility" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["decode", "decoder", "encode", "encoder", "percent-encoding", "uri", "url", "utility"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -3670,20 +1786,8 @@ "shortDescription": "Parse any User-Agent string into a readable breakdown of browser, engine, OS, device, and CPU architecture.", "longDescription": "## User Agent Parser\n\nParse any User-Agent string β€” or your current browser β€” into a plain, readable breakdown. Identifies the browser and version, rendering engine, operating system and version, device type, and CPU architecture when available. All parsing happens entirely offline.\n\n### Features\n\n- Paste and parse any User-Agent string instantly\n- Detects browser name and version\n- Detects operating system and version (when available)\n- Detects rendering engine (Blink, Gecko, WebKit, Trident, etc.)\n- Detects device type (Desktop, Mobile, Tablet, Bot, Smart TV)\n- Displays CPU architecture when advertised\n- One-click \"Use current browser\" button to parse `navigator.userAgent`\n- Copy parsed info as formatted text or JSON\n- Clear/reset with a single click\n- Fully responsive, keyboard accessible, and works completely offline", "category": "browser-network", - "tags": [ - "browser", - "debugging", - "network", - "parser", - "user-agent", - "utility" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["browser", "debugging", "network", "parser", "user-agent", "utility"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -3693,18 +1797,8 @@ "shortDescription": "Generate random v4 UUIDs instantly, offline.", "longDescription": "## UUID Generator\n\nA simple, offline tool to generate v4 UUIDs.\n\n### Features\n\n- Instant generation\n- Multiple quantities (1, 5, 10, 50)\n- Copy to clipboard\n- Works completely offline", "category": "utilities", - "tags": [ - "developer-tools", - "generator", - "offline", - "uuid" - ], - "techStack": [ - "Crypto API", - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["developer-tools", "generator", "offline", "uuid"], + "techStack": ["Crypto API", "CSS3", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -3714,21 +1808,8 @@ "shortDescription": "Live browser, screen, and viewport details β€” resize or rotate to see them update in real time.", "longDescription": "## Viewport / Screen Info\n\nDisplays detailed information about the browser, screen, and viewport in real time, using standard browser APIs β€” no dev tools required.\n\n### Features\n\n- Viewport width/height and Visual Viewport dimensions\n- Screen resolution and available screen size\n- Device pixel ratio (DPR)\n- Screen orientation (portrait/landscape)\n- Color depth and pixel depth\n- Outer window dimensions\n- Touch support and max touch points\n- Current URL, protocol, hostname, and user agent\n- Live updates on resize, orientation change, and connectivity change\n- Copy all device information to the clipboard\n- Fully responsive, keyboard accessible, and works entirely offline", "category": "browser-network", - "tags": [ - "browser", - "debugging", - "developer-tools", - "device", - "responsive", - "screen", - "viewport" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "Vanilla JS" - ], + "tags": ["browser", "debugging", "developer-tools", "device", "responsive", "screen", "viewport"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -3738,15 +1819,8 @@ "shortDescription": "A compiler and visual simulator engine for Turing Machine rules (State / Read / Write / Move / Next).", "longDescription": "## Visual Turing Machine\n\nSimulator for Turing Machine rules.", "category": "utilities", - "tags": [ - "simulator", - "turing" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["simulator", "turing"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Hard", "status": "live" }, @@ -3756,20 +1830,8 @@ "shortDescription": "A live performance diagnostics environment that uses PerformanceObserver to capture, visualize, and debug INP, LCP, and CLS events in real time.", "longDescription": "## Web Vitals Jank Profiler\n\nStop reading static definitions of web performance metrics. This interactive profiler lets you trigger and inspect bad user experience metrics live. By hooking directly into the browser's native `PerformanceObserver` API, it monitors and graphs Core Web Vitals while giving you specific controls to break the page's responsiveness.\n\n### Features\n\n- **Real-Time Observer Engine:** Captures LCP, CLS, and INP metrics directly from the browser context as they happen.\n- **Controlled Chaos Controls:** Intentionally inject long tasks, force synchronous layouts, or trigger sudden shifts to watch metric gauges react instantly.\n- **Visual Interaction Diagnostics:** Maps exact browser events to visual indicators, drawing bounding outlines over shifting elements to make invisible paint bugs obvious.\n- **Telemetry Breakdown:** Inspect the detailed performance entries generated by the layout engine, illuminating exactly what blocks the main thread.\n- **Zero-Dependency Core:** A standalone client-side benchmarking suite built inside a single file with native JS and CSS grid telemetry displays.", "category": "utilities", - "tags": [ - "diagnostic", - "jank", - "layout-thrashing", - "performance", - "performance-observer", - "web-vitals" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS", - "Web Performance API" - ], + "tags": ["diagnostic", "jank", "layout-thrashing", "performance", "performance-observer", "web-vitals"], + "techStack": ["CSS3", "HTML5", "Vanilla JS", "Web Performance API"], "difficulty": "Medium", "status": "live" }, @@ -3779,23 +1841,8 @@ "shortDescription": "Interactive WebRTC playground to test peer connections, SDP offers/answers, ICE candidates, and DataChannel messaging.", "longDescription": "## WebRTC P2P Signal & Data Channel Testing Studio\n\nA privacy-first client-side tool to test WebRTC peer connections, SDP negotiation, and DataChannel messaging.\n\n### Features\n\n- Auto-Loopback & Manual Signaling: Connect local WebRTC peers automatically in one click or perform manual SDP offer/answer exchanges\n- STUN & ICE Candidate Inspector: Test custom STUN server URLs and inspect gathered host, srflx, and relay ICE candidates\n- Live P2P DataChannel Playground: Send text and binary payloads with live round-trip latency (RTT) measurement\n- Connection State Diagnostics: Monitor real-time badges for signalingState, iceGatheringState, iceConnectionState, and connectionState\n- Persistent Dark/Light theme mode", "category": "browser-network", - "tags": [ - "browser", - "datachannel", - "developer-tools", - "ice", - "networking", - "p2p", - "sdp", - "stun", - "turn", - "webrtc" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["browser", "datachannel", "developer-tools", "ice", "networking", "p2p", "sdp", "stun", "turn", "webrtc"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Hard", "status": "live" }, @@ -3805,20 +1852,8 @@ "shortDescription": "A developer client to connect to, inspect, send messages to, and debug WebSocket connections and Server-Sent Events (SSE) streams in real time.", "longDescription": "## WebSocket & SSE Sandbox Client\n\nA developer client to connect to, inspect, send messages to, and debug WebSocket connections and Server-Sent Events (SSE) streams in real time entirely within the browser.\n\n### Features\n\n- **Flexible Endpoints**: Support for secure and insecure protocols (ws://, wss://, http://, https://).\n- **Message Composer**: Build and send messages supporting raw text, formatted JSON, and customizable mock templates.\n- **Timeline Stream Logger**: Search-filterable log showing incoming/outgoing events, server-sent events, errors, and connection states with timestamps.\n- **Auto-Ping/Keepalive**: Custom ping intervals to keep connection alive, tracking latency and metrics.\n- **Headers & Custom Protocols**: Custom headers configuration (utilizing a fetch-based stream reader for SSE) and subprotocol negotiation for WS handshakes.", "category": "browser-network", - "tags": [ - "api", - "browser", - "developer-tools", - "network", - "sse", - "testing", - "websocket" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["api", "browser", "developer-tools", "network", "sse", "testing", "websocket"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -3828,21 +1863,8 @@ "shortDescription": "Real-time word, character, and sentence counter for text of any length.", "longDescription": "## Word / Character Counter\n\nA minimalist, real-time text analysis tool. Type or paste text to instantly see word, character, and sentence counts β€” built for writers, marketers, and developers who need quick length checks without ad-heavy websites.\n\n### Features\n\n- Real-time character count (including spaces)\n- Real-time word count\n- Real-time sentence count\n- Character count excluding spaces, line count, and estimated reading time\n- Copy text or clear/reset with one click\n- Clean, responsive, minimalist interface\n- Fully functional offline with zero dependencies", "category": "text", - "tags": [ - "characters", - "counter", - "productivity", - "text", - "utility", - "words" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "js-yaml", - "Vanilla JS" - ], + "tags": ["characters", "counter", "productivity", "text", "utility", "words"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "js-yaml", "Vanilla JS"], "difficulty": "Easy", "status": "live" }, @@ -3852,24 +1874,8 @@ "shortDescription": "Test XPath expressions against XML documents instantly, offline.", "longDescription": "A lightweight XPath playground that runs entirely in your browser. Paste in an XML document, write an XPath expression, and see matching nodes, strings, numbers, or booleans update live as you type. Includes example queries to get started, one-click copying of results, and match count / result type stats β€” all with zero dependencies and no data ever leaving your machine.", "category": "utilities", - "tags": [ - "client-side", - "developer-tools", - "dom", - "offline", - "parser", - "query", - "testing", - "validator", - "web-scraping", - "xml", - "xpath" - ], - "techStack": [ - "CSS3", - "HTML5", - "Vanilla JS" - ], + "tags": ["client-side", "developer-tools", "dom", "offline", "parser", "query", "testing", "validator", "web-scraping", "xml", "xpath"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], "difficulty": "Medium", "status": "live" }, @@ -3879,25 +1885,21 @@ "shortDescription": "Convert between YAML and JSON in either direction, with validation and pretty-printed output.", "longDescription": "## YAML / JSON Converter\n\nConvert data between YAML and JSON in both directions. Paste YAML or JSON, instantly see it converted to the other format, and get clear validation errors if the input doesn't parse.\n\n### Features\n\n- Convert YAML to JSON and JSON to YAML\n- Live input/output preview with instant updates\n- Syntax validation with clear error messages\n- Pretty-printed output with configurable indentation (2/4 spaces or tab)\n- Copy converted output to the clipboard, or use it as the next input\n- Clear/reset with a single click\n- Supports nested objects, arrays, strings, numbers, booleans, and null\n- Fully responsive, keyboard accessible, and works offline once loaded", "category": "json-api", - "tags": [ - "api", - "config", - "converter", - "developer-tools", - "json", - "parsing", - "utility", - "yaml" - ], - "techStack": [ - "CSS3", - "Google Fonts", - "HTML5", - "js-yaml", - "Vanilla JS" - ], + "tags": ["api", "config", "converter", "developer-tools", "json", "parsing", "utility", "yaml"], + "techStack": ["CSS3", "Google Fonts", "HTML5", "js-yaml", "Vanilla JS"], "difficulty": "Easy", "status": "live" + }, + { + "id": "tfidf-search-engine", + "name": "TF-IDF Search Engine", + "shortDescription": "A client-side search index that ranks documents by TF-IDF relevance, with full scoring breakdown shown.", + "longDescription": "## TF-IDF Search Engine\n\nPaste in multiple text documents and build a search index (inverted index) entirely client-side, then search across all documents with results ranked by TF-IDF (Term Frequency-Inverse Document Frequency) relevance score instead of simple keyword matching. Aimed at developers who want to understand how real search engines rank results β€” no backend, no database, no external search library, everything runs in a single HTML file. Highlights matched terms in each result and shows a transparent scoring ledger (tf Γ— idf per term) so ranking never feels like a black box.", + "category": "utilities", + "tags": ["search", "tf-idf", "inverted-index", "developer-tools", "ranking", "text-analysis"], + "techStack": ["CSS3", "HTML5", "Vanilla JS"], + "difficulty": "Medium", + "status": "live" } ] } diff --git a/tools/tfidf-search-engine.html b/tools/tfidf-search-engine.html new file mode 100644 index 0000000..205ff86 --- /dev/null +++ b/tools/tfidf-search-engine.html @@ -0,0 +1,822 @@ +<!doctype html> +<html lang="en"> + <head> + <meta charset="UTF-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>TFΒ·IDF Search Index + + + +
+ Search Index Β· Client-Side Β· No Dependencies + +
+

TFΒ·IDFA search engine you can see the reasoning of

+

Paste in a handful of documents, build an index, then search. Every result shows exactly how its score was computed β€” term frequency, inverse document frequency, and the product of the two β€” so ranking stops being a black box.

+
+ +
+
+
+

01 β€” Documents

+ 0 loaded +
+ +
+ +
+ + +
+
+ +
+
No index built yet.
+
+ +
+
+

02 β€” Search

+ +
+ +
+ +
+ +
+
Results will rank here once you build an index and search.
+
+
+
+ +
Runs entirely in your browser. Nothing you paste here is sent anywhere.
+
+ + + + From 8cb9010246aff4bc8b8efbf1c48f6b95a6feaa20 Mon Sep 17 00:00:00 2001 From: dikshajangra12918-oss Date: Fri, 31 Jul 2026 22:15:42 +0530 Subject: [PATCH 2/3] Add: tfidf-search-engine screenshot --- tools/tfidf-search-engine.png | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tools/tfidf-search-engine.png diff --git a/tools/tfidf-search-engine.png b/tools/tfidf-search-engine.png new file mode 100644 index 0000000..e69de29 From 8c802b21695d5264a71c6411a382842681ce318b Mon Sep 17 00:00:00 2001 From: dikshajangra12918-oss Date: Fri, 31 Jul 2026 22:52:01 +0530 Subject: [PATCH 3/3] Fix: replace empty screenshot with valid PNG --- tools/tfidf-search-engine.png | Bin 0 -> 363186 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/tools/tfidf-search-engine.png b/tools/tfidf-search-engine.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..24b8789e75463bbe5130f1e04c55cdadcb8f4d0c 100644 GIT binary patch literal 363186 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/@P|4dTd}?s(B98{boOHNy1IsN6 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 literal 0 HcmV?d00001