Website2026-08-21

La Sylphide - ballet school website from Novi Sad in Serbian, English and Russian

The ballet school that has been operating in Novi Sad since 1991 had a website on WordPress from 2016: seven pages, video players without recordings and a biography of the founder written in the present tense. The new site was written from scratch, without CMS, in three languages ​​— Serbian, English and Russian. Only one thing is required from the visitor: an enrollment form.

Homepage of the La Sylphide ballet school website from Novi Sad
Homepage - school name, registration invitation and both phones on the first screen
Client
Dobrila Novkov Ballet School "La Sylphide"
Activity
Ballet school, classical ballet according to the Vaganova method
City
Novi Sad, Svetozara Miletića 47
Type
Multi-page site with enrollment form
Languages
Serbian, English, Russian
Technologies
PHP · static includes · self-hosted fonts · hreflang
Site
ballet-dobrilanovkov.com
Status
Live site as of August 2026
Technology
PHP · Bez CMS-a · hreflang sr/en/ru · WebP · View Transitions
01

Problem and context

What does La Sylphide ballet school do

Dobrila Novkov Ballet School "La Sylphide" has been operating in Novi Sad since 1991, in the hall in Svetozar Miletića 47, in the very center of the city. The school presents itself as the first private ballet school in Novi Sad; according to her data, more than a thousand students passed through it, and the students performed twenty-five plays.

The program is classical ballet according to the curriculum of the Vaganova Academy, from the youngest upwards: preschool groups from three and four years old, classical technique from the fifth year, elementary school of classical ballet from the ninth year with a verified certificate at the end, and preparation for admission to a high school ballet school. In addition, there are three groups for adults — two beginners and one advanced — and individual training exercises for all ages.

The school was founded by Dobrila Novkov: ballerina and soloist of the Serbian National Theater Ballet, pedagogue educated at the Vaganova Academy in St. Petersburg, head of the SNP Ballet for two seasons. She led it for more than three decades and wrote the book "All my villas" about that work. Sonja Hrnjaković, a ballet teacher, leads the groups of the youngest and adults today at the school since 2020.

So: a school with history, archives and a clear program. And a site that showed almost nothing of all that.

Section with programs: ballet for children, ballet for adults and individual exercises
Classical ballet classes for all ages, separated by program
02

What was found and why refreshing did not make sense

The old site was WordPress from 2016, version 4.6, on PHP 7.4, with a purchased theme that has not been maintained for a long time. Seven pages of text, gallery through the appendix, no form. What really bothered me was not the appearance but the content:

  • Four of the five embedded videos no longer existed. The clips had disappeared from YouTube years earlier, and the site still loaded empty players.
  • The site was indexed on both HTTP and HTTPS addresses, as two separate sites.
  • The phone numbers in the directories were old. The new numbers were nowhere to be found on the internet.
  • There wasn't a page about ballet for adults, although the school has three such groups — and in Novi Sad, no one describes the offer with a single page.
  • The biography of the founder was written in the present tense. Dobrila Novkov passed away in 2025.

The first agreement was to refresh the existing site. After reviewing the code and content, the proposal was different, and the client accepted it: WordPress of that age is not refreshed, it is replaced. The ballet school's website has no blog, no store, and no daily updates — it has a dozen or so pages that are updated once or twice a year. For such a site, CMS is a burden: a database that can fail, plugins that require updating, and an administration that no one opens for months.

That's why the whole site was written from scratch, as regular pages in PHP with divided parts through includes, without a database or plugins.

Ballet school hall at Svetozar Miletića 47 and section on the Vaganova method
School hall and section on the Vaganova Academy program
03

Structure: twelve pages leading to one action

The content is separated according to what the visitor is looking for, not according to how it was once complex. The main page gives the most frequently asked questions — who, where, since when, for what age and how to apply — and branches out further.

  • Programs: ballet for children and ballet for adults, each with its own ages, groups and questions that the audience really asks.
  • School and method: a page about the school and a separate page about the Vaganova method.
  • Founder: biography and page about the book "All my fairies".
  • Archive: photo gallery with filters and video page with recordings of performances.
  • Action: contact and registration, two pages leading to the same form.

A parent and an adult attendee do not ask for the same thing and do not enter in the same way. The parent asks for the age, certificate and what the child gets out of it; adults ask for an appointment, whether it's too late to start and whether he has to go on stage. That's why two pages, not one with two paragraphs.

Everything eventually leads to one place: the registration page. There is no basket on the site, no payment and no hourly scheduling — there is a registration, after which the school answers by phone. That's how the school works, and that's how it is on the website.

La Sylphide ballet school website on the phone
The same site on the phone, with the enrollment form at the fingertips
04

Enrollment — a form that works even when JavaScript doesn't work

