Security
Last updated: September 2, 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 licences (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 neighbourhood, 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)
- Database: Supabase (PostgreSQL on AWS, SOC 2 Type II certified)
- Cache and rate limiting: Upstash Redis
- Error monitoring: Sentry
- Payment processing: Stripe (PCI DSS Level 1)
- DNS and CDN: Vercel Edge Network
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 are build-blocking: if one organization could read another’s data, the deploy fails.
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.
Both methods are single factor. There is no MFA. No TOTP, hardware token or CAC/PIV support exists today. This is the platform’s most significant authentication gap, it fails CJIS Advanced Authentication on its own, and it is tracked as not_started 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 via Upstash Redis. Limits vary by subscription tier. Rate limit headers are included in all API responses. Persistent abuse results in temporary IP blocks.
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). Audit logs are retained for 2 years. API usage logs are retained for 90 days. Server request logs (including IP addresses) are retained for 30 days.
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: authentication is single-factor — email-and-password and magic link are both supported, but there is no second factor, which fails CJIS Advanced Authentication on its own — and audit logging is partial rather than comprehensive.
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.
| Question | Answer |
|---|---|
| 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 produced. One will be produced on request from a procuring agency (VPAT 2.5, WCAG edition). |
| HIPAA | Not applicable. Calchis does not process protected health information and will not sign a Business Associate Agreement. Do not upload PHI. |
| CJIS | Not certified. Authentication is single-factor, which fails the CJIS Advanced Authentication requirement on its own. Do not store criminal justice information in Calchis. |
| FedRAMP, StateRAMP, TX-RAMP | Not authorized and not being pursued. None is planned. |
| SOC 2 or ISO 27001 report | None. 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 residency | United States only. The database is Supabase on AWS in a US region; application functions run in Vercel's US regions. No data is stored outside the United States. |
| Encryption | TLS 1.2+ in transit; AES-256 at rest for the database and its backups (Section 3). |
| Multi-factor authentication | Not available. Sign-in is email-and-password or magic link, single-factor. This is the largest open gap on this page. |
| Single sign-on (SAML / OIDC) | Not available. |
| Uptime commitment, RTO and RPO | No 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 notification | Within 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 portability | One 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 logging | Partial. 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 testing | No 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 escalation | Email 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 subcontractors | Listed 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. |
| Insurance | Not published here. Ask legal@calchis.com for what coverage is in place before relying on it in an award. |
| Cooperative purchasing vehicles | None (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:
- Security: security@calchis.com
- Privacy: privacy@calchis.com
- Legal: legal@calchis.com