wtr.
wtr. to mobilna PWA pogodowa dla Polski oparta o publiczne dane IMGW oraz jawnie oznaczoną prognozę modelową łączącą IMGW ALARO z Open-Meteo.
Aplikacja pokazuje bieżącą analizę IMGW Hybrid, pomiary synoptyczne, prognozę godzinową i 7-dniową, ostrzeżenia meteorologiczne i hydrologiczne, dane hydro oraz deterministyczne briefy pogodowe bez użycia zewnętrznego modelu AI.
Najważniejsze funkcje
- Bieżące warunki z lokalnej analizy IMGW Hybrid, z opisanym fallbackiem do stacji synoptycznej.
- Prognoza modelowa 7 dni: IMGW ALARO dla dostępnych godzin oraz Open-Meteo jako uzupełnienie i fallback.
- Wyszukiwanie miejscowości w Polsce oraz opcjonalny wybór lokalizacji GPS.
- Ostrzeżenia IMGW z filtrowaniem meteo po powiecie TERYT, gdy lokalizacja go dostarcza.
- Powiadomienia Web Push o nowych ostrzeżeniach, porannym briefie dnia i wieczornym briefie na jutro.
- Widoki dashboardu, prognozy szczegółowej dnia, ostrzeżeń, hydro, stacji i ustawień.
- PWA z manifestem, własnym service workerem i podstawowym fallbackiem offline.
- Interfejs po polsku i angielsku.
Stack
- Next.js App Router, React, TypeScript
- Tailwind CSS
- TanStack Query
- Zustand
- Framer Motion
- Recharts
- Lucide React
web-push- własny service worker i manifest PWA
Szybki Start
Wymagany jest Node.js 20.9 lub nowszy.
npm install
npm run dev
Aplikacja będzie dostępna pod adresem http://localhost:3000.
Konfiguracja
Do podstawowego uruchomienia aplikacji pogodowej nie są potrzebne klucze API. Publiczne dane IMGW, Open-Meteo i Nominatim są pobierane przez route handlery Next.js.
Powiadomienia Web Push wymagają zmiennych środowiskowych:
WEB_PUSH_VAPID_PUBLIC_KEY=
WEB_PUSH_VAPID_PRIVATE_KEY=
WEB_PUSH_VAPID_SUBJECT=mailto:admin@example.com
NOTIFICATIONS_CRON_SECRET=
WTR_APP_URL=http://127.0.0.1:3000
NOTIFICATIONS_WARNING_INTERVAL_MINUTES=5
NOTIFICATIONS_MORNING_BRIEF_TIME=07:00
NOTIFICATIONS_TOMORROW_BRIEF_TIME=18:00
Przykład znajduje się w .env.example.
Komendy
| Komenda | Opis |
|---|---|
npm run dev |
Uruchamia serwer deweloperski Next.js. |
npm run lint |
Uruchamia ESLint. |
npm run typecheck |
Uruchamia tsc --noEmit. |
npm run build |
Buduje aplikację produkcyjnie i uruchamia kontrolę TypeScript wykonywaną przez Next.js. |
npm run start |
Uruchamia zbudowaną aplikację. |
npm run notifications:worker |
Uruchamia self-hostowany worker powiadomień. Wymaga działającej aplikacji Next.js. |
Repozytorium nie ma obecnie skryptu testów ani formattera.
CI
Repozytorium używa Gitea Actions. Workflow znajduje się w .gitea/workflows/ci.yml i uruchamia się przy pushu do main oraz przy pull requestach.
Pipeline działa na ubuntu-latest, instaluje zależności przez npm ci, a następnie uruchamia:
npm run lint,npm run typecheck,npm run build.
Na instancji Gitea musi być włączony Actions runner kompatybilny z etykietą ubuntu-latest.
Struktura Projektu
app/ routing, layout, route handlery i strony
components/ komponenty widoków, UI, stanów, prognozy, hydro i ostrzeżeń
hooks/ hooki TanStack Query
lib/ fetchery, normalizacja danych, Web Push, i18n, store i helpery
types/ typy danych IMGW, prognozy, lokalizacji i powiadomień
public/ manifest, service worker i ikony PWA
scripts/ worker powiadomień dla self-hostingu
docs/ szczegółowa dokumentacja techniczna
Dokumentacja
- Architektura i przepływ danych
- Wewnętrzne endpointy API
- Źródła danych i cache
- Logika pogody i fallbacki
- Powiadomienia Web Push
- Wdrożenie i uruchamianie
Status i Ograniczenia
lib/push-store.tsprzechowuje subskrypcje Web Push w pamięci procesu. Produkcyjne wdrożenie wymaga trwałego magazynu, np. bazy danych albo KV.- Endpoint IMGW Hybrid używany przez dashboard pochodzi z publicznego frontendu
meteo.imgw.pl, a nie ze stabilnie opisanej dokumentacjidanepubliczne.imgw.pl. - Publiczne API IMGW potrafi zwrócić
404z komunikatemNo products were founddla pustych list ostrzeżeń; aplikacja traktuje to jako brak ostrzeżeń. - Prognoza jest prognozą modelową, nie pomiarem IMGW. Bieżące pomiary i prognozy są w UI rozdzielane.