Skip to content
D. Svilenković
01Work02Services03Industries04Guides053D06Check your site07Contact

HomeWorkBaletska škola Dobrile Novkov “La Sylphide”

Baletska škola Dobrile Novkov “La Sylphide”

website of a Novi Sad ballet school in Serbian, English and Russian

A ballet school that has been running in Novi Sad since 1991 had a 2016 WordPress site: seven pages, video players with no videos and a biography of the founder written in the present tense. The new site was written from scratch, without a CMS, in three languages — Serbian, English and Russian. It asks only one thing of the visitor: an enrollment application.

  • Multi-page website
  • Novi Sad
  • August 2026
  • 12 min read
  • PHP
  • No CMS
  • hreflang sr/en/ru
  • WebP
  • View Transitions
Customer
Baletska škola Dobrile Novkov “La Sylphide”
Industry
Ballet school, classical ballet using the Vaganova method
City
Novi Sad, Svetozara Miletića 47
Type
Multi-page website with an enrollment form
Languages
Serbian, English, Russian
Technologies
PHP · static includes · self-hosted fonts · hreflang
Website
ballet-dobrilanovkov.com
Status
Live since August 2026
The La Sylphide ballet school homepage with the heading Baletska škola Dobrile Novkov
Homepage — a school since 1991, “Enrollment open” and the button to apply

01 / 11

What La Sylphide ballet school does

Baletska škola Dobrile Novkov “La Sylphide” has been running in Novi Sad since 1991, in a studio at Svetozara Miletića 47, right in the city center. The school presents itself as the first private ballet school in Novi Sad; by its own figures, more than a thousand students have trained there, and its students have staged twenty-five performances.

The program is classical ballet following the Vaganova Academy curriculum, from the youngest children up: preschool groups for ages three and four, classical technique from age five, a primary classical ballet school from age nine that ends with a verified diploma, and preparation for the entrance exam at a secondary ballet school. On top of that, there are three adult groups — two for beginners and one advanced — and individual coaching sessions for all ages.

The school was founded by Dobrila Novkov: a ballerina and soloist with the Ballet of the Serbian National Theatre, a teacher trained at the Vaganova Academy in Saint Petersburg, and head of the SNP Ballet for two seasons. She ran the school for more than three decades and wrote a book about that work, “Sve moje vile”. Today the youngest groups and the adult groups are led by Sonja Hrnjaković, a ballet teacher who has been with the school since 2020.

So: a school with a history, an archive and a clear program. And a website that showed almost none of it.

The Ballet for Children in Novi Sad page with a photo of a group
Ballet for children — from age three to a verified diploma

02 / 11

What we found, and why a refresh made no sense

The old site was a 2016 WordPress install, version 4.6, on PHP 7.4, with a purchased theme that had not been maintained for a long time. Seven pages of text, a gallery through a plugin, not a single form. What really got in the way was not the look but the content:

  • Four of the five embedded videos no longer existed. The clips had disappeared from YouTube years earlier, and the site was still loading empty players.
  • The site was indexed at both the HTTP and the HTTPS address, as two separate sites.
  • The phone numbers in online directories were outdated. The new numbers were nowhere on the internet.
  • There was not a single page about adult ballet, even though the school runs three such groups — and nobody in Novi Sad describes that offering on even one page.
  • The founder's biography was written in the present tense. Dobrila Novkov passed away in 2025.

The initial agreement was to refresh the existing site. After reviewing the code and the content, we proposed something different, and the client accepted: a WordPress install that old is not refreshed, it is replaced. A ballet school's website has no blog, no store and no daily changes — it has a dozen or so pages that get updated once or twice a year. For a site like that, a CMS is a burden: a database that can fail, plugins that need updating and an admin area nobody opens for months.

So the whole site was written from scratch, as plain PHP pages with shared parts pulled in through includes, with no database and not a single plugin.

The Enrollment page with the Apply for enrollment button and three steps to the first class
Enrollment — the application and three steps to the first class

03 / 11

Structure: twelve pages leading to one action

The content is organized by what the visitor is looking for, not by how it used to be arranged. The homepage answers the most common questions — who, where, since when, for what age and how to apply — and then branches out.

  • Programs: ballet for children and ballet for adults, each with its own age groups, classes and the questions that audience actually asks.
  • School and method: a page about the school and a separate page about the Vaganova method.
  • Founder: a biography and a page about the book “Sve moje vile”.
  • Archive: a photo gallery with filters and a video page with recordings of performances.
  • Action: contact and enrollment, two pages that lead to the same form.

A parent and an adult student are not looking for the same thing and do not come in the same way. A parent looks for the age group, the diploma and what the child gets out of it; adults look for a class time, whether it is too late to start and whether they have to perform on stage. That is why there are two pages, not one with two paragraphs.

In the end, everything leads to one place: the enrollment page. The site has no cart, no payments and no hourly booking — there is an application, after which the school calls back. That is how the school works, so that is how the site works.

04 / 11

Enrollment — a form that works even when JavaScript does not

