- PHP 85.6%
- Blade 12.9%
- JavaScript 0.6%
- CSS 0.5%
- Shell 0.4%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
From the public-repo audit (2026-10-01): - deploy/ci.sh defaulted to the production server's root SSH target. The host now comes from CI_HOST or an untracked deploy/.ci-host. - .claude/commands/release.md (production host, paths, the release runbook) is no longer tracked; the owner's local copy is unchanged. - Install was impossible as documented: the clone URLs pointed at git.podscope.cc (no DNS record), nothing seeded the roles (so registration failed on the missing subscriber role), and there was no way to create a first admin. README and install.sh now give the real URL, RolesAndSettingsSeeder, and make:filament-user plus super_admin. - Both told users to run config:cache, which Podscope forbids (settings are applied at runtime from the database). Removed, with a warning. - npm install -> npm ci --ignore-scripts; no more bash <(curl ...). - .env.example: the "Backblaze B2" block listed AWS_* keys but the b2 disk reads B2_*; added those and the Cloudflare Stream keys, and removed the duplicate FILESYSTEM_DISK. README PHP requirement matches composer.json. - composer.json name/description were Laravel's skeleton values; renamed to inceptum/podscope with the lock content-hash recomputed to match. Suite via ci.sh: 526 tests, 1 failure, the known baseline ExampleTest, identical on the unmodified tree. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01GMpf6aGgpup94FciFDcMKk |
||
| app | ||
| bootstrap | ||
| config | ||
| database | ||
| deploy | ||
| public | ||
| resources | ||
| routes | ||
| storage | ||
| tests | ||
| .editorconfig | ||
| .env.example | ||
| .gitattributes | ||
| .gitignore | ||
| .npmrc | ||
| artisan | ||
| composer.json | ||
| composer.lock | ||
| install.sh | ||
| LICENSE | ||
| package-lock.json | ||
| package.json | ||
| phpunit.xml | ||
| README.md | ||
| vite.config.js | ||
Podscope
A self-hosted podcast CMS and membership platform. Publish shows, manage episodes, accept paid memberships via Stripe, and distribute private RSS feeds to subscribers.
Features
- Multi-show support
- Episode management with Podcasting 2.0 metadata (persons, transcripts, chapters, soundbites)
- Paid membership plans per show or site-wide (via Stripe / Laravel Cashier)
- Private RSS feeds for subscribers
- Free preview window for paid episodes
- Episode play tracking and stats
- Individual episode purchases
- Public RSS feeds with OP3 tracking support
- Themes for the public site, and a per-show theme that follows a show onto its episodes and its newsletter (presets, brand/accent colours, self-hosted fonts, logo, social image)
/livepage embedding an Owncast stream, with an automatic on-air banner- Filament admin panel
- Backblaze B2 storage support
- Redis queue support
- Alpine.js frontend
Requirements
- PHP 8.3+ (8.4 recommended)
- PostgreSQL 14+
- Redis
- Node.js 20+ (for asset compilation)
- Composer
- A Stripe account (for memberships and purchases)
- A Backblaze B2 bucket (optional, for media storage)
Quick Install
git clone https://git.knowthenerds.com/Inceptum/podscope.git podscope-installer
bash podscope-installer/install.sh
The installer clones a fresh copy into ./podscope, installs PHP dependencies and creates .env,
then prints the remaining steps (the same as Manual Install below). Read it before running it.
Manual Install
git clone https://git.knowthenerds.com/Inceptum/podscope.git
cd podscope
composer install --no-dev --optimize-autoloader
cp .env.example .env
php artisan key:generate
# Edit .env with your database, Stripe, and storage credentials
php artisan migrate --force
php artisan db:seed --class=RolesAndSettingsSeeder --force # roles + default settings
php artisan storage:link
npm ci --ignore-scripts && npm run build
php artisan route:cache
php artisan view:cache
Never run php artisan config:cache: Podscope applies its settings from the database at runtime,
and a cached config silently ignores them.
Create the first admin, then give it the super_admin role (the admin panel only admits staff
roles, and registration gives new accounts the subscriber role):
php artisan make:filament-user
php artisan tinker --execute="App\Models\User::where('email', '[email protected]')->firstOrFail()->assignRole('super_admin');"
Then configure your web server to point at the public/ directory and set up a queue worker:
php artisan queue:work --sleep=3 --tries=3
Configuration
All site settings (name, artwork, RSS options) are managed in the Filament admin panel under Settings.
Key .env values:
| Variable | Description |
|---|---|
APP_URL |
Your site URL (e.g. https://example.com) |
DB_CONNECTION |
Set to pgsql |
DB_HOST, DB_DATABASE, DB_USERNAME, DB_PASSWORD |
PostgreSQL credentials |
STRIPE_KEY, STRIPE_SECRET, STRIPE_WEBHOOK_SECRET |
Stripe API keys |
FILESYSTEM_DISK |
public for local storage or b2 for Backblaze |
AWS_* / B2_* |
Backblaze B2 credentials if using cloud storage |
REDIS_HOST |
Redis connection |
MAIL_* |
Mail settings for transactional email |
License
Podscope is free software under the GNU Affero General Public License v3.0 or later (see LICENSE).
If you run a modified copy as a public website, the AGPL asks you to offer your changes to its users.