
Summary
A marketing site for a transport company for seniors and medical appointments, with accessibility as the starting point: a large base type size, high contrast, visible focus. The unusual part sits in the administration: alongside the full Sanity Studio there is a shielded admin page where the non-technical owner asks an AI assistant for a change in plain language. The assistant may only make proposals within a fixed list of text fields; a separate publishing step validates everything again before anything on the site changes.
The brief
Family in the US run a transport company for seniors and medical appointments. The site had to be accessible for that audience, and maintainable by a non-technical owner - without a language model getting free rein on a live site.
What I built
- A one-pager with services, testimonials, contact details and a call-back and quotation form, without a database (leads land in a spreadsheet and the mailbox through a webhook)
- Accessibility as the starting point: a larger base type size, visible focus states and WCAG AA as the floor, for an audience of seniors
- Sanity as the CMS with the full Studio on its own route; the site falls back on fixed text when the CMS is unreachable
- A shielded admin page where the owner asks an AI assistant for changes in plain language (Sanity Content Agent through the Vercel AI SDK)
- The assistant may only propose: read and write rights are switched off, and there is a fixed list of seven text fields it may touch
- A separate publishing step that validates every proposal again: the field list, lengths and formats, and conflict detection against interim changes and open drafts in the Studio
In detail
- An AI-assisted CMS with hard limits: within the allowlist the assistant makes a proposal; anything outside it becomes a prefilled message to the administrator, never a silent change
- The write token stays server-side; in the CMS itself the owner has read rights only
- Proposal and publication are separate steps, with conflict detection so an outdated proposal does not quietly overwrite something
- One AI action per request, with a limit per hour: no agent that carries on by itself
- Large type, high contrast and visible focus for the audience of seniors
Outcome
Runs on a temporary environment while its own domain is pending; the AI admin route is built and is being put into use together with the owner.