Skip to content
Nikesh Khatri
All work

CMS

Aug 2025

At Goodwish

Client work — described generically

Multi-tenant Headless CMS

Versioned pages with snapshot rollback, scheduled publishing, preview tokens and SEO-safe slug history.

Role

Backend engineer

Stack

  • Django
  • DRF
  • MySQL
  • Celery
  • Redis
  • Docker

Evidence

Merged pull requests
2
Commits
33

The problem

What this had to solve.

A content platform serving multiple tenants needed editors to publish confidently: schedule a page for later, preview unpublished content on a shareable link, and undo a bad edit completely — without breaking the URLs search engines had already indexed.

What I built

My contribution.

  • 01

    Built a CMS domain with pages, metadata, sections, media, versions, nested serializers, CRUD viewsets, filtering, search and publish/unpublish actions.

  • 02

    Implemented soft delete, tenant scoping, audit tracking, scheduled publication, HTML sanitisation, preview tokens, caching, slug history and SEO redirects.

  • 03

    Added full snapshot rollback for page content and fixed database transaction, uniqueness, audit-integrity and MySQL constraint issues.

The hard part

Rollback has to include the children

Versioning a page row is easy; a page is not a row. It is a tree of sections, media references and metadata. Restoring an old version means restoring that whole tree atomically, or you get a headline from Tuesday above a body from Friday. I snapshotted the composed structure rather than the individual records, and kept old slugs pointing at the page through redirect history so a rollback never costs the client their search ranking.