JaiSathya Inc.
One site for eight businesses — edited in place by the owner
The corporate site for JaiSathya Inc., a holding company with eight businesses — restaurants, catering, food distribution, real estate, marketing, DataEQ, Ayuryum and a cricket club — with a visual CMS that lets the owner edit the live page layout directly.
JaiSathya Inc. is a founder-led holding company with eight businesses across hospitality, food, real estate, technology and sport, including three restaurant brands — Manam, Kaanchi and Malgudi Cafe.
I built the site on TanStack Start with a visual CMS from scratch: the owner edits text and images on the real page layout instead of filling in disconnected forms, and publishes when ready.
Every editable thing is one row in a single documents table with draft and published JSON, and the editor infers its form from the document's shape — so adding a field never needs a migration.
JaiSathya runs eight very different businesses, from restaurants to a professional cricket club, and needed one site that presents them as a group while giving each restaurant brand its own page.
Content changes constantly — menus, events, holdings — and the owner didn't want a developer in the loop, or a generic CMS whose forms look nothing like the page they're editing.

- 01
Model pages as documents
A registry maps each page to its sections and each section to a (collection, slug) document — the only structure the admin needs.
- 02
Edit in place
The visual editor wraps the real components in Editable regions; the generic ObjectEditor builds a form from whatever JSON the document holds.
- 03
Pick media
Images come from a Cloudinary-backed library; alt text lives on the media row, not on each page that uses it.
- 04
Save a draft
Every admin write targets draft_data, so nothing a visitor sees changes until it's published.
- 05
Publish
publishDocuments copies draft_data into published_data — the only write path that touches what visitors see.
In-place visual editing
Editable regions on the actual page layout; click text or an image and change it where it lives.
Draft, then publish
Saves go to draft_data; visitors see published_data, and publish copies one into the other in a single write.
Media library
Cloudinary-backed, with the public_id as the row key and alt text stored once per image, so fixing it fixes every use.
Shared documents
A brand's summary card is one document shown on both the homepage and its own page.
One table instead of a table per type
Holdings, brands, home sections and cards are all documents with JSON data. The registry supplies structure, so new content types need no schema change.
Draft and published side by side
Two columns on the same row make publish a single SET, and preview simply reads the other column.
The form comes from the data
ObjectEditor infers fields from the document's shape, so a new field in the content is editable immediately.
Cloudinary ids as keys
The media row's primary key is the Cloudinary public_id — never two identifiers for the same asset.
- →Side-by-side preview of draft vs published before publishing.
- →Per-document revision history.
- →Role-based access for brand managers who should only edit their own brand.
- →Event and menu content types for the restaurants.






Want something like this?
I can build one for you.
Tell me what you have in mind — I'll reply with questions, a plan and a quote.