All projects

Vilniaus Verinelis site

A small, fast static site for the Vilniaus Verinėlis kindergarten.

Vue 3TypeScriptStatic site
vilniausverinelis.lt screenshotDev-story
01

Challenge

A kindergarten's site just needs to load fast, read clearly and be easy for non-technical staff to keep up to date.

02

What we did

A Vue 3 + TypeScript site built as static pages, with a simple page structure so information is easy to find and content is easy to change.

03

Result

It is live at vilniausverinelis.lt, loads quickly, and does not need a developer for routine content updates.

Dev-story article

Vilniaus Verinelis site: how the project was built

A kindergarten needs its site to stay current — news, announcements, photos — but the people updating it are teachers, not developers, and the site has to load instantly on a parent's phone. The tension was pulling live content from a CMS and a reactive backend while shipping the public site as static files with nothing to break at runtime. So the whole thing is fetched at build time and frozen, and staff never touch code to publish.

Sections

05

Modules

05

Stack

Vue 3 + TypeScript

01

Why the project exists

A kindergarten's site just needs to load fast, read clearly and be easy for non-technical staff to keep up to date.

A kindergarten needs its site to stay current — news, announcements, photos — but the people updating it are teachers, not developers, and the site has to load instantly on a parent's phone. The tension was pulling live content from a CMS and a reactive backend while shipping the public site as static files with nothing to break at runtime. So the whole thing is fetched at build time and frozen, and staff never touch code to publish.

02

What was built

A Vue 3 + TypeScript site built as static pages, with a simple page structure so information is easy to find and content is easy to change.

A Vue 3 / Nuxt 4 site, fully prerendered to static HTML and deployed to Cloudflare Pages, that reads its content — pages, news, images — from WebEdge's headless CMS and reactive backend at build time. Every migrated news page is crawled and rendered ahead of time, so there is no server call when a visitor arrives. The site is bilingual and includes an hCaptcha-protected contact form.

03

Main modules and user path

M01

Build-time content fetch from the WebEdge CMS public REST API and reactive backend, so editors work in a familiar admin and the site rebuilds from their edits

M02

A prerender crawler that discovers and freezes every migrated news page to static HTML, while skipping storage/asset API paths it should not crawl

M03

The static build is set to fail loudly on any CMS fetch error, so a bad payload never ships as a half-empty page

M04

Rewriting WebEdge storage asset IDs so images resolve correctly against the storage layer after content migration

M05

Bilingual routing via Nuxt i18n with Tailwind styling and Swiper carousels for the photo galleries

04

Architecture and technology decisions

Built with Vue 3, TypeScript, Static site.

Nuxt 4 with TypeScript, Tailwind, VueUse and i18n; content comes from WebEdge's CMS and reactive backend, pulled through runtimeConfig (env vars are not available in Nuxt composables during prerender), and the output is static files on Cloudflare Pages.

05

Result and lessons

It is live at vilniausverinelis.lt, loads quickly, and does not need a developer for routine content updates.

The staff edit content in the CMS and the site rebuilds into plain static files — fast for parents, nothing to maintain at runtime, and no code needed to publish a new post.

Read next

These projects share nearby technical or product decisions, so they show how the same principle behaves in another context.

Have a similar idea?

Discuss your project