Designing Offline-First Airport Companions: The Layover+ Story
How Ryla Labs engineered Layover+ to deliver instant airport navigation, time-budgeted itineraries, and offline terminal maps.
Written by Welcome Team (hello@rylalabs.com)
Published on 2026-08-04
International airport terminals are notoriously unreliable environments for cellular data and Wi-Fi connections. Between metal-shielded terminal buildings, congested public networks, and international roaming constraints, mobile applications that rely on constant server connectivity frequently fail when travelers need them most.
When building Layover+, an itinerary and layover companion app for international travelers, our goal was clear: 100% offline functionality for critical airport data.
Core Feature Requirements
Layover+ needed to answer three critical questions for travelers on a 2-to-6-hour layover:
- How much time do I actually have? (Calculating gate distance, security re-check time, and boarding windows).
- What can I do within walking distance? (surfacing quiet lounges, local dining, or luggage storage).
- How do I get there without internet? (Offline vector terminal maps and step-by-step walking directions).
The Engineering Strategy: Compact Local Datastores
1. Vector Map Compression
Airport terminal maps were encoded as compact JSON vector meshes rather than raster imagery. A full multi-terminal airport layout that would traditionally take 50MB in high-res PNGs is stored in under 450KB of optimized vector geometry.
2. Time-Aware Route Heuristics
We implemented a deterministic local pathfinding algorithm (modified A*) that runs client-side inside a Web Worker. The algorithm accounts for walking speeds, TSA/Security queue estimates, and terminal shuttle schedules to score itinerary options.
3. Background Sync & Optimistic Updates
When a device connects to terminal Wi-Fi for even 5 seconds, Layover+ uses background service workers to fetch differential updates for flight departure gates, delay alerts, and gate changes.
// Offline-first datastore synchronization
async function syncAirportPack(airportCode: string) {
const cache = await caches.open(`airport-${airportCode}`);
const response = await fetch(`/api/packs/${airportCode}.json`);
if (response.ok) {
await cache.put(`/api/packs/${airportCode}.json`, response.clone());
}
}
Impact for Travelers
- Zero Signal Stress: Travelers can turn on Airplane Mode and still access full terminal guidance.
- Over 30,000 Beta Users: Layover+ achieved a 90% itinerary match rate across major hubs like JFK, LHR, HND, and SIN.
- Sub-100ms Map Render Times: Vector rendering ensures smooth 60fps pinch-and-zoom on both iOS and Android.
Have an offline-first app idea or field utility project? Contact our team at hello@rylalabs.com.