Small browser-based toolkit for design, development, and content workflows. All tools run entirely in-browser with zero server-side processing.
Website: https://oddkit.tools
- 100% Client-Side Processing — No file uploads, no server storage
- Fast & Lightweight — Instant results, minimal dependencies
- Multilingual — English, Korean, Japanese, Simplified Chinese, Traditional Chinese, Spanish
- SEO & Analytics — Structured metadata, Google Analytics tracking
Create placeholder images on-the-fly
- Solid colors, gradients, and patterns
- Output formats: PNG, JPG, JPEG, WebP, SVG, GIF
- Configurable dimensions and styling
Reduce file sizes without losing quality
- Supports JPG, PNG, WebP
- Manual quality adjustment or automatic target-size compression
- Dimension constraints to reduce file size further
Convert between image formats
- Supports JPG, PNG, WebP
- Per-format quality control
- Preserves image dimensions
Resize images precisely or by preset
- Exact dimensions or percentage presets (50%, 100%, 150%, 200%)
- Aspect ratio preservation
- Format and quality options
A locale-neutral endpoint that renders placeholder images directly into any <img> tag, README, or mockup:
https://oddkit.tools/placeholder/600x400.png
https://oddkit.tools/placeholder/1080x1080.webp
https://oddkit.tools/placeholder/300x200.jpgSpecification:
- Size:
{width}x{height}, 1–4000px per side - Formats:
png,jpg,webp - Server-rendered using the same engine as the Dummy Image Generator tool
- Immutable, long-lived
Cache-Controlheaders - Graceful fallback if rendering fails
Usage metrics are tracked via Google Analytics to understand tool adoption and patterns:
- tool_opened — Tool page visits
- tool_action — Primary tool actions (generate, convert, compress, resize)
- file_upload — File uploads with size and type
- download — Generated/processed file downloads with size and format
- error — Processing errors by type
- feature_preference — Feature usage patterns (compression mode, resize presets)
All tracking is client-side only. No data is sent to the server during tool use.
Frontend
- Next.js 16 (App Router)
- React 19
- TypeScript (strict mode)
- Tailwind CSS v4
Internationalization
- next-intl with 6 locales
Image Processing
- Canvas API (client-side rendering)
- sharp (server-side rendering for placeholder API)
Analytics & Monitoring
- react-ga4 (Google Analytics)
Testing & Quality
- Jest
- ESLint
pnpm install
pnpm devThe development server runs at http://localhost:3000 by default.
pnpm dev # Start the development server
pnpm build # Create a production build
pnpm start # Start the production server
pnpm lint # Run ESLint
pnpm test # Run Jestsrc/
app/ # Routes and layouts (Next.js App Router)
config/ # Site config, locales, feature flags
features/ # Feature modules (one per tool)
tools/
[tool-id]/
components/ # Interactive UI
lib/ # Processing logic
model/ # Types and constants
shared/ # Reusable UI, layouts, utilities
analytics/ # GA tracking helpers
seo/ # Metadata generators
ui/ # Shared components
i18n/ # Locale routing and navigation
messages/ # i18n translation files
proxy.ts # next-intl middleware- Before editing Next.js code, read
AGENTS.mdand checknode_modules/next/dist/docs/ - All tools should prefer client-side processing (no server uploads)
- Add new tools by creating a feature module and registering in
src/features/tools/catalog.ts - Update all locale message files when adding user-facing text
See CLAUDE.md for development guidance and conventions.