~kris/hacks

spod

7f1fef5e238859d2cb29e2213d2fa8c934a0e64e — Kris Yotam 4 months ago 1255761 master
convert README.md to README.txt
2 files changed, 97 insertions(+), 83 deletions(-)

D README.md
A README.txt
D README.md => README.md +0 -83
@@ 1,83 0,0 @@
# spod

Simple Podcast. A static podcast page generator in the style of [stagit](https://codemadness.org/stagit.html).

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:

```c
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

A README.txt => README.txt +97 -0
@@ 0,0 1,97 @@
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