Alpha Mode | Still currently in build but live and operational. A reminder the site is not fully mobile ready. Coming to beta.

Legal

Data Access Rules

Subscriber lists, memberships and billing. Last updated 3 September 2026.

In short: your subscriber list is yours alone, your membership and billing records are visible only to you (and to admins where a dispute needs checking), and money-related records can only be written by our servers after a payment provider has confirmed the event.

How the rules work

Every sensitive table in our database is protected row by row, not just page by page. The database itself checks who is asking before it returns a single row, so a rule cannot be bypassed by a clever request, a shared link, or a bug in a page.

Author subscriber lists

The readers who have signed up to an author's newsletter, including their email address.

  • Read: the owning author only (matched on the author's own account ID), or a site admin.
  • Update and delete: the owning author or an admin — used for tidying a list or honouring an unsubscribe.
  • Insert: never by a signed-in person directly. New subscribers are written by a trusted server process after the signup form is validated, so nobody can inject rows onto another author's list.
  • Logged-out visitors have no access to this table at all.

Author memberships (Scribe / Alchemist)

Which plan an author is on, its status, trial dates and renewal date.

  • Read: the member themselves, or an admin. Nothing here is public.
  • Write: only trusted server code reacting to a verified payment event. The app never lets a browser set its own plan or status.
  • Logged-out visitors have no access. Entitlement checks that a public page needs run through a narrow function that returns a yes/no answer, not the billing row.

Reader membership records and billing history

Membership rows and the audit trail of plan changes.

  • Read: the owner of the record only.
  • Billing audit history: admins only, so plan-change disputes can be checked.
  • Write: trusted server code only, from verified payment events.

Direct ePub sales and seller accounts

Sale records for direct author sales, and the author's connected payment account.

  • A sale is readable by exactly two people: the buyer and the selling author.
  • The connected payment account is readable by the author who owns it; nobody else, including other authors.
  • Sale rows are only created and updated by the verified payment webhook, never by the browser.
  • Sale settings (price, currency, whether a book is for sale) are managed by the owning author.

Common failure cases we avoid

A table with no policies at all

Turning on row level security without writing policies locks everyone out, and turning it off leaves everything readable. Every table above has explicit, named rules for each action.

Blanket public read access

A rule that says 'anyone may read' on a subscriber or billing table exposes email addresses and payment status to the whole internet. Public visibility is granted only to genuinely public things, such as a book listed for sale.

Trusting a value sent from the browser

Ownership is always taken from the signed-in account itself, never from a field in the request. Otherwise anyone could claim another author's subscriber list or another member's plan.

Letting the browser write billing state

Plan, status and paid amounts are only written by server code that has verified the payment provider's signature. A browser-set plan would be free-upgrade-by-request.

Using an admin/service key for ordinary reads

The privileged server key ignores all these rules. It is reserved for verified webhooks and maintenance jobs, never for loading a normal page.

Forgetting the owner's own read path

When a record is hidden from the public (a draft, an unapproved listing), the owner still needs a rule that lets them see it — otherwise authors report that something they created has vanished.

Read access granted but table access not

Policies alone are not enough: each table also needs the matching permission grant for signed-in members. Missing it produces a permission error rather than an empty list.

See also our Terms & Conditions, Marketplace Terms and Privacy Policy.