Inspiration
I just earned my private pilot certificate. The checkride was the easy part. The hard part is the ten minutes before I walk to the airplane, staring at a METAR that looks like a license plate.
KHWD 222153Z 27008KT 10SM FEW020 SCT200 19/11 A2992
I can read it now. Slowly. Then the TAF, which Hayward does not even issue, so I am supposed to borrow Oakland. Then a G-AIRMET I am not sure I am inside. Then a winds-aloft chart full of barbs. Then I still have to decide if I go.
That gap is how people get hurt. Weather causes only a small slice of general aviation accidents, but those accidents are brutal. In AOPA’s Nall Report, about 70% of weather accidents are fatal. Continued VFR into instrument conditions is the pattern: a pilot launched because the coded weather did not feel as bad as it was. I did not want my first year as a private pilot to depend on decoding cryptic text under time pressure.
ForeFlight already turns this into a brief. It also costs money. The raw products are public. I wanted a picture of the flight, and a straight go, marginal, or no-go, built from those products.
What it became
AeroTwin takes a route, an airplane, and a departure time and pulls the public stack: METAR, the TAF period that actually covers departure and arrival, nearby TAFs when the field does not publish one, PIREPs, G-AIRMETs, SIGMETs, Center Weather Advisories, and TFRs. Open-Meteo supplies the winds along the route. NOAA’s own charts, including winds aloft, low-level significant weather, the surface forecast, and GOES-West satellite, stay one click away so the picture can be checked against the source.
A rules check turns that into GO, MARGINAL, or NO-GO against basic VFR limits, terrain, fuel, weight, and runway crosswind. The recommended runway is just the wind on each end:
$$ HW = V_w \cos(\theta_w - \theta_{rwy}), \quad XW = V_w \sin(\theta_w - \theta_{rwy}) $$
The corridor is drawn in 3D, climbed, cruised, and descended with those winds, tinted with the verdict. The route, the decision, the performance, and the live products sit in the scene instead of in another tab of coded text.
What I learned
A METAR is the weather right now. A TAF is a schedule, and only the slice that covers your launch and your arrival matters. Hayward taught me the other lesson: no TAF on the field does not mean no forecast. Oakland, San Francisco, San Carlos, and San Jose are already speaking. The brief should say whose forecast it borrowed.
I also learned that “plain English” is not a label on the screen. Pilots do not need the words METAR and G-AIRMET hidden. They need those products translated into a stop or a caution, then shown on the route.
How I built it
Next.js and TypeScript on the app side. Three.js for the corridor, with Mapzen elevation and Esri imagery after photorealistic 3D tiles came back blocked. NOAA Aviation Weather Center behind a small proxy. Gemini only writes the short synopsis from findings the rules engine already made. It is not allowed to invent weather. Preset Bay Area routes, Hayward to Reid-Hillview and Hayward to Monterey, keep the demo from burning map credits.
Challenges
My first version briefed a METAR and called it a decision. That is the same trap as launching on a string of text. Folding TAF time windows, pilot reports, and advisories into hard stops versus cautions took longer than the terrain.
The picture fought back too. The mesh kept rendering as a postage stamp in an empty sky, and a briefing panel stuck to the screen looked like a website laid on top of a flight. The cards had to live in the same 3D space as the corridor, and fly forward when opened, or the demo was just another page of text.
I am the pilot in command either way. This does not clear me to go. It makes the public weather hard to misread.
Log in or sign up for Devpost to join the conversation.