Vilniaus Verinelis site
A small, fast static site for the Vilniaus Verinėlis kindergarten.
Dev-storyChallenge
A kindergarten's site just needs to load fast, read clearly and be easy for non-technical staff to keep up to date.
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.
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
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.
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.
Main modules and user path
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
A prerender crawler that discovers and freezes every migrated news page to static HTML, while skipping storage/asset API paths it should not crawl
The static build is set to fail loudly on any CMS fetch error, so a bad payload never ships as a half-empty page
Rewriting WebEdge storage asset IDs so images resolve correctly against the storage layer after content migration
Bilingual routing via Nuxt i18n with Tailwind styling and Swiper carousels for the photo galleries
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.
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.
Related articles
Read next
Related project stories
These projects share nearby technical or product decisions, so they show how the same principle behaves in another context.
Dev-storyCMS
A dynamic headless CMS on webedge-db — content types, media, roles, and the public read API behind our sites and their articles.
Dev-storyMeeting rooms and recaps
Video meetings on LiveKit + webedge-db — realtime rooms, recording (LiveKit Egress) and post-call recaps.
Dev-storyCalendar booking platform
Scheduling on Vue 3 — availability, bookings, confirmations and one-click Meet video links.
Have a similar idea?
Discuss your project