Security & trust

Built by people who secure national infrastructure.

The engineers behind taleseal have spent their careers securing UK critical national infrastructure. On those systems a security failure is a national story, not a bug ticket. A tale is a page you hand to a customer or a teammate, so it gets the same discipline: every control on this page is live in the running service, and you can check most of them from your own terminal.

live in production · checkable with curl · no asterisks

Don’t take our word for it

02Your page, your switch

Readers see what you published. Deleted means deleted.

Versions
Drafts stay yours

A tale starts as a draft, bannered as one until you publish. After that, readers see only the revision you published: a new draft behind the same link stays invisible until you publish it too.

Retraction
Withdrawn, never rewritten

A publisher can retract a tale: every version is destroyed at once and the address answers 410 Gone, permanently. The address is never reused, so a link can never start telling a different story.

Expiry
An expiry is honoured to the minute

A tale published with an expiry stops being served the moment it lapses: no grace window, no cached afterlife on our side. Deleting your account removes your tales with it, at once.

03Accounts and keys

Credentials we could not leak if we tried.

API keys
Stored only as a one-way hash

A key is shown once, at the moment you mint it, then kept as a SHA-256 hash. We cannot recover it, display it again, or lose it in a database dump.

Passwords
Hashed with scrypt

Passwords are hashed with scrypt, a memory-hard algorithm built to make bulk cracking expensive, and every new password is screened against known breach corpora, k-anonymised, so the password itself never leaves our server.

2FA & passkeys
A second factor, if you want one

Add an authenticator code (with backup codes, and a lockout that makes guessing six digits useless) or sign in with a passkey instead. Trusting a device is opt-in, per sign-in, and expires.

Recovery
Links that work once

Password-reset and sign-in links are single-use and short-lived (an hour for a reset, five minutes for a sign-in link), and requests are answered identically whether an account exists, so nobody can probe who is here. Every sensitive change is confirmed to your inbox.

Self-service
Sessions listed, account deletable

Your account page lists every active session and can revoke each one; changing your password signs you out everywhere else. Deleting your account is self-serve and password-confirmed: account, sessions, keys and tales go together, at once.

Abuse
Rate limits on every surface

Publishing, viewing, sign-in and key minting are all rate limited. Dashboard actions are origin-checked, so another site cannot act as you.

04Infrastructure

A short list of hands your data passes through.

The service runs on Fly.io, and error logs never contain tale content. Failures are correlated by request id, never by body.

Transport
HTTPS, forced

All traffic is forced to HTTPS, with HSTS telling browsers never to try anything else.

Headers
Strict on every response

Every response (pages, API, assets) carries strict security headers. Tale pages load no analytics and set no cookies. The only script on them is our own, drawing the page’s charts.

Logs
Never the tale, only the id

Error logs never contain tale content: failures are correlated by request id, never by body.

Sub-processors, all five of them

  • Fly.ioApplication hosting on Fly.io’s global infrastructure.hosting
  • NeonPostgres database. Tales, accounts and key hashes live here.database
  • DopplerSecrets management. Credentials never live in code or config files.secrets
  • PostHogProduct analytics. Browser analytics on our public pages, shape-only events from the server, never tale content, and tale pages load no analytics at all.analytics
  • ResendTransactional email. Sees your address and the account emails we send you, never tale content.email

05Found a hole?

Tell us first, and a human will answer.

Report vulnerabilities by email, or read the machine-readable version at /.well-known/security.txt.

[email protected]
  • Every report is read by a person and answered.
  • Please give us a reasonable window to fix the problem before disclosing it.
  • Do not test against other people’s tales or accounts.