The enrollment application is the site's only feature, so it got the most attention. The form asks only for what is needed to call back: name, phone, email as an optional field, who the application is for and which class time works. The program dropdown is not generic — it lists the school's actual groups, from children aged three to four, through the primary classical ballet school and preparation for secondary school, to adult beginners, advanced students and individual sessions.

That list does two jobs at once. It saves the parent some typing, and the school receives an application that is already sorted — not a message saying “I'm interested in ballet for my child” but an entry that says right away which group it belongs to.

The form works without JavaScript. A regular form submission, processing on the server, and a return to the same page with a message. The security token is generated on the server when the page is rendered, so nothing has to load in the browser first for the button to work. In practice, this means the application goes through from an older phone, over a poor mobile connection, and even when a script blocker stops something.

The form also comes with a limit on submissions from the same address per hour and a honeypot field that real visitors do not see — enough to keep the school's inbox from filling up with automated messages. The application arrives at the school's address as a regular email, with all the fields in the body of the message. There is no admin panel anyone has to log in to just to see that a new student has signed up.

05 / 11

Three languages, one site

The site has English and Russian versions, available from the header of every page. English because people who do not speak Serbian also ask about a ballet school in central Novi Sad; Russian because the method the school teaches is Russian, so for that audience a single word says exactly what they are looking for.

The decision was not to make three separate sites that would have to be maintained three times. The English and Russian pages are complete landing pages: programs, the method, what to know before the first class, contact details and the same application form. Shared parts — navigation, footer, form messages, confirmations and errors — go through a simple translation function, so the text is written once per language rather than copied page by page.

For search engines, the relationship between the versions is marked with hreflang tags for sr-Latn, en and ru, with x-default pointing to the Serbian version. It is a detail that is easy to skip, and without it Google may show a visitor from Serbia the English page, or the other way around.

Cyrillic also called for a technical step: the fonts are self-hosted and split into three subsets — Latin, Latin Extended and Cyrillic — so the Russian page does not end up missing its letters and the Serbian page does not load Cyrillic characters it does not need.

06 / 11

Content that could not just be copied over

Most of the work was not code but text. Only the part that was still accurate was carried over from the old site; the rest was written from scratch, using information the school sent over several rounds.

The founder's biography was rewritten in the past tense and expanded with information from the school's archive — her training, roles at the Serbian National Theatre, teaching work, the year the school was founded — and it ends with a short section titled “Remembrance”. It was the most sensitive part of the job and was done with the client's explicit approval of the tone, without sentimentality and without guesswork.

We also added the page What is the Vaganova method. The reason is simple: parents come across that word on every ballet website, but nobody explains in Serbian what it means. The page explains who Agrippina Vaganova was, what sets the method apart, what a class looks like and what a child gets out of it compared with an adult.

We also added what the school had but had never shown: a timeline from 1991 to 2023 with performances and anniversaries, a description of a class in three steps (barre, center work, jumps), a list of performances, and a gallery of thirty-three archive photos with filters by type. The wording was aligned with what the school actually issues — for example, instead of the word “certificate”, it says “verified diploma” everywhere, because that is what a student receives at the end.

Three archive videos — an anniversary program, the book launch and an interview with the founder — were uploaded to the school's YouTube channel and embedded on the video page. The largest of them is close to four gigabytes, so the upload was done from the server, not through a browser.

07 / 11

Technical build without a CMS

The site is plain PHP pages with a shared header, footer and configuration pulled in through includes. No database, no admin area, no plugins. The content lives in files, and files are something you can copy and move in a minute.

The code is written to run on both PHP 7.4 and 8.3, because the client's shared hosting is not always on the latest version, and the site must not go down because the provider switched versions overnight. A single configuration file detects which host it is running on and picks the base URL, the recipient of applications and whether the page may be indexed at all — so the preview version can never accidentally end up in search results instead of the real one.

Visually, everything comes down to three things: a white background, ink and burgundy. No rounded corners, thin lines instead of shadows, one highlighted call to action per page. Two fonts, both self-hosted, with not a single request to a third-party server for typography.

The site has both a light and a dark theme; the choice is remembered in the browser and applied before the page is drawn, so there is none of that brief white flash on load. In the dark theme, the burgundy is not the same in text and in solid areas — they are two separate values in the styles, because the same color in both cases would fall below the readability threshold. A small detail nobody notices until it is done wrong.

08 / 11

Speed, and what does not load until you ask for it

A site with a photo archive and performance videos can easily become slow. Here, all the heavy parts are held back until the visitor shows they want them.

  • Videos do not load on their own. The video page shows thumbnails with the length of each clip; YouTube is called only on click, and in privacy-enhanced mode (youtube-nocookie.com), where watching on the site does not affect recommendations and ads on YouTube.
  • The Google map does not load on its own. The contact page shows a static map with a button; the real Google frame is inserted only when the visitor asks for it.
  • Photos are served in WebP format, with their dimensions set in advance so the page does not shift while they load, and they open enlarged through the element the browser already has for that, without a single library.
  • Page transitions use View Transitions, and the next page is prefetched while the visitor hovers over a link. The click then feels instant.

