Security at RoadSnap

Last updated: 11 September 2026

RoadSnap was designed around six principles from the first commit. Each is a fact you can check on this page.

Authentication and sessions

Encryption, and what it does and does not protect

Your plans are encrypted in transit and at rest. The algorithms and keys are maintained by our infrastructure providers — Supabase for the database, Vercel for the application. They keep them current; we do not pin them.

We deliberately do not name a cipher suite here. We do not negotiate it and cannot verify it from where we sit. Quoting an algorithm we do not control would state somebody else's configuration as our commitment. What we stand behind is the property: encrypted going and encrypted sitting, by providers whose business depends on it.

What encryption at rest defends against, said plainly. Someone obtaining the physical storage: a stolen disk, a decommissioned drive, a copied backup volume. It does not protect against a compromise of RoadSnap itself. Our application holds a database credential that reads your data in the clear; without it there is no product. Anybody holding that credential could read plans, and at-rest encryption would not stop them.

What defends that credential is where it lives: server-side only, never in a browser, in the deployment platform's secret store. The access controls and isolation below do the rest.

Customer-managed keys are on our roadmap behind SOC 2, the order security reviews ask in. Single sign-on, once ahead of both, has shipped. If your organisation needs to hold the keys itself, tell us at security@roadsnap.app and it moves up the list.

Isolation between accounts

What we can see, and what we cannot

What this section does not claim. The people who run our infrastructure — Supabase, Vercel, Cloudflare — hold the access their platforms need, as for every company using them. They are named as sub-processors below, with what each holds. And if you ask for help with a specific problem, we may ask you to show us something. Your consent is a different thing from our access, and we will not blur them.

Application and transport hardening

Privacy by design

Infrastructure and sub-processors

ProviderRoleNotes
VercelApplication and website hosting; serverless functionsTransport encrypted; standard managed platform hardening.
SupabaseManaged PostgreSQL database, authentication, sign-in code emailsDatabase hosted in Eastern Canada (Canada Central); encryption in transit and at rest; managed backups; row-level security enabled.
ResendDelivery of every email we send. That is the sign-in code (through Supabase), the weekly summary, and share, invitation and mention notices. Also the “gone quiet” note, feedback copies, the support acknowledgement and billing-year noticesReceives the recipient address and that message's content only. Reports hard bounces and spam complaints back, so we stop sending to an address that has rejected us.
HetrixToolsIndependent uptime monitoring of the public siteRequests the site from four cities and records whether it answered. It holds no customer data and never signs in — it sees what any visitor sees.
StripePayments, subscriptions and invoicesCard details are entered on Stripe's own pages and never reach our servers or database. We hold a customer reference, plan state and billing email.
AnthropicThe AI Assistant — answering questions about a plan and proposing changesEngaged 29 August 2026. It was named here in advance on 28 August, so the 30 days’ notice in our DPA ran before the feature existed, not after. When somebody uses it, we send Anthropic the question, and an outline of that roadmap: item ids, titles and field values. Notes are not sent with it. If answering needs the detail in a branch, the AI Assistant asks for that branch and its notes are sent then. It can also run a web search, in which case a search phrase it composes leaves too. It also runs once when a roadmap is opened, at most once a day and only on Pro and Team, to offer two short suggestions. Settings → Suggestions controls this per workspace. The call is made by our server, never by your browser. That is why the policy above still forbids the page from connecting to any third-party host. We do not permit your plans to be used to train models. We record one metering row per call — tokens, cost and counts — and not the question or the answer. For an unprompted suggestion we also keep the suggestion itself and what you made of it, so it is never repeated. Field values in the outline can include names in an Owner column and Jira account ids.
Where RoadSnap data flows, and which regions it sits in Your browser holds the roadmap locally and talks only to RoadSnap on Vercel. Vercel serverless functions talk to Supabase in Eastern Canada, and to Stripe, Resend and — only when you connect them — Jira and Slack. No third party is contacted by your browser directly. Your browser roadmaps held locally first, before any network Vercel site + /api functions global edge Supabase database + sign-in Eastern Canada Anthropic the AI Assistant · Pro and Team when you ask, or once a day Stripe · Resend payments · our email Jira · Slack only if you connect them, per workspace Cloudflare DNS and inbound email routing only Solid = always. Dashed = only when you ask for it, or connect it. Your browser sends nothing to a third party — the policy forbids connections (connect-src 'self'). One exception, images only: a note may show a picture from its own address. Shared links do not load them.

