Web/Guru

Case studyServices websiteWordPress → Next.jsGerman & EnglishGermany

Visit cheggl.online

Cheggl.online case study: a bilingual web-services website, rebuilt from WordPress to Next.js

The cheggl.online home page on a studio display: the headline “We do everything” and “Complete web services from design to programming” over the hero film of a retro TV on the moon, with the lime CHEGGL logo, Showcase link and EN/DE language switch
The cheggl.online home page in a browser window: “We do everything” and “Complete web services from design to programming” over the hero film of a retro TV on the moon

About the Project

Cheggl.online is the website of Cheggl GmbH's digital agency: web design and development, Shopify and WordPress, apps, SEO and marketing, under the line “We do everything”, with a retro TV on the moon as its hero film.

The site ran on WordPress with a ready-made agency theme, the Elementor page builder and a stack of plugins, in German only. We rebuilt it in Next.js: the same lime-on-black look and the same moon film, now as React components, in German at / and English at /en, with 14 service pages generated from data in both languages, contact and newsletter forms that save straight to a database, and SEO tags written in code.


Project
Cheggl.online
Industry
Digital agency / Web services
Platform
Website (Desktop + Mobile)
Stack
WordPress → Next.js

02Before the rebuild

The problem

Problem 1

A web agency on a page builder

Cheggl sells web development, yet its own site was a ready-made WordPress theme assembled in Elementor, with plugins for the shop, the forms and SEO. A new section or service page meant working around the builder instead of writing it.

Solution

Same look, new foundation

We kept the brand's look and rebuilt it in Next.js: React components instead of a page builder, German and English from one codebase, 14 service pages from data files, forms as server actions, and titles, hreflang and the sitemap generated in code.

Problem 2

One language, little context

The site spoke German only: no English version and no hreflang, and the home page went out without a meta description. Visitors from abroad and search engines got one language and very little to go on.

03Challenges

Business challenges

  1. Keep the look, drop the page builder

    The old cheggl.online ran on WordPress with the Onovo theme, Elementor and WooCommerce: 50 scripts and 34 stylesheets on the home page alone. The brand had to survive the move, so we rebuilt the same sections, the 360 badge and the outlined ticker in React and Tailwind.

    The “With full service for you and your web projects right there” section of cheggl.online: mission and goal columns, a Contact us button and an outlined ticker running underneath
  2. Motion without the weight

    Cheggl's site lives on movement: drifting lime circles, bubbles that chase the cursor, a badge that never stops turning. We rewrote each effect as a few lines of CSS animation instead of plugin scripts. Lighthouse now rates the live home page 98 for performance on desktop and 94 on mobile.

    The “Send us your wishes and dreams” call to action of cheggl.online: a portrait with bold face paint, the hallo@cheggl.com address in lime and a dark band behind it
    The lime circle with Facebook, Instagram, Youtube and LinkedIn buttons
  3. Fourteen services, two languages

    Every circle on the services grid opens its own page, in German and in English: 14 services, 28 pages, all generated from 14 data files. hreflang tags and a sitemap with 42 URLs point Google to the right language for every page.

    The services grid of cheggl.online: Web Design, Support, Shopify, Content Management System and more, each with an icon, a title and a short description
    The Website Development card on its lime circle
    The WordPress card on its lime circle

04Landing page

The website

One long home page, in two languages: German at cheggl.online, English at cheggl.online/en. Scroll through the live page below and flip the switch to see the other language.

On this page

  1. “Wir machen alles”

    The moon-TV film loops behind the headline, muted, with a sound toggle in the corner.

  2. Fourteen service cards. In each row a lime circle follows the cursor with bubbles trailing it, and every card opens its own service page.

  3. Mission and goal next to the turning 360 badge, then an outlined ticker running across the page.

  4. “Kundenmeinungen”

    Client quotes in a carousel with arrow controls.

  5. A YouTube film that only loads after the play click, then three counters that count up as they scroll into view.

  6. “Schicke uns deine Wünsche und Träume”

    The e-mail address and four social links on a lime circle, with smaller circles drifting around it.

  7. Logos of the companies Cheggl has worked for, in a two-row grid.

  8. “CHEGGL-Newsletter abonnieren”

    A newsletter form that saves each address to MongoDB through a server action, then contact details and legal links.

