stefankoelle initial

This commit is contained in:
2026-08-14 12:26:58 +02:00
parent da8acc849a
commit 02cdd9c6f4
50 changed files with 2033 additions and 74 deletions
+60 -67
View File
@@ -2,9 +2,9 @@
## Projektübersicht
Monorepo für 5 statische Websites unter moonweb.org, basierend auf Eleventy (11ty), deployt auf Cloudflare Pages.
Monorepo für 5 statische Websites unter moonweb.org + stefankoelle.de, basierend auf Eleventy (11ty).
### Websites
### Websites (Cloudflare Pages)
| Site | Domain | Zweck | Status |
|------|--------|-------|--------|
@@ -14,82 +14,76 @@ Monorepo für 5 statische Websites unter moonweb.org, basierend auf Eleventy (11
| code | code.moonweb.org | GitHub-Projekte (aggregiert via .moonweb.yml) | Fertig (10 Repos) |
| retro | retro.moonweb.org | Physische Retro-Hardware | Nur Übersicht (WIP) |
### Externe Sites (nicht im Monorepo)
### Externe Sites (SFTP-Deployment)
| Site | Domain | Zweck | Status |
|------|--------|-------|--------|
| stefankoelle | stefankoelle.de | Lebenslauf, Kontakt, Projekte | Onepager + LED-Matrix-Detailseite |
### Andere Sites (nicht im Monorepo)
- stefankoelle.de — Lebenslauf, Kontakt (extern gehostet)
- www.moonweb.org — 2000er Internet-Zeitkapsel
- 28k8.moonweb.org — 90er BBS/Scene-Archiv
## Dateistruktur
```
moonweb-site/
├── hub/ # Eleventy-Config + index.njk
├── infra/ # Eleventy-Config + index.njk + 3 Subseiten
│ ├── backup-strategy/
│ ├── monitoring/
│ └── dev-workflow/
├── smarthome/ # Eleventy-Config + index.njk + 6 Subseiten
│ ├── homematic-mqtt/
│ ├── tasmota-energy/
│ ├── balkonpi/
│ ├── airplay-audio/
│ ├── octoprint/
│ └── tubearchivist/
├── code/ # Eleventy-Config + index.njk
│ └── _data/repos.json # Vom GitHub-Aggregator generiert
│ └── _data/repos.json
├── retro/ # Eleventy-Config + index.njk
├── stefankoelle/ # Eleventy-Config + Onepager
│ ├── eleventy.config.js
│ ├── _includes/
│ │ ├── stefankoelle.njk # Layout (Header, Nav, Footer)
│ │ └── cv-content.njk # CV-Partial (zentral fuer Web + PDF)
│ ├── index.njk # Onepager (alle Sections)
│ ├── cv-print.njk # CV-only fuer spaeteren PDF-Druck
│ ├── assets/ # CSS, JS, Bilder, Favicons
│ ├── ledmatrix/ # LED Matrix WebServer Dokumentation
│ └── pdf/ # PDF-CSS (fuer spaeteren WeasyPrint-Bau)
├── shared/ # Gemeinsame Komponenten
│ ├── _includes/
│ │ ├── base.njk # Basis-Layout (Header, Site-Switcher, Footer)
│ │ └── card-grid.njk # Card-Grid Template
│ ├── base.css # Basis-CSS (Layout, Cards, Typography)
│ └── theme-*.css # Accent-Farben pro Site
│ ├── base.css
│ └── theme-*.css
├── scripts/
│ └── github-aggregator/ # Python-Skript für code.moonweb.org
│ ├── aggregate.py
│ ├── example.moonweb.yml
│ └── README.md
│ └── github-aggregator/
├── .github/workflows/
── build-deploy.yml # CI/CD: Build + Deploy zu Cloudflare Pages
├── DESIGN.md # Initiales Konzept mit Design-Entscheidungen (deutsch)
├── SPEC.md # Vollständige Spezifikation (148 Zeilen)
├── PLAN.md # Implementierungsplan (65 Zeilen)
├── README.md # Projekt-README
├── TODO.md # Offene Items + Workflow
── package.json # npm scripts für dev/build
── build-deploy.yml # CI/CD: Cloudflare Pages (5 Sites)
│ └── deploy-stefankoelle.yml # CI/CD: IONOS SFTP (stefankoelle.de)
├── DESIGN.md
├── SPEC.md
├── PLAN.md
├── README.md
── TODO.md
└── package.json
```
## Dokumentation
- `DESIGN.md` — Initiales Konzept mit Design-Entscheidungen (deutsch)
- `SPEC.md` — Vollständige Spezifikation (148 Zeilen)
- `PLAN.md` — Implementierungsplan (65 Zeilen)
- `README.md` — Projekt-README
- `TODO.md` — Offene Items + Workflow für weitere Arbeit
- `TODO.md` — Offene Items + Workflow für weitere Arbeit
## Technischer Stack
- **SSG:** Eleventy (11ty) v3.1.6
- **Templates:** Nunjucks (.njk)
- **CSS:** Variables-basiert mit Accent-Farben pro Site
- **Deploy:** Cloudflare Pages (5 separate Projects)
- **CI/CD:** GitHub Actions
- **GitHub-Aggregator:** Python (liest .moonweb.yml aus Repos)
- **Deploy:** Cloudflare Pages (5 separate Projects)
- **Deploy (moonweb):** Cloudflare Pages (5 separate Projects)
- **Deploy (stefankoelle):** IONOS SFTP
- **CI/CD:** GitHub Actions (2 Workflows)
## Entwicklung
```bash
npm install
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 build # Alle Sites bauen
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 build # Alle Sites bauen
```
## Design-Prinzipien
@@ -101,36 +95,35 @@ npm run build # Alle Sites bauen
5. **Keine Analytics** — Keine Tracking-Tools
6. **Sensible Daten** — Infra-Content wird manuell redigiert (keine IPs, Keys, Passwörter)
## Content-Regeln (SPEC.md §5)
## stefankoelle.de
| Site | Detailseiten? | Regel |
|------|---------------|-------|
| smarthome | Ja | Nur wenn genug Content vorhanden |
| code | Nie | Nur Übersicht + GitHub-Links |
| infra | Kaum | Bewusst oberflächlich (sensible Daten) |
| retro | Ja, minimal | Rudimentär, WIP erlaubt |
## GitHub-Aggregator
`scripts/github-aggregator/aggregate.py` liest `.moonweb.yml` aus allen public Repos von `skoelle` und schreibt `code/_data/repos.json`. Manuell ausführen:
```bash
export GITHUB_TOKEN=ghp_xxx
python scripts/github-aggregator/aggregate.py
```
- Eigene Eleventy-Config (nicht shared base.njk)
- Eigenes CSS-Design (nicht moonweb design system)
- Onepager mit Anchor-Links (bleibt so)
- Deploy via SFTP auf IONOS `/deploy/stefankoelle/`
- CV-Partial zentral pflegbar (einmal aendern → Web + PDF aktualisieren)
- LED Matrix als eigene Seite unter stefankoelle.de/ledmatrix/
## CI/CD
`.github/workflows/build-deploy.yml` baut alle 5 Sites (hub, infra, smarthome, code, retro) und deployt sie zu Cloudflare Pages.
### Cloudflare Pages (moonweb)
`.github/workflows/build-deploy.yml` baut hub, infra, smarthome, code, retro.
Benötigte Secrets:
- `CLOUDFLARE_API_TOKEN`
- `CLOUDFLARE_ACCOUNT_ID`
### IONOS SFTP (stefankoelle.de)
`.github/workflows/deploy-stefankoelle.yml` baut stefankoelle.de und deployed per SFTP.
Benötigte Secrets:
- `IONOS_SFTP_HOST`
- `IONOS_SFTP_USER`
- `IONOS_SFTP_PASSWORD`
## Offene Punkte
- retro/ ist bewusst rudimentär gehalten
- Einige Cards in smarthome/ und infra/ verlinken noch auf "#" (Placeholder)
- Deploy erfolgt noch nicht automatisch (Phase 3 ausstehend)
- stefankoelle.de ist extern gehostet, wird nur verlinkt (nicht im Monorepo)
- PDF-Build fuer CV (WeasyPrint) — lokal testen, spaeter in CI integrieren
- Querverlinkungen stefankoelle.de <-> smarthome (zukuenftig)
- Ledmatrix ggf. nach smarthome verschieben (when ready)