Language EN SR

Work · concept build

SVOD — a practice that shows the plan.

SVOD is a website concept for a dental practice in Vračar, Belgrade, built from scratch: three pages, a full price list, a drawing of the jaw that explains every tooth, and a treatment plan drawn as a document. Hand-written HTML, CSS and vanilla JavaScript — no framework and no page builder. The site is in Serbian, for Serbian patients. Try it in the laptop below, then read how it came together.

svod-demo.rs DEMO

SVOD is a concept, not a client project. The practice does not exist, in Vračar or anywhere else: the name, the team, the prices, the phone number and the address were invented for the demonstration, and every screen of the site says so. The photographs are illustrative and do not show this practice. The code and the design are real — that is the only part we claim. The enquiry form sends nothing and stores nothing.

At a glance

  • Type — a dental practice website, for a visitor still deciding where to book a check-up.
  • Scope — three pages (home, services, price list), a treatment plan laid out as a document, a jaw drawing that explains every tooth, and a three-step enquiry.
  • Stack — hand-written HTML5, CSS and vanilla JavaScript. No framework, no bundler and no CSS library: one stylesheet, one script.
  • Language — Serbian, in the Latin script. Written in Serbian, not translated into it.
  • Weight — 1.77 MB for the whole site, of which 740 KB is two video files and 721 KB is images. The breakdown is in the table below.
  • Accessibility — contrast measured for every level of text, with headroom above AA, and full prefers-reduced-motion support.

Why a dental practice

Because it is the hardest easy brief there is.

Easy, because everyone knows what the visitor wants: what it costs, whether it hurts, and who will be doing it. Hard, because dentistry is a regulated profession. An invented diploma, an invented registration number or an invented success rate is not marketing licence; it is exactly the kind of mistake this sector is known for. And a site that says nothing concrete to stay safe persuades nobody.

The whole job was holding both ends. There is no client, no engagement and no analytics, so this is not a study of results but a study of decisions: what we look at before drawing anything, what we refuse to do, and why.

What we looked at before drawing anything

Thirteen practices in Belgrade and Pančevo, in three passes, opened in a browser and measured — not skimmed from search results. Three findings changed the project.

First: prices on the site are not an advantage. We started from the assumption that a published price list was what the competition keeps hidden. It is not. Three of the four practices in the second pass publish prices in numbers, two of them a full list in dinars, and one gives the first check-up away for free. Published prices are normal in this market, not a difference, so the positioning had to move.

Second: a menu item is not content. One practice in the set has “Before and after” and “Patient stories” in its main navigation, and both pages show Lorem ipsum live — Latin placeholder text, on a published site. The stories page contains no stories. The bar in this sector is not set high, but it is easy to assume it is.

Third: the thing nobody shows. One practice in the third pass holds exactly the tone we were after — “performed gently” in its headline, “a clear treatment plan” in its introduction, a real Google rating at the top of the page. But it only names the plan and never shows it, and it publishes no prices at all.

That was the gap. Not whether anyone promises a clear plan, but whether anyone shows one.

The position: a document you take home

The site's headline promises an object, not a feeling:

Plan terapije na papiru, sa prvog pregleda.A treatment plan on paper, from the first check-up.

And then the site draws that paper. The home page carries a sample treatment plan set out as a document: line items, tooth numbers, a price for each item, what is done now and what can wait, and a total at the foot. Underneath sits the sentence the whole argument rests on: the plan is yours even if you have the treatment somewhere else.

The figures in that sample agree with the published price list: every line falls inside the range the price list gives for it. That is not a detail — a plan whose total does not match the price list on the same site is worse than no plan at all.

A check-up takes 30 minutes and costs 2,000 dinars. That figure was not invented to sound good: it is exactly what one of the practices in our set charges.

What we refused to do

Honestly, this is a more useful list than any other on this page. Everything in the left column was either asked for during the build or is common in the sector.