In words. Your roadmaps are written to your own browser first, before anything touches the network. The browser sends nothing to anyone except RoadSnap: our content security policy (connect-src 'self') forbids any other host.

The AI Assistant is the one place a plan leaves us, and it goes from our server, not your browser. What is sent, when, and what we keep is in the Anthropic row above. In short: the question and an outline, never the notes unless one branch is needed. Nothing is sent unless a person asks, and nothing on any other plan. The arrow starts at Vercel, not your browser, which is why the content-security policy is unaffected.

One deliberate exception, and it is images only. A note can show a picture by its address (img-src 'self' https:). The only thing that reaches that host is the request for the image itself. That means your IP address, browser and the time, as with any image on any web page. We send no referrer. On a roadmap shared by link we do not load them at all. Data URIs are refused, so a note cannot smuggle a file into the plan.

RoadSnap runs on Vercel (global edge). Its serverless functions are the only things that talk to anyone else. They use Supabase in Eastern Canada for the database and sign-in, Stripe for payments and Resend for our email. Cloudflare handles DNS and inbound mail and holds no plan content. Jira and Slack are contacted only if somebody in your workspace connects them, per workspace, and either can be disconnected in one action.

Which of these hold personal information, what each is for and where each operates is in the table above. It is also in section 5 of the Data Processing Agreement.

The database is hosted in Eastern Canada (Canada Central). Some application and hosting processing may take place elsewhere; see the Privacy Policy for how we handle cross-border processing.

Services you connect, and what they can do

Jira and Slack are connected by someone in your workspace, per workspace, never by us. Both are off until somebody turns them on. The detail matters more than the summary:

Whose access a connection carries. Atlassian grants access to a person, not a site. A Jira connection sees what the person who authorised it can see, and every editor in the workspace can use it. Connect it as somebody whose access you are content for that workspace to share. Viewers cannot use it to change anything in Jira.

Only an owner can connect one, because only an owner can disconnect one. Binding a Jira grant or a Slack webhook to a workspace is an owner's act, and so is removing it. A credential a workspace cannot revoke without an owner should not be creatable without one. Editors can change how a connection behaves, such as which channel the digest goes to or whether the nightly Jira push is on. They can also post to Slack. Viewers can do neither.

What a viewer can and cannot do here. A viewer sees every roadmap in the workspace and cannot edit one. Three layers enforce that: the app opens read-only, the server refuses their edits, and database policy grants write only to owners and editors. Each is sufficient alone.

Data storage and resilience

What happens if something breaks — measured, not estimated

We drill this rather than assert it. A backup is restored into a separate, isolated environment and compared with production row by row. The expected figures are written down before the comparison runs, and the result is kept so each drill can be compared with the last.

Most recent drill: 25 August 2026.

For your own work it is better than those numbers suggest. Your roadmaps are written to your browser before they reach us. A database restored to yesterday does not take your work away: your device still holds it, and it syncs back. What a restore costs is server-side state: shares, membership, subscription records and history.

You do not have to take our word for whether RoadSnap is up. An independent third party checks it every minute from New York, San Francisco, London and Frankfurt. Their record is public and unedited: live uptime report, running since 6 August 2026. It is their measurement, not ours. When RoadSnap is down, that page says so, whether or not we would have mentioned it.

