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.
Content intelligence · Named-author publishing · UK-resident
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
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
Return to Sport Rehabilitation Explained
Connor Jayes · 7 min · Imported
How to Recover From a Sports Injury
Connor Jayes · 7 min · Imported
Post-op ACL: a 12-week plan
Connor Jayes · 8 min · AI draft + 2 human revisions
Working at a desk with shoulder pain
Connor Jayes · AI draft · awaiting human edit
“Connor was patient, thorough and explained everything clearly.”
“Back in the gym in three weeks. Worth every penny.”
The problem
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.
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.
Multi-tenant marketing apps frequently filter by tenant_id at the application layer only. One missing WHERE clause is one cross-tenant leak.
Platform
Reviews, content, billing and audit log in one tenant-isolated workspace. The database — not the UI — is the source of truth for every gate.
Row-Level Security on every customer-facing table. Anon SELECTs are explicitly scoped; authenticated reads filter by current_tenant_id() in the policy itself.
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.
Posts pulled from external CMSes (Wix, SquareSpace) are tagged 'imported' — distinct from human and AI-draft revisions. The audit log never lies about origin.
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.
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.
30-day trial, three plans, signed webhook into stripe_events for idempotency. Trial banner counts down in the dashboard chrome.
How it works
01
OAuth into Google Business Profile to auto-sync reviews. Drop the embed snippet on your site for a tenant-branded review widget.
OAuth + Embed
02
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
03
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
04
Approve, schedule, or auto-approve per tenant. Every transition is captured. The trigger blocks AI-only content from ever publishing.
Publish · Schedule · Audit
Content
`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.
| created_at | edited_by_kind | ai_model | edited_by |
|---|---|---|---|
| 2026-05-06T03:00Z | imported | — | system · wix_rss |
| 2026-05-04T14:11Z | human | — | connor@atlasphysio.co.uk |
| 2026-05-04T13:52Z | ai_draft | claude-sonnet-4-6 | — |
| 2026-05-04T13:50Z | ai_draft | claude-sonnet-4-6 | — |
Reviews
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.
atlas-physio.co.uk/reviews
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
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
Resend · DKIM + SPF + DMARC
Backups
Supabase PITR · 7-day window
Use cases
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.
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.
30 days free. No card required. Migrate your existing Wix or SquareSpace blog in the first session.