┌──────────────────────────────────────────────────────────────┐ │ B R A N D B E N C H [ KRZ ] krz.sh │ └──────────────────────────────────────────────────────────────┘ WHAT client-side brand identity generator. describe a project, get a brand package: positioning, tone, color palette, typography, logo concepts, taglines, usage examples. runs in the browser. no backend. no accounts. state persists in localStorage. DOES - template generation, offline, tailored by category - ai generation via a local ollama instance, cancellable mid-stream - multiple packages in tabs, each persisted separately - inline editing, click any field in the preview - section locking across regenerations - undo/redo per package (⌘Z / ⌘⇧Z) - editable color swatches, native color picker - font pairings per category, 8-level type scale - export to markdown, json, or a self-contained html page RUN npm install npm run dev open http://localhost:5173. build: npm run build # dist/ npm run preview AI WITH OLLAMA 1. install ollama, pull a model: ollama pull llama3.2 ollama pull mistral ollama pull gemma3 2. run it: ollama serve 3. a non-default host or port needs OLLAMA_ORIGINS set for browser requests: OLLAMA_ORIGINS="*" ollama serve 4. in the app: Settings, enable AI, set base url (http://localhost:11434), pick a model, Test connection. bigger models give better-structured output. generation takes 15-60s depending on hardware. DOCKER Dockerfile and compose.yml deploy the app next to ollama. docker compose up -d --build app serves on port 8000. ollama's api is proxied through nginx at /api/, so the browser makes no cross-origin request. after first boot, pull a model: docker compose exec ollama ollama pull llama3.2 set the ollama base url to http://your-server:8000. for an nvidia gpu, uncomment the deploy block in compose.yml (needs the nvidia container toolkit). STACK react 18, typescript, vite. no ui library, plain css. LICENSE 0bsd. see LICENSE. ┌──────────────────────────────────────────────────────────────┐ │ krz.sh │ └──────────────────────────────────────────────────────────────┘