RoadSnap is built and run to be available around the clock. We print no percentage: a number on a page is right the day it is written, and the link above is always current. As is usual for self-serve plans, our terms carry no service-level agreement. Availability commitments with service credits are available under an enterprise agreement — write to hello@roadsnap.app.

Drills run at least quarterly, and after any change to where or how backups are taken.

When something goes wrong

Every product has incidents. What sets vendors apart is whether they decided in advance what to do, and whether they tell you.

We keep a written incident response runbook. It covers detection, severity, who is told and when, procedures for the likeliest failures here, and a post-mortem for every one. Like most companies, we keep the operational half internal: it names our detection sources and response times and, by omission, our gaps. What we commit to publicly is this:

SeverityWhat it meansWhat we do
SEV‑1Nobody can sign in or reach their data — or data may have been lost, altered or disclosedEverything stops. We say something within 30 minutes, even with the cause unknown, and again at every time we promise.
SEV‑2A major feature broken for everyone, or any feature for one identifiable customer. Anything involving money.Same day, and we contact the affected people directly rather than waiting to be asked.
SEV‑3Degraded or ugly, with a workaroundNext working session, tracked on the roadmap.

“May have been” is treated as SEV‑1 until evidence narrows it. The severity is set by the worst plausible reading, not the most comfortable.

If personal information is involved, the commitment is specific and is on the Privacy Policy. We tell you by email within 72 hours of establishing that a breach occurred, not 72 hours from finishing the investigation. The email says what we know and which parts are still unknown.

Every incident gets a written post-mortem, blameless about people and merciless about mechanisms. It says what happened and what it cost, in specifics. It says why, at the level of the mechanism rather than the mistake, what would have caught it, and the change we made.

Responsible disclosure

If you believe you have found a vulnerability, we want to hear from you. Email security@roadsnap.app with the details and steps to reproduce, and give us a reasonable chance to fix it before public disclosure. We will not pursue good-faith research that respects our users' privacy and does not degrade the service.

What happens after you report one. An automatic note confirms it arrived within minutes. A human acknowledges every report within two working days, and tells you what we concluded, even when it is not a vulnerability. Once an issue is confirmed and rated, these are the times we work to:

SeverityFixed or mitigated within
Critical — customer data reachable across accounts, authentication bypass, remote code execution7 days
High — privilege escalation within an account, or a serious flaw needing unusual conditions30 days
Medium and below90 days, or the next release that touches the area

The clock starts when we confirm and rate the issue, not when the mail arrives. A report unread in a spam folder should not consume a deadline. Mitigating counts as meeting the target. Taking a feature down, revoking a token or blocking a path protects you today; the permanent fix follows. If we are going to miss one, we say so before the date, to you and any affected customer.

These are targets we hold ourselves to and publish so they can be checked. They state how we work; they are not a contractual service level, and not part of the Terms of Service or the Data Processing Agreement. Where a fix depends on a sub-processor, our obligation is to escalate it promptly and tell you what we are told.

What a security review can have today

Single sign-on (SAML 2.0) is included in the Team plan at no surcharge, with any provider that speaks SAML. Setup goes through a person, because one step cannot responsibly be automated. That step is confirming you control the domain before a provider may vouch for everyone with an address at it. You send us your provider’s metadata and the domains to enrol. We send back what your provider needs and test it with you before it goes live. See Support for what it changes and what it does not, including that we do not support SCIM today.

What is next, and in what order

Everything above is in place today. What follows is on our public roadmap, in the order security reviews ask for it:

  1. An independent penetration test, with the findings and their fixes published here.
  2. SOC 2 Type I, then Type II. The controls are written down and practised now; the audit puts a third party's name on them.
  3. SCIM provisioning, so the identity provider that already signs your people in also adds and removes them.
  4. Additional data regions. Eastern Canada today.
  5. Customer-managed encryption keys.

If one of these decides a review for you, say so at security@roadsnap.app; that is how the order gets set.