The enrollment form is the only functionality of the site, which is why it received the most attention. The form asks only what is necessary to get back to you: name, phone, email as an optional field, for whom you are applying and which appointment is suitable. The drop-down list for the program is not generic — it contains real groups of schools, from three to four-year-olds, through elementary school classical ballet and preparation for high school, to adult beginners, advanced and individual exercises.

That list does two jobs at once. It shortens the writing process for the parent, and the school receives already classified information in the application — not the message "I'm interested in ballet for my child" but an item that immediately tells which group he belongs to.

The form works without JavaScript. Usually submit the form, process it on the server, return to the same page with the message. The security token is created on the server when the page is rendered, so it is not necessary that something in the browser has to be loaded first for the button to work. Practically, this means that the application is sent from an older phone, and via bad mobile internet, and when the script blocker stops something.

The form comes with a limit on the number of submissions from the same IP address in one hour and a bait field that the real visitor doesn't see — enough to keep the school's inbox from filling up with automatic messages. The application arrives in the school’s inbox as an ordinary email, with all fields in the body of the message. There is no panel where someone has to log in to see that a new student has arrived.

05

Three languages, one site

The site has English and Russian versions, accessible from the header of each page. English because people who don't speak Serbian also inquire about the ballet school in the center of Novi Sad; Russian because the school's method is Russian, so one word tells that audience exactly what they are looking for.

The decision was not to have three separate sites that need to be maintained three times. The English and Russian versions are complete entry sides: programs, method, what you need to know before the first class, contact and the same app form. The common parts—navigation, footer, form messages, confirmations, and errors—go through a simple translation function, so the text is written once per language, not rewritten per page.

The relationship between the versions is indicated to browsers by hreflang tags for sr-Latn, en and ru, with x-default pointing to the Serbian version. It is a detail that is easily skipped, and without it Google knows how to offer visitors from Serbia the English page, or vice versa.

Cyrillic also required a technical move: the fonts were independently hosted and cut into three subsets — Latin, extended Latin, and Cyrillic — so that the Russian version would not run out of its own letters, and the Serbian version would not drag Cyrillic characters it did not need.

06

Content that required careful rewriting

Most of the work was not code but text. Only material that remained accurate was migrated from the old site; the rest was rewritten, with data that the school provided on several occasions.

The founder's biography is written in the past tense and supplemented with data from the school's archives — education, roles at the Serbian National Theatre, pedagogical work, the year the school was founded — and ends with a short section "Remembrance". It was the most sensitive part of the job and was done with the client's express confirmation of the tone, without sentimentality or unsupported claims.

The page What is the Vaganova method has also been created. The reason is simple: parents meet that word on every ballet website, but in Serbian no one explains what it means. The page explains who Agrippina Vaganova was, how the method differs, what the class looks like and what a child has and what an adult gets from it.

What the school has and has never shown is also added: a timeline from 1991 to 2023 with performances and anniversaries, a description of the class in three steps (barre, center work and jumps), a list of performances, and a gallery of thirty-three photos from the archive with filters by type. The wording is consistent with what the school actually provides — for example, instead of the word "certificate" there is "verified testimony" everywhere, because that's what the student gets in the end.

Three archive recordings — the jubilee program, book promotion and a conversation 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 the browser.

07

Technical implementation without CMS

The site is a simple page in PHP with a common header, footer and configuration through include. No database, no administration, no plugins. The content is in the files, and the files are what gets copied and moved in a minute.

The code is written to work 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 the version overnight. A single configuration file recognizes which host it's running on and accordingly chooses the base address, the recipient of the submissions, and whether the page is allowed to be indexed at all — so a trial version can never accidentally end up in a search instead of the real one.

Visually, everything is reduced to three things: white background, ink and burgundy. No rounded corners, with thin lines instead of shadows, one emphatic call to action per page. Two fonts, both self-hosted, without a single call to someone else's typography server.

The site has both a light and a dark theme; the selection is remembered in the browser and applied before the page is rendered, so there is no short white flash when loading. In a dark theme, burgundy is not the same in text and in solid areas — they are two separate values ​​in the styles, because the same color would fall below the readability threshold in both cases. A little thing that doesn't get noticed until it's done wrong.

08

Performance and what doesn't load until you ask for it

A site with an archive of photos and recordings of performances can easily become slow. Here, all the hard parts are shelved until the visitor shows they want them.

  • Videos do not load themselves. On the video page there are thumbnails with the length of the clip; YouTube is called only on click, and that via an address without tracking cookies.
  • The Google map does not load itself. There is a static map with a button on the contact; the real Google frame is inserted only when the visitor requests it.
  • Photos are served in WebP format, with pre-written dimensions so that the page does not move while they are loaded, and are opened in enlargement through an element that exists for this in the browser, without any library.
  • Transition between pages uses View Transitions, and the next page is pre-drawn as the visitor hovers over the link. The click then works instantly.

