Files
commafeed-podcasts/docs/dev/TASK.md
T
jaandrle 656c2da8cf Adds routing
Squashed commit of the following:

commit d26bffc33a
Author: Jan Andrle <andrle.jan@centrum.cz>
Date:   Tue Jun 9 10:35:14 2026 +0200

     ups versions

commit 8bb12aaac1
Author: Jan Andrle <andrle.jan@centrum.cz>
Date:   Fri May 22 15:56:44 2026 +0200

     📺 finlizes routing and improves bs

commit c3782509e8
Author: Jan Andrle <andrle.jan@centrum.cz>
Date:   Wed May 20 16:10:51 2026 +0200

     first steps (footer)

commit 7c925d1fdb
Author: Jan Andrle <andrle.jan@centrum.cz>
Date:   Wed May 20 15:24:20 2026 +0200

     📺 tsc-alias

commit e4e41197b9
Author: Jan Andrle <andrle.jan@centrum.cz>
Date:   Wed May 20 14:40:47 2026 +0200

    🐛 fixes routing

commit 7d6240e28a
Author: Jan Andrle <andrle.jan@centrum.cz>
Date:   Wed May 20 14:40:00 2026 +0200

    🐛 📺 fixes dev server

commit 139b1590ce
Author: Jan Andrle <andrle.jan@centrum.cz>
Date:   Wed Apr 29 13:40:40 2026 +0200

     Uses original router

    - it has benefits to use hash properly

commit 3cc11b68de
Author: Jan Andrle <andrle.jan@centrum.cz>
Date:   Tue Apr 28 17:16:00 2026 +0200

    🎉
2026-06-09 11:04:02 +02:00

4.6 KiB
Raw Blame History

created, tags, source, author
created tags source author
2026-03-28T14:24:51 (UTC +01:00)
https://gemini.google.com/

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?