statische Podcast-Sites, weil dein RSS-Feed kein WordPress verdient 🎙️
- HTML 53.2%
- CSS 19%
- Shell 15.5%
- Jinja 10.1%
- JavaScript 2.2%
| docs | ||
| legacy | ||
| sample_project | ||
| scripts | ||
| templates/zentonic26 | ||
| webwizard | ||
| .gitignore | ||
| build.sh | ||
| CHANGELOG.md | ||
| CLAUDE.md | ||
| cliff.toml | ||
| editor.sh | ||
| LICENSE | ||
| pemmikan.md | ||
| README.md | ||
| tag.sh | ||
zentonic-publisher
Statischer Podcast-Website-Generator — weil dein RSS-Feed kein WordPress verdient 🎙️
Inspiriert durch Mikrowelle OS von Thomas Skowron. Vollständige Neuentwicklung in Bash — kein Python, kein Framework.
Features
- Statische HTML-Seiten + iTunes/Podcastindex-kompatibler RSS-Feed (Apple/Spotify-valide: absolute URLs, stabile GUIDs)
- SPA-Player: Sticky-Footer-Player, überlebt Seitenwechsel nahtlos (Wiedergabe läuft durch), Kapitelsprung, Live-Stream (
[stream]), Live-Chat als iframe ([stream].chat_url) — reines JS-Enhancement über echten.html-Seiten (Deep-Link/SEO), Download-Button als No-JS-Fallback - Episodendatenmodell: eine einzige
episode.mdpro Folge (TOML-Frontmatter + Markdown) - ID3-Tagging + Cover + Kapitelmarken direkt via
ffmpeg(scripts/tag.sh) - Terminal/Cyberpunk-Design-System (dark, monospace, neon) — dokumentiert in
templates/zentonic26/design/ - Web-Editor zum Anlegen neuer Episoden inkl. Audio/Cover-Upload (
bash editor.sh) - Drei Audio-URL-Strategien pro Episode: lokal (Build kopiert), CDN (
audio_base_url), oder externe Einzel-URL (audio.url, z.B. archive.org) - OG/Twitter-Meta, JSON-LD schema.org, sitemap.xml, robots.txt
- Podcastindex-Namespace:
podcast:chapters,podcast:transcript,podcast:person,podcast:funding - Migration von Altdaten via
legacy/ - Keine Build-Pipeline, kein npm, kein pip
Abhängigkeiten
bash jq pandoc minijinja-cli ffmpeg (mit libmp3lame) xxd sha1sum
socat # optional, nur für Web-Editor
Aufruf
# Website bauen (HTML + RSS + sitemap + Audio-Tagging pro Episode)
bash build.sh <projektordner> <ausgabeordner>
# Nur Audio taggen (ID3 + Cover + Kapitel, standalone)
bash scripts/tag.sh <ep-json> <site-json> <ep-dir>
# Web-Editor — Episode anlegen, Audio/Cover hochladen, Build triggern
bash editor.sh <projektordner> # → http://127.0.0.1:8042
Projektstruktur
mein-podcast/
├── podcast.toml # Podcast-Konfiguration
├── episodes/
│ └── 001/
│ ├── episode.md # Episoden-Metadaten + Shownotes + Kapitelmarken
│ ├── episode.cache.json # Auto-generiert (Dateigröße etc.)
│ ├── episode.png # Episodencover (optional)
│ └── audio/
│ └── 001.mp3 # Audiodatei (gitignored)
└── speaker/
└── holm/
├── speaker.toml # Name, URL, Rolle
└── avatar.png
Vollständiges Beispiel: sample_project/
episode.md Format
+++
episode = "001"
slug = "001"
title = "Der Titel"
date = "2026-01-01T20:00:00Z"
duration = "01:23:45"
speakers = ["holm"]
[audio]
basename = "001"
formats = ["mp3"]
# url = "https://archive.org/download/.../001.mp3" # optional, überschreibt audio_base_url
+++
Lead-Text der Episode.
##### 00:00:00.000 Intro
##### 00:05:30.000 Hauptthema
Vollständige Feldreferenz: docs/episode-format.md
Installation
git clone ssh://git@forgejo.mueller.network:2222/Zentonic/zentonic-publisher.git
cd zentonic-publisher
bash build.sh sample_project/ /tmp/preview
Migration von Altdaten (episode.json + shownotes.md)
bash legacy/legacy_to_md.sh <episode-dir>
bash legacy/legacy_speakers.sh <speaker-dir>
Changelog
Siehe CHANGELOG.md.
Lizenz
MIT — holm / Christian Müller, unter Zuhilfenahme von Claude Sonnet 4.6 + Opus 4.7 (Anthropic).