SPB Git

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%
3.2 KB · 91 lines markdown
Rendered Raw Blame History
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