2026 · Croatia-wide map of what is open right now, with a phone-first dashboard for the shops that answer · Developer and operator
A Croatia-first map that answers whether a shop is open right now, built around the law that caps retail at 16 working Sundays a year.
This project credentials: Product & software development
radi.li is the second product to carry this name, and the first one was not mine: a Zagreb agency built a Sunday-shopping map under it two years before I started. What I inherited in April 2026 was only a scaffold, a copy of my own cjenik.app code renamed otvore.no; the second day of work was deleting some 5,700 lines of menu-app code. Everything on the map today, from the 16-Sundays model to the question mark in the logo, was built between 20 April and 17 September 2026.
The decisions I stand by are the ones people argue with me about. When hours are not confirmed the map says unknown, never closed, because a wrong 'open' sends someone ten kilometres in the rain to a locked door. There are no ads and there will not be; everyone pays a little instead, one euro a year on the consumer side. Verification is the payment itself: the Verified badge appears when money arrives from a business account whose OIB matches, not when a form is filled in. And the price ladder follows legal form, not size, so an obrt pays twenty euros, a d.d. pays a thousand, and a five-hundred-store chain pays the same thousand as a one-store one. I am not going to apologise for any of that.
What I will be straight about: it is live, and it is in a testing period. The locations on the map are authored sample data plus whatever real shops pay to be verified; there was not a single real paying customer when I wrote this, and the paid tier for real data only switches on 1 January 2027. Payments are confirmed by hand from the bank statement. The code is vanilla PHP without a framework, which is the point, and it is tested harder than most things I have shipped.
- Matija Radeljak
radi.li began on 20 April 2026 with a scaffold and a legal fact. Croatian trade law lets a retailer choose at most 16 working Sundays per outlet each year; statutory holidays never consume that quota. So whether the bakery, pharmacy or petrol station down the road is open this Sunday depends on which 16 days that shopkeeper picked, and nothing public says which. Matija Radeljak built the answer inside Aning Film as a map-first utility whose every design decision follows from that statute. The name had a history, an earlier product by the Zagreb agency Zero Molecule that this reboot does not continue; the code started as the studio's own cjenik.app scaffold, renamed otvore.no, and became radi.li three days later.
On the street it is a map with a status pill: open, closing soon, closed or unknown. Unknown is a deliberate state, because a wrong 'open' costs a wasted trip and an honest 'unknown' costs nothing. A date chip scopes the map to the coming Sunday or holiday, and the address bar is brand surface: radi.li?ljekarna opens the pharmacies through a strict registry that redirects synonyms and typos to the canonical query and lets marketing print only queries the check script proves resolve. For a shopkeeper it is a phone-first dashboard whose largest screen is the neradni dani planner, where an owner answers the law's question: which 16? Statutory exemptions for petrol stations, kiosks and shops inside hotels or hospitals are modelled, not approximated.
Money is the second load-bearing decision. Everyone pays a little: consumers EUR 1 a year, businesses an annual fee keyed to legal form rather than size, from EUR 20 for an obrt through EUR 50, EUR 180 and EUR 440 for companies by capital to EUR 1,000 for a d.d., net of 25 percent VAT. A five-hundred-store chain pays the same thousand as a one-store company: larger forms pay more so smaller ones stay on the same map. There are no ads and no card processor. An owner receives a Croatian ponuda with a HUB3A barcode for a banking app, and the Verified badge appears when the transfer lands from a business account whose OIB matches; the court-register lookup only prefills the form. 'Besplatno' is banned as selling copy: through 31 December 2026 the map is a disclosed testing period with sample data, and from 1 January 2027 there is no unpaid tier for real data.
The build ran in short, documented pushes. Day two deleted some 5,700 lines of inherited menu-app code. An eight-document launch playbook followed on 28 May, a hardening pass on 25 June, and a 'prototype-rescue' merge on 20 July that rebuilt the consumer surface whole. Between 9 and 11 August came brand v2 'Upitnik', the ?query device, the exemptions, cookie consent and a deterministic demo dataset of 33 fictional chains and 202 locations. An operator dashboard with five tabs shipped on 18 August. On 10 September the consumer price changed from EUR 1 for life to EUR 1 a year; on 17 September an anonymous feedback layer became release 2.6.0, the last of 200 commits.
The stack is deliberately plain: PHP 8 with strict types and a hand-rolled core, server-rendered HTML with IIFE JavaScript, a pure-CSS design system in warm paper and espresso tones, MySQL, passwordless sign-in, Google Maps as a layer and Cloudflare in front. No Composer, no Node, no SPA framework and no PHPUnit, by decision, yet the September release logged 745 regression assertions and 38 fixture-rendered screens. What is unfinished is equally plain: there were no real paying customers on 19 September 2026, payments are confirmed by hand from the bank statement, and backups, uptime alerting and the public launch itself remain open rows on the checklist. For the studio it is a product argued from first principles: one law, one map, everyone pays, and unknown is better than wrong.