Skip to contentCALCHIS

Security

Last updated: November 6, 2026

Important Notice

Calchis is decision-support intelligence — not a primary alerting or dispatch system. Do not use this platform as a sole source for life-safety decisions, emergency response coordination, or regulatory compliance. Always verify against official sources (FEMA, NWS, state/local emergency management) before operational use.

1. Platform Purpose and Limitations

Calchis ingests public data under known licenses (USGS, NOAA, NASA FIRMS, FEMA, NIFC) and applies modeling algorithms to produce hazard assessments, consequence zone estimates, and analytical outputs. All outputs are modeled estimates derived from public data — not observed conditions.

1.1 Latency

Calchis polls source agencies on a fixed schedule; it does not receive pushed alerts. Displayed data therefore lags the agency by the agency’s own publication delay plus up to one polling interval. Current intervals: USGS earthquakes, SPC outlooks and NWS storm alerts every 5 minutes; NWS flood alerts every 10; NASA FIRMS hotspots every 15; NHC advisories every 30; NIFC fire perimeters every 12 hours.

A twelve-hour perimeter refresh is appropriate for planning and wholly inappropriate for tracking a moving fire front. Match the interval to the decision.

1.2 Model bounds

Scores are hazard scores, not risk scores. They describe the hazard at a location and do not incorporate property exposure, construction type or insured value, so they are not a substitute for actuarial assessment.

Some scoring inputs are measured for the specific location and others fall back to a documented per-state constant. Which is which is published per input in the methodology, under “Per-location inputs: what is measured and what falls back”. A fallback is labeled rather than hidden, but it does mean two addresses in the same state can return the same number for some perils.

One limit deserves singling out. The flood-zone input is derived from FEMA NFIP claims within roughly 11km, and NFIP rounds claim coordinates to one decimal place to protect policyholder privacy. It therefore describes a neighborhood, not an address, and is not a substitute for a FIRM lookup on a specific parcel.

1.3 When not to rely on this platform

Do not use Calchis as the trigger for evacuation, dispatch or any other life-safety action; it is not a primary alerting system and carries no availability guarantee. Do not use a hazard score as the basis of a flood-zone determination, an insurance rating decision, or a regulatory filing. Do not treat an absence of events as an all-clear — a source outage and a quiet day look the same on a map, which is why /status publishes per-source freshness.

2. Infrastructure and Hosting

Calchis runs entirely on managed platforms. There is no self-operated server, no customer-premises component, and no third party receives customer data other than the sub-processors listed below.

  • Hosted on Vercel (edge network, US regions), including its runtime cache, request logs (which carry IP addresses) and Vercel Web Analytics page views
  • Database: Supabase (PostgreSQL on AWS, US region, SOC 2 Type II certified)
  • Error monitoring: Sentry (error events and a sample of performance traces; the SDK’s default PII setting is off)
  • Payment processing: Stripe (PCI DSS Level 1)
  • Outbound email: Resend (recipient addresses and message contents of alerts, digests, invitations and sign-in links)
  • Maps and address search: Mapbox, called from the user’s browser (map tiles, the text typed into the search box, and the browser’s IP address); geocodes are displayed, never stored
  • DNS and CDN: Vercel Edge Network

The full register, with what each receives and where it runs, is the sub-processor document. The storage regions of Resend and Sentry have not yet been confirmed from their consoles; the document says so.

Compute and data are US-based. Vercel functions run in the platform default US region; no region pinning is configured in vercel.json, so requests are served from Vercel’s US edge and function regions. The Supabase project is US-hosted on AWS. Backup cadence and recovery posture are described in Section 6.

3. Data Handling

3.1 Data in Transit

All data transmitted over TLS 1.2 or higher. No plaintext communication channels are used for any user data or API traffic.

3.2 Data at Rest

Database storage is encrypted at rest with AES-256 by Supabase, which also encrypts automated backups. Server-side secrets — the Supabase service-role key, Stripe keys, the cron secret and third-party API keys — are held as encrypted Vercel environment variables and are never included in the client bundle. Row Level Security is enabled on every table, so the database enforces tenant separation rather than relying on application code to remember to.

