Skip to content

russturley/podforge

Repository files navigation

PodForge

A self-hosted podcast management platform built with PHP and SQLite. Automatically scans your media folder for MP3 files, extracts metadata, and generates a standards-compliant RSS feed for submission to podcast directories like Apple Podcasts and Spotify.

Features

  • Public Podcast Page — Responsive episode listing with HTML5 audio players
  • Admin Dashboard — Manage episodes, upload artwork, and configure podcast settings
  • Automatic Media Scanning — Drop MP3 files into the media/ folder and they appear automatically
  • RSS Feed Generation — iTunes-compatible RSS 2.0 feed ready for directory submission
  • Episode Management — Edit titles, descriptions, artwork, publish dates, and episode ordering
  • ID3 Metadata Extraction — Automatically reads duration, author, track number, and season info from MP3 tags (requires getID3)
  • Secure Authentication — Bcrypt password hashing, CSRF protection, prepared SQL statements

Requirements

  • PHP 8.0+
  • SQLite3 PHP extension
  • A web server (Apache, Nginx, Caddy, etc.)
  • getID3 library (optional, but recommended for metadata extraction)

Installation

1. Clone the repository

git clone https://github.com/your-username/podforge.git
cd podforge

2. Copy to your web root

cp -r . /var/www/html/podforge/

3. Set directory permissions

The web server needs write access to:

chmod 755 media/ artwork/
chmod 644 *.php

The SQLite database (database.sqlite) is created automatically in the project root on first access.

4. Install getID3 (optional but recommended)

Download the latest release from github.com/JamesHeinrich/getID3 and place the getid3/ folder in the project root:

podforge/
└── getid3/
    ├── getid3.php
    └── getid3.lib.php

5. Create your admin account

Navigate to /register.php in your browser. Registration is only available when no users exist.

Password requirements: 8+ characters with uppercase, lowercase, a number, and a special character.

6. Configure podcast settings

Log in to the dashboard and set your Base URL (e.g., https://podcasts.example.com). This is required for feed generation and media links to work correctly.

Usage

Publishing an episode

  1. Add your MP3 file to the media/ folder on the server.
  2. Open the admin dashboard — it automatically scans for new files on page load.
  3. The episode appears in the list with metadata extracted from its ID3 tags.
  4. Edit the title, description, and artwork as needed.

Sharing your podcast

Resource URL
Public page https://your-domain.com/
RSS feed https://your-domain.com/feed.php

Submit the RSS feed URL to podcast directories:

Project Structure

podforge/
├── index.php        # Public podcast page
├── dashboard.php    # Admin dashboard (requires login)
├── api.php          # AJAX endpoints used by the dashboard
├── feed.php         # RSS 2.0 feed generator
├── login.php        # Login page
├── register.php     # First-user registration
├── logout.php       # Session termination
├── upload.php       # Artwork upload handler
├── scanner.php      # Media folder scanner with ID3 extraction
├── db.php           # Database connection and schema initialization
├── media/           # Store your MP3 files here
├── artwork/         # Podcast and episode artwork storage
└── getid3/          # getID3 library (add manually)

Podcast Settings Reference

All settings are managed through the dashboard.

Setting Description
Title Your podcast's name
Description Short summary shown on the public page and in directories
Author Creator or organization name
Base URL Full URL to where PodForge is hosted (no trailing slash)
Language ISO 639 language code (default: en-us)
Category iTunes podcast category
Podcast Type episodic (recommended for most shows) or serial
Explicit Mark content as explicit or clean
Cover Art Minimum 1400×1400px JPEG or PNG recommended

Security Notes

  • After creating your admin account, the /register.php endpoint becomes inaccessible.
  • All forms are protected with CSRF tokens.
  • SQL queries use PDO prepared statements.
  • Sessions are regenerated on login to prevent session fixation.

License

MIT

About

Self-hosted podcast platform built in PHP. Drop MP3s into a folder, get an iTunes-compatible RSS feed and a public episode player automatically. Includes a dashboard for managing episodes, artwork, and podcast metadata.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages