Content intelligence · Named-author publishing · UK-resident

One operating layer for reviews, content and the audit trail behind both.

The platform collects reviews from Google, Facebook and direct invites, drafts blog posts with Claude under a named author, and enforces every approval and revision in the database — so what publishes is what was approved, every time.

30 days free · No card required · Row-Level Security from day one · ICO ZC120359

Atlas Physiotherapy Clinic · Faversham

Overview

Reviews

127

+12 this month

Avg rating

4.9

Google + FB + direct

Posts published

12

6 imported, 6 drafted

Pending review

0

auto-approve on

Content pipeline

Last 7 days
  • Return to Sport Rehabilitation Explained

    Connor Jayes · 7 min · Imported

    Published
  • How to Recover From a Sports Injury

    Connor Jayes · 7 min · Imported

    Published
  • Post-op ACL: a 12-week plan

    Connor Jayes · 8 min · AI draft + 2 human revisions

    In review
  • Working at a desk with shoulder pain

    Connor Jayes · AI draft · awaiting human edit

    Draft

Latest reviews

Google · 4.9
  • Sarah W.

    Connor was patient, thorough and explained everything clearly.

  • James P.

    Back in the gym in three weeks. Worth every penny.

The problem

Marketing tools were built to ship copy fast — not to evidence what shipped under whose name.

Fragmented review collection

Google reviews live on Google, Facebook on Facebook, customer testimonials on email. Stitching them onto a single tenant-branded surface is left to the practice, and it shows.

AI content with no audit trail

Most SEO tools auto-publish AI drafts under a fictional byline. Google's E-E-A-T downranks it, and the practice has no record of who wrote what or when.

No real tenancy

Multi-tenant marketing apps frequently filter by tenant_id at the application layer only. One missing WHERE clause is one cross-tenant leak.

Platform

More than a CMS.

Reviews, content, billing and audit log in one tenant-isolated workspace. The database — not the UI — is the source of truth for every gate.

Tenant isolation by RLS

Row-Level Security on every customer-facing table. Anon SELECTs are explicitly scoped; authenticated reads filter by current_tenant_id() in the policy itself.

Human-in-the-loop publish gate

A Postgres trigger blocks any post going to scheduled or published unless a human (or imported) revision exists in post_revisions. Not a UI check — a database check.

Imported revisions, truthfully

Posts pulled from external CMSes (Wix, SquareSpace) are tagged 'imported' — distinct from human and AI-draft revisions. The audit log never lies about origin.

Per-tenant settings

Auto-approve toggle, RSS feed source, brand colour, primary domain, sector — all live in tenants.settings as typed JSONB. Defaults are safe; tenants opt into the convenient.

Embed widget

A single script tag on the tenant's site renders the review wall with the tenant's brand colour, logo, and a tenant-scoped query against the anon-readable reviews table.

Stripe-backed billing

30-day trial, three plans, signed webhook into stripe_events for idempotency. Trial banner counts down in the dashboard chrome.

How it works

From sign-up to a published post, in four steps.

  1. 01

    Connect

    OAuth into Google Business Profile to auto-sync reviews. Drop the embed snippet on your site for a tenant-branded review widget.

    OAuth + Embed

  2. 02

    Collect

    Reviews flow in from every channel. Existing blog content imports from your old Wix or SquareSpace feed under an 'imported' revision.

    RSS · Direct · Google · Facebook

  3. 03

    Draft

    Brief Claude on a topic; get an outline and a markdown draft attributed to a named author. Edit it; the database records every revision.

    AI draft · human edit

  4. 04

    Publish

    Approve, schedule, or auto-approve per tenant. Every transition is captured. The trigger blocks AI-only content from ever publishing.

    Publish · Schedule · Audit

Content

Every revision recorded.

`post_revisions` is append-only. Every AI draft, every human edit, every Wix import lands as a row. The publish gate refuses to flip status to published unless one of those revisions is human or imported.

The trigger lives in a private schema not exposed by PostgREST. Bypassing it means writing raw SQL with the service role — at which point you have bigger problems.

post_revisions · audit logappend-only
created_atedited_by_kindai_modeledited_by
2026-05-06T03:00Zimportedsystem · wix_rss
2026-05-04T14:11Zhumanconnor@atlasphysio.co.uk
2026-05-04T13:52Zai_draftclaude-sonnet-4-6
2026-05-04T13:50Zai_draftclaude-sonnet-4-6
Publish allowed — human revision exists for post_id 7e2…f4a

Reviews

Every channel, one wall, your branding.

Read-only OAuth into Google Business Profile syncs reviews on a daily cron. Single-use, hashed-only invite tokens collect direct reviews. Facebook and static testimonials sit on the same wall, behind one anon-readable query.

  • Hashed invite tokens · 7-day expiry · no plaintext storage
  • Daily Google sync · audit row per import
  • Embed widget tenant-branded · one script tag
  • JSON-LD structured data on every published page

atlas-physio.co.uk/reviews

Atlas Physiotherapy Clinic

4.9 · 127 reviews

Sarah W.

Google

Connor was patient, thorough and explained everything clearly. Back in the gym within three weeks.

James P.

Direct invite

Worth every penny. Better than three previous physios combined.

Emma R.

Facebook

He didn't just treat my knee — he explained why it was happening.

Daniel K.

Google

Returned to running after 18 months off. Five stars.

Trust & compliance

UK-based · ICO-registered · RLS-by-default.

Hosted in Supabase London (eu-west-2). No special-category data stored. Every schema change recorded in docs/DATABASE.md §7. Advisor-clean before every deploy.

Region

London (eu-west-2)

Auth

Supabase Auth · magic-link sign-in

Multi-tenancy

Row-Level Security · current_tenant_id()

ICO

ZC120359

Data classes

No special-category data

Audit

Append-only post_revisions · stripe_events

Email

Resend · DKIM + SPF + DMARC

Backups

Supabase PITR · 7-day window

Use cases

Built for solo practitioners and the agencies that serve them.

Direct

Practice owner running their own marketing

One workspace, one website. The widget renders reviews, the editor drafts posts under your HCPC / GMC / GDC name, the cron pulls existing Wix content over. You stop writing on a platform you don't own.

  • Own brand · own domain · own author
  • Auto-import existing Wix or SquareSpace blog
  • Stripe trial, then £29/mo on the starter plan
Agency

Agencies running marketing for multiple clinics

Each client is a tenant. RLS isolates every read and write. Authors are tenant-scoped, billing per workspace, and the same agency editor can switch between workspaces with role-based access on each.

  • One auth, many workspaces · role-based access
  • Tenant-scoped audit log per client
  • Programme pricing for portfolios of 5+ clinics

Move your reviews and content somewhere you actually own.

30 days free. No card required. Migrate your existing Wix or SquareSpace blog in the first session.