Nimbus — Amphibious Mission Planner
An immersive mission planner for hovercraft and ground teams. Nimbus mixes direct (hover) legs over water/flat terrain with driving legs (Directions API), compares ETAs, shows nearby hospitals, overlays elevation + weather, and previews the route with a 3D flythrough.
Inspiration
In flood-prone and coastal areas, the fastest path isn’t always a road. During coastal events we saw responders juggling multiple apps to answer: “How fast can we get there, and where do we hand off to a hospital?” Nimbus turns that workflow into a single, map-first experience for amphibious missions.
What it does
- Click-to-plan: Add waypoints by clicking the map or searching. Drag to reorder; right-click to delete.
- Hybrid routing: For each leg Nimbus chooses Driving (roads) or Direct (straight line for hovercraft) using a simple ratio test.
- Compare routes: One tap compares Driving vs Hybrid vs Direct ETAs.
- Destination support: Shows nearby hospitals (Places API).
- Context: Elevation sparkline (Elevation Service) + weather at destination (Open-Meteo).
- Immersion: 3D tilt/heading flythrough and an animated HUD during simulation.
- Share & save: Export/import mission JSON and share links that encode waypoints + mode.
How we built it
- Frontend: HTML/CSS (Orbitron), vanilla JavaScript.
- Google Maps Platform: Maps JavaScript, Directions, Places, Elevation, Geometry libraries.
- Data/Viz: Open-Meteo for live weather; Chart.js for the elevation sparkline.
- UX choices: Fixed sidebar (only Waypoints list scrolls), color-coding (white = driving, cyan = direct), compact action bar, cinematic camera for briefings.
The math (with LaTeX)
We model ETA as a sum over legs, selecting the faster of road vs straight-line hover.
Direct (hover) leg $$ t_{\text{hover}} \;=\; \frac{d_{\text{straight}}}{v_{\text{hover}}}, \qquad v_{\text{hover}} = 45~\text{km/h}\; \text{(configurable)} $$
Driving leg (from Directions API) $$ t_{\text{drive}} \;=\; \frac{d_{\text{road}}}{v_{\text{drive}}^\ast} $$ where ( t_{\text{drive}} ) comes directly from the API’s time estimate (traffic-aware where available).
Leg selection heuristic $$ \text{choose Direct if}\quad \frac{d_{\text{road}}}{d_{\text{straight}}} > \tau, \qquad \tau = 1.25 $$
Total ETA
$$ T = \sum_{i=1}^{N-1} \min\left( t_i^{d},\, t_i^{h} \right) $$
Pseudo-logic
const THRESH = 1.25; // road vs straight-line ratio
for (let i = 0; i < waypoints.length - 1; i++) {
const A = waypoints[i], B = waypoints[i + 1];
const straight = distance(A, B); // Geometry lib
const road = directionsDistance(A, B); // Directions API
if (road > straight * THRESH) useDirect(A, B) // hover segment
else useDriving(A, B) // road segment
}


Log in or sign up for Devpost to join the conversation.