Launch intelligence is in early access. Become a design partner

Security

Answers for your security review,backed by code you can read.

Every request goes through the same permission checks. The app can't edit the audit log, and your files sit in private storage for your workspace alone. The AI treats the internet as untrusted.

Audit logappend-only · example
10:42:07[email protected]product.campaign_post_status_changedapprove · 6 posts
10:41:55api key · cirelease.createdRecurring invoices
10:39:12[email protected]member.role_updatedcreator → approver
10:37:40systempost.publishedconfirmation stored

Access

Who gets in,and what they can do.

Sign-in, roles, and identity are built on Better Auth. Each workspace is its own Better Auth organization.

  • Single sign-on

    SAML and OIDC, plus Google, Microsoft, and GitHub sign-in. Password sign-in can be switched off.

  • SCIM provisioning

    SCIM user provisioning. Tokens are scoped to one workspace and stored as hashes. Deprovisioned people lose access.

  • Two-factor

    TOTP. A fresh two-factor session is required to configure SSO or SCIM and to connect social channels.

  • 6 fixed roles

    owner, admin, creator, approver, publisher, viewer. Approving and publishing are separate permissions.

  • Sign-in limits

    Sign-in attempts are limited to 10 a minute.

  • Scoped API keys

    Five scopes, hashed at rest, shown once, and revoked on the next request. No key can approve or publish.

Authorization

Every request takes the same nine stepsin the same order.

Each request ends with an audit entry saved together with the change.

01

Sign-in checked

02

Active workspace

03

You belong to it

04

Your role

05

Permission for the action

06

Workspace is active

07

Scoped to the workspace

One transaction
08

The change

09

Audit entry

Any check fails: request refusedChange and audit entry commit together
The browser only decides which buttons to show. The server decides what you can do.

Your data

Your data stays in your workspace,and requests from other workspaces get a 404.

Your login decides which workspace you see. An ID from another workspace returns 404, so nobody can probe for other workspaces' IDs.

  • org/<organizationId>/…

    Private storage

    Files live in a private bucket with no public domain, under a path the backend won't cross between workspaces.
  • signed URL · 2 min

    Short-lived links

    Uploads and downloads use signed URLs that expire in two minutes. Uploads are write-once, and a replay is refused.
  • two-workspace test

    Isolation, tested

    An automated test with two workspaces proves logins and API keys can't reach the other workspace's releases or assets.
  • web → backend SDK

    No database in the web app

    The web application has no database connection and no storage credentials. A test enforces it.
  • grace period · tombstone

    Deliberate deletion

    Deleting a workspace starts a grace period. Afterward, a deletion record and the audit evidence remain.
  • United States

    Where it runs

    The application runs in the United States, in DigitalOcean's New York region, with workflows in AWS US East. Regional data residency is not offered today.

Audit

An audit log the app can only add to,enforced by database permissions.

The application's database role can insert and read audit rows and nothing else.

  • Append-only

    Redacted entries for each workspace, searchable by time, action, teammate, outcome, record, and text.

  • Hashed IPs

    IP addresses are stored as keyed hashes, not raw values.

  • Retention and legal hold

    Ninety days by default. Enterprise sets a longer period or places history on legal hold.

  • Audit log export

    Send events to your security log tool (SIEM) as CloudEvents JSON over HTTPS with an HMAC SHA-256 signature, or use the Splunk and Datadog presets.

  • Encrypted export secrets

    Export credentials are encrypted at rest with AES-256-GCM and never shown back.

  • Delivery that retries

    Exports run every minute, refuse private addresses and redirects, and retry without blocking your work.

AI

The AI is treated as untrusted,and every action it takes is logged.

The AI reads untrusted text, so Shots doesn't trust the AI either. It runs inside one workspace, holds no credentials, and can't approve anything.

  • No training on your content

    Your history is retrieved at generation time for your workspace only. No model is trained on it.
  • Injection defense

    Sources are cleaned, labeled as untrusted, and flagged. Read the guardrails.
  • Usage logged, prompts left out

    AI actions are audited with the model and usage. Prompt and completion text are kept out of the audit log.

Providers

The services the hosted platform runs onand what each one does.

Infrastructure providers
ProviderPurpose
DigitalOcean App PlatformApplication hosting, in the New York region
PlanetScaleManaged PostgreSQL
UpstashRedis for rate limits and caching
Cloudflare R2Private object storage for assets
Cloudflare Browser RenderingHeadless rendering of visuals
Temporal CloudWorkflows that survive restarts, for publishing and maintenance, in AWS US East
ResendAccount, invitation, and release email
OpenRouterModel routing for AI features
MicrolinkScreenshot capture API
PostHogProduct analytics

Questions

Anything else? Talk to us.

Do you have SOC 2 or ISO 27001?
Not today. The architecture, controls, and their tests are documented in the open-source repository, and we will walk your team through them.
How do I report a vulnerability?
Contact us through the contact page with the details. Please do not open a public issue for security reports.
Who can see our workspace?
Only your teammates, through the roles you assign. Every read and write is scoped to your workspace.

Related

See what Enterprise adds,how the AI is guarded, and how approval works.

Request a security reviewand walk through the controls with us.