Skip to content

vnmoorthy/Skylog

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

23 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

πŸ›©οΈ Skylog

The flight tracker that remembers every plane it sees over your house.

🌍 Live Demo Β· πŸ“– Docs Β· πŸ’¬ Discussions

License: MIT TypeScript Tests No Tracker No Account Stars

Skylog hero screenshot

Pan anywhere on the world, see live aircraft. Click a plane for everything we know about it. Set a home location, and Skylog will silently learn the regulars over your roof.


Why Skylog?

Every flight tracker on the internet is amnesic. Open Flightradar24, see a plane, click away β€” the app forgets it instantly. There's no concept of "your sky" because there's no concept of you.

Skylog inverts that:

  • It's yours. No account, no tracker, no server. Your sky data lives only in your browser's IndexedDB.
  • It remembers. Every aircraft Skylog renders gets saved with its callsigns, altitudes, and timestamps. After three days you'll discover that the 737 you keep hearing at 7 AM is the same airframe (UAL841) on the same daily route.
  • It tracks specific flights. Paste a callsign, get a globally pinned flight + ETA to your home + a browser notification when it's 5 km out. The single-keystroke version of "is my partner's flight on time?".
  • It's worldwide. Pan to Tokyo, Frankfurt, Dubai, Lagos β€” wherever the airplanes.live community has feeders, Skylog shows live traffic.

✨ Features

Feature Status
🌍 Worldwide live aircraft map (every ADS-B-equipped plane in view) βœ…
🧠 Persistent memory β€” every plane Skylog sees is saved to your device βœ…
πŸ” Pattern detection β€” finds your "regular visitors" by weekday + hour βœ…
🎯 Track a flight by callsign β€” paste it, pin it, follow it globally βœ…
πŸ”” Browser notification when a tracked flight is within 5 km of home βœ…
πŸ›°οΈ ISS + Celestrak satellite overlay with 90-min ground tracks βœ…
πŸ“Š Daily digest: today vs yesterday, peak hour, top regulars βœ…
πŸ“ž On-device acoustic model: estimate ground-level dB(A) of any pass βœ…
πŸ—‚οΈ Searchable / sortable list of every aircraft in view βœ…
🌐 Region presets: jump to Europe, Asia, Middle East, Oceania, etc. βœ…
πŸ“± Mobile responsive β€” works on phones βœ…
⌨️ Keyboard-driven (f track flight, m memory, s satellites, ? help) βœ…
πŸ”’ Zero tracking. Zero cookies. Zero accounts. MIT licensed. βœ…

πŸ†š vs Flightradar24, FlightAware, ADS-B Exchange

Skylog FR24 FlightAware ADS-B Exchange
Free βœ… Limited Limited βœ…
Open source βœ… ❌ Some Some
Self-hostable βœ… ❌ ❌ Partial
No account required βœ… ❌ ❌ βœ…
No third-party tracker βœ… ❌ ❌ ❌
Per-aircraft persistent memory βœ… ❌ ❌ ❌
Pattern detection ("regulars over your house") βœ… ❌ ❌ ❌
Track a flight by callsign βœ… βœ… βœ… ❌
Browser-native push alerts βœ… App-only App-only ❌
Satellite overlay βœ… ❌ ❌ ❌
Ground-level loudness estimate βœ… ❌ ❌ ❌
Worldwide coverage Community feed Comprehensive Comprehensive Comprehensive

Skylog isn't trying to win on raw data quantity. It's trying to win on knowing about your sky.


πŸš€ Run it in 60 seconds

git clone https://github.com/vnmoorthy/Skylog.git
cd Skylog
pnpm install
pnpm dev

Open http://localhost:5173. That's it. No env vars. No accounts. No databases to provision.

Or skip the local install and try the live demo.

Self-host on your own subdomain

The main branch auto-deploys to GitHub Pages on push (see .github/workflows/deploy.yml). Fork the repo, enable Pages with source "GitHub Actions", and your fork is live at https://YOU.github.io/Skylog/ within minutes. No backend infra. No costs.


How it works

 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚                         BROWSER                             β”‚
 β”‚                                                             β”‚
 β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”   bbox poll       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
 β”‚  β”‚ MapLibreβ”‚ ────────────────▢ β”‚ airplanes.live API   β”‚     β”‚
 β”‚  β”‚ canvas  β”‚ ◀──── states ──── β”‚ (no auth, CORS-ok)   β”‚     β”‚
 β”‚  β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”˜                   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
 β”‚        β”‚ rAF dead-reckoning                                 β”‚
 β”‚        β”‚ at 10 Hz between polls                             β”‚
 β”‚        β–Ό                                                    β”‚
 β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                           β”‚
 β”‚  β”‚  React UI    β”‚   sightings   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”       β”‚
 β”‚  β”‚  - FlightCardβ”‚ ────────────▢ β”‚   IndexedDB       β”‚       β”‚
 β”‚  β”‚  - DigestCardβ”‚ ◀── memory ── β”‚   (Dexie schema)  β”‚       β”‚
 β”‚  β”‚  - Memory    β”‚               β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜       β”‚
 β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                           β”‚
 β”‚                                                             β”‚
 β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                   β”‚
 β”‚  β”‚ TLE worker   β”‚ ── β”‚ Celestrak (TLE)  β”‚  satellite.js     β”‚
 β”‚  β”‚ (sat orbits) β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  SGP4 client-side β”‚
 β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                           β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Stack: Vite Β· React 18 Β· TypeScript strict Β· Tailwind Β· Zustand Β· Dexie Β· MapLibre GL Β· D3 scales Β· satellite.js Β· Web Worker for the home-radius pass logger.

