Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
Minimalny, mobile-first odtwarzacz polskich stacji radiowych. Klikasz stację — i gra. Jasna, „redakcyjna” szata (bez kiczu). Zbudowany na Val Town (React + Hono).
Otwórz: https://radio-pl.val.run
25 stacji, pogrupowanych w lib/stations.ts:
| Grupa | Stacje | Format |
|---|---|---|
| RMF | RMF FM, RMF MAXX, RMF Classic, RMF24 | MP3 (HTTPS) |
| Polskie Radio | Jedynka, Dwójka, Trójka, Czwórka, Polskie Radio 24 | AAC · HLS (hls.js; w Safari natywnie) |
| Niezależne | Radio Nowy Świat, Radio 357 | MP3 / AAC (HTTPS) |
| Agora | TOK FM, Radio Złote Przeboje, Radio Pogoda, KISS FM | MP3 (HTTPS) |
| ZPR Media | Eska, Eska 2, Eska Rock, VOX FM | MP3 (HTTPS) |
| Eurozet | Radio ZET, Antyradio, Chillizet, Meloradio, Radio Plus | MP3 (HTTPS) |
| Regionalne | Radio Lublin | MP3 (HTTPS) |
Strona ma manifest PWA (/manifest.webmanifest) i ikony (/icons/*, źródło w lib/icons.ts):
w Chrome na Androidzie „Dodaj do ekranu głównego” / „Zainstaluj aplikację” daje ikonę z falami
radiowymi i uruchamia odtwarzacz w osobnym oknie, bez paska adresu.
Rendering mermaid diagram...
- Odtwarzanie bezpośrednie — strumienie HTTPS grają wprost z serwerów stacji. Wcześniej wszystko szło przez proxy vala (serwer w USA), co dawało zacięcia.
- Automatyczne wznawianie — przy zerwaniu,
endedalbo braku postępu przez 10 s odtwarzacz łączy się ponownie (rosnący odstęp, maks. 6 prób). Po 2 nieudanych próbach bezpośrednich przełącza się na proxy. - Proxy audio
/stream/:id— zapasowe; obsługuje też czystyhttp://(bez blokady „mixed content”). User-Agent = VLC, bo serwery SHOUTcast oddają przeglądarkom HTML strony statusu zamiast strumienia. - Logotypy
/logo/:id— zgrywane raz do blob storage vala; zmiana adresu wlib/stations.tsautomatycznie odświeża kopię. Typ obrazka rozpoznawany po zawartości.
index.ts ← Hono: /api/stations, /logo/:id, proxy audio /stream/:id
lib/stations.ts ← stacje (nazwa, monogram, kolor akcentu, strumień)
frontend/
root.tsx ← HTML shell (jasny motyw, Google Fonts)
index.tsx ← entrypoint React
components/App.tsx ← lista stacji + przyklejona belka odtwarzacza
Remix szablonu react-hono-starter.