dotCREA
TREN

Sailplus: a multilingual sailing academy site with its own admin panel, migrated from WordPress to Next.js

Sailplus is a sailing academy running weekly courses out of Göcek and Marmaris. Its old site ran on WordPress. Plugins made it slow, updates kept causing problems and the design did not reflect the brand's maritime identity. We rebuilt the site from scratch with Next.js, and wrote a dedicated admin panel so the team can update content without technical help.

ClientSailplus Sailing Academy · sailplus.org
SectorEducation and tourism — sailing courses, blue cruises, yacht racing
PlatformNext.js 16 — custom build, Vercel and Cloudflare KV/R2
Year2026
ScopeWordPress → Next.js, Custom design, Admin panel, Multilingual (TR/EN), Technical SEO, Video and gallery
2
Languages: Turkish and English, every page has a counterpart
129
Photos across four albums
20
Blog posts migrated and newly written
12
Vertical student testimonial videos

The problem we solved

  • WordPress was slow because of its theme and plugin stack; every update risked breaking something.
  • The mobile experience was weak; the course programme, prices and contact details were hard to find.
  • English content was missing or scattered, so the site could not speak to foreign students.
  • Photos and videos were not optimised; the gallery and promo videos weighed pages down.
  • Structured data was missing; courses, FAQs and instructor details did not stand out in search results.

Our goal

  • Build a fast, maintenance-free foundation where pages are statically generated and served from a CDN.
  • Move existing content and URLs to the new structure without losing any of them.
  • Let the team easily edit the hero, FAQs, prices, gallery and blog.
  • Publish the site in Turkish and English with equal coverage.
  • Get courses, the instructor and FAQs to appear as rich results in search engines.
Sailplus home page, desktop view
Home page — video-background hero and certification highlights

Migrating from WordPress

  • Page content, blog posts and images were taken from WordPress and adapted to the new structure.
  • Blog posts moved to a code-defined structure with stable slugs; URLs were preserved.
  • Changed addresses were tied to the new pages with permanent (301) redirects, for example the old instructor page.
  • Images were resized and reorganised with clean, readable file names.
  • WordPress's database, plugin and theme dependencies were removed entirely.

Admin panel

  • The panel requires a login; sessions are protected with JWT and passwords with Web Crypto PBKDF2.
  • The home hero, bento area, FAQs, plans and prices, course curriculum, instructor page, yacht races, gallery, Instagram and blog are all editable from the panel.
  • Content is stored in Cloudflare KV and media files in Cloudflare R2.
  • Fields left untouched in the panel fall back to defaults in code, so the site never shows an empty block.
  • Saved changes reach the pages at regular intervals without a new deploy.
Six-level sailing course curriculum page
Curriculum — six levels, edited from the panel

Multilingual structure

  • Turkish pages live at the root and English pages under /en: course programme, prices, instructor, boat, gallery, blog and races.
  • Switching language keeps the visitor on the same page in the other language.
  • English translations of the blog posts and album descriptions were added.

Technical SEO and structured data

  • Every page shares one metadata layer: title, description, canonical and Open Graph come from a single place.
  • Organization, LocalBusiness and WebSite schemas are added to every page.
  • Page-specific schemas are used as well: BreadcrumbList, FAQPage, Course, Service, BlogPosting, ImageGallery, VideoObject and Person (with EducationalOccupationalCredential).
  • The sitemap is generated automatically; robots.txt blocks the admin and API paths from crawling.
  • After the build, almost every page is generated statically.
Plan and price table by season
Plans and prices — seasonal price table

Video, gallery and performance

  • The hero video was reduced to 720p with audio removed, cutting its size by about 72%.
  • Animations play as MP4 instead of GIF, autoplaying and muted.
  • Student testimonials appear in a vertical (9:16) video carousel, newest first. Videos are encoded as 720×1280 H.264 for fast start, each with a poster frame.
  • A 129-photo gallery was built with four albums (training, crews, coves, races) and a lightbox viewer.
  • Static media files are served with a one-year immutable cache header.

Architecture

  • App: Next.js 16 App Router; Server Components by default, with only interactive components running on the client.
  • Hosting: on Vercel behind Cloudflare, structured so it can move to Cloudflare Workers (OpenNext).
  • Data: content in Cloudflare KV, media in R2, accessed from Vercel through REST clients.
  • Styling: Tailwind CSS v4, the Plus Jakarta Sans typeface and a brand-specific sea colour palette.
Album page with four categories and 129 photos
Album — four categories, 129 photos

Result

Sailplus now has a site that needs no plugin updates or database maintenance. Pages are generated statically and open quickly from the CDN. The team updates the hero, prices, FAQs, gallery and blog from the panel themselves. The site is live in Turkish and English, and thanks to structured data, courses, FAQs and instructor details can appear as rich results in search. New student videos and blog posts go live within minutes.

Process
Phase 1
Content and URL inventory of the WordPress site, information architecture
Phase 2
Custom design and Next.js foundation
Phase 3
Content and image migration, redirects
Phase 4
Admin panel (Cloudflare KV/R2) and English version
Phase 5
Technical SEO, structured data, video and gallery optimisation; launch
Technical stack
Next.js 16React 19TypeScriptTailwind CSS v4VercelCloudflare KVCloudflare R2JWT (jose)JSON-LDH.264/MP4 videoWordPress migration

Mobile interface

Home page, mobile view
Home page — mobile
Vertical student testimonial videos, mobile view
Student testimonials — vertical video carousel