Issue №26 · 2026July 22, 2026iameberhard.com
Back to the journal

Project

A live dashboard of Jakarta's public traffic cameras

I wired up every public Jakarta traffic CCTV I could find — Dishub ATCS, Balitower, WebcamTaxi — into one filterable, click-to-play dashboard.

EEberhard2 min read

Jakarta's traffic is famously brutal, and the city quietly publishes hundreds of live CCTV feeds you can watch right now. They're scattered across Dishub DKI Jakarta's ATCS, Balitower, and a handful of aggregator sites — and finding the one camera you actually want is its own commute.

So I built a dashboard.

👉 View the dashboard →

What's in it

  • ~50 public traffic cameras across all five Jakarta districts.
  • Filter by Central, South, East, West, North Jakarta in one tap.
  • Search by street name, neighborhood, or landmark.
  • Click-to-play embeds — nothing streams until you ask for it, so the page loads fast and doesn't melt your bandwidth.
  • A direct Open in new tab link on every card for streams that refuse to embed.

Where the feeds come from

SourceWhat it is
LewatManaAggregator that re-embeds Dishub DKI ATCS feeds with friendly URLs.
Balitower CCTVBali Towerindo Sentra's public infrastructure cameras — multiple angles per location.
ATCS JakartaDishub's own official map (intermittent uptime).
Jakarta Smart CityOfficial city dashboard with a CCTV layer.
BPTJ StreamingGreater Jakarta (Jabodetabek) toll/arterial cameras.
WebcamTaxi — Cawang HDSingle HD camera on Jl. DI Panjaitan.

Notable spots covered

  • Bundaran HI and Jl. MH Thamrin — the postcard view of downtown.
  • Gelora Bung Karno / Senayan — nine separate Balitower angles around the stadium complex.
  • Cawang flyover and Jl. DI Panjaitan in HD — East Jakarta's most painful chokepoints.
  • Tomang flyover, Mangga Besar, Tanjung Duren — West side.
  • Ancol, Tanjung Priok, Sunter, Bandengan — the entire North coast.

Caveats

Some embeds will refuse to load inside an iframe (X-Frame-Options). Every camera card has an Open in new tab link as a fallback. If a particular camera looks dead in the embed, that's almost always why.

This is self-hosted on the same Raspberry Pi that runs this blog — running over a Cloudflare Tunnel, no open ports. The whole page is a single Next.js route with static data; the cameras are not proxied, just linked.

Open the dashboard →

Filed under

jakartadashboardcctvself-hosted