This commit is contained in:
MaPaLo76 2025-11-19 19:22:24 +01:00
commit 7805b36cfd
3 changed files with 538 additions and 0 deletions

30
.env.example Normal file
View File

@ -0,0 +1,30 @@
# .env.example — Platzhalter für lokale Tests
# Niemals echte Secrets in das Repo einchecken.
# Metabase
METABASE_URL=
METABASE_USER=
METABASE_PASSWORD=
METABASE_CARD_ID=
METABASE_DASHBOARD_ID=
# Teamup
TEAMUP_CALENDAR_BASE=https://api.teamup.com
TEAMUP_CALENDAR_KEY=
TEAMUP_API_KEY=
TEAMUP_PUBLIC_URL=
# DokuWiki (API bevorzugt)
DOKUWIKI_API_URL=
DOKUWIKI_API_TOKEN=
WIKI_MEETING_NAMESPACE=teammeetings
# Fallback / SSH (nur falls API nicht verfügbar)
ALLINKL_SSH_HOST=
ALLINKL_SSH_USER=
ALLINKL_BASE_PATH=
# Sonstiges
TZ=Europe/Berlin
# Optional: dry-run-Flag für Skripte
DRY_RUN=true

466
INTEGRATIONSPLAN.md Normal file
View File

@ -0,0 +1,466 @@
# Integrationsplan: Metabase & Teamup → DokuWiki (All-Inkl)
## 1. Zielbild
Automatisierter Ablauf jeden **1. des Monats um 03:00 Uhr**:
1. Gitea Action startet ein Shell-Skript auf *Hobbybackend1*.
2. Skript erzeugt:
- einen **Metabase-PDF-Export** einer Registerkarte (Dashboard/Frage),
- **zwei Teamup-Kalenderübersichten** als Bilder (jeweils eine Woche, über Datum definiert).
3. Skript überträgt PDF/Bilder per SSH/SCP auf den **All-Inkl-Server** ins DokuWiki-Dateisystem.
4. Skript erzeugt oder aktualisiert eine **DokuWiki-Seite für das Monatsmeeting**, welche die neuen Dateien referenziert.
---
## Verantwortlichkeiten
- Owner / Betrieb: `it@hobbyhimmel.de` (Ansprechpartner für Ausfälle, Secrets & Deploy)
- Maintainer (Skripte / Runner): Hobbybackend1-Admin (Repository-Owner)
- DokuWiki-Admin: Wiki-Administrator (z. B. für API-Zugriff und Namespace-Setup)
Hinweis: Für dieses Hobbyprojekt genügt eine schlanke Aufgabenverteilung — Owner ist primärer Kontakt für Störungen.
## 2. Architektur & Datenfluss
- **Gitea (Repository + Actions)**
- Enthält:
- Shell-Skript(e)
- ggf. Hilfsskripte (z.B. Node/Puppeteer-Renderer)
- GitHub-/Gitea-Action Workflow
- **Trigger:** `schedule` → monatlich.
- **Hobbybackend1 (Docker-Host)**
- Stack: `metabase`
- Container: `metabase-metabase-1`
- Führt das Shell-Skript aus (über Gitea Action Runner).
- Headless-Browser (z.B. **Puppeteer / Playwright** in Docker oder lokal installiert) rendert:
- Metabase-Registerkarte export siehe https://www.metabase.com/docs/latest/api
- Teamup-Ansichten export siehe https://apidocs.teamup.com/docs/api/
- **All-Inkl-Server (DokuWiki)**
- Per SSH erreichbar.
- Skript überträgt Dateien (`scp`/`rsync`) nach `data/media/...`.
- Skript erzeugt/aktualisiert `data/pages/...` mit DokuWiki-Seite für das entsprechende Monatsmeeting.
---
## 3. Voraussetzungen
### 3.1. Infrastruktur
1. **Gitea**
- Repository für das Skript (z.B. `hobbyhimmel/teammeeting-dokuwiki`).
- Gitea Action Runner auf *Hobbybackend1* konfiguriert.
2. **Hobbybackend1**
- Zugriff auf Metabase-Container `metabase-metabase-1`.
- Node.js + Puppeteer/Playwright **oder** ein Docker-Image, das URLs per Headless-Browser in PDF/PNG rendert.
- Netzwerkzugriff auf:
- Metabase-URL (intern, z.B. `http://metabase-metabase-1:3000` oder über Hostname).
- Teamup-URLs.
3. **All-Inkl / DokuWiki**
- SSH-Zugang: User + SSH-Key (passwortlos aus Skript verwendbar).
- Kenntnis der DokuWiki-Verzeichnisse (typischerweise):
- Seiten: `.../data/pages/...`
- Medien: `.../data/media/...`
- Namespace für Meetings, z.B. `:teammeetings:folien:`.
### 3.2. Gitea-Secrets
In Gitea als **Repository-Secrets** hinterlegen (Bezeichnungen Beispiel):
- **Metabase**
- `METABASE_URL` Basis-URL (intern von Hobbybackend1 aus erreichbar).
- `METABASE_USER` Benutzer für Login.
- `METABASE_PASSWORD` Passwort oder API-Key (je nach Login-Strategie).
- Optional: `METABASE_DASHBOARD_ID` oder `METABASE_CARD_ID`.
- **Teamup**
- `TEAMUP_BASE_URL` Basis-URL zum Kalender (inkl. Calendar-Key).
- Optional: `TEAMUP_API_KEY` falls API genutzt wird.
- **DokuWiki / All-Inkl**
- `ALLINKL_SSH_HOST` z.B. `sshXXX.all-inkl.com`.
- `ALLINKL_SSH_USER` SSH-User.
- `ALLINKL_USER` All-Inkl-User.
- `ALLINKL_SSH_KEY` privater SSH-Key (optional; häufig nicht nötig, wenn die DokuWiki-API verwendet wird). Wenn verwendet: als secret file oder String in Kombination mit `ssh-agent`.
- `ALLINKL_BASE_PATH` Pfad zum DokuWiki, z.B. `/www/htdocs/<ALLINKL_USER>/wiki.neu.hobbyhimmel.de/data`.
- `ALLINKL_MEETING_NAMESPACE` z.B. `teammeetings/folien` (Dateipfade ohne Doppelpunkt).
- Optional (bei API-Nutzung): `DOKUWIKI_API_URL` und `DOKUWIKI_API_TOKEN` (empfohlen statt direktem Dateizugriff)
- **Allgemein**
- `TZ` Zeitzone (z.B. `Europe/Berlin`), falls im Skript nötig.
Hinweis zur Secret-Handhabung:
- Für lokale Tests nutze eine `.env`-Datei (niemals einchecken). Beispiele stehen im Repo in einer `.env.example` (nur Platzhalter).
- In Gitea die Secrets als Repository-Secrets anlegen. Verwende `DOKUWIKI_API_TOKEN` falls die API genutzt wird; `ALLINKL_SSH_KEY` wird nur beim Fallback über SSH benötigt.
---
## 4. Shell-Skript-Design
### 4.1. Hauptaufgaben des Skripts
1. **Datum & Kontext bestimmen**
- Ausführungsdatum ist immer der **1. des Monats**.
- Skript ermittelt:
- `YEAR` aktuelles Jahr.
- `MONTH` aktueller Monat (ggf. auch vorheriger Monat, je nach Reporting-Logik).
- Generiert z.B. einen Identifier `MEETING_ID="${YEAR}-${MONTH}"`.
2. **Export Metabase**
- Aufruf eines Hilfsskripts (z.B. `render_metabase.sh` oder Node-Skript):
- Parameter: Dashboard-ID / Card-ID, Dateiname, ggf. Filter (z.B. Zeitraum).
- Ausgabe: `metabase-report-${MEETING_ID}.???` im lokalen Arbeitsverzeichnis.
3. **Export Teamup → Kalenderbilder**
- Definition der **zwei Wochen**, die exportiert werden sollen:
- Es werden immer die ersten zwei Wochen des aktuellen Monats genommen.
- Für jede Woche:
- URL zu Teamup generieren (inkl. `startDate`, `endDate` oder ähnlichen Parametern).
- Ausgabe: `teamup-week1-${MEETING_ID}.png`, `teamup-week2-${MEETING_ID}.png`.
4. **Transfer zum All-Inkl-Server**
- Medienpfad bestimmen, z.B.:
`MEDIA_DIR="${ALLINKL_BASE_PATH}/data/media/${TEAM_MEETING_NAMESPACE}"`
- Falls nicht existent: per `ssh` Ordner anlegen.
- Dateien per `scp` oder `rsync -e ssh` kopieren:
- `metabase-report-${MEETING_ID}.pdf`
- `teamup-week1-${MEETING_ID}.png`
- `teamup-week2-${MEETING_ID}.png`.
5. **DokuWiki-Seite erzeugen/aktualisieren**
- Seitenpfad bestimmen, z.B.:
`PAGE_FILE="${WIKI_BASE_PATH}/data/pages/${WIKI_MEETING_NAMESPACE}/${MEETING_ID}.txt"`
- Per `ssh` Remote-Here-Doc schreiben:
Empfehlung: Wenn möglich die DokuWiki-API (`DOKUWIKI_API_URL` + `DOKUWIKI_API_TOKEN`) verwenden, statt direkt auf `data/pages` zu schreiben. API-Aufrufe sind robuster gegenüber Dateirechten/Ownership auf All-Inkl.
Beispiel (API, einfaches PUT via curl an ein Plugin / XML-RPC-Endpoint - anpassen je nach Wiki-Setup):
```bash
curl -sS -X POST "${DOKUWIKI_API_URL}" \
-H "Authorization: Bearer ${DOKUWIKI_API_TOKEN}" \
-F "id=${WIKI_MEETING_NAMESPACE}:${MEETING_ID}" \
-F "text=$(cat newpage.txt)"
```
Fallback (wenn API nicht möglich): per SSH/Here-Doc wie bisher. Achte hier auf korrekte Ownership/Encoding beim Schreiben nach `data/pages`.
Platzhalter `<DATUM_A>` und `<DATUM_B>` werden im Shell-Skript vor dem Upload ersetzt.
### 4.2. Schnittstellen zum Headless-Browser
- Generische Hilfsfunktionen, z.B.:
```bash
render_metabase_pdf() {
local url="$1" # z. B. "$METABASE_URL/dashboard/${METABASE_DASHBOARD_ID}?date=${MEETING_ID}"
local outfile="$2"
node scripts/render_pdf.js "$url" "$outfile"
}
render_url_to_png() {
local url="$1"
local outfile="$2"
node scripts/render_png.js "$url" "$outfile"
}
```
- `render_pdf.js` / `render_png.js` verwenden Puppeteer/Playwright, loggen sich ggf. bei Metabase ein und erzeugen die Dateien.
---
## 5. Gitea Action: Workflow-Definition
### 5.1. Workflow-Datei `.gitea/workflows/monthly-report.yml`
```yaml
name: Monthly Metabase & Teamup Export
on:
schedule:
- cron: '0 2 1 * *'
workflow_dispatch:
jobs:
export-and-upload:
runs-on: hobbybackend1 # Label des Act-Runners
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install dependencies
run: |
npm ci
- name: Run export script
env:
METABASE_URL: ${{ secrets.METABASE_URL }}
METABASE_USER: ${{ secrets.METABASE_USER }}
METABASE_PASSWORD: ${{ secrets.METABASE_PASSWORD }}
METABASE_DASHBOARD_ID: ${{ secrets.METABASE_DASHBOARD_ID }}
TEAMUP_BASE_URL: ${{ secrets.TEAMUP_BASE_URL }}
TEAMUP_API_KEY: ${{ secrets.TEAMUP_API_KEY }}
WIKI_SSH_HOST: ${{ secrets.WIKI_SSH_HOST }}
WIKI_SSH_USER: ${{ secrets.WIKI_SSH_USER }}
WIKI_SSH_KEY: ${{ secrets.WIKI_SSH_KEY }}
WIKI_BASE_PATH: ${{ secrets.WIKI_BASE_PATH }}
WIKI_MEETING_NAMESPACE: ${{ secrets.WIKI_MEETING_NAMESPACE }}
TZ: Europe/Berlin
run: |
mkdir -p ~/.ssh
echo "$WIKI_SSH_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan "$WIKI_SSH_HOST" >> ~/.ssh/known_hosts
./scripts/monthly_export.sh
```
> **Hinweis zur Zeit:**
> - Gitea/Aktions-Cron läuft typischerweise in UTC.
> - Wenn du 03:00 Uhr **Europe/Berlin** willst, musst du den `cron`-Wert ggf. anpassen (Sommer-/Winterzeit beachten). Beispiel oben `0 2 1 * *` wäre 03:00 MEZ, aber 04:00 MESZ hier vorher genau prüfen.
---
## 6. Teamup: Wochenansichten als Bild
### 6.1. URL-Strategie
- Teamup erlaubt üblicherweise Links mit Datumsparametern, z.B.:
- `?view=week&date=YYYY-MM-DD` für eine Wochenansicht.
- Das Skript berechnet:
- `WEEK1_DATE` ISO-Datum (Montag der ersten gewünschten Woche).
- `WEEK2_DATE` ISO-Datum (Montag der zweiten gewünschten Woche).
- Für jede Woche wird eine URL gebaut:
```bash
TEAMUP_URL_WEEK1="${TEAMUP_BASE_URL}?view=week&date=${WEEK1_DATE}"
TEAMUP_URL_WEEK2="${TEAMUP_BASE_URL}?view=week&date=${WEEK2_DATE}"
```
### 6.2. Rendering
- Aufruf z.B.:
```bash
render_url_to_png "$TEAMUP_URL_WEEK1" "teamup-week1-${MEETING_ID}.png"
render_url_to_png "$TEAMUP_URL_WEEK2" "teamup-week2-${MEETING_ID}.png"
```
- Im Headless-Browser-Skript wird:
1. Seite geladen.
2. Auf ausreichende Ladezeit gewartet.
3. `page.screenshot({ path: outfile, fullPage: true })` ausgeführt.
---
## 7. Test- & Rollout-Plan
1. **Lokaler Test des Headless-Browsers**
- Auf Hobbybackend1 die Node-Skripte (`render_pdf.js` / `render_png.js`) mit Test-URLs ausprobieren.
- verifizieren, dass Metabase-Login und Teamup-Laden funktionieren.
2. **SSH/Dateipfade testen**
- Manuell per `ssh` und `scp` eine Test-PDF und Test-PNG ins DokuWiki `data/media` übertragen.
- testweise eine Seite unter `data/pages` anlegen und im Browser prüfen.
3. **Shell-Skript `monthly_export.sh` lokal laufen lassen**
- Mit Test-Umgebungsvariablen (ohne Gitea) ausführen.
- Prüfen, ob alle Schritte durchlaufen und Dateien in DokuWiki korrekt landen.
4. **Gitea Action mit `workflow_dispatch`**
- Workflow manuell starten, Log-Ausgaben prüfen.
- Validieren, dass der Action Runner auf Hobbybackend1 das Skript erfolgreich ausführt.
5. **Schedule aktiv beobachten**
- Nach dem ersten echten Lauf (1. des Monats) kontrollieren:
- Sind PDF/Bilder generiert?
- Ist die neue DokuWiki-Seite da und korrekt verlinkt?
6. **Feinjustierung**
- Falls nötig: Cron-Zeit, Dateinamen, Seitentemplate, Wochenlogik (z.B. „nächste + übernächste Woche“) anpassen.
---
## Akzeptanzkriterien
- Metabase-PDF existiert unter `${MEDIA_DIR}/metabase-report-${MEETING_ID}.pdf` und Dateigröße > 50 KB.
- Zwei Teamup-PNGs existieren unter `${MEDIA_DIR}` und sind in der erzeugten DokuWiki-Seite verlinkt.
- DokuWiki-Seite `${WIKI_MEETING_NAMESPACE}:${MEETING_ID}` ist im Wiki sichtbar und referenziert die Medien.
- Action-Log zeigt Exit-Code 0; bei Fehlern wird ein Fehler-Log-Eintrag erzeugt und an `it@hobbyhimmel.de` gemeldet (oder als Issue im Repo dokumentiert).
Diese Kriterien sind bewusst minimal gehalten und reichen für den Hobbybetrieb eines Vereins aus.
## 8. Erweiterungen (optional)
- Mehrere Metabase-Registerkarten / Dashboards pro Meeting.
- Automatische Verlinkung aus einer Übersichtsseite (z.B. `:teammeetings:start`) auf die neuen Monatsseiten.
- Fehlerreport per Mail oder in DokuWiki-Logseite, wenn Exports fehlschlagen.
- Optionale Parameter, um das Skript für „ad hoc Exports“ außerhalb des Monatslaufes zu nutzen (z.B. `./monthly_export.sh 2025-03`).
---
## Umsetzung: Lokaler Testplan (Metabase, Teamup, DokuWiki)
Ziel: Die drei beteiligten APIs lokal auf deinem PC (Windows, `cmd.exe`) testen und verifizieren, dass:
- ein Metabase-Export erzeugt werden kann,
- Teamup-Daten (oder Screenshots der Wochenansicht) erzeugt werden können,
- eine DokuWiki-Seite erstellt/aktualisiert und Medien eingebunden werden können.
Hinweis: Lege lokal eine `.env`-Datei an (niemals einchecken). Nutze eine `.env.example` im Repo mit Platzhaltern.
Basic-Prüfwerkzeuge (lokal installieren/prüfen):
- `curl` (Windows 10+ meist vorhanden),
- `jq` (hilfreich für JSON-Auswertung),
- `node` + `npm` (falls du Puppeteer/Playwright oder Node-Renderer nutzen willst),
- optional `wkhtmltopdf`/Headless Chrome für Rendering.
1) Metabase — lokaler API-Test
Zweck: Authentifizieren und einen PDF- oder JSON-Export eines Dashboards/Cards abrufen.
Vorgehen:
- Voraussetzungen: Metabase ist von deinem PC aus erreichbar (z. B. via VPN oder Port-Forwarding auf `http://localhost:3000`).
- Env-Variablen (Beispiel in `.env`):
- `METABASE_URL=http://localhost:3000`
- `METABASE_USER=...`
- `METABASE_PASSWORD=...`
- `METABASE_CARD_ID=123` (oder `METABASE_DASHBOARD_ID`)
Schritte (vereinfachtes Beispiel):
1. Auth (Session-Token) anfordern — Beispiel (ersetze Platzhalter):
```cmd
curl -s -X POST "%METABASE_URL%/api/session" -H "Content-Type: application/json" -d "{\"username\": \"%METABASE_USER%\", \"password\": \"%METABASE_PASSWORD%\"}"
```
2. Export anfragen (Beispiel: PDF-Export eines Cards/Dashboards). Je nach Metabase-Version kann der Pfad variieren. Beispiel-Form (Platzhalter):
```cmd
curl -s -X POST "%METABASE_URL%/api/card/%METABASE_CARD_ID%/query/pdf" -H "Content-Type: application/json" -H "X-Metabase-Session: <SESSION_TOKEN>" --output metabase-report.pdf
```
Validierung:
- Datei `metabase-report.pdf` existiert und ist > 50 KB.
- Öffne die Datei lokal im PDF-Viewer und prüfe, ob Daten sichtbar sind.
Troubleshooting:
- Auth schlägt fehl → Credentials prüfen, ggf. IP-Restrictions.
- Endpoint nicht vorhanden → Metabase-Dokumentation zur API-Version prüfen (Session-API / Export-Endpoints variieren).
2) Teamup — lokaler API-Test
Zweck: Kalenderdaten per API abrufen oder Wochenansicht via Headless-Browser rendern.
Vorgehen:
- Env-Variablen:
- `TEAMUP_CALENDAR_BASE=https://api.teamup.com`
- `TEAMUP_CALENDAR_KEY=dein_calendar_key` (oder `TEAMUP_PUBLIC_URL` für Web-Rendering)
- Optional: `TEAMUP_API_KEY=...` falls benötigt
API-Request (Events im Zeitraum abrufen) — Beispiel:
```cmd
curl -s -H "Teamup-Token: %TEAMUP_API_KEY%" "%TEAMUP_CALENDAR_BASE%/v2/calendars/%TEAMUP_CALENDAR_KEY%/events?startDate=2025-11-01&endDate=2025-11-14" | jq '.'
```
Alternativ (wenn du die Web-Ansicht als Bild willst):
- Öffne die Wochen-URL (z. B. `%TEAMUP_PUBLIC_URL%?view=week&date=YYYY-MM-DD`) mit einem Headless-Renderer (Puppeteer) und erstelle `teamup-week1.png`.
Validierung:
- API: JSON-Antwort mit Events (Array) und HTTP 200.
- Screenshot: `teamup-week1.png` ist vorhanden und lesbar.
Troubleshooting:
- 403/401 → API-Key oder Zugriff prüfen.
- Keine Events → Zeitraum / Kalenderkey kontrollieren.
3) DokuWiki — lokaler API-Test (empfohlen: API) oder SSH-Fallback
Zweck: Eine Testseite erzeugen und Medien verlinken, um Upload & Sichtbarkeit zu prüfen.
Vorgehen (API-Variante, wenn `DOKUWIKI_API_URL` + `DOKUWIKI_API_TOKEN` vorhanden):
- Env-Variablen:
- `DOKUWIKI_API_URL=https://wiki.example.com/lib/exe/rest.php/bin/actions` (Beispiel passe an)
- `DOKUWIKI_API_TOKEN=...`
- `WIKI_MEETING_NAMESPACE=teammeetings`
- `MEETING_ID=2025-11`
Beispiel (allgemeines curl-Pattern; Plugin/Endpoint anpassen):
```cmd
set /p PAGE_TEXT=< newpage.txt
curl -s -X POST "%DOKUWIKI_API_URL%" -H "Authorization: Bearer %DOKUWIKI_API_TOKEN%" -F "id=%WIKI_MEETING_NAMESPACE%:%MEETING_ID%" -F "text=%PAGE_TEXT%"
```
Wenn keine API verfügbar ist (SSH-Fallback):
- Upload der Medien per `scp` oder `rsync -e ssh` in `${ALLINKL_BASE_PATH}/data/media/...` und Schreiben der Seite per SSH-Here-Doc (wie im Plan beschrieben).
Validierung:
- Nach API-Request: die Seite im Browser öffnen (z. B. `https://wiki.example.com/doku.php?do=show&id=%WIKI_MEETING_NAMESPACE%:%MEETING_ID%`) → HTTP 200 und sichtbarer Inhalt.
- Medien sind im Wiki sichtbar und korrekt verlinkt.
Troubleshooting:
- API 401/403 → Token prüfen / Plugin aktivieren.
- SSH-Fallback: Dateirechte und Ownership prüfen (All-Inkl kann hier beschränken).
4) `.env.example` — minimale Variablen (Beispiel zum Anlegen)
```
# Metabase
METABASE_URL=
METABASE_USER=
METABASE_PASSWORD=
METABASE_CARD_ID=
# Teamup
TEAMUP_CALENDAR_BASE=
TEAMUP_CALENDAR_KEY=
TEAMUP_API_KEY=
# DokuWiki (API bevorzugt)
DOKUWIKI_API_URL=
DOKUWIKI_API_TOKEN=
WIKI_MEETING_NAMESPACE=teammeetings
# Fallback/SSH (nur falls nötig)
ALLINKL_SSH_HOST=
ALLINKL_SSH_USER=
ALLINKL_BASE_PATH=
# TZ
TZ=Europe/Berlin
```
5) Ablauf für lokale Durchführung (kurz)
1. `.env` aus `.env.example` anlegen und mit echten (lokal gültigen) Werten füllen.
2. Prüfe Tools: `curl --version`, `node --version` (falls Renderer benötigt), `jq --version`.
3. Metabase-Test ausführen (Auth → Export → Datei prüfen).
4. Teamup-Test ausführen (API → JSON prüfen oder Screenshot erzeugen).
5. DokuWiki-Test ausführen (API → Seite prüfen). Falls API nicht vorhanden, teste SSH-Fallback.
6. Wenn alle drei Tests grün sind, kannst du `monthly_export.sh` lokal im Dry-Run-Mode ausführen und anschließend per Gitea-Action in den Runner überführen.
6) Minimal gewünschte Ergebnisse (zum Abhaken)
- [ ] Metabase PDF lokal erzeugt und geprüft
- [ ] Teamup-Daten/API oder Screenshots erzeugt und geprüft
- [ ] DokuWiki-Seite erstellt/aktualisiert und Medien referenziert
Wenn du möchtest, erstelle ich als nächstes eine `.env.example`-Datei im Repo und ein sehr kleines Shell-Skript-Skeleton (`./scripts/test_apis.sh`) mit den obenstehenden curl-Beispielen (ohne Secrets). Sag kurz Bescheid, ob ich das anlegen soll.