3.3 Incident Data Handling

Two kinds of data sit side by side here, and the distinction matters.

Hazard and event data is public data from cited sources. It is fetched from USGS, NOAA (National Hurricane Center, the Storm Prediction Center and the National Weather Service alert feeds), NASA FIRMS, NIFC and FEMA. None of it originates from users, from private sensors, or from commercial data brokers. Every ingested record stores its source, source_url, ingested_at timestamp and a confidence_score, so any figure on the platform can be traced back to the agency that published it.

The live layer holds currently active events and is refreshed continuously; the historical archive holds roughly seventy years of public disaster records and is retained indefinitely, because it is the basis of frequency and return-period analysis. Both are public-source data and neither is customer data.

Incident records are yours. Anything created in the EOC workflow — incidents, ICS forms, taskings, resource requests, activity logs, cost records and the people assigned to them — is customer data, isolated per organization by Row Level Security and never used to train models or shared with other customers. Cross-agency sharing happens only when a user in your organization explicitly shares an incident. Tenant isolation is verified on every build by dedicated integration suites (tests/integration/cross-tenant.test.ts and cross-tenant-api.test.ts), which gate the merge: they run in continuous integration against a live project when its secrets are present, and a change in which one organization could read another’s data does not merge. They are not run by the deployment itself.

3.4 User Data Handling

See our Privacy Policy for comprehensive details on personal data collection, use, retention, and deletion.

4. Tenant Isolation and Access Control

4.1 Row-Level Security

Every table containing user data is protected by PostgreSQL Row-Level Security (RLS) policies. Users can only access their own saved locations, portfolios, triggers, and alert configurations through the application layer. RLS is enforced at the database level — not the application level — providing defense-in-depth against application bugs.

4.2 Authentication

Authentication is handled by Supabase Auth, which supports two sign-in methods: email-and-password, and a passwordless magic link sent to the address on file. Where a password is used it is stored only as a salted hash held by Supabase; Calchis never receives, stores or logs a plaintext password. Session tokens are short-lived JWTs validated on every API request.

A second factor is available: a time-based one-time code from an authenticator app (TOTP, RFC 6238). A user enrolls it under Settings → Account; from then on every sign-in, by password or magic link, stops for the code before the application shows a session, and the code is verified by the authentication provider, never by Calchis. Operator access to the platform requires it. Customer accounts are not required to enroll, and an agency that needs enforcement across its seats should say so in its agreement. Hardware keys and CAC/PIV are not supported; SMS codes are deliberately not offered. Status is tracked on /compliance.

4.3 API Authentication

Worker routes (cron-triggered data ingestion) authenticate via a shared secret (CRON_SECRET) in the Authorization header. User-facing API routes authenticate via Supabase JWT. All server-side secrets are stored in encrypted environment variables and never exposed to client-side code.

4.4 Rate Limiting

All API endpoints are rate-limited per minute in the application, and API keys carry a daily quota counted in the database. Limits vary by subscription tier. Rate limit headers are included in all API responses; a request over the limit is refused with HTTP 429 until the window resets. The per-minute limiter is in-process memory on each function instance (since 2026-10-21), so under load several instances each allow the stated rate; it is a burst control. The daily quota, counted in the database, is the ceiling that bounds extraction.

5. Security Headers and Browser Protection

  • Content Security Policy (CSP) — restricts script/style/image sources
  • HTTP Strict Transport Security (HSTS) — enforces HTTPS
  • X-Frame-Options: DENY — prevents clickjacking
  • X-Content-Type-Options: nosniff
  • Referrer-Policy: strict-origin-when-cross-origin
  • Permissions-Policy — restricts browser API access

6. Backup and Recovery

The database runs on Supabase Pro. Supabase takes automated daily backups retained for 7 days, and supports point-in-time recovery to any moment within a rolling 7-day window. Backups are encrypted at rest and managed by Supabase; Calchis does not hold a separate copy.

