xiaomingio/weather-trip

Choose travel destinations by future weather with a bilingual static weather map and city finder.

★ 0Forks 0TypeScriptGitHub ↗Compare

Project website ↗

README

Weather Trip

English | 简体中文

Weather Trip is a bilingual weather travel tool for choosing where to go by forecast. It lets travelers compare global cities by temperature, rain, humidity, weather type, wind, elevation, and travel-friendly comfort signals before they commit to a destination.

Product

Weather Trip is built for people who know the kind of weather they want, not necessarily the city they want. Instead of opening one city forecast at a time, users can scan a world weather map, filter destinations by future conditions, and compare city forecasts in one place.

The public product has two main tools:

  • World Weather Map shows future weather across selected regions, countries, and cities with map layers for weather, temperature, humidity, precipitation, wind, elevation, and comfort.
  • City Finder lets users set weather preferences first, then find cities that match those preferences over the next forecast window.

Weather Trip is a public data product. The free version is intentionally static: public pages read city indexes, vector map tiles, and weather packages from static files. User requests do not connect to a runtime database and do not call a Worker API.

Live Site

Architecture

Astro static build -> Cloudflare Pages
city index + map tiles -> committed public data
weather/current.json + forecast package -> Cloudflare R2
daily refresh -> GitHub Actions

The repository is organized around static generation and public runtime assets:

apps/web/       # Astro static public pages; English at / and Chinese at /zh
packages/       # Shared weather types, weather codes, and static wire decoders
data/           # Offline sources, manual inputs, generated assets, and review reports
scripts/        # Tourism destination, country tier, city, map boundary, and weather package generators
docs/           # Product, data flow, runtime, and launch documentation
infra/          # Cloudflare configuration tracked for production resources

Quick Start

npm install
npm run dev

Local development reads committed public data. Public site settings (domain, Umami, public weather data URL) live in apps/web/src/domain/site-config.ts. Real .env.development files are not committed; use .env.example and apps/web/.env.example as local templates.

Common Commands

npm run check
npm run build
npm run static:tourism
npm run static:country-tier-candidates
npm run static:profiles
npm run static:cities
npm run static:geo
npm run static:geo:tiles

Low-frequency country tiers, city indexes, and map boundaries are generated by the matching static:* scripts and committed to Git. See docs/specs/31-data-flow.md for the full data flow.

Weather data is refreshed separately. To fetch Open-Meteo forecasts for the current city list, run:

npm run weather:refresh -- --source=open-meteo

Production uses Cloudflare Pages for apps/web/dist, Cloudflare R2 for weather packages, and GitHub Actions for daily refreshes. See docs/specs/50-launch.md for launch and rollback details.

License

Project code is open source under GPL-3.0.

The Weather Trip name, logo, and domains are not included in the code license. If you fork or build a product from this project, use your own name, logo, and domains, and credit the original project to avoid confusion with the public site.

Contributors

xiaomingio

Issues