Swipe through the page, chapter by chapter

  1. The “Hero film” part of the Deutsch cheggl.online home page

    01 / 08

    Hero film

    “Wir machen alles”

    The moon-TV film loops behind the headline, muted, with a sound toggle in the corner.

  2. The “Services” part of the Deutsch cheggl.online home page

    02 / 08

    Services

    Fourteen service cards. In each row a lime circle follows the cursor with bubbles trailing it, and every card opens its own service page.

  3. The “About & ticker” part of the Deutsch cheggl.online home page

    03 / 08

    About & ticker

    Mission and goal next to the turning 360 badge, then an outlined ticker running across the page.

  4. The “Client reviews” part of the Deutsch cheggl.online home page

    04 / 08

    Client reviews

    “Kundenmeinungen”

    Client quotes in a carousel with arrow controls.

  5. The “Film & counters” part of the Deutsch cheggl.online home page

    05 / 08

    Film & counters

    A YouTube film that only loads after the play click, then three counters that count up as they scroll into view.

  6. The “Call to action” part of the Deutsch cheggl.online home page

    06 / 08

    Call to action

    “Schicke uns deine Wünsche und Träume”

    The e-mail address and four social links on a lime circle, with smaller circles drifting around it.

  7. The “Clients” part of the Deutsch cheggl.online home page

    07 / 08

    Clients

    Logos of the companies Cheggl has worked for, in a two-row grid.

  8. The “Newsletter & footer” part of the Deutsch cheggl.online home page

    08 / 08

    Newsletter & footer

    “CHEGGL-Newsletter abonnieren”

    A newsletter form that saves each address to MongoDB through a server action, then contact details and legal links.

Captured from www.cheggl.online at 1440 px, in German and English, October 2026.

Behind the build

From WordPress to Next.js

The old cheggl.online was a WordPress site on the Onovo agency theme, built with Elementor and a stack of plugins, in German only. We rebuilt it in Next.js in three weeks: the same look the brand already had, now in German and English, with SEO and forms written into the code.

BeforeWordPress 6.8Onovo theme + Elementor, archived August 2025
AfterNext.js 16Built 8 to 29 April 2026

What replaced what

  1. Before: Onovo theme + Elementor builderreplaced by React 19 components + Tailwind CSS v4
  2. Before: German onlyreplaced by German at /, English at /en (next-intl)
  3. Before: Yoast SEO pluginreplaced by Metadata API: canonical + hreflang per page
  4. Before: Yoast XML sitemapreplaced by Sitemap generated on every build, 42 URLs
  5. Before: Contact Form 7replaced by Server actions saving to MongoDB
  6. Before: /services/item/… theme templatesreplaced by One /services/[id] route, 14 data files

One site, two languages

German at the root, English under /en

Germany is the home market, so German keeps the clean URLs and English sits one folder down. Every page knows its twin: the language switch keeps you on the same page, and each page tells Google about the other version.

Flip the language
localePrefix: "as-needed"
Preview of the cheggl.online home page in Deutsch
CHEGGL

Wir machen
alles

Komplette Webservices vom Design bis zur Programmierung

  • Webdesign
  • Shopify
  • WordPress
  • SEO
  1. <html lang="de">
  2. <link rel="alternate" hreflang="de" href="https://cheggl.online">
  3. <link rel="alternate" hreflang="en" href="https://cheggl.online/en">
  4. <link rel="alternate" hreflang="x-default" href="https://cheggl.online">
first commit to launch, April 2026
3 weeks
commits
25
URLs in the sitemap, DE + EN
42

From the git history of the cheggl.online repository (8 to 29 April 2026) and the live sitemap.xml.

Lighthouse Performance
98
Lighthouse Best Practices
100
Cumulative Layout Shift
0
Largest Contentful Paint (desktop)
0.6 s

Measured by Webguru with Lighthouse 12.8 on the live home page (www.cheggl.online), desktop preset, 2 October 2026. On the mobile preset: Performance 94, Best Practices 100, CLS 0.

