Pegasos
Veterinary hospital website · three branches
The problem
I built the site for a three-branch veterinary hospital. The client's main requirement was this: they wanted to update the doctors, the blog posts, the patient reviews and the Google rating themselves, without having to come to me every time. The site also needed to rank well on Google, and a browser-rendered SPA can't manage that on its own. On top of that, the appointment form collects personal data — which in Turkey means legal obligations under KVKK.
Technical details
The client really does own the content
I set up five Sanity schemas covering everything on the site that can change: team members, blog posts, patient testimonials, the general rating and an Instagram feed. The front end reads them through the CDN, no token required. I mapped Sanity's image hotspot onto CSS object-position, so when hospital staff mark where the face is in a doctor's photo, that photo stays correctly framed at every size the layout uses.
An SPA search engines can read
A Puppeteer step runs after the build and walks every page on the site one by one: static pages, the three branches, each doctor and each blog post. For every page it visits, it writes the rendered HTML to disk. Google's crawler gets a page full of content instead of an empty div, while a visitor still gets the normal SPA experience once the page loads. The URLs are readable Turkish addresses too, not ids buried in a query string.
I didn't run a server for a contact form
The appointment and contact forms go through API Gateway to a Python Lambda, which sends the mail via SES. There is no server sitting in the middle to keep running or keep patched. The cost comes to about what the site actually receives — a handful of forms a day.
I was the only developer on the project: front end, CMS modelling, serverless backend and the SEO pipeline.