Calchis has not established formal RTO or RPO targets. We would rather say so than publish a number we have not tested against. In practice, recovery depends on the recovery of the underlying platforms: application availability follows Vercel, and data recovery follows Supabase’s backup and point-in-time recovery. Disaster recovery has not been rehearsed, and no DR test cadence is currently scheduled.

What this means for your data if the platform becomes unavailable: incident records, ICS forms and activity logs are in Postgres and are covered by the daily backups and the 7-day recovery window described above. They are not held only in memory or only in a cache. Customers who need a copy outside the platform should export ICS forms as PDFs and portfolio data through the API rather than relying on Calchis as a system of record.

7. Audit and Compliance

7.1 Audit Logging

Alert delivery events are logged in an audit table with SHA-256 hashed user identifiers (not raw user IDs). Those audit rows are retained until the account is deleted: no scheduled purge runs today, and an earlier version of this page that promised a two-year purge described a job that did not exist. API usage is counted per account per day and the counters are purged after 7 days. Server request logs (including IP addresses) are Vercel’s and are kept for Vercel’s own retention period; no log drain is configured. The privacy policy’s retention section is being brought into line with this.

7.2 Compliance Posture

Calchis holds no security certifications and has not been audited. There is no SOC 2 report, no FedRAMP authorization, no ATO and no CJIS certification. No external audit has been performed and none is currently scheduled.

What does exist is an internal readiness self-assessment, published at /compliance. It tracks SOC 2 Trust Services Criteria, NIST 800-53 control families and CJIS requirements, and marks each one met, in_progress or not_started with a note on the evidence. It is a self-assessment by the team that built the system. It is not an audit, nobody independent has reviewed it, and it should not be represented as one.

Two gaps are worth naming here rather than leaving to be discovered: two-factor authentication is available and required for operators but not enforced for customer accounts, and audit logging is partial rather than comprehensive (administrative changes to an account are logged since migration 176; reads are not). The adopted policy set is docs/security-policies.md and the incident procedure docs/security-incident-response.md in the repository; both were written and adopted by the founder and reviewed by nobody independent.

Sub-processors carry their own certifications: Supabase is SOC 2 Type II, and Stripe is PCI DSS Level 1. Those attest to those vendors, not to Calchis. California privacy rights (CCPA/CPRA) are addressed in the Privacy Policy.

8. Security Incident Response

Report a suspected vulnerability or security incident to security@calchis.com. Calchis is a small team and reports are triaged directly by the founder rather than by a rotating on-call roster — we would rather state that plainly than imply a 24/7 security operations center that does not exist.

On a confirmed incident the sequence is: contain and, where necessary, revoke the affected credentials; establish what data was reachable and by whom, using the audit log and Sentry error telemetry; notify affected customers and, where required, regulators; then write up cause and corrective action. Where an incident compromises personal data, the notification commitment in Section 13 of the Privacy Policy governs — notification within 72 hours of becoming aware, together with a description of the breach, the data involved and the steps taken.

See Privacy Policy — Data Breach Notification for our notification commitments.

9. Responsible Disclosure

If you discover a security vulnerability in Calchis, please report it to security@calchis.com. We ask that you:

  • Do not publicly disclose the vulnerability before we have addressed it
  • Provide sufficient detail to reproduce the issue
  • Do not access, modify, or delete other users' data
  • Do not perform denial-of-service testing

We will acknowledge receipt within 48 hours and provide a resolution timeline within 5 business days.

10. Public-Sector Questionnaire

The questions a county or state procurement office asks a software vendor, answered in one place. Several answers are “no”. They are here because a plain no is more useful to a buyer than a page that does not mention the topic, and because the contract terms Calchis offers government customers are on the Public-Sector Terms Addendum.

