craaft

Security

How craaft looks after your boards

What we do to keep your account and your work safe, in plain words, and what we don’t do yet.

Signing in

With a password, or with Google, GitHub or LinkedIn.

  • Passwords are hashed with bcrypt and never stored as text
  • An account made with a password confirms its email address first
  • Two-factor sign-in with an authenticator app, with its secret encrypted at rest, and 10 single-use recovery codes
  • Each code works once, and 10 wrong codes in 15 minutes pause the second step for 15 minutes
  • Sign-in attempts are rate limited for each account and each IP address

Lost your phone and your recovery codes? Email us from the account’s own address. We turn two-factor off only after checking it’s you, and we email you when we do.

Staying signed in

What keeps you signed in, and what signs you out.

  • Sessions live on our servers. Your browser holds only an HTTP-only, same-site cookie
  • A session lasts 30 days from sign-in
  • Changing your password signs out every other session and disconnects every connected app
  • Turning two-factor on or off signs out your other sessions
  • Every change you make in the app carries a CSRF token

Agents get your access, never more

An agent acts as you, with your boards and your permissions.

  • Claude and other MCP clients connect with OAuth 2.1 and PKCE, so nobody copies a token around
  • Access tokens last 1 hour. Refresh tokens change on every use, and reusing an old one ends that connection
  • Personal access tokens are shown once and stored only as a SHA-256 hash
  • Tokens can’t change billing, two-factor or API keys. Those need you, signed in
  • Each token is rate limited: bursts of 60 requests, then 1 a second
  • Remove an app in Settings under Connected apps, or a token under API keys

Who can see what

Access is checked on every request, not just when you open a page.

  • Encrypted in transit, and at rest on Google Cloud
  • Board access is checked inside the database query itself, so a board you can’t open looks the same as one that doesn’t exist
  • Private boards are seen only by the people added to them. Workspace owners and admins see every board
  • Public links are off until you turn one on, and turning one off ends that URL for good
  • Files download in a sandbox, so a file can’t run as a page in your browser

Who else touches your data

5 services, each for one job. We don’t sell or share your data.

  • Google Cloud hosts the app, the database and your files
  • Paddle runs billing. We never see your credit card details
  • Resend sends our email, and receives mail sent to a board’s email-to-card address
  • OpenRouter, only on boards that turn on AI cards, and never with a provider that stores or trains on the text
  • Plausible counts visits to these public pages without cookies. It doesn’t load in the app

The privacy policy has the detail.

Taking your data with you

  • Export any board as JSON or CSV, on every plan
  • Deleting your account removes it, the workspaces you own and the files you uploaded, and cancels Pro

What we don’t have

Better you hear it here than in a security review.

  • No SAML single sign-on or SCIM provisioning
  • No SOC 2 or ISO 27001 certification
  • No choice of the region your data is stored in

Found something?

Email support@craaft.io with what you found and how to see it again. Please test only against your own account and boards. We usually reply within a day.

Start with one board

Free for 3 projects, with no credit card to enter. Turn on two-factor in Settings the day you sign up.