KHAELOR website — www.khaelor.sh
The documentation and distribution site for the KHAELOR CLI. Static, hand-written, zero build step, zero npm dependencies.
website/
├── public/ # the static site
│ ├── index.html # landing page
│ ├── docs/*.html # documentation pages
│ ├── styles.css # single stylesheet (dark default + light variant)
│ ├── site.js # theme toggle, nav highlighting, copy buttons
│ └── install.sh # hosted installer (served at /install.sh)
├── artifacts/ # khaelor.tgz is dropped here at deploy time (gitignored payload)
├── server.mjs # zero-dependency Node static server
└── CONTENT_TODO.md # content items to re-verify once the CLI is finalRun locally
node server.mjs # http://localhost:8790
PORT=9000 node server.mjs # any portNo install step. Requires only Node (>= 18 works for the server; the KHAELOR CLI itself requires >= 22).
Routes
| Route | Source | Caching |
|---|---|---|
/ and /docs/*.html |
public/ |
no-cache (revalidate) |
/styles.css, /site.js, images |
public/ |
max-age=86400 |
/install.sh |
public/install.sh |
no-store (always fresh) |
/khaelor.tgz |
artifacts/khaelor.tgz |
no-store; 503 with a plain message if the tarball is absent |
/health |
— | {"ok":true,"version":"..."} |
Access log goes to stdout (PM2 captures it). Binds 0.0.0.0, port from
PORT (default 8790). Extensionless doc URLs resolve (/docs/usage →
/docs/usage.html). Path traversal is rejected.
Deploy (Mac Studio node + ngrok)
-
Pick the node and deploy the app using the standard cluster protocol (
pick-node.py+deploy-app.sh), e.g.:sh~/Desktop/cluster-skill/deploy-app.sh \ --src ~/Desktop/khaelor/website --node <alias> \ --name khaelor-website --port 8790 --domain www.khaelor.shThat handles rsync, PM2 (
node server.mjs), the ngrok tunnel (--url=www.khaelor.sh), the healthcheck (/health), and the deployment registry entry. -
Drop the CLI tarball. Build it from the khaelor repo root (
npm run build && npm pack), then place it on the node:shscp khaelor-*.tgz <node>:~/apps/khaelor-website/artifacts/khaelor.tgzUntil the tarball is present,
/khaelor.tgzreturns 503 and the installer fails cleanly at thenpm install -gstep — the rest of the site works. -
Update content: re-run the rsync/deploy; pages are served
no-cacheso changes appear immediately.
Editing content
Every page is plain semantic HTML sharing the same header/sidebar markup —
edit directly, no build. Keep the aesthetic contract: minimal, calm, dark
default, monospace accents, no banners. All source files carry the mandatory
KHAELOR author header (Absolute Rule #0). Before publishing content that
documents CLI behavior, check CONTENT_TODO.md.
Author: Simon-Pierre Boucher · contact@spboucher.ai