Case study 4 / 27

Client project / Grumpy dev

Križ Winery Website

Built a multilingual winery website with Next.js App Router and Sanity as a headless CMS. Implemented localized routing and content for Croatian and English, dynamic pages for winery, accommodation, products, and blog, plus contact and search features. Focused on production readiness and performance through image optimization with next/image and Sanity metadata (LQIP, crop, hotspot), responsive loading strategies, and stable deployment behavior across development and production environments.

CompanyGrumpy dev

Duration2025 ‑ 2026

Released

StackVisual Studio Code, Next.js, React, TypeScript, Sanity, GROQ, next-intl, Tailwind CSS, Vercel
Križ Winery WebsiteKriž Winery Website secondary project view

Kriz Winery's multilingual Next.js App Router experience ties Sanity CMS, next-intl, and image optimization into a hospitality-focused story with winery, accommodation, product, and blog routes.

Challenge

Križ Winery needed a production-ready website that could present its winery, accommodation, products, and editorial content in both Croatian and English.

The content needed to remain manageable outside the codebase while supporting localized routes, image-rich pages, search, and reliable behavior across development and production deployments.

Role and responsibilities

I built the multilingual website with Next.js App Router, React, TypeScript, and Sanity. My responsibilities included:

  • Implementing Croatian and English routes and localized content.
  • Building dynamic pages for the winery, accommodation, products, and blog.
  • Integrating Sanity as the headless content-management system.
  • Implementing contact and search functionality.
  • Building responsive image-loading behavior.
  • Preparing and stabilizing the application for production deployment.

Technical decisions

Sanity as a headless CMS

Winery, accommodation, product, and blog content needed to be editable independently of application deployments. Sanity supplied structured content while GROQ handled application queries.

Localized routing with next-intl

Croatian and English content required language-aware routes rather than translated text inside one static page. next-intl provided routing and locale handling within the Next.js App Router structure.

Sanity image metadata with next/image

Image-heavy hospitality pages needed responsive delivery without losing editorial control. Sanity crop and hotspot metadata retained intentional image framing, while LQIP data and next/image supported progressive, responsive loading.

Consistent development and production behavior

The implementation used responsive loading strategies and deployment-aware image handling so Sanity-hosted media behaved consistently in local development and production.

Result or measurable impact

A multilingual winery website shipped with localized winery, accommodation, product, blog, contact, and search experiences backed by an editable Sanity CMS.

The available project material does not include traffic, conversion, performance, or editorial-efficiency metrics, so none are claimed here.

Screenshots

Križ Winery responsive website interface