← All work
LIVE

Uslužne intervencije

A plumber's website with four languages, structured data, and a custom admin panel — designed, built, and deployed in one day.

Client work 2026 Astro 5 (SSR)Cloudflare PagesD1 + R2Tailwind v4Vanilla JS admin
Visit live site ↗
Uslužne intervencije — screenshot

Brief in the morning, production by midnight — proof that “small client” and “serious engineering” aren’t opposites.

Context

Nemanja Vasiljković is a plumber in Belgrade. His clients aren’t only locals: diaspora owners renovating apartments from Vienna or Frankfurt, and expats whose Serbian ends at “hvala.” He needed a site that ranks locally, speaks to all of them, and fits a tradesman’s budget — which, in practice, meant one day of work on February 7, 2026.

Decisions

  1. Four languages, localized URLs. Serbian, English, German, and Russian — with real localized paths (/sr/cenovnik, /en/pricing, /de/preisliste, /ru/ceny) and hreflang tags on every page. Belgrade plumbing is more international than you’d guess.
  2. Prices live in the database, not the code. 49 services in 4 categories, all editable through an admin panel. When Nemanja raises a price, he doesn’t call a developer.
  3. Vanilla JavaScript admin — no framework. CRUD forms, modals, and toasts don’t need React. Less to ship, less to break.
  4. JSON-LD from day one. Plumber, Service, and BreadcrumbList schema plus a dynamic multilingual sitemap. Local SEO is the whole game for a trade business.
  5. Cloudflare everything. Pages for hosting, D1 for data, R2 for gallery images. Zero monthly server bill — a number a plumber appreciates.

Build

Astro 5 in SSR mode on Cloudflare Pages, D1 with 8 tables, R2 upload with a lightbox gallery, JWT auth in HttpOnly cookies. I don’t write the code — I direct AI agents. My job was the spec: URL structure, translation architecture, pricing model. The agents produced 51 source files and 11 API routes; I reviewed, corrected, and shipped.

Outcome

Live at usluzneintervencije.com: four languages, a 49-service dynamic price list, a searchable gallery, and an admin panel the client runs himself. I won’t invent call counts — the site is young. What I can count is one day from empty folder to production.

Lesson

“Small” clients don’t need small engineering — they need big engineering, delivered in a day.