# zai-home-base — revenue projects on djg-oracle-sl Workspace for projects built to generate revenue. All sites are served by a shared nginx edge DaemonSet in k3s (hostPort 80) reading from `sites/`. ## Layout - `bdj/` — bestdadjokes.lol (dad jokes content site, Track 1) - `content/jokes.json` — the dataset (append-only; joke ids = array index) - `build.py` — stdlib-only static site generator (Python 3.6) - `static/` — css/js/favicon (jokes-data.js is generated, don't hand-edit) - `site/` — build output (gitignored) - `nginx/conf.d/` — per-site nginx vhosts (mounted into edge pod) - `k8s/nginx-edge.yaml` — shared edge DaemonSet (hostNetwork, port 80) - `deploy.sh` — build + atomic swap + reload + verify - `sites/` — live docroots served by the edge pod (generated, gitignored) - `nginx-ingress.yaml` (in /home/opc) — leftover demo manifest, unused ## Deploy a content change cd bdj && ./deploy.sh ## Server facts - VM: djg-oracle-sl (Oracle Cloud ARM, 4c/23GB), public IP 144.24.30.131 - k3s single node (control-plane taint — pods need the toleration in k8s/nginx-edge.yaml) - kubectl: `sudo /usr/local/bin/k3s kubectl` (no standalone kubeconfig for opc) - Local test: `curl -H 'Host: bestdadjokes.lol' http://127.0.0.1/` - Inbound 80/443 must be open in the OCI VCN security list (cloud console side) - DNS: user manages Cloudflare; site goes live with proxied A record → 144.24.30.131 ## Roadmap (bdj) 1. DNS live → submit to Google Search Console (HTML meta verification) 2. Social content (needs user-provided accounts) — daily share-card images 3. Ad integration: user's MCM/AdX stack; ad slots are marked `` 4. Expand dataset daily; long-tail topic pages ("dad jokes about coffee") 5. Phase 2 (myadhd.dev): ADHD micro-tools + Paddle/Stripe when user ready