Building VadelmaSky.live — From a Simple Idea to a Living ADS-B Dashboard

Posted on 14.5.2026

There are projects that begin with a detailed masterplan.

And then there are projects like VadelmaSky.

A simple idea: “What if I built my own lightweight aircraft tracking page from local ADS-B reception?”

That single thought slowly evolved into a surprisingly polished live aviation dashboard powered entirely by local SDR receivers.

The Beginning

The original goal was intentionally simple:

  • Read aircraft data from readsb
  • Save daily logs
  • Generate static HTML
  • Publish automatically to GitHub Pages

The system was built around:

  • Raspberry Pi 3B+

  • DietPi

  • RTL-SDR Blog v3

  • ultrafeeder / readsb

  • Python

  • GitHub Pages

  • No databases.

  • No frameworks.

  • No cloud backend.

Just SDR hardware, JSON, Python and static files.

Exactly the kind of engineering that feels fun.

The Philosophy

One of the core ideas behind VadelmaSky was keeping things lightweight and understandable.

The entire site is generated from local data.

Every aircraft visible on the page was actually received by the local station in Jyväskylä, Finland.

That creates a completely different feeling compared to global flight tracking services.

VadelmaSky is not trying to track the world.

It is documenting: “What did my station hear today?”

That small philosophical difference shaped the entire project.

Features Added Along the Way

The project quickly evolved beyond a simple table.

Live Aircraft Cards

Aircraft are now displayed as responsive cards containing:

  • flight number
  • ICAO hex
  • registration
  • aircraft type
  • altitude
  • speed
  • track
  • last seen timestamp
  • aircraft photo / ADS-B Exchange links

The design gradually evolved into a dark SDR-inspired dashboard aesthetic.

Interactive Map

Leaflet.js was integrated to create a live aircraft map.

Features include:

  • dark CARTO basemap
  • local receiver marker
  • altitude-based colors
  • live aircraft positions
  • popup information windows

The map became one of the visual centerpieces of the site.

Aircraft Database Integration

tar1090 aircraft database support was added:

/usr/local/share/tar1090/aircraft.csv.gz

This enabled:

  • registrations
  • aircraft type codes
  • richer metadata
  • external aircraft photo searches

Without relying on external APIs.

ACARS Integration

The project later expanded beyond ADS-B.

ACARS message logging was added:

  • latest messages shown directly on the front page
  • tail numbers
  • frequencies
  • message labels
  • signal levels
  • raw message contents

This gave the site an authentic monitoring-station feel.

Daily History System

One of the most important design decisions was preserving full-day aircraft history.

Instead of only showing current aircraft, the system stores:

docs/data/YYYY-MM-DD.json

This enables:

  • daily statistics
  • historical browsing
  • aircraft replay potential
  • future analytics

Each UTC day automatically becomes part of permanent history.

The “2-Hour Window” Problem

At one point the system experimented with a rolling 2-hour “live window”.

Technically it worked.

Philosophically it failed.

The front page suddenly felt empty and lifeless during quiet periods.

The realization came quickly:

The real value was not: “What is visible right now?”

The real value was: “What has been heard today?”

The system was redesigned back to full-day accumulation while preserving clean history handling.

That change immediately restored the character of the project.

GitHub Pages Automation

The site fully auto-publishes itself.

Pipeline:

  • SDR receives aircraft
  • Python logger updates JSON + HTML
  • Git commit created automatically
  • GitHub Pages deploys updates
  • Site refreshes globally

The entire site is effectively generated by a Raspberry Pi and SDR receiver.

Which feels wonderfully absurd in the best possible way.

HTTPS, DNS & Git Adventures

Naturally, no real project is complete without a few late-night infrastructure adventures.

Along the way:

  • Git rebase conflicts appeared
  • GitHub Pages HTTPS provisioning broke temporarily
  • Namecheap DNS records needed manual fixing
  • stale aircraft logic accidentally erased history
  • malformed Python indentation broke builds
  • UTC day rollover logic required redesign

Several moments included staring at terminals thinking:

“Why does this suddenly show zero aircraft?”

But each issue refined the architecture.

Visual Identity

VadelmaSky eventually received:

  • custom favicon set
  • dark dashboard styling
  • aircraft cards
  • responsive layout
  • GitHub Pages custom domain
  • polished history pages

At some point the project stopped feeling like “a script”.

It started feeling like an actual service.

Current Architecture

Current stable architecture:

live page keeps full-day aircraft history history pages generated automatically aircraft cards on both live and history pages ACARS integration map visualization automatic Git publishing static GitHub Pages deployment no external backend required

Locked Future Roadmap

The future roadmap is intentionally modest and focused. Planned additions include:

  • subtle animations
  • aircraft trails on map
  • “Top DX Aircraft” of the day
  • country statistics
  • operator statistics
  • aircraft type statistics
  • sunrise/sunset information
  • reception distance calculations
  • lightweight heatmap visualization

The goal is enhancement — not feature bloat.

Final Thoughts

Projects like this are a reminder that some of the most satisfying software is deeply personal.

  • Not optimized for scale.
  • Not monetized.
  • Not chasing trends.

Just a local SDR receiver quietly listening to the sky above Finland and turning radio signals into a living visual archive. And honestly?

That is pretty magical.