What the migration delivered

  • The look the brand already had

    Cheggl liked how the old site looked, so we kept it: the same sections, lime-and-black palette, menu overlay and CTA animation, rebuilt as React components. The home page went from 34 stylesheets to 2.

    34 stylesheets → 2
  • German and English from one codebase

    All interface text lives in two translation files, and every service page carries a German and an English version. One component tree renders both, so a new section ships in both languages at once.

    localization/de.json · en.json
  • 14 service pages from data

    Web design, Shopify, WordPress, SEO, Laravel, MERN and more: each service is one data file with German and English content, rendered by a single template with steps, FAQ and a contact form.

    /services/[id] · 28 URLs
  • Forms that land in a database

    The contact form and the newsletter sign-up are Next.js server actions. They check every field on the server, reply in the visitor's language and save the entry to MongoDB; the newsletter turns away addresses that are already subscribed.

    "use server" · mongoose
  • SEO in the code, not in a plugin

    Each page sets its own title, description, Open Graph tags, canonical and hreflang links. The sitemap is rebuilt on every deploy with both language versions of every URL, and robots.txt comes from code.

    generate-sitemap.mjs · robots.js
  • Preview builds kept out of Google

    Every preview deployment on Vercel answers with a noindex header, so test versions of the site never compete with the real one in search results.

    X-Robots-Tag: noindex

05Research

The Process

  1. Discover

    • WordPress Site Audit
    • Theme & Plugin Review
    • Content Inventory
    • Business Goals
  2. Strategy

    • Bilingual URL Plan
    • Service Page Model
    • Metadata & Sitemap
    • Next.js Architecture
  3. Design

    • Existing Look, Kept
    • Lime & Black Palette
    • Service Page Layout
    • Responsive Layouts
  4. Develop

    • React Components
    • German & English
    • Forms to MongoDB
    • 14 Service Pages
  5. Deliver

    • Alt Text Pass
    • Sitemap & robots.txt
    • Vercel Deployment
    • Review Rounds

Three weeks in the commit log

25 commits · 9 working days

  1. 8 Apr · 2 commitsProject set up
  2. 13 Apr · 1 commitHome page sections
  3. 16 Apr · 2 commitsService detail pages
  4. 20 Apr · 3 commitsService data, icons, manifest
  5. 21 Apr · 1 commitService data model
  6. 22 Apr · 5 commitsGerman & English, forms to MongoDB
  7. 27 Apr · 2 commitsrobots.txt and sitemap
  8. 28 Apr · 7 commitsSEO and alt text pass
  9. 29 Apr · 2 commitsFinal copy and partner logos
Commits per day in the cheggl.online repository, 8 to 29 April 2026.

06Design System

Typography

The brand pairs Cera Pro's geometric clarity for headings and body with Fugaz One, the slanted face of the Cheggl wordmark.

Cera Pro

  • 12px
  • 16px
  • 20px
  • 24px
  • 30px
  • 32px

Heading - Body

Fugaz One

  • 64px

Logo

On the live site

One type token, carried over from WordPress

The WordPress site ran the Onovo theme, set in Epilogue. The Next.js rebuild keeps that face as a single CSS token for headings, body copy and UI, while the slanted Cheggl wordmark ships as the logo image. The rows below are set at the live site's real sizes, with its own copy.

Body & UI
Epilogue
Logo
Cheggl wordmark
Token
--onovo-font
Weight
400 – 700
  • heroDesktop / mobile, px: 110 / 56, weight 500We do everything
  • h2Desktop / mobile, px: 60 / 42, weight 600We are a Full-Service Agency
  • h3Desktop / mobile, px: 26, weight 600Website Development
  • bodyDesktop / mobile, px: 18, weight 400Development of professional and responsive websites that meet your needs and goals.
  • eyebrowDesktop / mobile, px: 16, weight 700What do we do?

Color Scheme

Minimal and eye-catching, never eye-straining: one electric lime on black, and quiet greys around it.

Every value below renders on cheggl.online: CSS tokens, the logo file or hex values in the components. Click a swatch to copy its hex.

  • --primary

    Text contrast: Black text 18.3:1AAA

    On white 1.15:1Fail

  • logo.png

    Text contrast: Black text 11.4:1AAA

    On white 1.84:1Fail

  • service pages

    Text contrast: Black text 17.9:1AAA

    On white 1.18:1Fail

  • --secondary

    Text contrast: Lime text 18.3:1AAA

  • --surface-dark

    Text contrast: Lime text 13.2:1AAA

  • --border-muted

    Text contrast: White text 10.7:1AAA

  • section ground

    Text contrast: Black text 18.8:1AAA

  • --service-item-text-color

    Text contrast: White text 15.6:1AAA

  • --service-eyebrow-color

    Text contrast: On white 7.5:1AAA

  • --text-muted

    Text contrast: On white 5.7:1AA

The lime rule

Lime is a fill, a highlight or text on dark, never text on white.

  • Lime on black18.28:1AAA
  • Black on lime18.28:1AAA
  • Lime on white1.15:1Fail

WordPress to Next.js

WordPress to Next.js and multilingual website FAQ

What companies ask us before they launch a website in German and English, or in more languages.

Ask us anything
  • Yes. We build multilingual sites with next-intl in Next.js: one codebase, a translation file per language, and clean URLs such as / for German and /en for English. The language switch keeps visitors on the same page, and every page links to its other language versions with hreflang so Google shows the right one in each country.

  • Give each language its own URL, never switch languages on the same address. On Cheggl.online German keeps the root and English sits under /en. Every page sets a canonical, hreflang links to its twin and an x-default, and the sitemap lists both language versions of every URL. Write titles and descriptions for each language too, so the English pages don't go out with German snippets.

  • Either works. Interface text sits in one translation file per language and every service page carries both versions, so your team or your translator can change copy without touching components. We advise against publishing machine translation unchecked: a native speaker should read every page, and titles, descriptions and examples should fit each market, not just the words.

  • Yes. If your brand already works, we keep it: we rebuild your theme's layout, colours and animations as React components, so visitors see the site they know, minus the page builder and plugin overhead. Cheggl.online kept its look and moved from WordPress, Elementor and the Onovo theme to Next.js in three weeks. If SEO during the move is your main worry, our cheggl.info case study covers that side.

  • We rebuild them as part of the site. Submissions are checked on the server and saved to a database, and we can send each one to your inbox, to your CRM such as HubSpot or Pipedrive, or to your newsletter tool. Replies come back in the visitor's language. We also add spam protection and, for newsletters in the EU, double opt-in.

  • Yes, if the site is built for it from the start. With a next-intl setup like Cheggl.online's, a new language means a new translation file, translated page data and one more locale in the routing; hreflang tags and the sitemap pick it up on the next build. Adding languages to a site that was built for one usually takes longer.

  • Yes. Much of our work is for companies in Germany, including several projects for Cheggl GmbH in Hamburg. We build German-first sites with English versions where they help, and we plan for German requirements such as an Impressum, a Datenschutz page and consent for tracking.

  • The number of page templates, how much content moves or needs translating, how many languages you need and which integrations are involved. We quote after a short call and a look at your current site. For scale: Cheggl.online, with 14 service pages in two languages, took three weeks from first commit to launch.

  • For Cheggl GmbH we also built the Cheggl video business directory with hybrid AI and voice search, and moved cheggl.info from WordPress to Next.js. For other clients we design and build websites, Shopify stores and web apps, and look after them after launch.

Don’t miss a new work

The cheggl.online home page below the hero: the lime service bubbles from Web Design to SQA, “With full service for you”, client reviews, the 5 / 119 / 30 counters, the “Send us your wishes and dreams” call to action and the client logos
Two hands holding a tablet that plays the cheggl.online hero film, a retro TV on the moon, then scrolls through the home page
Webguru.pk

Your services site, rebuilt?

Let’s do a project together!

We moved cheggl.online from a WordPress theme to Next.js, in German and English. Tell us what your site has to do, and we’ll plan the rebuild with you: pages, URLs, forms and SEO.