42
_template.txt Normal file
View File

@ -0,0 +1,42 @@
// Template-Hinweis:
// Platzhalter, die vom Skript ersetzt werden können:
// %MEETING_ID% -> z. B. 2025-11
// %YYYY-MM-DD% -> Datum der Seite / Meeting-Datum
// %LETZTER_MONAT% -> z. B. "Oktober 2025"
// %WEEK1_DATE% / %WEEK2_DATE% -> ISO-Datum (Montag) für Teamup-Wochenansichten
// Das Script `monthly_export.sh` ersetzt diese Platzhalter vor Upload.
~~SLIDESHOW hobbyhimmel~~
====== Team Meeting %YYYY-MM-DD% ======
==== Hobbyhimmel Stuttgart ====
===== Bild des Monats =====
Füge hier das aktuelle Bild des Monats ein
===== Agenda =====
* Thekendienst
* Nutzungen
* Was war im %LETZTER_MONAT%
* geplante Aktionen
* zu klären
* ...
===== Thekendienst diese Woche =====
{{url>%TEAMUP_PUBLIC_URL%?view=w&date=%WEEK1_DATE%}}
===== Thekendienst nächste Woche =====
{{url>%TEAMUP_PUBLIC_URL%?view=w&date=%WEEK2_DATE%}}
===== Nutzungen =====
===== Nutzungen (Historie) =====
===== Was war im %LETZTER_MONAT% =====
===== geplante Aktionen =====
===== zu Klären =====