|
All checks were successful
Build and Publish / build (push) Successful in 4m10s
|
||
|---|---|---|
| .forgejo/workflows | ||
| docs/superpowers/plans | ||
| podradar-backend | ||
| podradar-frontend | ||
| .env | ||
| .env.example | ||
| .gitignore | ||
| CLAUDE.md | ||
| docker-compose.yml | ||
| KNOWLEDGE_BASE_ANALYSIS.md | ||
| PLAN.md | ||
| PLAN.md:Zone.Identifier | ||
| README.md | ||
| renovate.json | ||
PodRadar
PodRadar is a self-hosted, multi-user podcast discovery engine. It replaces opodsync as your GPodder-compatible sync server while adding a Tinder-style swipe mechanic that learns your taste and surfaces new shows worth trying. Rate episodes, swipe on recommendations, and let the taste engine do the rest — all without leaving AntennaPod. The Svelte 5 frontend runs in the browser; AntennaPod talks to the same backend over the standard GPodder API.
Requirements
- Docker and Docker Compose
- (Optional) PodcastIndex API key + secret — improves search and metadata
- (Optional) OpenRouter API key — enables AI features (episode summaries, swipe recommendations)
Quick Start
git clone https://git.midasvo.nl/midas/podradar.git
cd podradar
cp .env.example .env
# Edit .env and fill in values (see table below)
docker compose up -d
Open http://localhost:3000 in your browser.
The first user to register is automatically granted admin access and approved. Subsequent registrations follow the PODRADAR_REGISTRATION_MODE setting.
Environment Variables
| Variable | Required | Description |
|---|---|---|
PODRADAR_DB_PASSWORD |
Required | Password for the PostgreSQL database |
OPENROUTER_API_KEY |
Optional | Enables AI features via OpenRouter (episode summaries, swipe recommendations). Leave blank to disable. |
PODCASTINDEX_API_KEY |
Optional | PodcastIndex API key for improved podcast search and metadata |
PODCASTINDEX_API_SECRET |
Optional | PodcastIndex API secret (required alongside the key) |
PODRADAR_REGISTRATION_MODE |
Optional | Controls who can register. Default: APPROVAL_REQUIRED. Options: OPEN, APPROVAL_REQUIRED, INVITE_ONLY, CLOSED |
AntennaPod Setup
To use PodRadar as your sync server in AntennaPod:
- Open AntennaPod and go to Settings → Synchronization
- Select gpodder.net compatible
- Set the server to your PodRadar URL:
- Local:
http://localhost:8080 - Remote:
https://your-domain.com
- Local:
- Enter your PodRadar username and password
AntennaPod will sync subscriptions and episode playback positions to PodRadar automatically.
Architecture
| Layer | Technology |
|---|---|
| Backend | Kotlin / Spring Boot (Maven) |
| Frontend | Svelte 5 SPA (static assets) |
| Database | PostgreSQL |
| Reverse proxy | nginx (inside Docker) |
The backend exposes the GPodder Sync API for AntennaPod compatibility alongside a REST API consumed by the frontend. Liquibase manages database migrations. In production everything runs as Docker containers behind the nginx proxy.
Development
Backend
Runs against H2 in-memory database by default (no PostgreSQL needed).
cd podradar-backend
mvn spring-boot:run
The backend starts on http://localhost:8080.
Frontend
Proxies /api requests to the backend on localhost:8080.
cd podradar-frontend
npm install
npm run dev
The dev server starts on http://localhost:5173.
Tests
cd podradar-backend
mvn test
Tests run against H2 with PostgreSQL compatibility mode. No external services required.