ai-startup-skills
AI 제품을 만드는 스타트업을 위한 7단계 에이전트 스킬: 검증 → 비즈플랜 → 정책 → 로드쇼 → 고객 확보 → 가격 책정 → 등록
유럽 GA 장거리 비행을 위한 중거리 항공 날씨 평가, 다중 모델 NWP 분석·경로 조언·AI 보조 브리핑
Medium-range aviation weather assessment for cross-country GA flights in Europe — multi-model NWP analysis, route advisories, and AI-assisted briefings
기타Python · TypeScriptGitHub @roznet온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Medium-range aviation weather assessment for cross-country GA flights in Europe
🌍 weather.flyfun.aero — live web app · 📱 iOS / iPadOS app
The Python package and module are named weatherbrief; the product is Flyfun Weather.
Flyfun Weather fetches forecast data from multiple numerical weather prediction (NWP) models, performs aviation-specific analysis (icing, turbulence, convection, clouds), and presents everything side-by-side so pilots can compare models and start forming an early view of what conditions will look like from D-7 through D-0.README 전문 보기 ↗Medium-range aviation weather assessment for cross-country GA flights in Europe
🌍 weather.flyfun.aero — live web app · 📱 iOS / iPadOS app
The Python package and module are named
weatherbrief; the product is Flyfun Weather.
Flyfun Weather fetches forecast data from multiple numerical weather prediction (NWP) models, performs aviation-specific analysis (icing, turbulence, convection, clouds), and presents everything side-by-side so pilots can compare models and start forming an early view of what conditions will look like from D-7 through D-0.
Disclaimer — Flyfun Weather is built to help and support flight planning and decision-making, giving pilots an early, multi-model picture of the weather and surfacing the factors that matter for a route. It relies on automated analysis and AI, which can make mistakes or miss things, and it has not been reviewed by a professional meteorologist. It is not a substitute for official weather briefings, MET reports, or professional meteorological advice. Always consult official sources before flying — the pilot in command remains the sole decision-maker. The app is a free hobby project provided as is, and no liability is accepted for its use — see TERMS.md.
| Model | Source | Forecast range |
|---|---|---|
| Best Match | Open-Meteo auto-select | 16 days |
| ECMWF IFS | European Centre | 10 days |
| GFS | NOAA (US) | 16 days |
| DWD ICON | German Weather Service | 7 days |
| UKMO | UK Met Office | 7 days |
| Meteo-France | Meteo-France Arpege | 6 days |
Not all variables are available from all models (e.g., omega/vertical velocity is missing from ICON and Meteo-France, visibility from ECMWF). Flyfun Weather derives fallbacks where possible and clearly indicates when data is unavailable.
Each advisory evaluates a specific weather hazard along your route, per model. The set has grown to 20+ evaluators across 11 categories; a representative selection:
| Advisory | What it checks |
|---|---|
| Icing Escape | Can you descend below freezing to escape icing? (terrain clearance) |
| FIKI Icing | Icing layer thickness and severity for FIKI-equipped aircraft |
| Freezing Level | Freezing level vs terrain (mountain icing risk) |
| Freezing Precipitation | Freezing rain / ice pellets in the column |
| Cloud Top | Can you fly above the clouds? (cloud top vs flight ceiling) |
| VMC Cruise | Cloud coverage at cruise altitude (VFR viability) |
| En-route Visibility | Visibility and precipitation along the route |
| VFR / IFR Feasibility | Overall VFR/IFR viability vs ceiling, visibility, and cloud layers |
| Flight Category | VFR/MVFR/IFR/LIFR classification at departure, en-route, and arrival |
| Turbulence | Clear Air Turbulence + strong vertical motion at cruise |
| Mountain Wind | Orographic/rotor wind risk near significant terrain (wave-corroborated) |
| Winds Aloft | Headwind/tailwind trip impact along the route |
| Airport Conditions | Surface wind, gusts, crosswind, and density altitude at departure/arrival |
| Terminal Convective / LLWS | Low-level wind shear and convective risk near the airports |
| Convective | Thunderstorm development risk from CAPE and instability indices |
| Fronts | Frontal passages crossing the route |
| Sun | Daylight / sun position relative to the flight window |
| Model Agreement | How much do the models agree with each other? |
Advisory parameters are user-tunable (terrain margins, percentage thresholds, etc.) and can be recalculated without re-fetching weather data.
Backend: Python 3.11+ / FastAPI / Pydantic v2 / SQLAlchemy + Alembic / MetPy / Matplotlib / LangChain+LangGraph / FastMCP
Frontend: TypeScript / Vanilla DOM (no framework) / Zustand / Canvas API / Leaflet / esbuild
iOS / iPadOS: Swift / SwiftUI / Xcode
Infrastructure: Docker / SQLite (dev) / MySQL (prod) / Multi-provider OAuth (Google, Apple)
Testing: pytest (~5,000 tests) / vitest / Playwright / Swift Testing (iOS unit tests) — all gated by CI on every push and PR
src/weatherbrief/
├── models/ # Pydantic v2 data models
├── pipeline.py # Core engine: fetch → analyze → outputs
├── tasks/ # Independently runnable pipeline stages (fetch, analyze, advise, …)
├── fetch/ # Data retrieval (Open-Meteo, GRIB2 enrichment, SRTM, GRAMET, DWD text)
├── analysis/
│ ├── wind.py # Headwind/crosswind decomposition
│ ├── comparison.py # Multi-model divergence scoring
│ ├── advisories/ # 20+ route hazard evaluators (registry pattern)
│ └── sounding/ # MetPy thermodynamic analysis (clouds, icing, CAT, convective)
├── frontal/ # Frontal zone detection
├── hewson/ # Hewson θe diagnostic field precompute (NPZ snapshots)
├── era5/ # ERA5 reanalysis loaders for retrospective calibration
├── digest/ # Text digest, Skew-T plots, LLM briefing (LangGraph)
├── api/ # FastAPI app (auth, flights, packs, preferences, admin)
├── mcp/ # MCP server exposing briefings as AI-assistant tools
├── connectors/ # Shared agent-facing response shaping (MCP + GPT/OpenAPI)
├── db/ # SQLAlchemy ORM + Alembic migrations
├── storage/ # File-based artifact persistence
├── report/ # HTML/PDF rendering (Jinja2 + WeasyPrint)
├── notify/ # Email delivery + push notifications
├── verify/ # Forecast verification vs METAR/TAF (collect, stats, digest, archive)
├── debriefs/ # Post-flight pilot judgement capture
├── analytics/ # Privacy-first usage analytics
├── costs.py # Cost ledger / spend tracking
├── eval_workbench/ # Dev-only golden-labelling workbench for the LLM digest eval
├── scenario/ # Scenario previews ("where/when could I fly") — measurement harness
├── triage/ # AI-assisted feedback triage CLI
└── release/ # Release-notes / What's New CLI
web/
├── ts/
│ ├── visualization/ # Canvas cross-section renderer (~25 layers)
│ ├── store/ # Zustand state management
│ ├── managers/ # DOM rendering (briefing, advisories, flights)
│ ├── adapters/ # API communication
│ ├── i18n/ # Locale bundles (en, fr, de, es)
│ └── data/ # Metrics catalog, display config
├── tests/ # Playwright e2e specs + vitest unit tests
├── css/style.css
├── index.html # Flights list
├── briefing.html # Briefing report (collapsible sections)
├── flight.html # Single flight detail / edit
├── maps.html # Pan-European forecast map
├── verification.html # Forecast verification / model skill (admin)
├── pireps.html # Pilot reports
├── settings.html # User preferences + advisory tuning
├── admin.html # User approval + usage tracking
├── login.html # Authentication page
├── help.html # User help / FAQ + What's New
├── donate.html # Optional support / donations (Stripe)
├── privacy.html # Privacy policy
├── eval.html # LLM digest eval workbench (dev/admin)
├── cost-summary.html # Service cost transparency (admin)
└── user-costs.html # Personal usage & cost tracking
app/flyfun-weather/ # Native iOS / iPadOS app (SwiftUI, Xcode project)
configs/ # LLM digest configuration and prompts
designs/ # Design documentation (see designs/INDEX.md)
tests/ # pytest test suite (~5,000 tests)
alembic/versions/ # Database migrations
# Clone the repository
git clone https://github.com/roznet/flyfun-weather.git
cd flyfun-weather
# Create virtual environment
python -m venv venv
source venv/bin/activate
# Install Python dependencies
pip install -e ".[dev]"
# Install frontend dependencies and build
cd web
npm install
npm run build
cd ..
Copy .env.sample to .env in the project root and fill in what you need.
The essentials:
ENVIRONMENT=development
# Optional — for LLM-powered digest
ANTHROPIC_API_KEY=sk-...
OPENAI_API_KEY=sk-...
# Optional — for GRAMET cross-sections (Autorouter account)
AUTOROUTER_USERNAME=...
AUTOROUTER_PASSWORD=...
# Required for production multi-user deployment
GOOGLE_CLIENT_ID=...
GOOGLE_CLIENT_SECRET=...
JWT_SECRET=...
CREDENTIAL_ENCRYPTION_KEY=...
DATABASE_URL=mysql+pymysql://...
In development mode, the app uses SQLite and auto-creates a dev user — no OAuth setup needed.
Web app (development):
# Start the API server
uvicorn weatherbrief.api.app:app --reload --port 8000
# In another terminal — watch and rebuild frontend
cd web && npm run dev
Then open http://localhost:8000
MCP server (AI-assistant tools):
python -m weatherbrief.mcp
Other operational entry points follow the same pattern — python -m weatherbrief.verify
(forecast verification), python -m weatherbrief.hewson (frontal diagnostic precompute),
python -m weatherbrief.release (What's New stream). Each prints its own usage.
The full suite runs in CI on every push and PR (see the badge above); to run it locally:
# Python — ~5,000 tests. `-m 'not slow'` is applied by default via pyproject
source venv/bin/activate
pytest
# Frontend typecheck, build and unit tests
cd web
npx tsc --noEmit
npm run build
npx vitest run
# End-to-end (boots the API server itself; needs the venv at the repo root)
npx playwright install --with-deps chromium
npx playwright test
# iOS unit tests, run from the repo root (the block above leaves you in web/).
# The UI tests are excluded here, as they are in CI: they drive a simulator and are
# run manually.
xcodebuild test \
-project app/flyfun-weather/flyfun-weather.xcodeproj \
-scheme flyfun-weather \
-destination 'platform=iOS Simulator,name=iPhone 17,OS=latest' \
-only-testing:flyfun-weatherTests
CI is split across two workflows, path-filtered so they don't overlap.
.github/workflows/tests.yml runs three parallel jobs —
pytest, typecheck + build + vitest, and playwright — and
.github/workflows/ios.yml runs the iOS unit tests on a
macOS runner. A commit touching app/ runs the iOS job, anything else runs the
server/web jobs, and a commit spanning both runs both. Commits touching only
designs/, .claude/ or Markdown skip CI entirely.
docker build -t weatherbrief .
docker compose up -d
The Docker image runs as a non-root user (UID 2000). Data is persisted via volume mount at /app/data.
The pipeline fetches NWP data for ~20 interpolated points along your route (every ~20nm), plus your departure/arrival airports. For each point and model, it runs a MetPy-based sounding analysis that computes:
These per-point results feed into the 20+ route-level advisory evaluators that produce the GREEN/AMBER/RED hazard assessment.
The designs/ directory contains detailed design documents covering architecture, data models, analysis methods, metrics catalog, and implementation plans. Start with designs/architecture.md for the system overview, or designs/INDEX.md for the full module map.
This project was built extensively with AI assistance. Claude (Anthropic) was used throughout development for:
The meteorological explanations, threshold values, and aviation interpretations in the codebase were developed collaboratively with AI. While cross-referenced against published references (MetPy documentation, Ogimet/Autorouter formulas, standard aviation weather texts), they have not been reviewed by a professional meteorologist.
The optional LLM-powered weather digest feature uses Claude or ChatGPT to generate narrative briefings from the quantitative analysis.
MIT
This is an early-stage personal project. Issues and discussions are welcome. If you're a meteorologist or aviation weather professional and spot something wrong, please open an issue — corrections are very much appreciated.
If you're sending a pull request, the test suite gates every PR — running
pytest and the web checks locally first will save you a round trip. Migrations must
work on both SQLite (dev) and MySQL (prod); use batch_alter_table for any ALTER.