Executive Summary
Simply Asking LLC ("Simply Asking," "the Service," "we," "us," or "our") is committed to protecting the security, integrity, and confidentiality of customer data. This document outlines our comprehensive security practices, infrastructure, and controls.
1. Infrastructure Security
1.1 Hosting & Deployment
| Component | Provider | Certifications |
|---|---|---|
| Application Hosting | Vercel | SOC 2 Type II, ISO 27001, GDPR |
| Database & Auth | Supabase | SOC 2 Type II, GDPR |
| Payment Processing | Stripe | PCI DSS Level 1, SOC 2 Type II |
| Monitoring & Logging | Sentry / Vercel Analytics | SOC 2 Type II, GDPR |
The complete subprocessor list, including every AI provider, is the Subprocessor Registry.
1.2 Geographic Distribution
- Primary Database: AWS US-East-2 (Ohio) via Supabase
- Edge Functions: Globally distributed via Supabase Edge
- Application CDN: Vercel Edge Network (300+ global locations)
- Static Assets: Vercel CDN with automatic optimization
1.3 Network Security
- All traffic encrypted via TLS 1.3
- HTTP Strict Transport Security (HSTS) enabled
- Automatic SSL/TLS certificate management
- DDoS protection via Vercel and Supabase infrastructure
- Rate limiting on API endpoints
2. Data Security
2.1 Encryption
| Data State | Encryption Method |
|---|---|
| At Rest | AES-256 (Supabase/AWS) |
| In Transit | TLS 1.3 |
| Backups | AES-256 encrypted |
| OAuth Tokens | AES-256-GCM with dedicated encryption key |
| BYOK API Keys | AES-256-GCM with dedicated encryption key |
2.2 File Security
All uploaded files are scanned for malware using ClamAV antivirus before processing. Infected files are quarantined and logged via security event tracking. File scanning runs on private infrastructure with no public endpoint exposed.
2.3 Data Isolation
We implement strict data isolation using 480+ Row-Level Security (RLS) policies:
- Users can only access documents within their organization
- Organization data is isolated at the database level
- Personal workspaces are completely separate from business workspaces
- Cross-organization data access is prevented by default
2.4 Data Classification
| Classification | Examples | Controls |
|---|---|---|
| Public | Marketing content, help docs | No restrictions |
| Internal | System logs, metrics | Employee access only |
| Confidential | User documents, chat history | RLS + encryption |
| Restricted | API keys, credentials | Encrypted secrets vault |
2.5 Data Retention
Retention windows are set by the Data Retention Policy, which is the source of truth. Summarized here:
- User Documents: Retained until user deletion or account termination
- Chat History: Retained until you delete it
- Audit Logs: Retained for 24 months
- Backups: 30-day rolling backups with point-in-time recovery
3. Authentication & Access Control
3.1 User Authentication
- Email/Password Authentication: Passwords hashed using bcrypt with salt
- Multi-Factor Authentication (MFA): Available for all accounts
- Session Management:
- Configurable session timeout per organization
- Maximum session duration enforced
- Concurrent session limits configurable
- OAuth Providers: Google (optional)
3.2 Role-Based Access Control (RBAC)
| Role | Permissions |
|---|---|
| Owner | Full access, billing, organization settings, member management, delete organization |
| Admin | Full content access, member management, organization settings |
| Manager | Content management, team oversight, limited member management |
| Member | Create and edit own content, view shared content |
JWT-Based RBAC Enforcement: A custom authentication hook embeds organization context (org_id, org_role, is_platform_admin, department_ids) directly into JWT claims at login. Row-level security policies read claims from the signed token, eliminating subqueries and ensuring consistent enforcement across all database operations.
3.3 Platform Administration
- Platform administration restricted to company founders
- Admin access logged and auditable
- Privileged access requires additional authentication
- Admin actions subject to review
4. Application Security
4.1 Secure Development Lifecycle
- Code Review: All changes reviewed before merge
- Static Analysis: Automated security scanning on pull requests
- Dependency Scanning: Automated vulnerability detection in dependencies
- Secret Detection: Automated scanning for exposed credentials
4.2 API Security
- Authentication: JWT-based with short-lived tokens
- Authorization: Server-side validation on every request
- Input Validation: Strict input sanitization and validation
- Rate Limiting: Per-user and per-IP rate limits
- CORS: Origin validation against an explicit allowlist (no wildcards)
- Content Security Policy (CSP): Headers restrict script sources, prevent inline injection, and block unauthorized third-party resources
- SSRF Prevention: Server-side URL fetching blocks private and internal network addresses (localhost, RFC 1918 ranges, link-local)
4.3 Cryptographic Standards
- CSPRNG: All security-sensitive random values (OTP codes, MFA tokens, correlation IDs) use
crypto.getRandomValues()for cryptographically secure generation - Self-Hosted Fonts: All fonts are served from our own infrastructure; no external font CDN requests are made, preventing third-party tracking via font loading
4.4 Third-Party Integrations
| Integration | Purpose | Data Accessed | Security |
|---|---|---|---|
| Google Drive | Document import | Files user selects | OAuth 2.0, scoped permissions |
| Notion | Workspace page sync | Pages user selects | OAuth 2.0, scoped permissions |
| Dropbox | Cloud file sync | Files user selects | OAuth 2.0, scoped permissions |
| Trello | Task import | Cards user selects | API key + token |
| Slack | Notifications | Workspace info | OAuth 2.0 |
| HubSpot CRM | CRM data sync | Records user selects | OAuth 2.0, scoped permissions |
All third-party OAuth tokens are encrypted with AES-256-GCM before storage.
Per-User Connection Ownership & Admin Governance
Integrations are owned by individual users, not by the organization. Each team member who connects an integration authorizes it under their own account and the resulting OAuth tokens are scoped to that user.
Role-based access (server-enforced at the API layer). Every privilege in the matrix below is checked on the server in the corresponding edge function route; the user interface only mirrors what the server allows.
| Role | Connect own integration | View all org connections | Disable a member's connection | View audit log | Flip the "Allow members" toggle |
|---|---|---|---|---|---|
| Owner | Yes | Yes | Yes | Yes | Yes (Owner only) |
| Admin | Yes | Yes | Yes | Yes | No |
| Manager | Yes | No | No | No | No |
| Member | Only if the Owner has enabled the "Allow members" toggle | No | No | No | No |
The role gate is implemented in can_user_connect_integration() (manager-or-above check, scoped to the caller's JWT org_id). Admin reads route through list_org_connections(), which checks org_id IS DISTINCT FROM get_jwt_org_id() OR NOT is_org_admin() and rejects unauthorized callers with RAISE EXCEPTION 'unauthorized'. The "Allow members" toggle is set via the dedicated update_org_allow_member_integrations() RPC, which checks for the Owner role specifically (not the broader is_org_admin() set).
- Token isolation. OAuth refresh and access tokens are readable only by the service role (server-only). Direct database
SELECTon theaccess_tokenandrefresh_tokencolumns is revoked for theauthenticatedrole at the column level (defense-in-depth on top of row-level security). No client-side code path reads tokens. - Row-level security. A team member sees only their own connections in the standard
user_connectionsSELECT policy (user_id = auth.uid()). A second PERMISSIVE policy grants org Owners and Admins read access to every connection in their organization (org_id = get_jwt_org_id() AND is_org_admin()), but only via thelist_org_connectionsSECURITY DEFINER RPC, which projects the safe columns and redacts tokens. - Default role gate. By default, only Owners, Admins, and Managers may initiate
/connect/start. Owners may opt in to allow all members to connect via theorganizations.allow_member_integrationsflag. - Admin actions are audited. Every connect, disable, re-enable, and reauth event is written to an immutable
user_connection_audit_logtable with actor, target, timestamp, and reason. The log is append-only by RPC; direct INSERT is not granted to client roles. - Soft-disable preserves audit trail. When an Admin disables a member's connection, sync stops immediately, but the row, OAuth tokens, and audit history are retained so the connection can be re-enabled by a single action. The pre-disable
sync_statusis snapshotted so re-enable restores the prior health state instead of falsely reporting "active." - Membership-tied lifecycle. When a team member is deactivated or removed from an organization (
org_members.is_active = falseor DELETE), database triggers soft-disable all of that user's connections in that organization. - Reauth alerts. When an OAuth token-refresh fails (most commonly because the third-party provider revoked the refresh token), a daily cron sends a reauthorization email to the connection owner. The cron applies a 24-hour cooldown via
last_alert_sent_atand auto-stops after 7 consecutive days to prevent spam.
5. AI & Machine Learning Security
5.1 AI Model Providers
| Provider | Certifications | Data Handling |
|---|---|---|
| OpenAI | SOC 2 Type II | No training on customer data |
| Anthropic (Claude) | SOC 2 Type II | No training on customer data |
| Google (Gemini) | ISO 27001, SOC 2 | No training on customer data |
5.2 AI Data Processing
- User queries processed in real-time, not stored by AI providers
- Document embeddings stored in our database, not shared externally
- AI responses generated per-request with no persistent context
- No customer data used to train any AI models
5.3 Prompt Injection Prevention
- Input sanitization on all AI-bound queries
- System prompts isolated from user input
- Output validation before display
6. Payment Security
6.1 PCI DSS Compliance
- We never store, process, or transmit credit card data
- All payment processing handled by Stripe (PCI DSS Level 1)
- Payment forms embedded via Stripe Elements (iframe isolation)
- Subscription management via Stripe Customer Portal
6.2 Billing Security
- Billing history accessible only to account owner
- Usage data anonymized for internal analytics
- Refunds processed only through verified channels
7. Monitoring & Incident Response
7.1 Continuous Monitoring
- Uptime Monitoring: Automated health checks via Vercel and Supabase
- Error Tracking: Real-time error detection via Sentry
- Security Logging: Authentication events logged via Supabase Auth
- Metrics & Alerts: Application metrics and alerting via Vercel Analytics
7.2 Audit Logging
We maintain comprehensive audit logs including:
- User authentication events (login, logout, failures)
- Document access and modifications
- Permission changes
- API access patterns
- Administrative actions
7.3 Incident Response Plan
We follow a structured incident response process:
| Phase | Actions |
|---|---|
| Detection | Monitoring and alerting via infrastructure providers |
| Triage | Severity assessment and prioritization |
| Containment | Isolate affected systems as needed |
| Eradication | Remove threat, apply patches |
| Recovery | Restore services, verify integrity |
| Post-Incident | Root cause analysis and documentation |
Response times vary based on incident severity and complexity.
7.4 Breach Notification
In the event of a data breach affecting customer data:
- Affected customers notified within 72 hours
- Regulatory authorities notified as required by law
- Full incident report provided within 30 days
8. Business Continuity
8.1 Backup Strategy
Backup and recovery is managed by our infrastructure provider (Supabase):
- Database: Daily automated backups with point-in-time recovery
- Files: Redundant storage via Supabase Storage (S3-backed)
- Configuration: Version-controlled infrastructure-as-code
8.2 Disaster Recovery
Disaster recovery capabilities are provided by our infrastructure partners:
- Database Failover: Managed by Supabase infrastructure
- Storage Redundancy: Multi-availability zone via AWS S3
- Application: Edge deployment via Vercel with automatic failover
8.3 Service Availability
- Availability: We use commercially reasonable efforts to maintain high availability
- Infrastructure SLAs: Subject to Supabase (99.95%) and Vercel uptime guarantees
- Support Response: Best effort response within 24-48 hours
- Scheduled Maintenance: Announced in advance when possible
9. Compliance
9.1 Regulatory Compliance
| Regulation | Status |
|---|---|
| OWASP ASVS L1 | 73/73 controls passed. Google CASA Tier 2 certified |
| GDPR | We follow GDPR requirements for data protection and privacy |
| CCPA | We follow CCPA requirements for California residents |
| SOC 2 | Our infrastructure partners (Supabase, Vercel, Stripe, Sentry) are SOC 2 Type II certified |
Note: We implement privacy and security practices aligned with these regulations. Our OWASP ASVS Level 1 self-assessment covers 73 controls across authentication, session management, access control, input validation, cryptography, error handling, data protection, communications, HTTP security, file handling, API security, configuration, and business logic. Our infrastructure partners maintain their own compliance certifications.
9.2 Data Processing Agreements
- Standard DPA available for enterprise customers
- Sub-processor list maintained and updated
- Data processing limited to service provision
10. Security Contact
Reporting Vulnerabilities
If you discover a security vulnerability, please report it responsibly:
- Email: dev@simplyasking.io
- Response Time: Initial acknowledgment within 24 hours
- Disclosure: We support coordinated disclosure
Security Questions
For general security questions or to request compliance documentation:
- Email: legal@simplyasking.io
- Subject Line: "Security Inquiry"
11. Document History
| Version | Date | Changes |
|---|---|---|
| 1.4 | March 9, 2026 | Updated RLS count to 400+, clarified SOC 2 as infrastructure partner certifications, updated penetration testing status |
| 1.3 | February 26, 2026 | Added CASA/OWASP ASVS L1 compliance, antivirus scanning (ClamAV), CSPRNG, JWT-based RBAC, CSP headers, SSRF prevention, CORS origin validation, self-hosted fonts, updated RLS count to 390+ |
| 1.2 | February 14, 2026 | Added BYOK API key encryption (AES-256-GCM) to encryption table |
| 1.1 | January 20, 2026 | Removed "HIPAA-eligible" from Supabase listing (not currently offering HIPAA compliance) |
| 1.0 | December 19, 2025 | Initial release |
This security policy is reviewed and updated at least annually, or more frequently as needed to address emerging threats and changes to our infrastructure.