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.
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.
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.
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.
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.
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.





