# toolkit A collection of browser-based tools for developers. No server, no tracking, no external dependencies — everything runs locally in your browser. ## Tools | Route | Description | |--------------|------------------------------------------------------------------| | `/` | About | | `/object-id` | MongoDB ObjectId generator & parser | | `/uuid` | UUID v1/v4/v6/v7 generator & parser | | `/hash` | MD5, SHA-1, SHA-256, SHA-512 | | `/cron` | Interactive crontab expression builder with presets | | `/api-key` | High-entropy API key generator (hex, base62, base64url, …) | | `/json` | Prettify, compact, tab-indent, validate JSON | | `/base` | Encode & decode Base64, Base64url, Base32, Base58, Base16 | | `/string` | String transforms: lower, UPPER, snake_case, camelCase, … | ## Stack - [SvelteKit 2](https://kit.svelte.dev) + [Svelte 5](https://svelte.dev) - JavaScript with JSDoc — no TypeScript - No runtime dependencies --- ## Development ```sh npm install npm run dev ``` App runs at `http://localhost:5173`. ## Production build ```sh npm run build node build # listens on PORT (default 3000) ``` ## Type check ```sh npm run check ``` --- ## Deploy with Docker ### Build and run ```sh docker build -t toolkit . docker run -p 3000:3000 -e ORIGIN=http://localhost:3000 toolkit ``` ### docker-compose ```sh docker compose up -d ``` App runs at `http://localhost:3000`. ### Behind a reverse proxy Set `ORIGIN` to your public URL in `docker-compose.yml`: ```yaml environment: - ORIGIN=https://your-domain.com ``` Then proxy traffic to port `3000`. ### Environment variables | Variable | Default | Description | |----------|------------|---------------------------------------| | `PORT` | `3000` | Port the server listens on | | `HOST` | `0.0.0.0` | Interface to bind | | `ORIGIN` | — | Public URL (required in production) |