Ask2DoAsk2Do

How we secure your data

Ask2Do is built on a simple promise: your database rows never leave your infrastructure. The cloud orchestrator coordinates the AI conversation, but the data your customer panel queries lives on your servers, behind your credentials, and only the sidecar — running on machines you control — ever touches it.

This page is the operator-friendly summary. For the technical layer list (JWT crypto, SQL parser allow-list, Ed25519 release signing), read Security model. For audit-table SQL, read Audit log.

Where your data lives

ComponentRuns onTouches your DB?
SidecarYour infra (server you choose)Yes — the only thing that does
WidgetYour customers' browsersNo
Cloud orchestratorSikasio-managed servers (EU data center)No — never holds DB credentials
Portal (app.ask2do.com)Managed edge hosting (EU)No

The data flow

Each chat message follows the same path. The bold steps are where your DB is queried; everything else is metadata routing.

(1) Customer types in panel widget


(2) Widget sends question over WebSocket → Cloud


(3) Cloud asks the AI provider what to do


(4) AI responds with a tool call (e.g. run_sql_read)


(5) Cloud routes the call to YOUR sidecar via WebSocket


   ★ (6) Sidecar runs the SQL on YOUR DB ★


   ★ (7) Sidecar returns rows to cloud (transit only) ★


(8) Cloud feeds rows back to the AI


(9) AI composes natural-language answer


(10) Cloud streams answer to widget

Steps 6 and 7 are the only points your DB rows are touched. The rows flow through cloud as transit data so the AI can summarize them, then they're discarded after the response. Cloud does not persist your DB rows.

What we never see

What we do see (and where)

DataWhere it goesWhy
The chat question textCloud → AI providerRequired to compose the answer
Query result rows (transient)Cloud → AI provider → discardedRequired to summarize the result
panel_user_id + roleCloud (logs + audit) and your ask2do_audit tableAuthorization + audit trail
Tenant slug + key idCloud DBRouting + auth
Conversation memory (last ~10 turns)Cloud cache (24h TTL)Chat continuity within a session
Billing email + customer idCloud DB + payment providerSubscription management

Third parties

A small number of external service providers see fragments of your usage. We picked each deliberately and document exactly what reaches them:

Provider roleWhat we send themRegion
AI providerChat messages + tool-call results (your rows in transit)Configurable; default global
Payment providerCustomer email, billing address, subscription stateEU data-handling agreement
Email providerOutbound email recipient + body (welcome, magic link, dunning)EU
Cloud infrastructureAll cloud-hosted services (orchestrator, database, cache)EU data center
Global CDNWidget bundle + sidecar binary downloadsGlobal edge

Encryption (in brief)

Everything in transit is TLS 1.2+. Tenant keys are stored only as argon2id hashes — a full DB compromise on our side still cannot recover the raw key. JWTs are Ed25519-signed and short-lived. Sidecar releases are Ed25519-signed too, with the public key compiled into every binary so a compromised CDN cannot push an unsigned update.

For the full mechanism — signing flow, parser deny-list, DB role grants, two-phase approval — see Security model.

Data residency

You control where your DB lives — we have no opinion. The sidecar runs wherever you put it; it doesn't care about region.

Sikasio-hosted infrastructure runs in an EU data center. The portal serves from a managed edge host (EU). The CDN is global — it only ever serves the widget bundle and the public sidecar binaries, no user data.

For customers requiring stricter residency (regional data-localization regimes for government or regulated workloads), we can run a dedicated cloud orchestrator in your preferred region. Email enterprise@ask2do.com.

Retention

DataRetention
Conversation memory (cache)24 hours, then auto-purged
Cloud structured logs30 days rolling
ask2do_audit table on your DBForever (we never touch it after creation)
Tenant + subscription recordsUntil you cancel + 90 days, then anonymized
Payment-provider recordsPer the provider's retention (~7 years for tax/billing)

Right to deletion

Email hello@ask2do.com with the tenant slug + a deletion request. Within 14 business days we:

  1. Pause the tenant + revoke all keys.
  2. Delete tenant rows + cached conversation memory.
  3. Anonymize cloud audit logs (replace email with deleted-{tenant_id}@anonymized.local).
  4. Cancel the subscription with the payment provider (the provider retains its own records per their policy).

The ask2do_audit table on your DB is yours; you decide whether to keep or drop it.

Compliance

PostureStatus
GDPR + regional data-protection regimesOperationally compliant; DPA on request
Data Processing Agreement (DPA)Boilerplate available; sign-back via hello@ask2do.com
SOC 2 Type IIOn the roadmap
HIPAA / PCIOut of scope for v1 (no protected categories of data targeted)

Breach notification

If we detect or confirm a breach affecting your data on our side, we notify you within 72 hours of confirmation per GDPR-aligned timing. The notification includes scope, timeline, and remediation steps.

For suspected key leaks (something you control) or vulnerability disclosure (security researchers), see key rotation and vulnerability disclosure in the security model.

The promise, condensed

  1. Your DB credentials live on your server. We never see them.
  2. Your rows transit through cloud only as needed for a specific question, then are discarded.
  3. Every write is gated behind a human admin clicking Approve, with a tamper-evident log on your DB.
  4. You can rotate keys, pause tenants, and request deletion at any time.
  5. We tell you within 72 hours if something we manage gets compromised.

Have a question this page didn't answer? Reply to your install email or write to hello@ask2do.com.