No description
| bdj | ||
| .gitignore | ||
| README.md | ||
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)
- DNS live → submit to Google Search Console (HTML meta verification)
- Social content (needs user-provided accounts) — daily share-card images
- Ad integration: user's MCM/AdX stack; ad slots are marked
<!-- AD_SLOT_* --> - Expand dataset daily; long-tail topic pages ("dad jokes about coffee")
- Phase 2 (myadhd.dev): ADHD micro-tools + Paddle/Stripe when user ready