Skip to content
Simple file-based podcast publisher
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
app
bootstrap
database
public
resources
routes
storage
tests
.codeclimate.json
.editorconfig
.env.example
.gitignore
.phpcs.xml
.phpmd.xml
artisan
composer.json
composer.lock
phpunit.xml
readme.md
screenshot.jpg

readme.md

Simple file-based podcast publisher.

In the wild:

Status

Maintainability

This application is now considered as stable. No more features are planned, but feel free to suggest some if you need. Feature, fix, UX, logo, translation... any help is welcome !

Features...

....for end users

  • short feed description in the homepage.
  • list of podcasts currently in the feed in the homepage.
  • archives sorted per folder.
  • possibility to listen any episode from the web browser.
  • link to the RSS feed.
  • responsive design.

...for administrator

  • database free application.
  • recursive file search.
  • configurable without development (release frequency, theme, locale, timezone).
  • built on Lumen 5.8 and Bootstwatch 4.3.

Requirements

  • a web server (tested with Apache).
  • PHP >= 7.1.3.
  • composer

Delpoyment

  1. Download the code to an empty folder:
git clone git@github.com:simondubois/podcast.git /var/www/podcast
  1. Create the configuration file:
cd /var/www/podcast && cp .env.example .env
  1. Set configuration in .env:

    • APP_KEY is a random generated string (for example 5YPcB9vVuxWf1YyjJgKhEVSg7ggvL+fD).
    • APP_TIMEZONE is the timezone (for example Europe/Paris).
    • APP_LOCALE is the locale (en or fr).
    • PODCAST_ROOT is the path to audio files (absolute path).
    • PODCAST_START is the date and time the first episode is published at (timestamp).
    • PODCAST_LENGTH is the number of episodes available in the feed (integer).
    • PODCAST_INTERVAL is the unit of PODCAST_FREQUENCY between two releases (hour, day, week or month).
    • PODCAST_FREQUENCY is the number of PODCAST_INTERVAL between two releases (integer or decimal).
    • PODCAST_TITLE is the podcast feed title.
    • PODCAST_DESCRIPTION is podcast description.
    • PODCAST_IMAGE is the podcase image URL (optional).
    • PODCAST_THEME is the theme for the web interface (see https://bootswatch.com).
  2. Install the dependencies:

composer install --optimize-autoloader --no-dev
  1. Point the web server to /var/www/podcast/public.

FAQ

How to upload episodes?

This feature is not implemented, and there is no plan to implement it in the future. This is a KISS project focusing on publishing audio, not managing files.

To upload episodes, you have several options:

  • (S)FTP or any file manager provided by your hosting.
  • sync a server folder with a local folder.
  • sync a server folder with a file hosting service.
  • sync a server folder with a personal cloud service.
  • fork the project and implement the feature.

How are episodes sorted?

Episodes are sorted following the alphabetical order of their path relative to PODCAST_ROOT.

You are free to name folders and episodes as it suits you. If you decide to name the file with the date format YYYY-MM-DD, the episode title will be the long date format in the locale defined by APP_LOCALE.

How to publish a new episode every... ?

The release schedule is based on 3 settings:

  • PODCAST_START: date for the first episode. The two other settings will start counting from this value.
  • PODCAST_INTERVAL: iteration length. Repeated PODCAST_INTERVAL times betwwen each release.
  • PODCAST_FREQUENCY: number of iteration between each release. The value is multiply by the duration of PODCAST_FREQUENCY to wait for the next release.
Examples PODCAST_INTERVAL PODCAST_FREQUENCY
Every day day 1
Every two days day 2
Twice per week day 3.5
Twice per week week 0.5
Every week week 1
Every two week week 2

What about authentication?

Authentication either requires a database or an external service. Also, authentication require additional features like lost passwords and account activation. This is a KISS project focusing on publishing audio, avoiding any complexity.

If you want authentication, I recommend you to setup Basic access authentication at the server level.

You can’t perform that action at this time.