An interactive weather application built with SvelteKit 5 and TypeScript. It shows current conditions for your location or any searched city, renders them on an interactive MapLibre map with markers, cluster layers, popups and routes, and ships an in-app chat assistant with streaming AI responses. A Hono-based API layer proxies and validates OpenWeatherMap data, and the app deploys to Cloudflare Workers or Node.
- Current weather by geolocation or city search (OpenWeatherMap)
- Interactive MapLibre GL map: markers, cluster layers, popups, fly-to navigation, route rendering
- AI chat assistant with streaming responses and automatic retry/backoff on rate limits
- Search history persisted to localStorage with quick re-select
- Weather-aware theming, light/dark mode toggle, Celsius/Fahrenheit unit toggle
- Typed API integration: the OpenWeather OpenAPI spec compiled with
openapi-typescript, consumed through a Hono backend with Valibot-validated request schemas - shadcn-svelte UI components (buttons, cards, inputs, selects, scroll areas)
- SvelteKit 5 (Svelte runes), TypeScript
- Hono (API proxy) with Valibot validation,
openapi-fetch/openapi-typescript - MapLibre GL for map rendering
- Tailwind CSS 4 + shadcn-svelte (bits-ui)
- Deployment: Cloudflare Workers (
@sveltejs/adapter-cloudflare+wrangler.toml) or Node (@sveltejs/adapter-node)
bun install
cp .env.example .env # set OPENWEATHER_KEY (OPENROUTER_API_KEY enables the AI assistant)
bun run devbun run build/bun run preview— production build and previewbun run check— type-check withsvelte-check- Cloudflare Workers deployment is configured via
wrangler.toml
Private repository.