About Omoda Denmark
Omoda Denmark represents the Omoda car brand in the Danish market, where it launched the Omoda 5 EV.
Omoda needed its official web presence in Denmark ready for the launch of the Omoda 5 EV. The site works as an online showroom: it presents the car and its technology, and it moves interested visitors toward a dealer.
OSKI built it headless: editors manage content in Umbraco, and a Next.js frontend renders every page.
What had to be solved
The site had three goals: brand awareness, showing the car's technology and generating leads for dealers. Each goal added technical demands.
- Render Umbraco pages and content blocks dynamically in Next.js.
- Build forms with complex validation and conditional fields, such as test drive booking.
- Show Umbraco preview inside the Next.js app, protected by admin authentication.
- Run several differently designed websites on shared components, rendering logic and APIs.
- Support localization and render Umbraco pages and forms inside a sidebar.
How the team built it
Umbraco serves content as a headless CMS, a NestJS proxy sits in between, and Next.js renders pages and blocks on the fly. Editors build pages from blocks, and the frontend draws them without new code.
Lead forms use TanStack Forms with conditional fields and detailed validation. Visitors pick a dealership, date and time slot, and get clear messages when a field is missing.
Umbraco preview runs inside the Next.js app behind admin authentication, so editors see the real page before it is published.
A monorepo holds the shared components, rendering logic and APIs behind several sites with different designs. Localization combines the Umbraco Dictionary with Next.js routing, and pages and forms can also open in a sidebar.
What changed
Omoda Denmark got a launch-ready showroom site that its team manages in Umbraco.
- Test drive booking and newsletter sign-up forms connect visitors with Danish dealers.
- Editors compose pages from blocks and preview them before going live.
- New branded sites can reuse the same components and APIs from the monorepo.
Inside the product