QuestionAnswer
Section 508 / WCAG conformance; VPAT available?The application targets WCAG 2.1 AA; keyboard operation, focus visibility, table-header scope and chart text alternatives are lint-enforced before every deployment. No VPAT or Accessibility Conformance Report has been issued yet. A VPAT 2.5 (WCAG edition) is drafted and will be issued after a manual keyboard and screen-reader review. The accessibility statement at /accessibility lists what has and has not been checked.
HIPAANot applicable. Calchis does not process protected health information and will not sign a Business Associate Agreement. Do not upload PHI.
CJISNot certified. Two-factor authentication (authenticator app) is available on every account and required for operator access, which addresses Advanced Authentication for those users, but no CJIS audit, personnel screening or the remaining policy areas exist. Do not store criminal justice information in Calchis.
FedRAMP, StateRAMP, TX-RAMPNot authorized and not being pursued. None is planned.
SOC 2 or ISO 27001 reportNone. Calchis has not been audited. The database provider (Supabase) holds SOC 2 Type II and the payment processor (Stripe) is PCI DSS Level 1; those attest to them, not to Calchis. An internal self-assessment is published at /compliance.
Section 889 (covered telecommunications equipment)Calchis represents that it does not use covered telecommunications equipment or services from Huawei, ZTE, Hytera, Hikvision or Dahua, or their affiliates, in delivering the service. Calchis operates no hardware; the sub-processors in Section 2 are United States companies.
Data residencyThe database is Supabase on AWS in a US region and application functions run in Vercel's US regions, so account data is stored in the United States. Two sub-processors hold copies of narrower data — Resend (outbound email) and Sentry (error events) — and their storage regions have not yet been confirmed from their consoles; the sub-processor document says so, and this answer will say 'United States only' once they are.
EncryptionTLS 1.2+ in transit; AES-256 at rest for the database and its backups (Section 3).
Multi-factor authenticationAvailable on every account: a time-based one-time code (TOTP, RFC 6238) from an authenticator app, enrolled under Settings → Account, and asked for at every sign-in — password or magic link — once enrolled. Required for operator access to the platform itself; optional, not enforced, for customer accounts. No SMS codes, hardware keys or CAC/PIV.
Single sign-on (SAML / OIDC)Not available.
Uptime commitment, RTO and RPONo contractual uptime SLA outside an Enterprise agreement, and no formal RTO or RPO has been established or tested (Section 6). Backups are daily with 7-day point-in-time recovery.
Breach notificationWithin 72 hours of Calchis becoming aware, with a description of the breach, the data involved and the steps taken (Section 8; Privacy Policy Section 13).
Who owns the incident data?The agency, outright. Calchis holds only the license needed to run the service and does not use agency records for training, benchmarking or marketing (Addendum Section 2).
Export and portabilityOne request exports the whole account as a zip: every incident with all of its boards, SITREPs, checklists, handoffs, after-action reports and attachment files, plus monitored areas, triggers, portfolios and settings, as JSON (GET /api/v1/account/export, or Settings → Account). ICS forms, situation reports and after-action reports also export per incident as PDF. After termination the export window is 90 days, and records-retention holds are honored for as long as the hold lasts (Addendum Section 5).
Audit loggingPartial. Every write to an incident is recorded with the acting user's id and display name in an append-only event log; alert deliveries are logged with hashed user ids; sign-in events are logged by the authentication provider. There is no unified, exportable audit trail across the whole platform.
Penetration testingNo third-party penetration test has been performed. A live cross-tenant isolation suite runs in CI against the production database on every change; it is a regression test, not a penetration test.
Support and escalationEmail support during US business hours from a small team; no 24/7 phone line or security operations center (Section 8). Response times are not contractually committed outside an Enterprise agreement.
Sub-processors and subcontractorsListed in Section 2 and in the Privacy Policy. No subcontractor other than those receives customer data, and production access is held by the Calchis team only.
InsuranceNot published here. Ask legal@calchis.com for what coverage is in place before relying on it in an award.
Cooperative purchasing vehiclesNone (no Sourcewell, NASPO ValuePoint, GSA or state contract). Direct purchase, sole-source and piggyback documentation supplied on request (Addendum Section 11).

11. Contact

For security-related questions or reports: