README.md

This commit is contained in:
2026-08-13 23:17:06 +02:00
parent 3c96077e58
commit 34037c7330
7 changed files with 19 additions and 26 deletions
-1
View File
@@ -129,5 +129,4 @@ jobs:
# Required one-time setup (see PLAN.md Phase 2): # Required one-time setup (see PLAN.md Phase 2):
# Create Cloudflare Workers and bind custom domains. # Create Cloudflare Workers and bind custom domains.
# DNS is already on Cloudflare (SPEC.md §4.6). # DNS is already on Cloudflare (SPEC.md §4.6).
# Note: Cloudflare Free-Tier limits to 5 Workers per repository.
# #
+2 -3
View File
@@ -19,7 +19,7 @@ Monorepo für 5 statische Websites unter moonweb.org, basierend auf Eleventy (11
- stefankoelle.de — Lebenslauf, Kontakt (extern gehostet) - stefankoelle.de — Lebenslauf, Kontakt (extern gehostet)
- www.moonweb.org — 2000er Internet-Zeitkapsel - www.moonweb.org — 2000er Internet-Zeitkapsel
- 28k8.moonweb.org — 90er BBS/Scene-Archiv - 28k8.moonweb.org — 90er BBS/Scene-Archiv
- home.moonweb.org — Authelia-geschütztes Homelab-Dashboard
## Dateistruktur ## Dateistruktur
@@ -78,7 +78,7 @@ moonweb-site/
- **Deploy:** Cloudflare Pages (5 separate Projects) - **Deploy:** Cloudflare Pages (5 separate Projects)
- **CI/CD:** GitHub Actions - **CI/CD:** GitHub Actions
- **GitHub-Aggregator:** Python (liest .moonweb.yml aus Repos) - **GitHub-Aggregator:** Python (liest .moonweb.yml aus Repos)
- **Cloudflare Free-Tier:** Max 5 Pages Projects pro Repository - **Deploy:** Cloudflare Pages (5 separate Projects)
## Entwicklung ## Entwicklung
@@ -127,7 +127,6 @@ Benötigte Secrets:
- `CLOUDFLARE_API_TOKEN` - `CLOUDFLARE_API_TOKEN`
- `CLOUDFLARE_ACCOUNT_ID` - `CLOUDFLARE_ACCOUNT_ID`
Hinweis: Cloudflare Free-Tier erlaubt nur 5 Projects pro Repository. stefankoelle.de bleibt extern.
## Offene Punkte ## Offene Punkte
+6 -6
View File
@@ -1,6 +1,6 @@
# moonweb.org — Implementation Plan # moonweb.org — Implementation Plan
Companion to `SPEC.md`. Defines order of work. All five sites (hub, infra, smarthome, code, retro) launch **simultaneously** — no staged rollout by domain. cv (stefankoelle.de) stays external (Cloudflare Free-Tier limits to 5 Pages projects per repository). Companion to `SPEC.md`. Defines order of work. All five sites (hub, infra, smarthome, code, retro) launch **simultaneously** — no staged rollout by domain.
## Phase 0 — Repo & tooling setup ## Phase 0 — Repo & tooling setup
@@ -18,7 +18,7 @@ Work order within this phase is flexible since all domains launch together; sugg
- Build the aggregator script, run it once, generate `code/_data/repos.json`. - Build the aggregator script, run it once, generate `code/_data/repos.json`.
- Build the overview page grouped by subcategory (Automation & Sync, Dev-Tools, Web Apps, Firmware/Hardware, Misc). - Build the overview page grouped by subcategory (Automation & Sync, Dev-Tools, Web Apps, Firmware/Hardware, Misc).
2. **smarthome** — overview first, detail pages only where content already exists. 2. **smarthome** — overview first, detail pages only where content already exists.
- Draft the overview: how the smart home is structured (mirrors what's on `home.moonweb.org`: buttons/control, sensors, calendar, weather, media). - Draft the overview: how the smart home is structured (buttons/control, sensors, calendar, weather, media).
- For each existing topic with enough material (HomematicIP/MQTT, Tasmota, LED-Matrix *reference only, no migration*, M5Stack/WT32SC01 dashboards, WetterAPI, AirPlay, OctoPi, TubeArchivist), decide case by case: enough content → detail page; too thin → mention in overview only, no placeholder. - For each existing topic with enough material (HomematicIP/MQTT, Tasmota, LED-Matrix *reference only, no migration*, M5Stack/WT32SC01 dashboards, WetterAPI, AirPlay, OctoPi, TubeArchivist), decide case by case: enough content → detail page; too thin → mention in overview only, no placeholder.
- Translate source material to English during authoring (one-time AI pass per document, per `SPEC.md §7`). - Translate source material to English during authoring (one-time AI pass per document, per `SPEC.md §7`).
3. **infra** — overview only, redaction pass required. 3. **infra** — overview only, redaction pass required.
@@ -29,12 +29,12 @@ Work order within this phase is flexible since all domains launch together; sugg
- One overview page listing what hardware exists. - One overview page listing what hardware exists.
- Add "work in progress" notices for anything that isn't ready — better an honest short page than none. - Add "work in progress" notices for anything that isn't ready — better an honest short page than none.
5. **hub** — build last within this phase since it links to all the others. 5. **hub** — build last within this phase since it links to all the others.
- One-line description + link per destination (infra, smarthome, code, retro, and external links to stefankoelle.de, www.moonweb.org, 28k8.moonweb.org, home.moonweb.org). - One-line description + link per destination (infra, smarthome, code, retro, and external links to stefankoelle.de, www.moonweb.org, 28k8.moonweb.org).
## Phase 2 — CI/CD ## Phase 2 — CI/CD
1. Write `.github/workflows/build-deploy.yml`: builds all five sites in one job (or matrix), then deploys each output folder to its corresponding Cloudflare Pages project via `wrangler pages deploy`. 1. Write `.github/workflows/build-deploy.yml`: builds all five sites in one job (or matrix), then deploys each output folder to its corresponding Cloudflare Pages project via `wrangler pages deploy`.
2. Create five Cloudflare Pages projects (hub, infra, smarthome, code, retro), each bound to its target custom domain (DNS already on Cloudflare, no extra setup needed). Note: Cloudflare Free-Tier limits to 5 Pages projects per repository — cv (stefankoelle.de) stays external. 2. Create five Cloudflare Pages projects (hub, infra, smarthome, code, retro), each bound to its target custom domain (DNS already on Cloudflare, no extra setup needed).
3. Do one full dry run per site locally before the first real deploy. 3. Do one full dry run per site locally before the first real deploy.
## Phase 3 — Launch ## Phase 3 — Launch
@@ -51,13 +51,13 @@ Work order within this phase is flexible since all domains launch together; sugg
- Building any Perplexity-backchannel mechanism for reusing published site content in this project. - Building any Perplexity-backchannel mechanism for reusing published site content in this project.
- Redirecting the apex domain from `www.moonweb.org` to `hub.moonweb.org`. - Redirecting the apex domain from `www.moonweb.org` to `hub.moonweb.org`.
- Any analytics, "last updated" timestamps, or scheduled/automated content generation beyond the one-time GitHub aggregator run. - Any analytics, "last updated" timestamps, or scheduled/automated content generation beyond the one-time GitHub aggregator run.
- Porting stefankoelle.de into the monorepo — stays external (Cloudflare Free-Tier limits to 5 Pages projects). - Porting stefankoelle.de into the monorepo — stays external.
## Definition of done for this build ## Definition of done for this build
- All five sites live on Cloudflare Pages under their intended domains. - All five sites live on Cloudflare Pages under their intended domains.
- code.moonweb.org reflects the current GitHub repos via the `.moonweb.yml` aggregator, grouped by subcategory. - code.moonweb.org reflects the current GitHub repos via the `.moonweb.yml` aggregator, grouped by subcategory.
- smarthome.moonweb.org gives an accurate picture of what's running on home.moonweb.org today, with detail pages only where content already existed. - smarthome.moonweb.org gives an accurate picture of what's running on the homelab today, with detail pages only where content already existed.
- infra.moonweb.org describes the stack shallowly with zero sensitive data leaked. - infra.moonweb.org describes the stack shallowly with zero sensitive data leaked.
- retro.moonweb.org exists with an honest, minimal overview (WIP notices allowed). - retro.moonweb.org exists with an honest, minimal overview (WIP notices allowed).
- hub.moonweb.org correctly links everything, including the untouched external sites (stefankoelle.de, www.moonweb.org, 28k8.moonweb.org). - hub.moonweb.org correctly links everything, including the untouched external sites (stefankoelle.de, www.moonweb.org, 28k8.moonweb.org).
+3 -7
View File
@@ -10,7 +10,7 @@ code.moonweb.org → 💻 Curated GitHub project catalog
retro.moonweb.org → 🕹️ Physical retro hardware collection retro.moonweb.org → 🕹️ Physical retro hardware collection
``` ```
> **External sites** (not in this monorepo): [stefankoelle.de](https://stefankoelle.de) (CV), [www.moonweb.org](https://www.moonweb.org) (2000s time capsule), [28k8.moonweb.org](https://28k8.moonweb.org) (90s BBS archive), [home.moonweb.org](https://home.moonweb.org) (Authelia-protected dashboard). > **External sites** (not in this monorepo): [stefankoelle.de](https://stefankoelle.de) (CV), [www.moonweb.org](https://www.moonweb.org) (2000s time capsule), [28k8.moonweb.org](https://28k8.moonweb.org) (90s BBS archive).
--- ---
@@ -29,8 +29,8 @@ retro.moonweb.org → 🕹️ Physical retro hardware collection
┌────────────────────────┐ ┌────────────────────────┐
│ Cloudflare Workers │ │ Cloudflare Workers │
│ (5 Pages projects) │ (Cloudflare Workers)
└────────────────────────┘ └────────────────────────┘
┌──────────────┼──────────────┐ ┌──────────────┼──────────────┐
@@ -38,10 +38,6 @@ retro.moonweb.org → 🕹️ Physical retro hardware collection
hub.moonweb.org infra.moonweb.org … hub.moonweb.org infra.moonweb.org …
``` ```
### Why 5 separate Cloudflare projects?
Cloudflare Free-Tier limits to **5 Pages projects per repository**. Each subdomain (hub, infra, smarthome, code, retro) gets its own project. `stefankoelle.de` stays external to stay within this limit.
--- ---
## 🛠️ Tech Stack ## 🛠️ Tech Stack
+6 -7
View File
@@ -20,10 +20,10 @@ outside the monorepo, untouched:
├── stefankoelle.de CV, career, personal (extern gehostet) ├── stefankoelle.de CV, career, personal (extern gehostet)
├── www.moonweb.org finished, no overlap (2001-style internet time capsule) ├── www.moonweb.org finished, no overlap (2001-style internet time capsule)
├── 28k8.moonweb.org 90s BBS/scene archive, separate approach, may migrate later (undecided) ├── 28k8.moonweb.org 90s BBS/scene archive, separate approach, may migrate later (undecided)
└── home.moonweb.org Authelia-protected homelab dashboard/control plane (not part of this site set)
``` ```
Apex domain `moonweb.org` currently redirects to `www.moonweb.org`. This stays as-is for now; a later redirect to `hub.moonweb.org` is possible but out of scope for this build. Cloudflare Free-Tier limits to 5 Pages projects per repository, which is why cv (stefankoelle.de) stays external. Apex domain `moonweb.org` currently redirects to `www.moonweb.org`. This stays as-is for now; a later redirect to `hub.moonweb.org` is possible but out of scope for this build.
## 3. Domain purposes ## 3. Domain purposes
@@ -31,7 +31,7 @@ Apex domain `moonweb.org` currently redirects to `www.moonweb.org`. This stays a
|---|---|---| |---|---|---|
| hub | Gateway, links to everything, one-line description per destination | Minimal | | hub | Gateway, links to everything, one-line description per destination | Minimal |
| infra | Shallow, structured overview of the stack: Proxmox (PVE + pve2), Synology DS918+, VLANs, Fritz!Box mesh, SSO, plus how I work (OpenCode/OpenClaw dev environment) | Reference, high-level only | | infra | Shallow, structured overview of the stack: Proxmox (PVE + pve2), Synology DS918+, VLANs, Fritz!Box mesh, SSO, plus how I work (OpenCode/OpenClaw dev environment) | Reference, high-level only |
| smarthome | Why the homelab exists — what's actually running on `home.moonweb.org` as smart home: sensors, automation, calendar/contacts sync, dashboards, media | Project storytelling | | smarthome | Why the homelab exists — what's actually running on the homelab as smart home: sensors, automation, calendar/contacts sync, dashboards, media | Project storytelling |
| code | Curated, sorted GitHub catalog — overview only, always linking out to GitHub | Portfolio | | code | Curated, sorted GitHub catalog — overview only, always linking out to GitHub | Portfolio |
| retro | Physical retro hardware collection (not software/demos — that's 28k8's domain) | Simple, factual | | retro | Physical retro hardware collection (not software/demos — that's 28k8's domain) | Simple, factual |
@@ -40,7 +40,7 @@ Apex domain `moonweb.org` currently redirects to `www.moonweb.org`. This stays a
### 4.1 Header-consistent, content-flexible principle ### 4.1 Header-consistent, content-flexible principle
- **Header is identical** across infra/smarthome/code/retro: site-switcher (hub · infra · smarthome · code · retro), domain accent color, consistent branding. - **Header is identical** across infra/smarthome/code/retro: site-switcher (hub · infra · smarthome · code · retro), domain accent color, consistent branding.
- **Overview (index) pages** use a shared card-grid layout (reference: current `home.moonweb.org` banner header, grouped card sections, clean sans-serif, generous whitespace, light theme only, no heavy JS). - **Overview (index) pages** use a shared card-grid layout (reference: clean card-grid layout with banner header, grouped card sections, sans-serif, generous whitespace, light theme only, no heavy JS).
- **Detail/sub-pages** keep the same header but may use a freer layout below it (reference: `/ledmatrix/` on stefankoelle.de today — pin tables, API docs, photos in free layout instead of a rigid card grid). - **Detail/sub-pages** keep the same header but may use a freer layout below it (reference: `/ledmatrix/` on stefankoelle.de today — pin tables, API docs, photos in free layout instead of a rigid card grid).
Note: cv (stefankoelle.de) is external and uses its own independent design — it does not follow this principle. Note: cv (stefankoelle.de) is external and uses its own independent design — it does not follow this principle.
@@ -137,14 +137,13 @@ moonweb-site/
└── build-deploy.yml # builds all sites, deploys each to its Cloudflare Pages project └── build-deploy.yml # builds all sites, deploys each to its Cloudflare Pages project
``` ```
Note: `cv/` (stefankoelle.de) is hosted externally and linked from hub/site-switcher — it is not part of this monorepo (Cloudflare Free-Tier limits to 5 Pages projects per repository). Note: `cv/` (stefankoelle.de) is hosted externally and linked from hub/site-switcher — it is not part of this monorepo.
## 11. Technical stack ## 11. Technical stack
- **Static site generator:** Eleventy (11ty) — markdown/YAML-first, minimal JS, `_data` folders map directly onto the `.moonweb.yml` aggregator output, low maintenance for five sites at this scale. - **Static site generator:** Eleventy (11ty) — markdown/YAML-first, minimal JS, `_data` folders map directly onto the `.moonweb.yml` aggregator output, low maintenance for five sites at this scale.
- **Build:** entirely in GitHub Actions. - **Build:** entirely in GitHub Actions.
- **Deploy:** Cloudflare Pages — five separate Pages projects (one per public domain: hub, infra, smarthome, code, retro), since Cloudflare Pages binds one custom-domain set per project. One shared GitHub Actions workflow builds all five sites and deploys each output folder to its respective Pages project. - **Deploy:** Cloudflare Pages — five separate Pages projects (one per public domain: hub, infra, smarthome, code, retro), since Cloudflare Pages binds one custom-domain set per project. One shared GitHub Actions workflow builds all five sites and deploys each output folder to its respective Pages project.
- **Cloudflare Free-Tier limit:** Max 5 Pages projects per repository — cv (stefankoelle.de) stays external to avoid hitting this limit.
- **Runtime:** fully static, no server-side code, no containers for the website itself (distinct from the actual homelab services running on the Docker host). - **Runtime:** fully static, no server-side code, no containers for the website itself (distinct from the actual homelab services running on the Docker host).
- **DNS:** already on Cloudflare — no additional setup step needed for Pages custom domains. - **DNS:** already on Cloudflare — no additional setup step needed for Pages custom domains.
- **Local preview:** Eleventy's built-in dev server with live reload, run per-site (`npm run dev:<site>`) before any commit. - **Local preview:** Eleventy's built-in dev server with live reload, run per-site (`npm run dev:<site>`) before any commit.
@@ -156,4 +155,4 @@ Note: `cv/` (stefankoelle.de) is hosted externally and linked from hub/site-swit
- Any Perplexity-backchannel mechanism (website content reusable inside this project) — deferred, no time invested now. - Any Perplexity-backchannel mechanism (website content reusable inside this project) — deferred, no time invested now.
- Analytics of any kind. - Analytics of any kind.
- Automated content generation/translation pipelines beyond the one-time GitHub aggregator for code and the one-time translation pass during migration. - Automated content generation/translation pipelines beyond the one-time GitHub aggregator for code and the one-time translation pass during migration.
- Porting stefankoelle.de into the monorepo — stays external (Cloudflare Free-Tier limits to 5 Pages projects per repository). - Porting stefankoelle.de into the monorepo — stays external.
+1 -1
View File
@@ -20,7 +20,7 @@ Stand: 2026-08-13
- [ ] 28k8.moonweb.org Zukunft klären - [ ] 28k8.moonweb.org Zukunft klären
- [ ] Perplexity-Rückkanal - [ ] Perplexity-Rückkanal
- [ ] Apex-Domain Redirect (moonweb.org → hub.moonweb.org) - [ ] Apex-Domain Redirect (moonweb.org → hub.moonweb.org)
- [ ] stefankoelle.de in Monorepo portieren (nur wenn Cloudflare Free-Tier-Limit gelöst wird) - [ ] stefankoelle.de in Monorepo portieren
## Schon erledigt (Stand 2026-08-13) ## Schon erledigt (Stand 2026-08-13)
+1 -1
View File
@@ -11,7 +11,7 @@ sections:
href: "https://infra.moonweb.org" href: "https://infra.moonweb.org"
emoji: "🏗️" emoji: "🏗️"
- title: "smarthome" - title: "smarthome"
summary: "What's actually running on home.moonweb.org, and why." summary: "What's actually running on the homelab, and why."
href: "https://smarthome.moonweb.org" href: "https://smarthome.moonweb.org"
emoji: "🏠" emoji: "🏠"
- title: "code" - title: "code"