~kris/hacks

spod

ref: 1255761b9e55a8fd037245e41c880e3446130cc0 spod/README.md -rw-r--r-- 2.4 KiB
1255761b — Kris Yotam initial commit: spod - static podcast page generator 4 months ago

#spod

Simple Podcast. A static podcast page generator in the style of stagit.

Point it at a directory of podcast folders. It generates plain HTML you can serve with any web server. No JavaScript, no database, no login, no dependencies beyond a C compiler.

#How it works

Each subdirectory under your podcast root is treated as one podcast. Inside each podcast directory:

  • Audio and video files (.mp3, .ogg, .opus, .m4a, .flac, .wav, .mp4, .mkv, .webm)
  • README or README.md or README.txt (optional, displayed on the readme page; first line is the heading, second line becomes the description on the index)
  • COVER.jpg or cover.png or similar (optional, displayed on the log page)
  • LICENSE or COPYING (optional, displayed on the license page)

#Example layout

podcasts/
  my-show/
    COVER.jpg
    README.md
    LICENSE
    001-first-episode.mp3
    002-second-episode.mp3
  another-show/
    cover.png
    README
    intro.ogg
    bonus.mp4

#Generated output

For each podcast, spod generates four pages (just like stagit generates log, files, refs):

  • log.html -- episode list sorted newest-first with date and size (the default landing page)
  • episodes.html -- file listing with permissions, filenames, and sizes
  • readme.html -- the README rendered as preformatted text
  • license.html -- the LICENSE rendered as preformatted text

The index page lists all podcasts with their name, description, owner, and last update date. Navigation between pages uses the same Log | Episodes | README | LICENSE bar that stagit uses for Log | Files | Refs.

Media files are symlinked into the output directory, not copied.

#Usage

$ spod podcasts/              # output to out/
$ spod podcasts/ /var/www     # output to /var/www

Serve the output with nginx, quark, or python3 -m http.server.

#Build

$ make
$ sudo make install

#Configuration

Copy config.def.h to config.h and edit before building:

static char sitetitle[] = "podcasts";
static char sitedesc[]  = "my podcast collection";
static char siteowner[] = "kris";
static char favicon[]   = "";

#Design

  • C99, POSIX.1-2008. No external libraries.
  • Single file, around 600 lines.
  • Produces a ~22KB static binary.
  • Dark mode support via prefers-color-scheme.
  • Same CSS and HTML structure as stagit. If you know what stagit looks like, you know what spod looks like.

#License

MIT