9f923b4f35
Static site (no build step) with a browser terminal, plain-text output for curl, and plain k8s manifests under k8s/ for ArgoCD.
73 lines
3.1 KiB
Markdown
73 lines
3.1 KiB
Markdown
# momme.world
|
|
|
|
Personal site at [momme.world](https://momme.world) — a terminal-style page
|
|
that behaves like a small shell (`whoami`, `projects`, `social`, …), plus a
|
|
plain-text rendering for `curl momme.world`.
|
|
|
|
## Layout
|
|
|
|
```
|
|
k8s/
|
|
kustomization.yaml the whole deployment: generated ConfigMaps + refs
|
|
deployment.yaml one unprivileged nginx, content served from ConfigMaps
|
|
service.yaml ClusterIP, :80 -> :8080
|
|
site/ the actual website, served as-is
|
|
index.html markup + noscript fallback
|
|
style.css
|
|
site.js the terminal; ALL site content lives in COMMANDS here
|
|
nginx.conf mounted as /etc/nginx/conf.d/default.conf
|
|
hello.txt what curl gets
|
|
```
|
|
|
|
There is deliberately **no build step**: no package.json, no bundler, no CI.
|
|
Edit a file under `k8s/site/`, merge to `main`, ArgoCD syncs it. The content
|
|
of the site is the repo — the kustomize `configMapGenerator` hashes the files
|
|
into their ConfigMap names, which rolls the Deployment automatically.
|
|
|
|
## Editing the site
|
|
|
|
- New terminal command: add one object to `COMMANDS` in `k8s/site/site.js`.
|
|
It appears in `help` and in tab-completion automatically. `label -> url`
|
|
lines become links.
|
|
- The noscript block in `index.html` mirrors the main facts by hand; keep it
|
|
in sync when changing `whoami`/`contact` content.
|
|
- `curl`-UA detection is the `$root_doc` map in `k8s/site/nginx.conf`.
|
|
|
|
## How it deploys
|
|
|
|
The `momme/infra` module `app-momme-world` owns the namespace, the TLS
|
|
certificate and the HTTPProxy, and creates an ArgoCD `Application` that points
|
|
at `k8s/` in this repo. Nothing in this repo talks to the cluster.
|
|
|
|
## Local preview
|
|
|
|
Any static server works, e.g.:
|
|
|
|
```
|
|
cd k8s/site && python -m http.server 8080
|
|
```
|
|
|
|
## Open decisions
|
|
|
|
Things left deliberately open for you:
|
|
|
|
1. **DNS** — `momme.world` currently has *no A record*. The zone lives in
|
|
Cloudflare (nameservers `fred/jessica.ns.cloudflare.com`), the same place
|
|
`momme.cloud` lives. An `A momme.world -> 31.18.25.47` (grey cloud, the
|
|
same public entry all `*.momme.cloud` services use) is all that's needed.
|
|
Also check that the Cloudflare API token behind the `cf` ClusterIssuer
|
|
(Infisical `/global`, `cloudflare_api_token`) is allowed to do DNS-01 in
|
|
the momme.world zone — if it's scoped to momme.cloud only, widen it.
|
|
2. **www redirect** — not implemented. If you want `www.momme.world` to work,
|
|
add a second DNS name + HTTPProxy route (infra PR can carry it).
|
|
3. **Analytics / visits** — none included. Self-hosted (Plausible) or none is
|
|
an easy later call; nothing in this repo blocks it.
|
|
4. **Blog later** — you mentioned a Markdown-driven blog could be nice
|
|
someday. The current no-build design can take it as far as "one static
|
|
page per post written in HTML"; as soon as you want real Markdown +
|
|
templates, the natural step is a generator (Lume like adb.sh, or
|
|
Hugo) plus a built image. Decision deferred, structure unaffected.
|
|
5. **Content facts** — taken from the old site's commands (work at
|
|
codeanker, projects list, socials). Say the word for anything outdated;
|
|
they all live in `COMMANDS` in `site.js`.
|