diff --git a/README.md b/README.md index 22e0a63..258eb91 100644 --- a/README.md +++ b/README.md @@ -1,36 +1,60 @@ # kattoolbox -Free, fast, browser-based developer tools. No sign-up. No data collection. +> **100% Private, Fast, In-Browser Utilities & File Tools.** +> Zero server uploads. Zero sign-up. Zero data collection. All operations run client-side in your browser. -**Live β†’** *coming soon* +--- -## Tools (30) +## 🌟 High-Impact Privacy & Media Tools -**Formatters** β€” JSON Formatter, Markdown Preview, SQL Formatter, XML Formatter +- **πŸ—œοΈ Discord & Email File Shrinker (`/tools/discord-image-shrinker`)** + Compress images client-side to fit Discord's 10MB/8MB upload limit or Gmail's 25MB attachment limit. Auto-calculates optimal quality & resolution. +- **πŸ›‘οΈ Photo GPS & EXIF Scrubber (`/tools/exif-scrubber`)** + Inspect hidden GPS coordinates, camera serial numbers, and device tags in photos. One-click sanitization wipes all metadata headers. +- **πŸ“‘ Private In-Browser PDF Toolkit (`/tools/pdf-tools`)** + Merge multiple PDFs, extract custom page ranges, convert images to PDF, or rotate scans offline using `pdf-lib`. +- **πŸ”’ Document & Image Redactor (`/tools/image-redactor`)** + Draw permanent blackout or pixelate blur boxes over confidential info (SSNs, credit card numbers, IDs, faces) before sharing. -**Encoders** β€” Base64, URL Encoder, HTML Entities, JWT Decoder +--- -**Generators** β€” UUID, Lorem Ipsum, Hash, QR Code, Password +## πŸ› οΈ Developer & Everyday Utilities (30+) -**Converters** β€” Timestamp, Color, Number Base, JSONβ†’CSV, CSVβ†’JSON +- **Formatters & Validators:** JSON Formatter, Markdown Preview, SQL Formatter, XML Formatter +- **Encoders & Decoders:** Base64, URL Encoder, HTML Entities, JWT Decoder +- **Generators:** UUID (v4), Lorem Ipsum, Hash (MD5, SHA-1, SHA-256, SHA-512), QR Code, Password +- **Converters:** Unix Timestamp, Color (HEX/RGB/HSL), Number Base, JSON ↔ CSV +- **Text Tools:** Word & Character Counter, Regex Tester, Diff Checker, Case Converter +- **CSS Tools:** Gradient Generator, Box Shadow, Px ↔ Rem Converter +- **Web Tools:** Meta Tag Generator, Slug Generator, Cron Expression Parser, Image to Base64, Placeholder Image -**Text Tools** β€” Word Counter, Regex Tester, Diff Checker, Case Converter +--- -**CSS Tools** β€” Gradient Generator, Box Shadow, Px↔Rem Converter +## ⚑ Architecture & Design -**Web Tools** β€” Meta Tag Generator, Slug Generator, Cron Parser, Imageβ†’Base64, Placeholder Image +- **Next.js 16 (Turbopack)** + **React 19** + **TypeScript** + **Tailwind CSS v4** +- **Static Site Generation (SSG):** Pre-rendered static pages for instant load times and optimal SEO. +- **Non-Intrusive Side Ads:** Zero annoying popups or modal overlays. Side ad rails automatically adapt on desktop/laptop viewports and remain unobtrusive. +- **100% Client-Side:** No backend server or database to maintain ($0 hosting forever on Cloudflare Pages, Vercel, or GitHub Pages). -## Stack +--- -Next.js Β· TypeScript Β· Tailwind CSS Β· Static Export - -## Run locally +## πŸš€ Run Locally ```bash npm install npm run dev ``` -## License +Open [http://localhost:3000](http://localhost:3000) to view the application. +## πŸ“¦ Build Static Output + +```bash +npm run build +``` + +--- + +## License MIT diff --git a/package-lock.json b/package-lock.json index 0b18263..7677aa3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,8 +8,11 @@ "name": "toolbox", "version": "0.1.0", "dependencies": { + "exifr": "^7.1.3", + "lucide-react": "^1.45.0", "marked": "^18.0.11", "next": "16.3.3", + "pdf-lib": "^1.17.1", "qrcode": "^1.5.4", "react": "19.2.8", "react-dom": "19.2.8" @@ -1380,6 +1383,24 @@ "node": ">=12.4.0" } }, + "node_modules/@pdf-lib/standard-fonts": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@pdf-lib/standard-fonts/-/standard-fonts-1.0.0.tgz", + "integrity": "sha512-hU30BK9IUN/su0Mn9VdlVKsWBS6GyhVfqjwl1FjZN4TxP6cCw0jP2w7V3Hf5uX7M0AZJ16vey9yE0ny7Sa59ZA==", + "license": "MIT", + "dependencies": { + "pako": "^1.0.6" + } + }, + "node_modules/@pdf-lib/upng": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@pdf-lib/upng/-/upng-1.0.1.tgz", + "integrity": "sha512-dQK2FUMQtowVP00mtIksrlZhdFXQZPC+taih1q4CvPZ5vqdxR/LKBaFg0oAfzd1GlHZXXSPdQfzQnt+ViGvEIQ==", + "license": "MIT", + "dependencies": { + "pako": "^1.0.10" + } + }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -3780,6 +3801,12 @@ "node": ">=0.10.0" } }, + "node_modules/exifr": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/exifr/-/exifr-7.1.3.tgz", + "integrity": "sha512-g/aje2noHivrRSLbAUtBPWFbxKdKhgj/xr1vATDdUXPOFYJlQ62Ft0oy+72V6XLIpDJfHs6gXLbBLAolqOXYRw==", + "license": "MIT" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -5228,6 +5255,15 @@ "yallist": "^3.0.2" } }, + "node_modules/lucide-react": { + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.45.0.tgz", + "integrity": "sha512-yH1ubCAduho9UR7oJhRXIQXogksRILBiTuZC4/bQIGeB9JOkxMlSuEHyyZpo1Z3S0yWJO2KTSUZbjiNvVxeOUw==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", @@ -5666,6 +5702,12 @@ "node": ">=6" } }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -5705,6 +5747,24 @@ "dev": true, "license": "MIT" }, + "node_modules/pdf-lib": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/pdf-lib/-/pdf-lib-1.17.1.tgz", + "integrity": "sha512-V/mpyJAoTsN4cnP31vc0wfNA1+p20evqqnap0KLoRUN0Yk/p3wN52DOEsL4oBFcLdb76hlpKPtzJIgo67j/XLw==", + "license": "MIT", + "dependencies": { + "@pdf-lib/standard-fonts": "^1.0.0", + "@pdf-lib/upng": "^1.0.1", + "pako": "^1.0.11", + "tslib": "^1.11.1" + } + }, + "node_modules/pdf-lib/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", diff --git a/package.json b/package.json index 90db118..c1dd63d 100644 --- a/package.json +++ b/package.json @@ -9,8 +9,11 @@ "lint": "eslint" }, "dependencies": { + "exifr": "^7.1.3", + "lucide-react": "^1.45.0", "marked": "^18.0.11", "next": "16.3.3", + "pdf-lib": "^1.17.1", "qrcode": "^1.5.4", "react": "19.2.8", "react-dom": "19.2.8" diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 03d5769..f316960 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -16,33 +16,35 @@ const geistMono = Geist_Mono({ export const metadata: Metadata = { title: { - default: "DevToolbox β€” Free Online Developer Tools", - template: "%s | DevToolbox", + default: "kattoolbox β€” Private In-Browser Utilities & File Tools", + template: "%s | kattoolbox", }, description: - "A collection of free, fast, and privacy-first online developer tools. JSON formatter, Base64 encoder, UUID generator, hash generator, and 20+ more. All tools run 100% in your browser.", + "Free, fast, and 100% private browser tools. Shrink images for Discord (10MB/8MB) and Gmail (25MB), scrub photo GPS/EXIF metadata, merge & split PDFs offline, redact sensitive images, and 30+ developer utilities. Zero server uploads.", keywords: [ - "developer tools", - "online tools", - "JSON formatter", - "Base64 encoder", - "UUID generator", - "hash generator", - "regex tester", - "free dev tools", + "discord image compressor", + "shrink image for discord", + "strip exif metadata online", + "photo gps scrubber", + "private pdf merger", + "extract pdf pages offline", + "image redactor", + "developer toolbox", + "client-side file tools", + "kattoolbox", ], openGraph: { type: "website", - title: "DevToolbox β€” Free Online Developer Tools", + title: "kattoolbox β€” Private In-Browser Utilities & File Tools", description: - "20+ free, fast, privacy-first developer tools. JSON formatter, Base64 encoder, UUID generator, and more.", - siteName: "DevToolbox", + "Shrink images for Discord, scrub photo EXIF/GPS, merge/split PDFs, and 30+ dev tools. 100% private in-browser.", + siteName: "kattoolbox", }, twitter: { card: "summary_large_image", - title: "DevToolbox β€” Free Online Developer Tools", + title: "kattoolbox β€” Private In-Browser Utilities & File Tools", description: - "20+ free, fast, privacy-first developer tools. JSON formatter, Base64 encoder, UUID generator, and more.", + "Shrink images for Discord, scrub photo EXIF/GPS, merge/split PDFs, and 30+ dev tools. 100% private in-browser.", }, robots: { index: true, @@ -57,7 +59,7 @@ export default function RootLayout({ children }: { children: React.ReactNode }) className={`${geistSans.variable} ${geistMono.variable} h-full antialiased`} > - {/* Google AdSense β€” replace ca-pub-XXXXXXXXXXXXXXXX with your publisher ID */} + {/* Google AdSense β€” Non-intrusive side placement */}