Skip to content
taurasgPreparing
ENLT

Back

2025Site and CMS

Clinic Giedra Website

A clinic's public site and the content system behind it, written so the people who run it never have to call me — and cannot break it if they try.

Role
Design, frontend, backend, deployment
Year
2025
Built with
  • React
  • TypeScript
  • Fastify
  • PostgreSQL
  • Prisma
  • Tailwind

An npm workspaces monorepo: a React, TypeScript, Vite and Tailwind front end; a Fastify API with JWT authentication, file upload and a REST surface; a shared types package that keeps the two honest; and a Prisma schema with migrations and seed content on PostgreSQL. The public site and the administration are one application behind one build.

The brief was not really a website. It was that a clinic with no engineer on staff should be able to change every word, image and price on their own site without a deploy — and without being able to break it. So the content model is deliberately narrow: the CMS offers exactly the shapes the design can render, and nothing else. There are three roles rather than one, because "the person who writes news" and "the person who changes the contact details" are not the same job.

It is a real editing surface, not a form over a table. Rich text with live formatting state, a media library, a carousel whose slide count and timing are content rather than code, structured qualifications per specialist, and an audit log over the changes that matter.

It ships with its own infrastructure: nginx, systemd units, release and backup scripts, and a gated GitHub Actions workflow that will not deploy a build which failed its own quality checks. npm run check runs lint, types, tests and a production build in that order, and it is the same command CI runs.

Visit

© 2026 Tauras Giedraitis · Kaunas, Lithuania · All rights reserved