The result is measurable: when measured after launch, PageSpeed Insights gave the desktop the maximum in all four categories, and the mobile version was in the same range. It wasn't particularly difficult — a site with no CMS, no database, and no third-party scripts, and nothing to slow it down.

09

Moving from WordPress without falling in search

This is the part of the work that the client doesn't see, and the easiest to bring down a site that has been ranking for years.

First, a full backup copy of the current state was created: the complete content of the account and the export of the old WordPress database. The site was downloaded via FTP, without SSH access, so the database was exported with a temporary tool with a one-time key that was removed immediately after the download.

The new site was placed in a separate directory and renamed in one go, and the old WordPress was moved out of reach of the site and left intact as a backup. What had to survive the move — the folder with pictures from all the previous years and the certificate confirmation folder — was moved back, so all the old photo addresses still work.

Redirects are solved in one jump: from an address without www and from HTTP immediately to the final address, without the chain that Google counts as a loss. Old WordPress paths to content are retained and point to new pages, and technical URLs left behind by the platform are clearly reported as permanently removed, rather than returning an error page or empty content.

Where it was difficult: the hosting on which the site is located has its own cache in front of the server and it continued to serve the old pages after the switch. Checking with a regular command line tool showed that the change didn't go through, even though it did — the cache stores separate versions for compressed and uncompressed requests, and the real browser always looks for the compressed one. The conclusion "the change did not arrive" was wrong; visitors saw new all the time. Since then, every check is done the way the page is searched for by a real browser, and not with a bare command.

10

SEO and visibility in Novi Sad

Even before this website, the school was on the first page of the search for ballet schools in Novi Sad, so the task was not to spoil it and to cover what no one was covering.

Each page has its own title and description, written to fit within the width that Google displays, and its own canonical URL. The site carries related data about the school as a local business and educational institution — address, coordinates, both telephone numbers, email, year of establishment, languages ​​in which answers are given — the founder is described as a person, the book as a book, and each recording from the video page as a video with duration. Pages for children, for adults and about the method have marked FAQs.

The information about the school is uniform in all places: same address, same numbers, same name. The old directory numbers were the main reason why the site and directories didn't match, and that's one of the signals that local search looks for.

In addition to this, there is a sitemap in which, in addition to all pages, twenty one photos from the gallery are registered, so the images can also appear in the image search. There is also robots.txt which closes only form processing and internals, and a site description file for language models. The page about the Vaganova method was written with that intention: it is a question that no one in Serbian has answered, and many are asking.

11

Outcome

What does the school have at the end

A site of fourteen pages in three languages, on its own domain, which does not depend on any platform. There are no subscriptions, no add-ons that break at the next update, and no administration to guard against intrusion — because there isn't.

Practically, the day looks like this: a parent or an adult participant opens the page of the program, fills out the application, and it arrives at the school's email with the age and desired date already entered. The call back is the only step left to man. Photos and recordings from the archive are in one place, not scattered on social media.

The content is updated through us, as necessary, with a backup copy before each change. A school that changes the text twice a year has nothing to do with the admin panel except to forget its password.

The client's comment after delivery was brief: the site is excellent, modern and functional. For a site whose job is to bring someone to the hall, it is the right measure.

FAQ

Frequently asked questions

Why a site without WordPress?

Because this site has nothing to do with CMS. It doesn't have a blog, it doesn't have a store or daily changes, it has a dozen pages that are updated once or twice a year. WordPress would bring there a base, plugins and administration that needs to be maintained and protected, and it would not solve anything. Without it, the site is faster, safer and cannot break automatically.

Then who changes the content when there is no panel?

Changes go through us, as needed, with a backup before each one. For a site that is updated several times a year, it is simpler than a panel that opens once every six months. If the scope changes one day, administration can be added only for the part that actually changes.

How does the site work in three languages ​​and does Google understand it?

The Serbian, English and Russian versions are located at separate addresses and are connected to each other with hreflang tags, with the default version for all others. Common parts such as the menu, footer and form messages are translated in one place, so the text is not rewritten from page to page. The fonts also have Cyrillic characters, so the Russian version looks the same as the others.

What happens to the old URLs and images after switching from WordPress?

The old URLs that led to the content were redirected to the new pages, in one jump. The folder with all the pictures from earlier years has been put back in place, so the old photo addresses still work. The entire old site and database were saved as a backup before anything was moved.

Where do applications from the form arrive?

To the school's email address, as a regular message with all fields filled out. There is no panel where someone has to log in to see a new login. The form works without JavaScript, so it can be sent from an older phone and over a weak connection.

Can a site like this be moved to another provider?

It can, and without exporting the database. The site is files; they are copied and run where there is PHP. The code is written in such a way that it works on both older and newer versions of PHP, because on shared hosting the version can be changed without notice.

Next step

Have a project that needs to work better?

Send me your goal and current situation. I will reply with a concrete scope proposal.

Start a project