🎉
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
---
|
||||
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?**
|
||||
|
||||
Reference in New Issue
Block a user