Last Updated: January 27, 2025
This document provides a comprehensive overview of all data collected, stored, and processed by Protocol Guide. This serves as internal documentation for compliance, audits, and enterprise sales.
- Data Collection Summary
- Personal Data
- Usage Data
- Technical Data
- Third-Party Services
- Data Retention Schedule
- Security Measures
- Compliance Status
| Category | Data Type | Collected | Stored | Retention | Legal Basis |
|---|---|---|---|---|---|
| Account | Email, Name | Yes | Yes | Account lifetime + 30 days | Contract |
| Auth | Password hash, OAuth tokens | Yes | Yes | Account lifetime | Contract |
| Billing | Stripe Customer ID | Yes | Yes | 7 years | Legal obligation |
| Usage | Search queries | Yes | Yes | 30 days (then anonymized) | Legitimate interest |
| Usage | Protocol views | Yes | Yes | 30 days (then anonymized) | Legitimate interest |
| Device | OS, App version | Yes | Yes | 30 days | Legitimate interest |
| Device | Push tokens | Yes | Yes | Until unsubscribed | Consent |
| Cookies | Session cookies | Yes | Device only | Session | Contract |
| Cookies | Analytics cookies | With consent | Yes | 30 days | Consent |
Database Table: manus_users
| Field | Type | Purpose | Required | Encrypted |
|---|---|---|---|---|
id |
Integer | Primary key | Yes | No |
auth_id |
UUID | Supabase auth link | Yes | No |
email |
Text | Account identification, communication | Yes | No |
name |
Text | Display name | No | No |
login_method |
Text | OAuth provider tracking | No | No |
role |
Text | Access control (user/admin) | Yes | No |
tier |
Text | Subscription level | Yes | No |
created_at |
Timestamp | Audit trail | Yes | No |
updated_at |
Timestamp | Audit trail | Yes | No |
last_signed_in |
Timestamp | Security monitoring | No | No |
Collection Method: User registration, OAuth authentication
Legal Basis: Contract performance
Data Subject Rights: Access, rectification, deletion, portability
Database Table: manus_users (billing fields)
| Field | Type | Purpose | Required |
|---|---|---|---|
stripe_customer_id |
Text | Payment processing | Only for paid users |
subscription_id |
Text | Subscription management | Only for paid users |
subscription_status |
Text | Access control | Only for paid users |
subscription_end_date |
Timestamp | Billing cycle | Only for paid users |
Note: Credit card numbers are NEVER stored. All payment processing is handled by Stripe, Inc. with PCI DSS compliance.
Database Table: queries
| Field | Type | Purpose | Retention |
|---|---|---|---|
user_id |
Integer | Attribution | 30 days |
county_id |
Integer | Context | 30 days |
query_text |
Text | Search query | 30 days |
response_text |
Text | AI response | 30 days |
protocol_refs |
JSON | Matched protocols | 30 days |
created_at |
Timestamp | Analytics | 30 days |
After 30 Days: Individual queries are deleted. Aggregated statistics (query counts, popular topics) are retained for 2 years.
Database Table: search_history
| Field | Type | Purpose | Retention |
|---|---|---|---|
user_id |
Integer | User association | 30 days |
county_id |
Integer | Context | 30 days |
search_query |
Text | Display in history | 30 days |
results_count |
Integer | Analytics | 30 days |
created_at |
Timestamp | Ordering | 30 days |
Database Table: bookmarks
| Field | Type | Purpose | Retention |
|---|---|---|---|
user_id |
Integer | User association | Account lifetime |
protocol_number |
Text | Reference | Account lifetime |
protocol_title |
Text | Display | Account lifetime |
section |
Text | Deep link | Account lifetime |
content |
Text | Preview | Account lifetime |
agency_id |
Integer | Multi-agency support | Account lifetime |
created_at |
Timestamp | Ordering | Account lifetime |
Storage: Event queue (memory) → Server batch upload
| Event Type | Data Collected | Purpose |
|---|---|---|
screen_viewed |
Screen name, previous screen | Navigation analytics |
search_completed |
Query, results count, latency | Search optimization |
protocol_viewed |
Protocol ID, source, rank | Content analytics |
voice_search_completed |
Transcription time, word count | Feature usage |
upgrade_prompt_shown |
Location, trigger | Conversion tracking |
feature_used |
Feature name, user tier | Product analytics |
error_occurred |
Error type, context | Debugging |
Note: Analytics events are anonymized after 30 days. Individual user behavior is not tracked long-term.
Collected automatically via the app:
| Data | Purpose | Sent to Server | Retention |
|---|---|---|---|
| Device type | Analytics | Yes (anonymized) | 30 days |
| OS version | Compatibility | Yes | 30 days |
| App version | Support, updates | Yes | 30 days |
| Screen dimensions | Layout optimization | No | Session only |
| Locale/language | Localization | No | Session only |
| Data | Purpose | Storage | Retention |
|---|---|---|---|
| Session ID | Analytics correlation | Server | 30 days |
| Session start time | Usage patterns | Server | 30 days |
| IP address | Security, geolocation | Server | Anonymized after 30 days |
Database Table: push_tokens
| Field | Type | Purpose | Retention |
|---|---|---|---|
user_id |
Integer | Targeting | Until opt-out |
token |
Text | Device identifier | Until opt-out |
platform |
Text | iOS/Android routing | Until opt-out |
last_used_at |
Timestamp | Cleanup | Until opt-out |
| Data Shared | Purpose | Stripe's Retention |
|---|---|---|
| Receipt delivery | Per Stripe policy | |
| Subscription details | Billing | Per Stripe policy |
| Payment method | Processing | PCI DSS compliant |
Privacy Policy: https://stripe.com/privacy
| Data Shared | Purpose | Location |
|---|---|---|
| User credentials | Authentication | US (AWS) |
| All database content | Storage | US (AWS) |
Privacy Policy: https://supabase.com/privacy
| Data Shared | Purpose | Retention |
|---|---|---|
| Search queries | Natural language processing | Not retained for training |
| Protocol content (context) | Response generation | Not retained |
Note: Queries are sent via API with data retention disabled. Anthropic does not use API data for model training.
Privacy Policy: https://www.anthropic.com/privacy
| Data Shared | Purpose | Retention |
|---|---|---|
| Search queries | Embedding generation (Gemini Embedding 2 Preview) | Real-time only |
| Protocol text | Index building | Real-time only |
Note: Gemini processes embeddings in real-time without storage.
| Data Shared | Purpose | Retention |
|---|---|---|
| Error stack traces | Debugging | 90 days |
| Device/OS info | Context | 90 days |
| User ID (if logged in) | Support | 90 days |
Note: No search queries or PHI are sent to Sentry.
Privacy Policy: https://sentry.io/privacy/
| Data Category | Active Retention | Archive Period | Deletion |
|---|---|---|---|
| Account data | Account lifetime | 30 days after deletion request | Permanent deletion |
| Search queries | 30 days | Anonymized aggregates: 2 years | Auto-delete |
| Billing records | 7 years | N/A | Per tax law |
| Analytics events | 30 days | Aggregates: 2 years | Auto-delete |
| Session data | 30 days | N/A | Auto-delete |
| Audit logs | 2 years | 5 years (enterprise) | Auto-delete |
| Disclaimer acknowledgments | Indefinite | N/A | Never deleted |
| Push tokens | Until opt-out | N/A | On unsubscribe |
-
User-Initiated Deletion:
- User requests via settings or email
- Account marked for deletion
- 30-day grace period (reversible)
- Permanent deletion after grace period
- Anonymized analytics retained
-
Automatic Cleanup:
- Daily job purges expired data
- Search queries > 30 days → deleted or anonymized
- Sessions > 30 days → deleted
- Orphaned records → cleaned weekly
| Measure | Implementation |
|---|---|
| Encryption in transit | TLS 1.3 for all connections |
| Encryption at rest | AES-256 via Supabase |
| Database security | Row-level security policies |
| Password hashing | bcrypt with salt (via Supabase Auth) |
| API authentication | JWT tokens with expiration |
| Control | Implementation |
|---|---|
| Role-based access | User/Admin roles in database |
| Least privilege | Minimal permissions for services |
| Audit logging | All admin actions logged |
| Employee access | Restricted to engineering team |
| Monitor | Purpose |
|---|---|
| Sentry | Error tracking and alerting |
| Railway metrics | Performance and uptime |
| Supabase dashboard | Database health |
| Stripe webhooks | Payment event tracking |
| Requirement | Status | Notes |
|---|---|---|
| Legal basis documentation | ✅ | Contract, consent, legitimate interest |
| Privacy policy | ✅ | Comprehensive, accessible |
| Data subject rights | ✅ | Access, rectification, deletion, portability |
| Consent management | ✅ | Cookie consent banner |
| Data processing records | ✅ | This document |
| International transfers | ✅ | Standard Contractual Clauses |
| DPO designation | Not required (< threshold) |
| Requirement | Status | Notes |
|---|---|---|
| Privacy policy disclosures | ✅ | Categories, purposes, rights |
| Right to know | ✅ | Data access request process |
| Right to delete | ✅ | Deletion request process |
| Right to correct | ✅ | Via account settings |
| Right to opt-out of sale | ✅ | We do not sell data |
| Non-discrimination | ✅ | No penalties for exercising rights |
| Item | Status | Notes |
|---|---|---|
| Covered entity status | N/A | Protocol Guide is NOT a covered entity |
| PHI collection | ❌ | We do NOT collect PHI |
| BAA requirements | N/A | Not applicable |
| PHI safeguards | N/A | System designed to reject PHI input |
Important: Protocol Guide is a reference tool and does not create, receive, maintain, or transmit Protected Health Information (PHI). Users are instructed not to enter patient-identifiable information.
User Device Protocol Guide Backend Third Parties
───────────── ───────────────────── ─────────────
[App/PWA] ──────────────────► [Railway API Server]
│ │
│ Auth │
└───────────────────────────────►[Supabase Auth] ◄──────────► Google/Apple OAuth
│
│ Search Query │
└───────────────────────────────►[Search Handler]
│
├──► [Google Gemini] → Embeddings
│ ↓
├──► [Vector DB] → Similar chunks
│ ↓
└──► [Claude API] → Response
│
▼
[Display Results] ◄──────────────────────┘
│ Payment
└───────────────────────────────►[Stripe API] → Payment processing
│ Errors
└───────────────────────────────►[Sentry] → Error tracking
Data Protection Inquiries:
Email: privacy@protocol-guide.com
Security Incidents:
Email: security@protocol-guide.com
Enterprise/Compliance:
Email: sales@protocol-guide.com
This document is maintained by the Protocol Guide engineering team and reviewed quarterly for accuracy.