Data sources:


🧠 The memory feature, explained

This is the differentiator. Every aircraft that enters your viewport is folded into IndexedDB:

interface AircraftSighting {
  icao24: string;
  lastCallsign: string | null;
  callsigns: readonly string[];     // every distinct callsign used
  registration: string | null;
  typecode: string | null;
  operator: string | null;
  firstSeenAt: number;              // unix-ms
  lastSeenAt: number;
  sightingCount: number;            // total polls including this aircraft
  dayCount: number;                 // distinct UTC days seen
  maxAltitudeM: number | null;
  minAltitudeM: number | null;
  recentDays: string;               // CSV of last 30 YYYY-MM-DD
  recentTimes: string;              // CSV of last 100 timestamps
}

The recentTimes slice powers dominantPattern(): bucket sightings by (weekday, hour) and surface any cluster of 3+ as a "regular visitor". After a week of leaving a tab open, the memory drawer reads:

Regular visitors over your sky: CMP809 β€” Tuesdays around 07:00, Γ—7 sightings OCN642 β€” Tuesdays around 07:00, Γ—6 sightings BAW185 β€” Saturdays around 13:00, Γ—4 sightings

That's not data Flightradar24 will ever show you, because Flightradar24 doesn't know what your sky looks like.


πŸ”¬ The acoustic model (when home is set)

For each aircraft sample, Skylog estimates ground-level A-weighted SPL using:

  1. Inverse-square law for geometric spreading: L(r) = L_src - 20Β·log₁₀(r/1m)
  2. ISO 9613-2:1996 Β§7.2 atmospheric absorption: Ξ± β‰ˆ 0.005 dB/m at 10Β°C / 60% RH for broadband aircraft noise (~500–1000 Hz)

Combined: L_observed = L_source - 20Β·log₁₀(r_slant) - Ξ±Β·r_slant

Source levels are calibrated per ICAO aircraft category (HEAVY=140 dB, LARGE=135, SMALL=125, LIGHT=105, ROTORCRAFT=130) against published FAA flyover data. Constants and citations: src/lib/acoustics.ts.

A 737 at 3,000 ft directly overhead β†’ ~71 dB. Roughly the volume of a vacuum cleaner in the next room.

What the model deliberately doesn't do: ground reflection, directivity, thrust modulation, per-frequency absorption, weather. The goal is to distinguish a 747 from a Cessna at a glance, not to replace a certified noise meter.


⌨️ Keyboard shortcuts

Key Action
f Track a specific flight by callsign
m Open the aircraft memory drawer
s Toggle satellite overlay
l Toggle the in-view aircraft list
h Open home setup
t Open the pass timeline (requires home)
? Show this help
esc Close the active panel

πŸ› οΈ Development

pnpm install
pnpm dev          # vite dev server on :5173
pnpm typecheck    # tsc -b --noEmit
pnpm test         # 101 unit tests
pnpm build        # production build
pnpm preview      # serve the production build
pnpm build:data   # optional: pre-fetch OpenSky aircraft DB for richer detail panel

Strict TypeScript throughout, no any. Coverage focuses on src/lib/ (geo math, acoustics, callsign parsing, dead-reckoning, sightings).


πŸ—ΊοΈ Roadmap

These are open issues β€” PRs welcome:

  • Mobile installable PWA + offline support
  • Time-machine: scrub backward through the last few minutes
  • Webhook notifications (Discord, Slack) for tracked flights
  • Public "share your sky" URL with stats
  • Pluggable data sources (OpenSky direct via reverse proxy, ADS-B Exchange API)
  • Plane fact cards (Wikipedia / aviation-trivia integration)
  • Multi-home support
  • Light theme

See issues with the good-first-issue label for places to start contributing.


🀝 Contributing

PRs welcome. Read CONTRIBUTING.md first. The codebase is small and well-tested β€” adding a feature or fixing a bug should be straightforward.


πŸ“œ License

MIT. Use it for whatever you want.


πŸ™ Acknowledgements

Skylog stands on the shoulders of:


Built because I wanted to know which plane keeps waking me up at 3 AM.

If Skylog is useful to you, ⭐ star this repo so others find it.

About

πŸ›©οΈ A flight tracker that remembers every plane it sees over your house. Worldwide live ADS-B map, per-aircraft memory, pattern detection, satellite overlay. No account, no tracker, MIT.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors