net·devs
← Work
OmodaAutomotive

Omoda Denmark

Omoda Denmark screenshot 1
Omoda Denmark screenshot 2
Omoda Denmark screenshot 3
Omoda Denmark screenshot 4

The official digital presence for Omoda's entry into the Danish market — built to introduce the Omoda 5 EV and convert visitors into dealership leads. Delivered as part of a monorepo architecture that lets multiple Omoda market sites share components, rendering logic, and APIs while maintaining independent designs. Umbraco CMS drives all content; the Next.js frontend handles preview, localization, and complex conditional form logic.

Challenges

Umbraco preview inside a Next.js app

Implementing Umbraco's native preview feature in a Next.js frontend requires intercepting the preview request, authenticating against the Umbraco admin, and rendering draft content in the same pipeline as published content — without exposing the preview endpoint publicly.

Complex conditional form logic

The dealership lead forms have conditional fields that show, hide, and validate based on prior answers. We used TanStack Forms to manage this state cleanly, keeping validation logic declarative and testable rather than scattered across event handlers.

Multi-market monorepo without design drift

Multiple Omoda market sites share components and rendering logic but need independent visual designs. The monorepo architecture had to enforce shared behavior while giving each market site the freedom to override styles and layouts without forking the core.

Our approach

01

Monorepo architecture setup

Structured the monorepo to share components, rendering logic, and API clients across market sites while isolating site-specific design tokens and overrides. Established conventions so adding a new market doesn't require touching the shared core.

02

Umbraco content modeling

Modeled the content types in Umbraco to support dynamic block rendering in Next.js, including the conditional form fields and sidebar interfaces that vary by page context.

03

Preview and authentication

Implemented the Umbraco preview pipeline in Next.js: intercepting preview requests, authenticating against the Umbraco admin, and rendering draft content through the same rendering path as published content.

04

Forms, localization, and delivery

Built the complex conditional form validation with TanStack Forms, added multi-language routing via the Umbraco Dictionary and Next.js, and delivered the sidebar interface for rendering Umbraco pages and forms in-context.

Result

Multi-market ready monorepo. Umbraco-native preview in Next.js. Full multi-language support from day one.

By the numbers

multi-market

Monorepo architecture

yes

CMS preview in Next.js

full

Localization

Tech stack

Next.jsUmbraco CMSNestJSTailwind CSSTanStack Forms

We want to hear your thoughts.

our CTO Kyrylo Osadchuk, will reply within 24 hours. No SDR funnel.