statische Podcast-Sites, weil dein RSS-Feed kein WordPress verdient 🎙️
  • HTML 53.2%
  • CSS 19%
  • Shell 15.5%
  • Jinja 10.1%
  • JavaScript 2.2%
Find a file
2026-07-01 23:28:32 +02:00
docs feat(sample): Conet-Audio + Cover-PNGs + Screenshots + Pfad-Bugfixes 2026-06-01 03:56:38 +02:00
legacy feat!: podcast.toml, scripts/, legacy/ — #44 2026-06-01 02:44:44 +02:00
sample_project fix(templates): Startseiten-Links (Logo, Zurück) explizit auf index.html für file://-Parität (#60) 2026-07-01 23:23:42 +02:00
scripts fix(feed): stabile domain-unabhängige GUIDs (fester podcast_guid + schema-strip-Fallback) (#56) 2026-07-01 20:01:23 +02:00
templates/zentonic26 fix(templates): Startseiten-Links (Logo, Zurück) explizit auf index.html für file://-Parität (#60) 2026-07-01 23:23:42 +02:00
webwizard feat(editor): Web-Editor V1 — Episode anlegen via Browser 2026-06-01 08:14:20 +02:00
.gitignore chore: transfer-*.md + .workers.json in .gitignore (Orchestrator-Koordination) 2026-07-01 19:17:04 +02:00
build.sh feat!: podcast.toml, scripts/, legacy/ — #44 2026-06-01 02:44:44 +02:00
CHANGELOG.md chore(release): v1.0.0-rc.11 2026-07-01 23:28:13 +02:00
CLAUDE.md docs: pemmikan und CLAUDE.md aktualisieren 2026-05-31 18:33:41 +02:00
cliff.toml chore: Standard-Dateien ergänzen 2026-05-31 18:04:10 +02:00
editor.sh feat(editor): Web-Editor V1 — Episode anlegen via Browser 2026-06-01 08:14:20 +02:00
LICENSE feat(license): Upstream-Code entfernt, Lizenzwechsel BSD→MIT (#2) 2026-06-01 01:44:44 +02:00
pemmikan.md docs(pemmikan): Player-Epos #53-#60 (Sticky→SPA, Stream, Chat, Feed-Validität, file://-Parität) 2026-07-01 23:27:09 +02:00
README.md docs(pemmikan): Player-Epos #53-#60 (Sticky→SPA, Stream, Chat, Feed-Validität, file://-Parität) 2026-07-01 23:27:09 +02:00
tag.sh feat(sample): Episode 006 via Web-Editor + tag.sh-Root-Wrapper 2026-06-01 08:58:06 +02:00

zentonic-publisher

Lizenz Bash Forgejo

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.md pro 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).