2026 · Zagreb city information for phone, desktop and public screens, built as the working artefact of an open-data funding application · Applicant, designer, developer
A Zagreb city-information prototype for the City's open-data call: six live domains on phone, desktop and public screens, ten minutes per scan.
I built Kaj ima? before there was any money for it, because an open-data call is the one kind of application where a proposal you can scan beats a proposal you can read. The City's evaluators can open a public screen in their browser, pair a phone with a real rotating code, watch the trams move, and pull the plug on the session after ten minutes — the whole argument is verifiable in the minute they spend on it. The first commit is 11 September 2026; the prototype was public on the 14th and the source on the 15th; the 660th commit landed on the 19th. The name shares the City's own e-newsletter on purpose: I am proposing the contemporary version of that function, not a competitor to it.
There are things I refused to build. No accounts, no cookies, no device fingerprint, no geolocation prompt, no demo mode that skips the pairing — access is paid with presence, ten minutes from a screen you stood in front of, five from a friend, and then the view closes and nothing calls you back. No invented data: a source that is down is shown as down, never as zero and never as an all-clear, and a tram marker is allowed to run behind the real tram but never ahead of it, because behind reads as GPS lag and ahead reads as a broken app. The safety page works with JavaScript off and belongs to everyone without a code.
I will be straight about the rest. Without the City there is no separate public rollout; the prototype stays public for evaluation, the code is under AGPL with an EUPL offer to the City, and the six screens, the accessibility audits and the demand dataset are what the EUR 20,000 would pay for. Nothing has been physically tested on a café wall yet — all verification so far is automated. I can picture these screens still doing their job on a Zagreb street decades from now, the way phone boxes once did, and I would consider almost any other outcome a failure.
- Matija Radeljak
Kaj ima? began on 11 September 2026 with a deadline and a decision. The City of Zagreb's 2026 call for open-data projects asked for proposals; Matija Radeljak decided the proposal should be a working product before it was a document. Aning Film built it in eight days — 660 commits between 11 and 19 September — and the prototype went public at zagreb.aningfilm.hr on 14 September, with the source on GitHub the day after. The name is deliberate: the City already sends an e-newsletter called Kaj ima?, and the project is offered as the contemporary version of that same function — a screen in a café or a library and a phone in the hand, next to the e-mail that stays.
The product takes the City's scattered open data — ZET vehicle positions every ten seconds, road closures, DHMZ observations, forecasts and warnings, EMSC earthquakes, the Official Gazette, civil-protection assembly points, six event sources — and turns it into six domains: Sada (now), Promet (transport), Vrijeme (weather), Sigurnost (safety), Grad (city) and Događanja (events). Every value carries its own time and source; fetch time is never presented as observation time, and an unavailable source is neither zero nor a confirmation that there are no warnings. The 18 September upgrade added a place-led map with 204 cultural venues, 3,795 street histories from the City's own register, 763 heritage records drawn as protection outlines, bike-share counts, air quality and the Sava bulletin.
The access model is the signature. There is no account, no install and no tracking. A public screen shows a QR code and an eight-character code that rotates every 30 seconds and can be used once; scanning it opens ten minutes on your own device, and „Podijeli grad” hands five minutes to one person beside you, who cannot pass them on. Same-Wi-Fi pairing is allowed, and no demo mode bypasses it: anyone can create a temporary screen on /kiosk/ for 24 hours, five per network per hour. Scanning never takes over the public screen; presenting something on it is a separate, confirmed action, and the screen acknowledges only what it has actually rendered. When the ten minutes end, the view freezes as an attributed snapshot that can still be exported. Safety is the exception to everything: the /hitno page is drawn by the Worker, works without JavaScript and is open to everyone without a session or a time limit.
Under the transport layer sits a real track graph. ZET's real-time feed carries positions but no direction or speed, so the twin engine merged on 16 September computes each vehicle's movement from its own history, the timetable and a rail graph built from ZET's track geometry — 293 edges, three junctions the source shapes never draw and 52 synthetic paths. One rule binds the whole engine: rather behind, never ahead; catch up only forward; hold when evidence conflicts. A marker behind the real tram reads as GPS lag; a marker ahead that later has to back up reads as a broken app.
The stack is one Cloudflare Worker, six Durable Object classes on SQLite, KV for last-good copies of every source, and a private R2 bucket with a regional Protomaps basemap served from the same origin through MapLibre. A lightweight mode loads about 104 kB compressed without a map library, webfonts or canvas, so a ten-year-old laptop or a café television can be a screen. More than 2,500 unit and Worker tests and over a hundred browser scenarios with real pairing run before every release; deployment is a git push to Cloudflare Workers Builds. The code is AGPL-3.0-or-later, offered to the City under EUPL-1.2 as well; derived data sits under the Croatian Open Licence with a DCAT-AP catalogue.
The application, submitted by 17 September 2026, asks for EUR 20,000 excluding VAT over ten months: six screens in a café, a library, association spaces and a location of the City's choosing, four of them on donated devices; two accessibility audits with users with disabilities; a monthly anonymised demand dataset for the City; and a running cost under EUR 100 a year afterwards. For the studio, Kaj ima? is Aning Film proposing public infrastructure rather than selling an app — code, data and a pairing protocol the City can take whole. It is also honest about its state: without City backing there is no separate public rollout, the prototype stays public for evaluation, and there is no third-party press yet.