mirror of
https://github.com/skoelle/moonweb-site.git
synced 2026-09-17 17:00:25 +00:00
Update all documentation for consolidated www.moonweb.org structure
- AGENTS.md: new file structure, single config, correct commands - README.md: updated architecture, project structure, CI/CD docs - SPEC.md: updated sitemap, design system, repository structure, tech stack - PLAN.md: completed migration phases, remaining items - TODO.md: current status, completed tasks, remaining items
This commit is contained in:
@@ -30,12 +30,11 @@ Monorepo fuer 6 statische Websites unter www.moonweb.org + stefankoelle.de, basi
|
||||
|
||||
```
|
||||
moonweb-site/
|
||||
├── hub/ # Eleventy-Config + index.njk
|
||||
├── infra/ # Eleventy-Config + index.njk + 8 Subseiten
|
||||
├── smarthome/ # Eleventy-Config + index.njk + 9 Subseiten
|
||||
├── code/ # Eleventy-Config + index.njk
|
||||
│ └── _data/repos.json
|
||||
├── retro/ # Eleventy-Config + index.njk + 13 Subseiten
|
||||
├── hub/ # Index + Redirects (.htm) + impressum.njk
|
||||
├── infra/ # Index.njk + 8 Subseiten
|
||||
├── smarthome/ # Index.njk + 9 Subseiten
|
||||
├── code/ # Index.njk
|
||||
├── retro/ # Index.njk + 13 Subseiten
|
||||
├── timecapsule/ # Eleventy 2.x (eigene Config)
|
||||
│ ├── eleventy.config.js
|
||||
│ ├── package.json
|
||||
@@ -53,15 +52,20 @@ moonweb-site/
|
||||
├── shared/ # Gemeinsame Komponenten
|
||||
│ ├── _includes/
|
||||
│ │ ├── base.njk # Basis-Layout (Header, Site-Switcher, Footer)
|
||||
│ │ └── card-grid.njk # Card-Grid Template
|
||||
│ ├── base.css
|
||||
│ └── theme-*.css
|
||||
│ │ ├── card-grid.njk # Card-Grid Template
|
||||
│ │ └── sitemap.njk # Zentrale Sitemap
|
||||
│ ├── base.css # Shared CSS (Layout, Cards, Typografie)
|
||||
│ └── favicon/ # Favicon-SVGs pro Section
|
||||
├── _data/
|
||||
│ └── repos.json # GitHub-Aggregator Output
|
||||
├── scripts/
|
||||
│ ├── github-aggregator/
|
||||
│ └── merge-moonweb.sh # Merge-Skript fuer Deployment
|
||||
│ ├── github-aggregator/ # Python: liest .moonweb.yml -> repos.json
|
||||
│ └── cloudflare/ # Redirect-Setup fuer alte Subdomains
|
||||
├── .github/workflows/
|
||||
│ ├── build-deploy-moonweb.yml # CI/CD: IONOS SFTP (www.moonweb.org)
|
||||
│ └── deploy-stefankoelle.yml # CI/CD: IONOS SFTP (stefankoelle.de)
|
||||
├── eleventy.config.js # Zentrale Eleventy-Config (alle moonweb Sites)
|
||||
├── .eleventyignore # Schliesst stefankoelle/, timecapsule/ aus
|
||||
├── DESIGN.md
|
||||
├── SPEC.md
|
||||
├── PLAN.md
|
||||
@@ -72,10 +76,10 @@ moonweb-site/
|
||||
|
||||
## Technischer Stack
|
||||
|
||||
- **SSG:** Eleventy (11ty) v3.1.6 (hub, infra, smarthome, code, retro)
|
||||
- **SSG:** Eleventy (11ty) v3.1.6 (hub, infra, smarthome, code, retro) - zentrale Config
|
||||
- **SSG:** Eleventy v2.0.1 (timecapsule - retro 2001 Design)
|
||||
- **Templates:** Nunjucks (.njk)
|
||||
- **CSS:** Variables-basiert mit Accent-Farben pro Site
|
||||
- **CSS:** Variables-basiert mit Accent-Farben (inlined in base.njk)
|
||||
- **Deploy (moonweb):** IONOS SFTP
|
||||
- **Deploy (stefankoelle):** IONOS SFTP
|
||||
- **CI/CD:** GitHub Actions (2 Workflows)
|
||||
@@ -86,23 +90,20 @@ moonweb-site/
|
||||
npm install
|
||||
cd timecapsule && npm install # Timecapsule Dependencies
|
||||
npm run prebuild # Pre-Build Tasks (CV PDF generieren)
|
||||
npm run dev:hub # localhost:8081
|
||||
npm run dev:infra # localhost:8082
|
||||
npm run dev:smarthome # localhost:8083
|
||||
npm run dev:code # localhost:8084
|
||||
npm run dev:retro # localhost:8085
|
||||
npm run dev:stefankoelle # localhost:8086
|
||||
npm run dev:timecapsule # localhost:8087
|
||||
npm run build # Alle Sites bauen
|
||||
npm run build:moonweb # Nur moonweb Sites (ohne stefankoelle)
|
||||
npm run merge:moonweb # Sites mergen fuer Deployment
|
||||
npm run dev # Moonweb Sites (localhost:8081)
|
||||
npm run dev:stefankoelle # stefankoelle.de (localhost:8086)
|
||||
npm run dev:timecapsule # Timecapsule (localhost:8087)
|
||||
npm run build # Alle moonweb Sites
|
||||
npm run build:stefankoelle # Nur stefankoelle
|
||||
npm run build:timecapsule # Nur timecapsule
|
||||
npm run build:moonweb # Moonweb + Timecapsule (fuer Deployment)
|
||||
```
|
||||
|
||||
## Design-Prinzipien
|
||||
|
||||
1. **Header konsistent** — Identischer Site-Switcher auf allen Home-Sites
|
||||
2. **Content flexibel** — Detailseiten duerfen eigenes Layout haben
|
||||
3. **Accent-Farben:** hub=#3b6ea5, infra=#99333A, smarthome=#1f8a8a, code=#3E5098, retro=#8a6d3b
|
||||
3. **Accent-Farben:** hub=#3b6ea5, infra=#99333A, smarthome=#1f8a8a, code=#3E5098, retro=#8a6d3b (inlined in base.njk)
|
||||
4. **Englisch** — Alle Sites komplett auf Englisch
|
||||
5. **Keine Analytics** — Keine Tracking-Tools
|
||||
6. **Sensible Daten** — Infra-Content wird manuell redigiert (keine IPs, Keys, Passwoerter)
|
||||
@@ -188,7 +189,7 @@ Benötigte Secrets:
|
||||
|
||||
## GitHub Aggregator
|
||||
|
||||
Das Skript `scripts/github-aggregator/aggregate.py` liest aus jedem public Repo unter `skoelle` die `.moonweb.yml` und generiert `code/_data/repos.json`.
|
||||
Das Skript `scripts/github-aggregator/aggregate.py` liest aus jedem public Repo unter `skoelle` die `.moonweb.yml` und generiert `_data/repos.json`.
|
||||
|
||||
### .moonweb.yml Format
|
||||
|
||||
|
||||
@@ -1,64 +1,74 @@
|
||||
# moonweb.org — Implementation Plan
|
||||
|
||||
Companion to `SPEC.md`. Defines order of work. All sites (hub, infra, smarthome, code, retro, stefankoelle) launch **simultaneously** — no staged rollout by domain.
|
||||
Companion to `SPEC.md`. Documents the completed migration from separate subdomain sites to a unified `www.moonweb.org` subdirectory structure.
|
||||
|
||||
## Phase 0 — Repo & tooling setup
|
||||
|
||||
1. Create the `moonweb-site` monorepo (private until first launch, then can stay private since Pages deploys the built output, not the source).
|
||||
2. Initialize Eleventy project structure per `SPEC.md §10`.
|
||||
3. Set up `shared/layout-base.njk` (header + card-grid) and one `theme-*.css` per accent color (hub, infra, smarthome, code, retro).
|
||||
4. Verify local dev server works per site (`npm run dev:<site>`) before any content work starts.
|
||||
1. Created the `moonweb-site` monorepo.
|
||||
2. Initialized Eleventy project structure per `SPEC.md §10`.
|
||||
3. Set up `shared/_includes/base.njk` (header + card-grid) with accent colors inlined.
|
||||
4. Verified local dev server works per site.
|
||||
|
||||
## Phase 1 — Content migration & authoring (per domain)
|
||||
|
||||
Work order within this phase is flexible since all domains launch together; suggested sequence based on how self-contained each domain's content is:
|
||||
|
||||
1. **code** — simplest case, no detail pages, no sensitive-data filtering needed.
|
||||
- Add `.moonweb.yml` to each GitHub repo (see `SPEC.md §8`).
|
||||
- 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).
|
||||
2. **smarthome** — overview first, detail pages only where content already exists.
|
||||
- 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.
|
||||
- Translate source material to English during authoring (one-time AI pass per document, per `SPEC.md §7`).
|
||||
3. **infra** — overview only, redaction pass required.
|
||||
- Draft a shallow, structured overview: Proxmox/pve2, Synology, VLANs, Fritz!Box mesh, SSO, Docker hosting model, plus the "how I work" section (OpenClaw/OpenCode setup, dev workflow).
|
||||
- Apply the redaction rule from `SPEC.md §6` while translating — strip IPs, keys, credentials, internal hostnames from every source document before it becomes public content.
|
||||
- Skip detail pages unless a topic can be described without any sensitive detail.
|
||||
4. **retro** — minimal effort, rudimentary only.
|
||||
- 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.
|
||||
5. **hub** — build last within this phase since it links to all the others.
|
||||
- One-line description + link per destination (infra, smarthome, code, retro, stefankoelle, and external links to www.moonweb.org, 28k8.moonweb.org).
|
||||
1. **code** — GitHub aggregator, `_data/repos.json`, overview page grouped by subcategory.
|
||||
2. **smarthome** — overview + detail pages where content exists.
|
||||
3. **infra** — shallow overview with redaction pass (no IPs, keys, passwords).
|
||||
4. **retro** — minimal overview with WIP notices.
|
||||
5. **hub** — central index linking all sites, including redirect `.htm` files for old www.moonweb.org paths.
|
||||
6. **timecapsule** — integrated from moonweb-www, preserves original 2001 design under `/timecapsule/`.
|
||||
|
||||
## 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`.
|
||||
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.
|
||||
1. GitHub Actions workflow `build-deploy-moonweb.yml`: single Eleventy build for all moonweb sites + timecapsule build, deploy via IONOS SFTP.
|
||||
2. GitHub Actions workflow `deploy-stefankoelle.yml`: stefankoelle.de build, deploy via IONOS SFTP.
|
||||
3. Cloudflare redirect rules for old subdomains (`scripts/cloudflare/`).
|
||||
|
||||
## Phase 3 — Launch
|
||||
## Phase 3 — Consolidation to www.moonweb.org
|
||||
|
||||
1. Deploy all five sites simultaneously.
|
||||
2. Point the respective custom domains at their Pages projects.
|
||||
3. Apex domain `moonweb.org` keeps redirecting to `www.moonweb.org` for now (no change in this launch).
|
||||
4. Smoke-test cross-linking: hub → each site, site-switcher on infra/smarthome/code/retro, smarthome → external ledmatrix link, code cards → GitHub links.
|
||||
All moonweb.org sites now live under `www.moonweb.org` as subdirectories:
|
||||
|
||||
## Phase 4 — Explicitly deferred (not part of this build)
|
||||
| URL | Content |
|
||||
|-----|---------|
|
||||
| `www.moonweb.org/` | Hub (root) |
|
||||
| `www.moonweb.org/infra/` | Infrastructure |
|
||||
| `www.moonweb.org/smarthome/` | Smart Home |
|
||||
| `www.moonweb.org/code/` | Code catalog |
|
||||
| `www.moonweb.org/retro/` | Retro hardware |
|
||||
| `www.moonweb.org/timecapsule/` | 2000s time capsule |
|
||||
| `www.moonweb.org/impressum/` | Legal notice |
|
||||
|
||||
- Deciding on 28k8.moonweb.org's future (stay separate vs. eventual monorepo inclusion).
|
||||
- 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`.
|
||||
- Any analytics, "last updated" timestamps, or scheduled/automated content generation beyond the one-time GitHub aggregator run.
|
||||
Cloudflare redirects forward old subdomains:
|
||||
- `hub.moonweb.org/*` → `www.moonweb.org/*`
|
||||
- `infra.moonweb.org/*` → `www.moonweb.org/infra/*`
|
||||
- `smarthome.moonweb.org/*` → `www.moonweb.org/smarthome/*`
|
||||
- `code.moonweb.org/*` → `www.moonweb.org/code/*`
|
||||
- `retro.moonweb.org/*` → `www.moonweb.org/retro/*`
|
||||
|
||||
## Definition of done for this build
|
||||
### Technical consolidation
|
||||
|
||||
- All sites live on their respective platforms:
|
||||
- hub, infra, smarthome, code, retro on Cloudflare Pages under their intended domains.
|
||||
- stefankoelle.de on IONOS via SFTP deployment.
|
||||
- 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 the homelab today, with detail pages only where content already existed.
|
||||
- infra.moonweb.org describes the stack shallowly with zero sensitive data leaked.
|
||||
- retro.moonweb.org exists with an honest, minimal overview (WIP notices allowed).
|
||||
- hub.moonweb.org correctly links everything, including the external sites (www.moonweb.org, 28k8.moonweb.org).
|
||||
- stefankoelle.de is a working onepager with CV, Projects, Languages, Impressum, and the LED Matrix documentation sub-page.
|
||||
- Single `eleventy.config.js` at root with computed `pathPrefix` per section.
|
||||
- Shared `base.njk` layout with inlined accent colors (no per-site theme CSS).
|
||||
- Central `_data/repos.json` (moved from `code/_data/`).
|
||||
- Central sitemap (`shared/_includes/sitemap.njk`) with all 36 pages.
|
||||
- Single `robots.txt` at root.
|
||||
- `.eleventyignore` excludes `stefankoelle/` and `timecapsule/` (built separately).
|
||||
- `build-pdf.sh` temporarily renames `.eleventyignore` for stefankoelle build.
|
||||
|
||||
## Definition of done — Achieved
|
||||
|
||||
- All sites live under `www.moonweb.org` as subdirectories, deployed via IONOS SFTP.
|
||||
- `www.moonweb.org/code/` reflects the current GitHub repos via the `.moonweb.yml` aggregator.
|
||||
- `www.moonweb.org/smarthome/` gives an accurate picture of what's running on the homelab.
|
||||
- `www.moonweb.org/infra/` describes the stack shallowly with zero sensitive data leaked.
|
||||
- `www.moonweb.org/retro/` exists with an honest, minimal overview.
|
||||
- `www.moonweb.org/` correctly links everything.
|
||||
- `stefankoelle.de` is a working onepager with CV, Projects, Languages, Impressum, and LED Matrix documentation.
|
||||
- Old subdomains redirect via Cloudflare to new paths.
|
||||
- Old www.moonweb.org content preserved under `/timecapsule/`.
|
||||
|
||||
## Remaining items
|
||||
|
||||
- Cloudflare redirect rules need activation (script ready, needs `CLOUDFLARE_API_TOKEN` and `CLOUDFLARE_ZONE_ID` secrets, or manual dashboard setup).
|
||||
- Google Search Console: new property `www.moonweb.org` not yet created.
|
||||
- `moonweb-www` repository not yet archived.
|
||||
|
||||
@@ -21,13 +21,18 @@ stefankoelle.de -> CV, career, personal site (LED Matrix docs)
|
||||
```
|
||||
+-------------------------------------------------------------------+
|
||||
| GitHub Actions CI |
|
||||
| +-----------+ +------------+ +-------------+ +---------+ +------+ |
|
||||
| | build:hub | |build:infra | | build:smart | | build:... | | build:timecapsule | |
|
||||
| +-----+-----+ +-----+------+ +------+------+ +----+----+ +----+----+ +--------+ |
|
||||
| | | | | | | |
|
||||
| v v v v v v |
|
||||
| dist/hub/ dist/infra/ dist/smarthome/ dist/.../ dist/timecapsule/ |
|
||||
+--------+---------------------------------------------------+--------------------+
|
||||
| +-------------------+ +---------------------+ |
|
||||
| | build-deploy- | | deploy-stefankoelle | |
|
||||
| | moonweb | | | |
|
||||
| +--------+----------+ +----------+----------+ |
|
||||
| | | |
|
||||
| v v |
|
||||
| npm run build npm run build:stefankoelle |
|
||||
| + build:timecapsule | |
|
||||
| | | |
|
||||
| v v |
|
||||
| dist/ dist/stefankoelle/ |
|
||||
+-----------+------------------------+-------------------------------+
|
||||
| |
|
||||
v v
|
||||
+------------------+ +------------------+
|
||||
@@ -47,9 +52,9 @@ stefankoelle.de -> CV, career, personal site (LED Matrix docs)
|
||||
| **SSG** | [Eleventy 3.1.6](https://www.11ty.dev/) | Markdown/YAML-first, minimal JS, `_data` folders map directly to aggregator output |
|
||||
| **SSG (timecapsule)** | [Eleventy 2.0.1](https://www.11ty.dev/) | Legacy 2001 design, CommonJS config |
|
||||
| **Templates** | [Nunjucks](https://mozilla.github.io/nunjucks/) | Shared `base.njk` layout with site-switcher header, `card-grid.njk` for index pages |
|
||||
| **Styling** | Custom CSS (variables-based) | `base.css` for shared layout, `theme-*.css` per domain accent color |
|
||||
| **Styling** | Custom CSS (variables-based) | `base.css` for shared layout, accent colors inlined in `base.njk` |
|
||||
| **Fonts** | [Lobster](https://fonts.google.com/specimen/Lobster) (Google Fonts) | Distinctive heading font across all sites |
|
||||
| **CI/CD** | [GitHub Actions](https://github.com/features/actions) | Matrix build for all sites, artifact upload, merge step, parallel deploy |
|
||||
| **CI/CD** | [GitHub Actions](https://github.com/features/actions) | Single build job, parallel SFTP deploy |
|
||||
| **Deploy** | IONOS SFTP | Static hosting via SFTP upload |
|
||||
| **DNS** | Cloudflare | DNS management + redirects from old subdomains |
|
||||
| **GitHub Catalog** | Python aggregator | Reads `.moonweb.yml` from each repo, outputs `repos.json` |
|
||||
@@ -63,27 +68,19 @@ stefankoelle.de -> CV, career, personal site (LED Matrix docs)
|
||||
npm install # install Eleventy + deps
|
||||
cd timecapsule && npm install # timecapsule has own deps (Eleventy 2.x)
|
||||
|
||||
npm run dev:hub # http://localhost:8081
|
||||
npm run dev:infra # http://localhost:8082
|
||||
npm run dev:smarthome # http://localhost:8083
|
||||
npm run dev:code # http://localhost:8084
|
||||
npm run dev:retro # http://localhost:8085
|
||||
npm run dev:stefankoelle # http://localhost:8086
|
||||
npm run dev:timecapsule # http://localhost:8087
|
||||
|
||||
npm run dev # all 7 in parallel
|
||||
npm run dev # moonweb sites (localhost:8081)
|
||||
npm run dev:stefankoelle # stefankoelle.de (localhost:8086)
|
||||
npm run dev:timecapsule # timecapsule (localhost:8087)
|
||||
```
|
||||
|
||||
Each site has its own minimal Eleventy config (`<site>/eleventy.config.js`). Live reload is built in.
|
||||
|
||||
### Build
|
||||
|
||||
```bash
|
||||
npm run prebuild # pre-build tasks (CV PDF)
|
||||
npm run build # builds all sites
|
||||
npm run build:moonweb # builds moonweb sites only (excludes stefankoelle)
|
||||
npm run build:hub # build single site
|
||||
npm run merge:moonweb # merge all moonweb sites into dist/ for deployment
|
||||
npm run build # builds all moonweb sites (hub, infra, smarthome, code, retro)
|
||||
npm run build:stefankoelle # builds stefankoelle.de
|
||||
npm run build:timecapsule # builds timecapsule
|
||||
npm run build:moonweb # builds moonweb + timecapsule (for deployment)
|
||||
```
|
||||
|
||||
---
|
||||
@@ -92,18 +89,10 @@ npm run merge:moonweb # merge all moonweb sites into dist/ for de
|
||||
|
||||
```
|
||||
moonweb-site/
|
||||
├── hub/ # Central index & gateway
|
||||
├── hub/ # Central index + redirect .htm files
|
||||
├── infra/ # Infra overview + 8 detail pages
|
||||
│ ├── backup-strategy/
|
||||
│ ├── monitoring/
|
||||
│ ├── dev-environment/
|
||||
│ └── ...
|
||||
├── smarthome/ # Smart home overview + 9 detail pages
|
||||
│ ├── homematic-mqtt/
|
||||
│ ├── tasmota-energy/
|
||||
│ └── ...
|
||||
├── code/ # GitHub catalog
|
||||
│ └── _data/repos.json # populated by the aggregator
|
||||
├── retro/ # Retro hardware + 13 detail pages
|
||||
├── timecapsule/ # 2000s retro design (Eleventy 2.x)
|
||||
│ ├── eleventy.config.js
|
||||
@@ -111,27 +100,32 @@ moonweb-site/
|
||||
│ └── src/
|
||||
├── stefankoelle/ # CV, career, personal site
|
||||
│ ├── eleventy.config.js
|
||||
│ ├── index.njk # Onepager (CV, Projects, Languages)
|
||||
│ ├── cv-print.njk # CV-only for PDF generation
|
||||
│ ├── ledmatrix/ # LED Matrix WebServer documentation
|
||||
│ └── assets/ # CSS, JS, images, favicons
|
||||
│ ├── index.njk
|
||||
│ ├── cv-print.njk
|
||||
│ ├── ledmatrix/
|
||||
│ └── assets/
|
||||
├── shared/ # Shared components
|
||||
│ ├── _includes/
|
||||
│ │ ├── base.njk # base layout (header, site-switcher, footer)
|
||||
│ │ └── card-grid.njk # card-grid template with emoji support
|
||||
│ ├── base.css # shared CSS (layout, cards, typography)
|
||||
│ └── theme-*.css # accent colors per domain
|
||||
│ │ ├── card-grid.njk # card-grid template
|
||||
│ │ └── sitemap.njk # central sitemap template
|
||||
│ ├── base.css # shared CSS
|
||||
│ └── favicon/ # favicon SVGs per section
|
||||
├── _data/
|
||||
│ └── repos.json # populated by the GitHub aggregator
|
||||
├── scripts/
|
||||
│ ├── github-aggregator/ # Python: reads .moonweb.yml -> repos.json
|
||||
│ └── merge-moonweb.sh # Merge script for deployment
|
||||
│ └── cloudflare/ # redirect setup for old subdomains
|
||||
├── .github/workflows/
|
||||
│ ├── build-deploy-moonweb.yml # CI/CD: build + deploy to IONOS SFTP
|
||||
│ └── deploy-stefankoelle.yml # CI/CD: stefankoelle.de to IONOS SFTP
|
||||
├── DESIGN.md # Initial concept
|
||||
├── SPEC.md # Full specification
|
||||
├── PLAN.md # Implementation plan
|
||||
├── TODO.md # Open items & workflow
|
||||
└── package.json # npm scripts for dev/build
|
||||
│ ├── build-deploy-moonweb.yml # CI/CD: IONOS SFTP (www.moonweb.org)
|
||||
│ └── deploy-stefankoelle.yml # CI/CD: IONOS SFTP (stefankoelle.de)
|
||||
├── eleventy.config.js # single config for all moonweb sites
|
||||
├── .eleventyignore # excludes stefankoelle/, timecapsule/
|
||||
├── DESIGN.md
|
||||
├── SPEC.md
|
||||
├── PLAN.md
|
||||
├── TODO.md
|
||||
└── package.json
|
||||
```
|
||||
|
||||
---
|
||||
@@ -145,24 +139,12 @@ Defined in `.github/workflows/build-deploy-moonweb.yml`:
|
||||
```
|
||||
push to main
|
||||
|
|
||||
+-- Build (matrix: hub, infra, smarthome, code, retro)
|
||||
+-- Build
|
||||
| +-- checkout -> setup-node (22) -> npm ci
|
||||
| +-- npm run build:<site>
|
||||
| +-- validate dist/<site>/ exists & non-empty
|
||||
| +-- upload artifact (7-day retention)
|
||||
|
|
||||
+-- Build timecapsule
|
||||
| +-- cd timecapsule && npm ci
|
||||
| +-- npm run build (all moonweb sites in one Eleventy run)
|
||||
| +-- npm run build:timecapsule
|
||||
| +-- upload artifact
|
||||
|
|
||||
+-- Merge
|
||||
| +-- download all artifacts
|
||||
| +-- merge into dist/ (hub=root, others=subdirs)
|
||||
| +-- upload merged artifact
|
||||
|
|
||||
+-- Deploy
|
||||
+-- download merged artifact
|
||||
+-- SFTP upload to IONOS /websites/moonweb/
|
||||
```
|
||||
|
||||
@@ -223,7 +205,7 @@ Cloudflare redirects forward old subdomains:
|
||||
2. Reads `.moonweb.yml` from each repo root
|
||||
3. Filters for `category: code` entries
|
||||
4. Sorts by subcategory + title
|
||||
5. Writes combined result to `code/_data/repos.json`
|
||||
5. Writes combined result to `_data/repos.json`
|
||||
|
||||
### `.moonweb.yml` schema
|
||||
|
||||
@@ -241,8 +223,9 @@ repo_url: "https://github.com/skoelle/mvg-departures"
|
||||
### Manual run
|
||||
|
||||
```bash
|
||||
export GITHUB_TOKEN=ghp_xxx
|
||||
python scripts/github-aggregator/aggregate.py
|
||||
python3 -m venv .venv
|
||||
.venv/bin/pip install pyyaml
|
||||
.venv/bin/python scripts/github-aggregator/aggregate.py
|
||||
```
|
||||
|
||||
---
|
||||
@@ -276,6 +259,7 @@ All moonweb sites are written **entirely in English**. The timecapsule uses the
|
||||
| `PLAN.md` | Phased implementation plan |
|
||||
| `TODO.md` | Open items, workflow, and current status |
|
||||
| `README.md` | This file - project overview for GitHub |
|
||||
| `AGENTS.md` | AI agent instructions for this codebase |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,63 +1,69 @@
|
||||
# moonweb.org — Specification
|
||||
|
||||
Status: Concept finalized. This document defines *what* gets built. See `PLAN.md` for *how and in what order*.
|
||||
Status: Migration complete. All sites live under `www.moonweb.org` as subdirectories, deployed via IONOS SFTP.
|
||||
|
||||
## 1. Purpose
|
||||
|
||||
A personal homelab hub consisting of a central index (`hub`) and several themed static sites, replacing the current unstructured presentation of infrastructure, smart home projects, and GitHub repos. cv (stefankoelle.de) remains external, linked from the hub and site-switcher.
|
||||
A personal homelab hub consisting of a central index (`hub` at root) and several themed static sites, all served under `www.moonweb.org` as subdirectories. The old timecapsule content (2001 design) is preserved under `/timecapsule/`. cv (stefankoelle.de) remains external, linked from the hub and site-switcher.
|
||||
|
||||
## 2. Sitemap
|
||||
|
||||
```
|
||||
moonweb-site (monorepo)
|
||||
├── hub/ → hub.moonweb.org Central index & gateway
|
||||
├── infra/ → infra.moonweb.org System architecture / stack overview
|
||||
├── smarthome/ → smarthome.moonweb.org What the homelab actually runs, and why
|
||||
├── code/ → code.moonweb.org Curated GitHub catalog
|
||||
├── retro/ → retro.moonweb.org Physical retro hardware collection
|
||||
├── hub/ → www.moonweb.org/ Central index & gateway
|
||||
├── infra/ → www.moonweb.org/infra/ System architecture / stack overview
|
||||
├── smarthome/ → www.moonweb.org/smarthome/ What the homelab actually runs, and why
|
||||
├── code/ → www.moonweb.org/code/ Curated GitHub catalog
|
||||
├── retro/ → www.moonweb.org/retro/ Physical retro hardware collection
|
||||
├── timecapsule/ → www.moonweb.org/timecapsule/ 2001-era internet time capsule
|
||||
└── stefankoelle/→ stefankoelle.de CV, career, personal site (SFTP deploy)
|
||||
|
||||
outside the monorepo, untouched:
|
||||
├── 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
|
||||
├── buildbroken.moonweb.org .NET Open Space blog archive
|
||||
```
|
||||
|
||||
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.
|
||||
Old subdomain redirects (via Cloudflare):
|
||||
- `hub.moonweb.org/*` → `www.moonweb.org/*`
|
||||
- `infra.moonweb.org/*` → `www.moonweb.org/infra/*`
|
||||
- `smarthome.moonweb.org/*` → `www.moonweb.org/smarthome/*`
|
||||
- `code.moonweb.org/*` → `www.moonweb.org/code/*`
|
||||
- `retro.moonweb.org/*` → `www.moonweb.org/retro/*`
|
||||
|
||||
## 3. Domain purposes
|
||||
|
||||
| Domain | Purpose | Tone |
|
||||
|---|---|---|
|
||||
| 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 |
|
||||
| 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 |
|
||||
| retro | Physical retro hardware collection (not software/demos — that's 28k8's domain) | Simple, factual |
|
||||
| Domain | URL | Purpose | Tone |
|
||||
|---|---|---|---|
|
||||
| hub | `/` | Gateway, links to everything, one-line description per destination | Minimal |
|
||||
| infra | `/infra/` | Shallow, structured overview of the stack: Proxmox, Synology, VLANs, Docker hosting, dev environment | Reference, high-level only |
|
||||
| smarthome | `/smarthome/` | Why the homelab exists — sensors, automation, calendar/contacts sync, dashboards, media | Project storytelling |
|
||||
| code | `/code/` | Curated, sorted GitHub catalog — overview only, always linking out to GitHub | Portfolio |
|
||||
| retro | `/retro/` | Physical retro hardware collection (not software/demos — that's 28k8's domain) | Simple, factual |
|
||||
| timecapsule | `/timecapsule/` | Original www.moonweb.org content from 2001, preserved as-is | Retro 2001 design |
|
||||
|
||||
## 4. Design system
|
||||
|
||||
### 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.
|
||||
- **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).
|
||||
- **Header is identical** across all sites: site-switcher (home · infra · smarthome · code · retro · cv), section title (`moonweb.org` or `moonweb.org/smarthome`), domain accent color.
|
||||
- **Overview (index) pages** use a shared card-grid layout (clean card-grid 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.
|
||||
|
||||
Note: stefankoelle.de is now part of the monorepo but uses its own independent design — it does not follow this header-consistent principle.
|
||||
Note: stefankoelle.de uses its own independent design — it does not follow this header-consistent principle.
|
||||
|
||||
### 4.2 Accent colors per domain
|
||||
|
||||
| Domain | Accent |
|
||||
|---|---|
|
||||
| hub | Neutral blue |
|
||||
| infra | Grey-blue |
|
||||
| smarthome | Teal |
|
||||
| code | Violet |
|
||||
| retro | Own accent, still clean card-grid (no 90s styling — that belongs to 28k8) |
|
||||
| Domain | Accent | Implementation |
|
||||
|---|---|---|
|
||||
| hub | Neutral blue (#3b6ea5) | Inlined `<style>` in base.njk |
|
||||
| infra | Red (#99333A) | Inlined `<style>` in base.njk |
|
||||
| smarthome | Teal (#1f8a8a) | Inlined `<style>` in base.njk |
|
||||
| code | Violet (#3E5098) | Inlined `<style>` in base.njk |
|
||||
| retro | Brown (#8a6d3b) | Inlined `<style>` in base.njk |
|
||||
|
||||
### 4.3 URL convention
|
||||
|
||||
`domain/slug/` — lowercase, hyphenated, trailing slash, matching the existing stefankoelle.de pattern (e.g. `/ledmatrix/`) so future detail pages stay consistent even if content later migrates between sites.
|
||||
`/section/slug/` — lowercase, hyphenated, trailing slash. All sites share a single Eleventy build with computed `pathPrefix` per section.
|
||||
|
||||
## 5. Content depth rules (per domain)
|
||||
|
||||
@@ -77,20 +83,20 @@ Because infra must stay shallow and public-safe:
|
||||
- **Allowed:** architecture level — Proxmox + Synology + Docker host, VLAN concept without concrete internal IP plans, which service types run, which tools are used.
|
||||
- **Not allowed:** concrete IP addresses, WireGuard keys/preshared keys, passwords, internal hostnames that allow inference, backup targets with credentials.
|
||||
|
||||
This rule applies to any domain but is most relevant for infra, since the source documents (e.g. Heimnetzwerk-Final-v3.2, GL_Flint2_Final_v2) currently contain real IPs and keys that must be actively stripped during migration.
|
||||
This rule applies to any domain but is most relevant for infra, since the source documents currently contain real IPs and keys that must be actively stripped during migration.
|
||||
|
||||
## 7. Language
|
||||
|
||||
All sites in the monorepo are written **entirely in English**. Existing German source documents are translated once during migration via a single AI-assisted pass — not a recurring process. New `.moonweb.yml` metadata and generated content are authored in English from the start.
|
||||
|
||||
## 8. GitHub automation (code.moonweb.org)
|
||||
## 8. GitHub automation (www.moonweb.org/code/)
|
||||
|
||||
Each GitHub project repo gets a `.moonweb.yml` in its root:
|
||||
|
||||
```yaml
|
||||
title: "MVG Departures"
|
||||
category: code # code | smarthome | infra
|
||||
subcategory: "Web Apps" # drives grouping on code.moonweb.org
|
||||
subcategory: "Web Apps" # drives grouping on www.moonweb.org/code/
|
||||
status: active
|
||||
stack: [Python, FastAPI]
|
||||
hosted_on: "Docker Host Debian (PVE)"
|
||||
@@ -98,7 +104,7 @@ summary: "Compact MVG/S-Bahn departure monitor with configurable stations."
|
||||
repo_url: "https://github.com/skoelle/mvg-departures"
|
||||
```
|
||||
|
||||
A local aggregator script reads `.moonweb.yml` from all repos via the GitHub API, an AI pass turns the raw YAML into readable card copy, and the result is committed into `code/_data/repos.json` inside the monorepo. This runs manually, on demand — no scheduled automation for now.
|
||||
A local aggregator script reads `.moonweb.yml` from all repos via the GitHub API, and the result is committed into `_data/repos.json` inside the monorepo. This runs manually, on demand — no scheduled automation for now.
|
||||
|
||||
## 9. Content maintenance
|
||||
|
||||
@@ -112,47 +118,60 @@ A local aggregator script reads `.moonweb.yml` from all repos via the GitHub API
|
||||
|
||||
```
|
||||
moonweb-site/
|
||||
├── hub/
|
||||
├── infra/
|
||||
├── smarthome/
|
||||
├── code/
|
||||
│ └── _data/repos.json # populated by the GitHub aggregator
|
||||
├── retro/
|
||||
├── stefankoelle/ # CV, career, personal site
|
||||
├── hub/ # Index + Redirects (.htm) + impressum.njk
|
||||
├── infra/ # Index.njk + 8 Subseiten
|
||||
├── smarthome/ # Index.njk + 9 Subseiten
|
||||
├── code/ # Index.njk
|
||||
├── retro/ # Index.njk + 13 Subseiten
|
||||
├── timecapsule/ # Eleventy 2.x (eigene Config)
|
||||
│ ├── eleventy.config.js
|
||||
│ ├── index.njk # Onepager (CV, Projects, Languages)
|
||||
│ ├── cv-print.njk # CV-only for PDF generation
|
||||
│ ├── ledmatrix/ # LED Matrix WebServer documentation
|
||||
│ └── assets/ # CSS, JS, images, favicons
|
||||
├── shared/
|
||||
│ ├── package.json
|
||||
│ └── src/
|
||||
├── stefankoelle/ # Eleventy-Config + Onepager
|
||||
│ ├── eleventy.config.js
|
||||
│ ├── index.njk
|
||||
│ ├── cv-print.njk
|
||||
│ ├── ledmatrix/
|
||||
│ └── assets/
|
||||
├── shared/ # Shared components
|
||||
│ ├── _includes/
|
||||
│ │ ├── base.njk # shared header + footer layout
|
||||
│ │ └── card-grid.njk # card-grid template
|
||||
│ ├── base.css # shared CSS variables and layout
|
||||
│ └── theme-*.css # one accent color file per domain
|
||||
│ │ ├── base.njk # base layout (header, site-switcher, footer)
|
||||
│ │ ├── card-grid.njk # card-grid template
|
||||
│ │ └── sitemap.njk # central sitemap template
|
||||
│ ├── base.css # shared CSS
|
||||
│ └── favicon/ # favicon SVGs per section
|
||||
├── _data/
|
||||
│ └── repos.json # populated by the GitHub aggregator
|
||||
├── scripts/
|
||||
│ └── github-aggregator/ # reads .moonweb.yml from all repos
|
||||
├── DESIGN.md # initial concept and design decisions
|
||||
├── SPEC.md # what gets built (this document)
|
||||
├── PLAN.md # how and in what order
|
||||
├── TODO.md # open items and workflow
|
||||
└── .github/workflows/
|
||||
├── build-deploy.yml # builds all sites, deploys to Cloudflare Pages
|
||||
└── deploy-stefankoelle.yml # builds stefankoelle, deploys via IONOS SFTP
|
||||
│ ├── github-aggregator/ # reads .moonweb.yml from all repos
|
||||
│ └── cloudflare/ # redirect setup for old subdomains
|
||||
├── .github/workflows/
|
||||
│ ├── build-deploy-moonweb.yml # builds all moonweb sites, deploys to IONOS SFTP
|
||||
│ └── deploy-stefankoelle.yml # builds stefankoelle, deploys via IONOS SFTP
|
||||
├── eleventy.config.js # single Eleventy config for all moonweb sites
|
||||
├── .eleventyignore # excludes stefankoelle/, timecapsule/
|
||||
├── DESIGN.md
|
||||
├── SPEC.md
|
||||
├── PLAN.md
|
||||
├── TODO.md
|
||||
└── package.json
|
||||
```
|
||||
|
||||
## 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) v3.1.6 — single config at root, computed `pathPrefix` per section, per-section collections.
|
||||
- **Static site generator (timecapsule):** Eleventy v2.0.1 — separate config, preserves original 2001 design.
|
||||
- **Templates:** Nunjucks (.njk) — shared `base.njk` layout, `card-grid.njk` for index pages, `sitemap.njk` for central sitemap.
|
||||
- **Styling:** Custom CSS (`base.css`) with accent colors inlined as `<style>` in `base.njk`. No per-site theme CSS files.
|
||||
- **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. stefankoelle.de deploys via IONOS SFTP. Two GitHub Actions workflows handle deployment.
|
||||
- **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.
|
||||
- **Local preview:** Eleventy's built-in dev server with live reload, run per-site (`npm run dev:<site>`) before any commit.
|
||||
- **Deploy:** IONOS SFTP — all sites deployed to `/websites/moonweb/`, stefankoelle.de to `/websites/stefankoelle/`.
|
||||
- **DNS:** Cloudflare — DNS management + redirects from old subdomains (hub.moonweb.org, etc.).
|
||||
- **Runtime:** fully static, no server-side code, no containers for the website itself.
|
||||
- **Local preview:** Eleventy's built-in dev server with live reload (`npm run dev` for all moonweb sites, `npm run dev:stefankoelle`, `npm run dev:timecapsule`).
|
||||
|
||||
## 12. Explicitly out of scope for this build
|
||||
## 12. Explicitly out of scope
|
||||
|
||||
- Migrating 28k8.moonweb.org into the monorepo — undecided, revisit later, likely never.
|
||||
- Any Perplexity-backchannel mechanism (website content reusable inside this project) — deferred, no time invested now.
|
||||
- Any Perplexity-backchannel mechanism — deferred.
|
||||
- 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.
|
||||
|
||||
@@ -1,87 +1,76 @@
|
||||
# TODO: Consolidation zu www.moonweb.org
|
||||
# TODO: moonweb-site
|
||||
|
||||
## Uebersicht
|
||||
## Status: Consolidation Complete
|
||||
|
||||
Alle moonweb.org Sites (hub, infra, smarthome, code, retro, timecapsule) unter `www.moonweb.org` als Subverzeichnisse vereinen. Deployment von Cloudflare Pages zu IONOS SFTP migrieren.
|
||||
|
||||
**URL-Struktur nach Migration:**
|
||||
| URL | Inhalt |
|
||||
|-----|--------|
|
||||
| `www.moonweb.org/` | Hub (neue Root) |
|
||||
| `www.moonweb.org/infra/` | Infra |
|
||||
| `www.moonweb.org/smarthome/` | Smarthome |
|
||||
| `www.moonweb.org/code/` | Code |
|
||||
| `www.moonweb.org/retro/` | Retro |
|
||||
| `www.moonweb.org/timecapsule/` | Altes www (2001-Retro) |
|
||||
| `stefankoelle.de/` | CV (bleibt separat) |
|
||||
All moonweb.org sites are consolidated under `www.moonweb.org` as subdirectories, deployed via IONOS SFTP. PR #3 merged to main.
|
||||
|
||||
---
|
||||
|
||||
## Phase 1: Timecapsule in Monorepo integrieren
|
||||
## Completed
|
||||
|
||||
- [x] 1.1 Dateien aus ../moonweb-www/src/ nach timecapsule/src/ kopieren
|
||||
- [x] 1.2 timecapsule/eleventy.config.js erstellen (Eleventy 2.x)
|
||||
- [x] 1.3 timecapsule/package.json erstellen (eigene Dependencies)
|
||||
- [x] 1.4 timecapsule/src/_data/site.json anpassen (Domain mit /timecapsule/)
|
||||
- [x] 1.5 Alle internen Pfade mit /timecapsule/ prefixieren
|
||||
- [x] 1.6 Passthrough Copy in eleventy.config.js anpassen
|
||||
- [x] 1.7 Build-Output pruefen (dist/timecapsule/)
|
||||
### Phase 1: Timecapsule Integration
|
||||
- [x] Copy files from moonweb-www/src/ to timecapsule/src/
|
||||
- [x] Create timecapsule/eleventy.config.js (Eleventy 2.x)
|
||||
- [x] Create timecapsule/package.json (own dependencies)
|
||||
- [x] Adapt timecapsule internal paths with /timecapsule/ prefix
|
||||
|
||||
## Phase 2: Eleventy-Configs aller Sites anpassen
|
||||
### Phase 2: Single Eleventy Config
|
||||
- [x] Create root eleventy.config.js with computed pathPrefix per section
|
||||
- [x] Delete 5 per-site eleventy.config.js files (hub, infra, smarthome, code, retro)
|
||||
- [x] Delete scripts/merge-moonweb.sh
|
||||
- [x] Update shared/_includes/base.njk (inlined accent colors, root CSS path)
|
||||
- [x] Update hub/index.njk card hrefs (relative paths)
|
||||
- [x] Update hub/impressum.njk (hosting sections correct)
|
||||
- [x] Update parent values in detail pages to include section prefix
|
||||
- [x] Add tags to all pages for Eleventy collections
|
||||
|
||||
- [x] 2.1 hub/eleventy.config.js: site.url auf www.moonweb.org
|
||||
- [x] 2.2 infra/eleventy.config.js: site.url auf www.moonweb.org
|
||||
- [x] 2.3 smarthome/eleventy.config.js: site.url auf www.moonweb.org
|
||||
- [x] 2.4 code/eleventy.config.js: site.url auf www.moonweb.org
|
||||
- [x] 2.5 retro/eleventy.config.js: site.url auf www.moonweb.org
|
||||
- [x] 2.6 shared/_includes/base.njk anpassen
|
||||
- [x] 2.7 hub/index.njk: Card-Hrefs relativieren
|
||||
- [x] 2.8 hub/impressum.njk: Domain-Liste aktualisieren
|
||||
### Phase 3: Build & Deploy
|
||||
- [x] Create .github/workflows/build-deploy-moonweb.yml (single build job, SFTP deploy)
|
||||
- [x] Delete old build-deploy.yml (matrix builds)
|
||||
- [x] Update .eleventyignore (exclude stefankoelle/, timecapsule/, markdown)
|
||||
- [x] Fix build-pdf.sh to temporarily rename .eleventyignore for stefankoelle build
|
||||
- [x] Fix timecapsule build path (../dist/ not ../../dist/)
|
||||
|
||||
## Phase 3: Build-System anpassen
|
||||
### Phase 4: Redirects & SEO
|
||||
- [x] Create 20 redirect .htm files in hub/ for old www.moonweb.org paths
|
||||
- [x] Create central sitemap.xml (36 pages)
|
||||
- [x] Create single robots.txt at root
|
||||
- [x] Set up Cloudflare redirect rules script (scripts/cloudflare/)
|
||||
|
||||
- [x] 3.1 package.json: Neue Scripts fuer timecapsule + merge
|
||||
- [x] 3.2 scripts/merge-moonweb.sh erstellen
|
||||
- [x] 3.3 Lokal Build testen (alle Sites)
|
||||
### Phase 5: Bug Fixes
|
||||
- [x] Fix card links on index pages (add section prefix to local hrefs)
|
||||
- [x] Fix code repos missing (move repos.json to root _data/)
|
||||
- [x] Fix favicons (use section-specific favicon.svg per site)
|
||||
- [x] Fix header (show moonweb.org/smarthome instead of smarthome.moonweb.org)
|
||||
- [x] Rename hub link to home in site-switcher nav
|
||||
- [x] Remove redundant 404 pages, keep only root 404
|
||||
- [x] Add missing beginning subpage redirects (news, report, sitemap)
|
||||
- [x] Fix double-slash URLs in stefankoelle/index.njk
|
||||
- [x] Remove unused theme-*.css files
|
||||
- [x] Update stefankoelle link texts (replace old subdomain names with new paths)
|
||||
|
||||
## Phase 4: Deployment umstellen
|
||||
|
||||
- [x] 4.1 Neuen Workflow .github/workflows/build-deploy-moonweb.yml erstellen
|
||||
- [x] 4.2 Alten Workflow .github/workflows/build-deploy.yml entfernen
|
||||
- [ ] 4.3 Alten deploy-moonweb.yml in moonweb-www deaktivieren
|
||||
|
||||
## Phase 5: Cloudflare Redirects
|
||||
|
||||
- [x] 5.1 Redirect-Regeln einrichten (via GitHub Action)
|
||||
|
||||
| Quell-Domain | Ziel-URL | Type |
|
||||
|-------------|----------|------|
|
||||
| `hub.moonweb.org/*` | `https://www.moonweb.org/$1` | 301 |
|
||||
| `infra.moonweb.org/*` | `https://www.moonweb.org/infra/$1` | 301 |
|
||||
| `smarthome.moonweb.org/*` | `https://www.moonweb.org/smarthome/$1` | 301 |
|
||||
| `code.moonweb.org/*` | `https://www.moonweb.org/code/$1` | 301 |
|
||||
| `retro.moonweb.org/*` | `https://www.moonweb.org/retro/$1` | 301 |
|
||||
|
||||
**Umsetzung:** `scripts/cloudflare/setup-redirects.sh` + GitHub Action `cloudflare-redirects.yml`
|
||||
**Benötigte Secrets:** `CLOUDFLARE_API_TOKEN`, `CLOUDFLARE_ZONE_ID`
|
||||
|
||||
## Phase 6: SEO
|
||||
|
||||
- [ ] 6.1 Google Search Console: Neue Property www.moonweb.org
|
||||
- [ ] 6.2 Sitemap submiten
|
||||
|
||||
## Phase 7: Cleanup
|
||||
|
||||
- [ ] 7.1 moonweb-www Repository archivieren
|
||||
- [ ] 7.2 Cloudflare Pages Projects loeschen (nach Redirect-Test)
|
||||
### Phase 6: Documentation
|
||||
- [x] Update AGENTS.md for new structure
|
||||
- [x] Update README.md for new structure
|
||||
- [x] Update SPEC.md for new structure
|
||||
- [x] Update PLAN.md for new structure
|
||||
|
||||
---
|
||||
|
||||
## Abgeschlossen
|
||||
## Remaining
|
||||
|
||||
Alle Code-Aenderungen sind fertig. Nächste Schritte:
|
||||
1. Commit auf feature/consolidate-www Branch
|
||||
2. Push und PR erstellen
|
||||
3. Deployen
|
||||
4. Cloudflare Redirects einrichten
|
||||
5. Google Search Console aktualisieren
|
||||
### Cloudflare Redirects
|
||||
- [ ] Activate redirect rules (needs `CLOUDFLARE_API_TOKEN` and `CLOUDFLARE_ZONE_ID` secrets, or manual dashboard setup)
|
||||
- [ ] Verify redirects work after activation
|
||||
|
||||
### SEO
|
||||
- [ ] Create Google Search Console property for www.moonweb.org
|
||||
- [ ] Submit sitemap
|
||||
|
||||
### Cleanup
|
||||
- [ ] Archive moonweb-www repository
|
||||
- [ ] Delete Cloudflare Pages projects (after redirect verification)
|
||||
|
||||
### Future
|
||||
- [ ] Cross-linking stefankoelle.de <-> smarthome
|
||||
- [ ] Consider moving LED Matrix to smarthome (when ready)
|
||||
|
||||
Reference in New Issue
Block a user