What stayed off the site, and why
Asked for, or commonWhy it is not there
Invented diplomas and registration numbersAn invented practice cannot carry anyone's diploma, and someone else's diploma under an invented name is not a concept, it is misrepresentation.
Invented ratings and patient reviewsA rating nobody gave undoes the argument the rest of the site is making.
A before-and-after galleryThose are other people's mouths, and consent is the whole point. And the usual version is a slider over close-ups of tartar and decayed teeth — exactly the images an anxious patient is bracing for. On a page that promises nobody will be frightened, a gallery built that way works against its own position.
Anything frighteningFour pieces of material were turned down: a drill-in-the-mouth video, a macro shot of a syringe, a procedure video with an open mouth, and a photograph of a surgical setup.
An embedded Google mapThe address is invented, so the pin would land on somebody's real building, and the iframe sets cookies before anyone has agreed to anything. A schematic map and a link that opens in a new tab stand in its place.
Background musicIt was suggested, and we dropped it: browsers block autoplay, accessibility requires a way to stop anything that runs longer than three seconds, and the quiet is part of the point here. The calm came from spacing instead of sound.
A carouselNearly every practice in the set has at least one. A carousel is where content goes so nobody sees it.
An entry pop-up, struck-through prices, a countdownAll three exist in this sector. None of them belongs on a site that claims to hide nothing.

Design decisions

  • The arch. The logo, the favicon, the frame of the jaw drawing and the team plates share one shape — the arch that teeth stand in. One motif, repeated, instead of five ornaments that have never met.
  • One accent colour, and not blue. Deep green, #196840. The whole sector is cyan on white; two good photographs were turned down only because the chair in them was teal.
  • Warm porcelain, neither white nor dark. The ground is #f6f2eb. A dark palette was tried and dropped: it reads as an agency site, and the second-biggest trap in this sector is clinical coldness.
  • Two typefaces, self-hosted. Fraunces for headings and Instrument Sans for text, both with the latin-ext subset so č, ć, ž, š and đ never fall back to another font. Most practices in the set pull their fonts from Google's servers; under a stricter security policy that can fail without a single console message — the page opens, just in the wrong typeface.
  • Two animations, and no third. The dental arch that draws itself once and stops, and the video at the top of the page.
  • Text never sits directly on the video. The headline is in an opaque panel over the footage. Contrast against a moving image cannot be measured, and everything here is measured.
  • A jaw drawing that explains. Point at a tooth — or tap it on a phone — to get its number, its name, what usually goes wrong with it and what is usually done. None of the six practices in the last pass has anything interactive beyond carousels and accordions.
  • “Does it hurt?” where the decision is made. The competition does answer that question, but in blog posts, behind a click, written for search engines; one such post dates from 2021. Here it sits on the page where the visitor is deciding, together with the raised-hand agreement: if it hurts, we stop.

Three empty slots that stay empty

At the foot of the team section there is a box headed “What would stand here on a real practice's site”, with three items: diplomas and registration numbers, patient reviews and a rating, and before-and-after. Each says what a real site would put there and why it is blank here.

That is deliberate. Leaving them out would suggest we never thought of them. Inventing them would suggest everything else on the site is equally reliable. An empty slot that explains itself is the only third option.

The same reasoning sits behind the label on every team photograph: illustrative photograph. Without it, the page would be asserting that a real person is a named dentist.

How it was built

By hand. HTML, CSS and plain JavaScript — no framework, no bundler, no build step and no CSS library. Everything is self-hosted, from the typefaces and images to the video and icons, and nothing is fetched from anyone else's server while the page loads.

Three checks run over the site before every change: whether anything is broken (dead links, invalid JSON-LD, unclosed tags, the sitemap), whether the header and footer have drifted from their templates, and whether the design has slid into the generic. That third one counts things like small letter-spaced capitals and too many different corner radii, and it demands a written reason for every exception.

The video at the top was re-encoded from 10.9 MB to 576 KB and trimmed to nine seconds, and phones get a smaller file than desktops. Instead of adjectives, the numbers:

Measured on 25 September 2026
WhatHow much
The whole site — three pages, code, fonts, images and video1.77 MB
Video, two files (desktop and phone)740 KB
Images, 10 files721 KB
Fonts — four variable woff2 files109 KB
CSS, one file75 KB
JavaScript, one file37 KB
First load of the home page, desktop910 KB · 10 requests

