simondubois/podcast

View on GitHub
readme.md

Summary

Maintainability
Test Coverage

<p align="center">
    <img src="https://raw.githubusercontent.com/simondubois/podcast/master/screenshot.jpg">
</p>

<p align="center">
    Simple file-based podcast publisher.<br>
</p>

<div align="center">
    In the wild:
</div>

<div align="center">
    https://ovsg.dubandubois.com
</div>

<div align="center">
    https://ovsg2.dubandubois.com
</div>

<div align="center">
    https://erner.dubandubois.com
</div>

<div align="center">
    https://meurice.dubandubois.com
</div>

<div align="center">
    https://rolenplay.dubandubois.com
</div>

<div align="center">
    https://rvax.dubandubois.com
</div>

## Status

[![Maintainability](https://api.codeclimate.com/v1/badges/d3ca9d710ac16c4ab921/maintainability)](https://codeclimate.com/github/simondubois/podcast/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 6.0](https://lumen.laravel.com/docs/5.8) and [Bootstwatch 4.3](https://bootswatch.com).

## Requirements

- a web server (tested with Apache).
- PHP >= 7.2.
- [composer](https://getcomposer.org/).

## Deployment

1. Download the code to an empty folder:
```bash
git clone git@github.com:simondubois/podcast.git /var/www/podcast
```
2. Create the configuration file:
```bash
cd /var/www/podcast && cp .env.example .env
```
3. 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).

5. Install the dependencies:
```bash
composer install --optimize-autoloader --no-dev
```
6. 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](https://en.wikipedia.org/wiki/KISS_principle) 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 requires additional features like lost passwords and account activation.
> This is a [KISS](https://en.wikipedia.org/wiki/KISS_principle) project focusing on publishing audio, avoiding any complexity.
>
> If you want authentication, I recommend you to setup [Basic access authentication](https://en.wikipedia.org/wiki/Basic_access_authentication) at the server level.