The result is measurable: in a test after launch, PageSpeed Insights gave the desktop version top scores in all four categories, and the mobile version was in the same range. That was not especially hard — a site without a CMS, a database or a single third-party script has nothing to slow it down.

09 / 11

Moving off WordPress without dropping in search

This is the part of the job the client does not see, and the one that most easily brings down a site that has ranked for years.

First, a full backup of the existing state was made: the complete contents of the hosting account and an export of the old WordPress database. The site was downloaded over FTP, with no SSH access, so the database was exported with a temporary tool protected by a one-time key, which was removed right after the download.

The new site was set up in a separate directory and then renamed in one move, while the old WordPress was moved out of the site's reach and left untouched as a fallback. What had to survive the move — the folder with images from all previous years and the directory for certificate validation — was put back, so all the old photo URLs still work.

Redirects were handled in a single hop: from the address without www and from HTTP straight to the final address, with no chain that Google counts as a loss. Old WordPress paths that led to content were kept and point to the new pages, while technical URLs left behind by the platform are clearly reported as permanently removed, instead of returning an error page or empty content.

Where it got hard: the hosting the site runs on has its own cache in front of the server, and after the switch it kept serving the old pages. A check with a plain command-line tool showed that the change had not gone through, even though it had — the cache keeps separate versions for requests with and without compression, and a real browser always asks for the compressed one. The conclusion “the change has not arrived” was wrong; visitors were seeing the new site the whole time. Since then, every check is done the way a real browser requests the page, not with a bare command.

10 / 11

SEO and visibility in Novi Sad

Even before this site, the school was on the first page for searches for a ballet school in Novi Sad, so the task was not to break that and to cover what nobody else was covering.

Every page has its own title and description, written to fit the width Google displays, and its own canonical URL. The site carries linked data about the school as a local business and an educational organization — address, coordinates, both phone numbers, email, founding year, the languages it replies in — the founder is described as a person, the book as a book, and every video on the video page as a video with its duration. The pages for children, for adults and about the method have marked-up FAQs.

The school's details are consistent everywhere: the same address, the same numbers, the same name. The old numbers in directories were the main reason the site and the directories did not match, and that is one of the signals local search looks at.

On top of that, there is a sitemap that lists every gallery photo along with all the pages, so the images can also show up in image search. There is also a robots.txt that blocks only the form handler and internal parts, and a file describing the site for language models. The page about the Vaganova method was also written with that in mind: it is a question nobody had answered in Serbian, and many people ask it.

11 / 11

What the school ends up with

A fourteen-page site in three languages, on its own domain, that does not depend on any platform. No subscription, no plugins that fall apart with the next update and no admin area to guard against break-ins — because there isn't one.

In practice, a day looks like this: a parent or an adult student opens a program page, fills in the application, and it arrives in the school's inbox with the age and preferred class time already filled in. Calling back is the only step left for a person. The archive photos and videos are in one place, not scattered across social networks.

Content is updated through us, as needed, with a backup before every change. A school that changes its text twice a year would have nothing to do with an admin panel except forget its password.

The client's comment after delivery was short: the site is excellent, modern and functional. For a site whose job is to bring people into the studio, that is exactly the right measure.

On a phone

The same site, in your hand.

Most visitors come from phones, so the layout, buttons and images are arranged for the small screen first.

Baletska škola Dobrile Novkov “La Sylphide” on a phone

Questions

What clients ask.

Why a site without WordPress?

Because this site has no use for a CMS. It has no blog, no store and no daily changes, just a dozen or so pages that get updated once or twice a year. WordPress would have brought a database, plugins and an admin area that need maintaining and protecting, and it would not have solved anything. Without it, the site is faster, more secure and cannot break on its own.

So who updates the content if there is no admin panel?

Changes go through us, as needed, with a backup before each one. For a site that is updated a few times a year, that is simpler than an admin panel that gets opened once every six months. If the scope changes one day, an admin area can be added just for the part that actually changes.

How does a site in three languages work, and does Google understand it?

The Serbian, English and Russian versions live at separate addresses and are linked to each other with hreflang tags, with a default version for everyone else. Shared parts such as the menu, footer and form messages are translated in one place, so the text is not copied page by page. The fonts include Cyrillic characters as well, so the Russian version looks the same as the others.

What happens to the old URLs and images after moving off WordPress?

Old URLs that led to content are redirected to the new pages in a single hop. The folder with all the images from previous years was put back in its place, so the old photo URLs still work. The entire old site and its database were saved as a backup before anything was moved.

Where do applications from the form go?

To the school's email address, as a plain message with all the filled-in fields. There is no admin panel anyone has to log in to just to see a new application. The form also works without JavaScript, so it goes through from an older phone and over a weak connection.

Can a site like this be moved to another hosting provider?

Yes, and without exporting a database. The site is just files; they get copied over and run anywhere there is PHP. The code is written to work on both older and newer PHP versions, because on shared hosting the version can change without notice.

Related projects

From the same field.

Next projectApartment 11/61 — Kraljevi ČardaciOne-page website · Kopaonik

→Contact

Have a project? Write to us.

Four short questions, about a minute of your time. We reply within 24 hours.