Source: file sizes on disk in our repository, and the transfer measured in the browser on a first visit to the home page at 1440 pixels wide, from a local server, on 25 September 2026. Of the 910 KB first load, 576 KB is the video. HTML, CSS and JavaScript travel compressed over HTTPS, so real transfer is smaller than these figures — we quote the larger number on purpose. All eight photographs carry loading="lazy" and are fetched only as they scroll into view, so none of them is in the first load.

Lighthouse · Performance
Lighthouse · Accessibility
Lighthouse · Best practices

We run Lighthouse against the published site and fill these in once measured. Until then there is a dash here, not an estimate.

Accessibility and craft

Every level of text was calculated against its real background, not estimated: body text 14.65:1, secondary text 6.92:1, the quietest 5.32:1, and the accent 6.08:1. All of it passes AA with room to spare. The icons are drawn in SVG rather than taken from a font, where they look different on every phone.

Under prefers-reduced-motion nothing moves: the arch appears finished and the video's first frame stands in for the video. Without JavaScript the page still reads in full — the same frame replaces the video, and a note with the phone number replaces the form. Only the jaw drawing is left empty.

We do not do this for a checklist. An anxious patient reads more slowly, often on a phone and with one hand, and the site that is easy to read at that moment is the site that gets the call.

What this site does not have — and what it would if it were real

This is a concept, and everything that would sit behind the form does not exist. We say so here because on a real project that is half the work, and a showcase never shows it.

  • No back end. The enquiry form checks its fields and shows a confirmation, but it sends nothing and stores nothing — and says so underneath. No server, no database, no email.
  • No booking system. The appointment times on the site are text, not a calendar.
  • No CMS. Prices, copy and the team are written into the code; the practice could not change them itself.
  • No analytics, cookies or tracking, so no cookie banner either — there is nothing to ask for.
  • No privacy page, on purpose: nothing is collected. It is the first thing built once a real endpoint is wired in.

If this were a real job, the scope would include:

What a real project would add, and why
WhatWhy
A form that really sends — to the practice's inbox, with spam protection and a record of each enquiryWithout it the site brings in nothing. It arrives together with a privacy page, consent and a retention period, as Serbia's personal data protection law requires.
BookingEither a simple appointment request that lands in the inbox, or a link to the calendar the practice already uses. Which one depends on who in the practice actually keeps the diary.
A CMS for the price list and copyA price list changes at least once a year. If every change means calling the agency, the prices on the site go stale and the promise of transparency falls with them.
Real photographyOne shoot, the team and the rooms, with written consent from everyone in the frame. It replaces every illustrative image and all three team plates at once.
Diplomas and registration numbersChecked against the register before publication. They fill the first empty slot — the only right way.
Google reviews from the practice's profileWith a link to the source. They fill the second empty slot with a rating the visitor can open for themselves.
Cookie-free analyticsTo see whether the site brings in calls, without a cookie banner.
A second language — German before EnglishDental tourism is real income here: three of the six practices we opened in the third pass have a page for it, one runs in both German and Russian, and one is entirely in English.
A blog or newsWhat tells a visitor, and a search engine, that the practice is still alive.

All of this is work planned with the client, not a surprise at the end. That is why it is here.

What we would do differently

Two things, honestly.

The site uses the same headline typeface as a real Belgrade practice with a very similar tone. On a concept that is no problem; on a real project in the same city it would be, and the typeface would change.

And the photographs. Here they are illustrative, and every team plate says so. The first day of a real project is agreeing the shoot — a practice is recognised by its own rooms and its own people, not by someone else's.

What this build proves

A small practice's website can be concrete, calm and honest at the same time: it can say what things cost, show what a patient leaves the first check-up with, and invent nothing it cannot back up. Step into the site in the laptop above, point at a tooth, open the price list and send a test enquiry, then judge for yourself.

We bring the same process to every local business site: first the competitor set and the question of what they leave unanswered, and only then the design. The scope and prices are on the web design page.

If you run a practice and your site is not bringing in calls, put yours next to this one and tell us what is missing.