spb/khaelor Public
KHAELOR — a terminal-native autonomous engineering agent powered by Anthropic.
TypeScript 82.9%
HTML 14.9%
CSS 1.1%
JavaScript 0.7%
1<!--2KHAELOR3File: website/README.md4Description: The KHAELOR documentation site (www.khaelor.sh) — local dev and deployment notes.5Author: Simon-Pierre Boucher6Contact: contact@spboucher.ai7-->89# KHAELOR website — www.khaelor.sh1011The documentation and distribution site for the KHAELOR CLI. Static,12hand-written, zero build step, zero npm dependencies.1314```15website/16├── public/ # the static site17│ ├── index.html # landing page18│ ├── docs/*.html # documentation pages19│ ├── styles.css # single stylesheet (dark default + light variant)20│ ├── site.js # theme toggle, nav highlighting, copy buttons21│ └── install.sh # hosted installer (served at /install.sh)22├── artifacts/ # khaelor.tgz is dropped here at deploy time (gitignored payload)23├── server.mjs # zero-dependency Node static server24└── CONTENT_TODO.md # content items to re-verify once the CLI is final25```2627## Run locally2829```sh30node server.mjs # http://localhost:879031PORT=9000 node server.mjs # any port32```3334No install step. Requires only Node (>= 18 works for the server; the KHAELOR35CLI itself requires >= 22).3637## Routes3839| Route | Source | Caching |40|---|---|---|41| `/` and `/docs/*.html` | `public/` | `no-cache` (revalidate) |42| `/styles.css`, `/site.js`, images | `public/` | `max-age=86400` |43| `/install.sh` | `public/install.sh` | `no-store` (always fresh) |44| `/khaelor.tgz` | `artifacts/khaelor.tgz` | `no-store`; **503** with a plain message if the tarball is absent |45| `/health` | — | `{"ok":true,"version":"..."}` |4647Access log goes to stdout (PM2 captures it). Binds `0.0.0.0`, port from48`PORT` (default 8790). Extensionless doc URLs resolve (`/docs/usage` →49`/docs/usage.html`). Path traversal is rejected.5051## Deploy (Mac Studio node + ngrok)52531. **Pick the node and deploy the app** using the standard cluster protocol54 (`pick-node.py` + `deploy-app.sh`), e.g.:5556 ```sh57 ~/Desktop/cluster-skill/deploy-app.sh \58 --src ~/Desktop/khaelor/website --node <alias> \59 --name khaelor-website --port 8790 --domain www.khaelor.sh60 ```6162 That handles rsync, PM2 (`node server.mjs`), the ngrok tunnel63 (`--url=www.khaelor.sh`), the healthcheck (`/health`), and the64 deployment registry entry.65662. **Drop the CLI tarball.** Build it from the khaelor repo root67 (`npm run build && npm pack`), then place it on the node:6869 ```sh70 scp khaelor-*.tgz <node>:~/apps/khaelor-website/artifacts/khaelor.tgz71 ```7273 Until the tarball is present, `/khaelor.tgz` returns 503 and the74 installer fails cleanly at the `npm install -g` step — the rest of the75 site works.76773. **Update content:** re-run the rsync/deploy; pages are served `no-cache`78 so changes appear immediately.7980## Editing content8182Every page is plain semantic HTML sharing the same header/sidebar markup —83edit directly, no build. Keep the aesthetic contract: minimal, calm, dark84default, monospace accents, no banners. All source files carry the mandatory85KHAELOR author header (Absolute Rule #0). Before publishing content that86documents CLI behavior, check `CONTENT_TODO.md`.8788---8990*Author: Simon-Pierre Boucher · contact@spboucher.ai*91