All work

kobasakhechidze.com

A surgeon's website and CMS in four languages, two of them written right to left.

Kind
Client project. Live.
Timeline
2026, first commit in February
Team
Built with a collaborator, directly with the client.
Built with
Next.js, Payload CMS, PostgreSQL, Cloudflare R2, Gemini, Tailwind CSS, Vitest, Playwright

01Context

Prof. Koba Sakhechidze is a bariatric surgeon. He needed a site for his services, patient cases and a blog, in Georgian, English, Hebrew and Arabic, that his own team could keep up to date.

The people who would live in the admin panel every week were his staff, not me. That changed what counted as finished.

02My role

The code: the content model, the public site, the translation tools, deployment.

The repository is private because it is client work.

03Four languages without four times the work

Every article, service and patient case exists in four languages, and two of them, Hebrew and Arabic, run right to left. If each edit has to be repeated by hand four times, three of the languages go stale.

04Decisions

  1. Who translates?

    Options
    • Editors translate everything by hand
    • Translate automatically on every save
    • A button that drafts the other three languages from Georgian
    Chose
    Georgian is the source. A Translate button in the admin sends a document through Gemini and fills in English, Hebrew and Arabic. A second button drafts the English search title and description.
    Because
    The team writes in Georgian. A button keeps a person in charge of when a translation happens, and the CMS has drafts and live preview, so the result can be read before it is published.
    It costs
    Machine translation of medical text still has to be read by someone. The tool makes the draft cheap. It does not make the review optional.
  2. How does one layout serve both directions?

    Options
    • A second stylesheet for right to left
    • Write the layout once in logical terms
    Chose
    Spacing and alignment are written as start and end instead of left and right, and each script loads its own typeface: Red Hat Display for English, Noto Sans for Georgian, Hebrew and Arabic.
    Because
    A mirrored copy of the styles is a second site to maintain.
    It costs
    Direction-aware CSS does not flip everything. Arrows and other directional pieces still need a look in Arabic.
  3. Should search metadata be translated as well?

    Options
    • Four sets of meta fields
    • One shared set
    Chose
    One shared set. Meta titles, descriptions and social images are the same in every language.
    Because
    Fewer fields for editors to keep in step, and one click can draft them.
    It costs
    A search result shows the same snippet whichever language the page is in.
  4. How is the admin panel protected?

    Options
    • The CMS login alone
    • A gate in front of the login
    Chose
    On top of the CMS roles, the admin sits behind an access key, checked with HMAC-signed cookies and rate limiting.
    Because
    A login form that cannot be reached cannot be guessed at.
    It costs
    It is one more secret for the client's team to look after.

Going deeper

The content model

Blog posts are built from blocks: text sections, image grids and video. Services and patient cases are their own collections, with before and after images on the cases. Posts, services, cases and the page-level content all have drafts, versions and a live preview at phone, tablet and desktop widths.

There are two roles, admin and editor, and the role travels in the session token.

Consultation requests

The public form creates an inquiry marked new. Staff answer by email from inside the admin, the reply is stored with the inquiry, and its status moves to replied or closed.

Delivery

Pages are generated statically and refreshed incrementally. Images and video live on Cloudflare R2 and are converted to WebP. Filtering the blog or the patient cases uses a client-side cache, so going back to a filter you already used does not fetch again.

05The result

What works

  • Live at kobasakhechidze.com in Georgian, English, Hebrew and Arabic.
  • Services, patient cases, a blog, a BMI calculator and a consultation form with replies from the admin.
  • A CMS with roles, drafts, live preview, and translation and search-text drafting built in.

What is not there

  • I have no traffic or conversion numbers to share, so there are none here.
  • Translations are drafts until a person has read them.

06Reflection

Most of what I learned here was about the admin panel, not the public pages. The site a visitor sees is the easier half. The half the client lives in is the editor, and a button that saves an editor a round of retyping matters more to them than an animation does.