• Websites
  • 2026

Workout Team: WordPress to Next.js website rebuild

The trial session is booked in one form on the page and every old link still works.

The Workout Team website

At a glance

Client
Private fitness studio with personal training in Vračar, Belgrade, open since 2015.
Role
Elenion, end to end: the rebuild, the migration of 71 addresses, three forms and the trial booking.
Services
  • Website rebuild
  • WordPress migration
  • Lead forms and email
  • Custom integrations
  • Accessibility
Timeline
2026

Results

  • Booked on page

    the trial in one form; the studio keeps the request if Calendly fails

    Source: The trial route and the Calendly integration in the site's code, 2026-08-11

  • Old links work

    was 27 of 71 broken at the first audit of the new build

    every old address reaches a page, checked one by one before launch

    Source: curl sweep of the old sitemap and its aliases, 82 of 82 answered, local build, 2026-09-04

  • Accessibility

    audit passed on every page, desktop and phone, before any release

    Source: Playwright and axe-core, WCAG 2.2 AA, 22 pages at 1440 and 390, local build, 2026-09-30

The problem

Workout Team is a private fitness studio in Vračar, Belgrade, open since 2015, where training is personal and the first step is a trial session. Its WordPress site ran on the Bricks theme with Automatic CSS, Perfmatters, Rank Math, WS Form and ACF, and its sitemap listed 71 addresses. The project's plan recorded the cost that mattered: the trial flow was a form, then a redirect to Calendly, effectively two forms, and people did not finish the booking. The conversion the studio depends on ended in a hand-off to another site. Nothing about the old site's speed or accessibility was measured before the work, and the studio's reason for leaving WordPress is not on record here.

What we did

We rebuilt the site from the studio's own exports (a spreadsheet of custom fields, the form definitions, a photo drop and a trainer list) and moved the domain to it on September 5, 2026. The result is 45 pages in Serbian: 16 static pages, 9 programs, 3 trainers and 17 blog posts, kept in plain text files with no CMS.

Three forms share one pipeline: a honeypot, a rate limit of five attempts per ten minutes per form and address, field validation and a bot check. A submission reaches the studio as an email through Postmark and as a row in a Google Sheet, and the visitor sees an error only when both fail. The trial form books the Calendly slot from the server, inside the same page, with no redirect and no Calendly script on the site; if Calendly is down, the request is still sent. The trainer application takes an optional photo up to 5 MB, checked by its file signature and sent only as an email attachment, never stored.

All 71 WordPress addresses were frozen as a test fixture before launch. 45 redirect rules, every one permanent, carry the old blog slugs, the feed and the sitemap aliases to their new homes. Photos come from Cloudflare R2 as WebP through the framework's image pipeline, and the gallery opens in a lightbox that works from the keyboard. GA4 and the Meta Pixel load through Tag Manager only after a choice in a consent bar we built ourselves. An accessibility check over 22 pages at desktop and phone widths, plus checks on every form field, runs before any change ships.

The hard part

The date of birth on the trial form could not be typed on an iPhone. The field asked for a date, iOS showed a numeric keypad with no dot and the server refused bare digits. Every automated check was green: the test suite, both accessibility checks and the phone-size screenshots. A first fix passed the browser emulator and 1.6 million generated test inputs, and still failed on a phone in hand. What shipped is three plain dropdowns (day, month and year) sent as one value, plus a rule that every change to a form gets a pass on a physical iPhone before it is called done. A trial form that cannot be completed on the phone most visitors carry is the one bug a studio cannot afford, and no emulator reported it.

What changed

A prospective member books the trial in one form, on the page, and the studio has the request even on a day the calendar misbehaves. Of 82 old addresses requested after the redirect work, none broke, where the first audit of the new build had found 27 of 71 answering 404; nine were checked again on the live domain the day of the cutover. The browser security policy reported no violations across ten pages at launch. Speed was not measured on the old site or the new one, and bookings and traffic after launch are the studio's figures, not ours to publish.

← All work

Systems built to last. Start with a conversation.

No shortcuts, no fluff. Tell us what you're running and where it hurts.

Start a project