Publishing is a state machine
A service owns content transitions and creates revisions; routes do not independently invent lifecycle rules.
LOADING
Opening the page…
Live / 2026 / Institutional platform
A public site for six centres, with a controlled publishing workflow behind it.
Publishing states, permissions and operational checks

SHAPES India brings six centres, resources and updates into one public structure. Staff need a separate path to prepare, review and publish the information visitors see.
Institutional information needs clear public navigation while editors need guarded paths to revise and publish content without blurring permissions or losing history.
The work spans the public information architecture and the publishing application. A service owns content state changes and revisions; administrative routes enforce role and object permissions.
A service owns content transitions and creates revisions; routes do not independently invent lifecycle rules.
Administrative actions check explicit roles, permissions, and object scope.
Liveness checks process availability while readiness checks datastore access.
Flask serves public and administrative paths. SQLAlchemy and PostgreSQL hold content and revision records. Migrations, health checks and deployment validation support changes to the site.
Flask routes and Vite-built assets deliver centre, event, publication, and contact pages.
Authenticated administrative routes use server-side permissions and object-level policy.
SQLAlchemy models and Alembic migrations persist content, revisions, and related records.
Health/readiness endpoints, deployment validation scripts, and a runbook exist in source.
The six-centre site is captured in the case images. The application code includes publishing checks, role permissions, readiness, request IDs and operational scripts.

The public site is available at shapesindia.org. Its backup schedule and my exact contribution under the contract still need confirmation.