---
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 (
> ) … 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 (`\`). 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?**