131 lines
4.6 KiB
Markdown
131 lines
4.6 KiB
Markdown
---
|
||
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?**
|
||
|