A brutally honest weather Progressive Web App. No ads, no bloat — just the conditions, a sarcastic AI one-liner, and a background color that matches the vibe.
iOS (Safari) Share → Add to Home Screen
Android (Chrome) Menu (⋮) → Install app
Every refresh generates a unique two-sentence reaction via Claude Haiku, calibrated to exactly what's happening outside:
- Temperature and feels-like gap
- Weather condition (thunderstorm, rain, drizzle, fog, snow, clear skies)
- Time of day across 7 slots — dawn, morning, day, evening, dusk, night, late night — so it never suggests going for a walk at midnight or sleeping at 7pm
- Wind speed and UV index
- Whether the day is warming up or cooling down
- Seasonal anomalies (snow in July, 30°C in January)
When offline or without an AI connection, a built-in bank of 100+ handwritten lines covers every scenario — the app is fully functional either way.
The background shifts to match the exact weather, with separate day and night palettes.
A swipeable 24-hour strip showing temperature, condition emoji, and precipitation probability for each hour — without getting in the way.
Save as many cities as you want. Swipe between them. Each city keeps its own message history so you never see the same quip twice.
| Layer | Technology |
|---|---|
| UI | React 18 + Vite |
| Weather data | Open-Meteo (free, no API key needed) |
| AI messages | Anthropic Claude Haiku via Cloudflare Worker proxy |
| Hosting | GitHub Pages |
git clone https://github.com/saimalshafi/Feather.git
cd Feather
npm i
npm run dev # http://localhost:5173For AI messages locally, create .env.local:
VITE_PROXY_URL=https://feather-proxy.YOURSUBDOMAIN.workers.dev
Without it the app falls back to the built-in message bank — fully functional.
- Deploy the Cloudflare Worker first — see
worker/README.md - Fork this repo
- Settings → Pages → Source: GitHub Actions
- Settings → Secrets → New repository secret:
- Name:
VITE_PROXY_URL - Value: your worker URL
- Name:
- Push to
main— it builds and deploys automatically
MIT — see LICENSE.
