No description
Find a file
Midas van Oene 678f5796b5
All checks were successful
Build and Publish / build (push) Successful in 4m10s
chore(deps): merge renovate/major-kotlin.version (Kotlin 2.3.20)
2026-04-13 16:12:29 +02:00
.forgejo/workflows chore(deps): update actions/checkout action to v6 2026-04-10 11:37:30 +02:00
docs/superpowers/plans chore: frontend polish, CLAUDE.md, planning docs 2026-04-05 11:54:43 +02:00
podradar-backend fix: adapt to Kotlin 2.3.20 stricter smart-cast rules 2026-04-13 16:12:23 +02:00
podradar-frontend chore(deps): update dependency @types/node to v25.6.0 2026-04-13 16:00:45 +02:00
.env fix: Docker setup — env file for credentials, non-root user, JVM flags, profile improvements 2026-03-29 18:40:30 +02:00
.env.example fix: pass API keys to backend in compose, add .env.example, fix README env vars, add nginx security headers 2026-03-29 23:49:46 +02:00
.gitignore chore: ignore personal opml files 2026-03-30 17:00:14 +02:00
CLAUDE.md chore: frontend polish, CLAUDE.md, planning docs 2026-04-05 11:54:43 +02:00
docker-compose.yml fix: docker-compose interpolation syntax and add db port mapping 2026-04-04 19:10:46 +02:00
KNOWLEDGE_BASE_ANALYSIS.md feat: knowledge base system — schema, ingestion, crawling, relationships, LLM enrichment 2026-04-04 21:24:30 +02:00
PLAN.md docs: mark Phase 4 complete, add Phase 4A/4B implementation patterns and gotchas 2026-03-29 23:23:31 +02:00
PLAN.md:Zone.Identifier first commit 2026-03-29 17:21:10 +02:00
README.md fix: pass API keys to backend in compose, add .env.example, fix README env vars, add nginx security headers 2026-03-29 23:49:46 +02:00
renovate.json Add renovate.json 2026-04-03 22:31:52 +02:00

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:

  1. Open AntennaPod and go to Settings → Synchronization
  2. Select gpodder.net compatible
  3. Set the server to your PodRadar URL:
    • Local: http://localhost:8080
    • Remote: https://your-domain.com
  4. 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.