Files
commafeed-podcasts/changelog/TASK.md
T
2026-04-24 14:03:17 +02:00

131 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
created: 2026-03-28T14:24:51 (UTC +01:00)
tags: []
source: https://gemini.google.com/
author:
---
# Google Gemini
## Excerpt
> Ahoj, zvažuji, že bych naprogramoval PWA aplikaci pro podcasty, jako backend
> by sloužila (self-hodsted) instance commafeed (
> <https://www.commafeed.com/api-documentation/>) … hlavní věc, která mi u
> konkurečních řešení (kromně youtube music) chybí je vytváření playlistů,
> zároveň bych chtěl aby šlo na konkrétním zařízení zvolit automatické stahování
> audia pro daný playlist (pro offline poslech), chtěl bych aby aplikace šla
> používat i přes android auto … celé řešení by mělo být jednoduše nasazovatelné
> přes docker compose
- - -
Ahoj! To zní jako naprosto skvělý projekt. Spojit self-hosted RSS čtečku s
podcastovou aplikací dává obrovský smysl podcasty jsou totiž v jádru jen RSS
feedy s audio přílohami (`\<enclosure>`). CommaFeed je na tohle super, protože
už za tebe řeší parsování feedů a synchronizaci přečtených/nepřečtených položek.
Pojďme si rozebrat, jak to postavit, kde jsou největší výzvy (hlavně to Android
Auto) a jak by mohl vypadat Docker Compose.
- - -
## 🛠️ Architektura a technologie
### 1\. Backend: CommaFeed
CommaFeed API ti poskytne všechno, co potřebuješ:
- Seznam odebíraných podcastů (feedy).
- Seznam epizod (záznamy ve feedu).
- Přílohy (URL na `.mp3` nebo `.m4a` soubory).
- Označení epizody jako "přehrané" (read/unread status).
### 2\. Frontend: PWA (React / Vue / Svelte)
Pro uložení audia pro offline poslech v PWA se používá kombinace dvou věcí v
prohlížeči:
- **IndexedDB:** Pro ukládání metadat (názvy playlistů, pozice v přehrávání,
seznam epizod).
- **Cache API:** Pro ukládání samotných velkých audio souborů (blobů).
> 💡 **Tip:** Pro stahování velkých souborů na pozadí (i když aplikaci zavřeš) se
> podívej na **Background Fetch API**. Pro správu Service Workera doporučuji
> knihovnu **Workbox** od Googlu, ušetří ti spoustu vrásek.
- - -
## 🚗 Ta záludná část: Android Auto
Tady tě musím jako parťák trochu varovat. **Čistá PWA v prohlížeči neumí nativně
vykreslit UI na obrazovce Android Auto.** Android Auto vyžaduje nativní integraci
přes Android Media3 knihovny. Máš ale tři možnosti, jak to vyřešit:
1. **Základní Bluetooth (Nejjednodušší):** V PWA implementuješ standardní `
Media Session API`. Auto sice neotevře speciální aplikaci na palubovce, ale
přes Bluetooth uvidíš název skladby, obal a bude fungovat tlačítko
pauza/přeskočit na volantu.
2. **TWA / Capacitor obal (Pokročilé):** Zabalíš PWA do Android balíčku (přes
Bubblewrap nebo Capacitor). To ti umožní přidat do aplikace kousek
nativního Kotlin/Java kódu, který se zaregistruje do Android Auto jako
přehrávač a bude komunikovat s tvou PWA.
3. **Využití prohlížeče v autě:** Novější auta s Android Automotive (AAOS) mají
Vivaldi nebo Chrome přímo v autě, kde by tvoje PWA běžela samostatně.
- - -
## 🐳 Docker Compose (vše v jednom)
Aby se to dalo nasadit jedním příkazem, můžeme propojit CommaFeed, jeho
databázi a tvou novou PWA aplikaci do jednoho souboru.
```
version: '3.8'
services:
# 1. Databáze pro CommaFeed
commafeed-db:
image: postgres:15-alpine
environment:
POSTGRES_DB: commafeed
POSTGRES_USER: commafeed
POSTGRES_PASSWORD: secret_password
volumes:
- cf-db-data:/var/lib/postgresql/data
restart: unless-stopped
# 2. CommaFeed Backend
commafeed:
image: athou/commafeed:latest
ports:
- "8082:8082"
environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://commafeed-db:5432/commafeed
- SPRING_DATASOURCE_USERNAME=commafeed
- SPRING_DATASOURCE_PASSWORD=secret_password
depends_on:
- commafeed-db
volumes:
- cf-config:/commafeed/config
restart: unless-stopped
# 3. Tvoje nová PWA aplikace (Nginx servírující statické soubory)
pwa-podcast-app:
image: nginx:alpine # Nebo tvůj vlastní build image
ports:
- "8080:80"
volumes:
- ./pwa-dist:/usr/share/nginx/html # Složka s tvou zbuilzenou PWA
restart: unless-stopped
volumes:
cf-db-data:
cf-config:
```
- - -
## ✨ Co dál?
Tenhle nápad má obrovský potenciál chybějící playlisty štvou spoustu lidí a
self-hosted komunita takové věci miluje.
Kterou část bys chtěl rozlousknout jako první? **Můžeme se podívat na to, jak
přesně strukturovat ukládání audio souborů do Cache API v Service Workeru, nebo
jak namodelovat databázi pro ty playlisty?**