Legal

Privacy Policy

Last updated: September 11, 2026

This Privacy Policy explains how Cloaked (“we”, “us”, “our”) at cloaked.ink collects, uses, and protects your information when you use our content-protection platform (“Service”).

We believe in minimal data collection. We only gather what is necessary to provide and improve the Service, and we go out of our way to hash or encrypt data wherever possible.

1. Information We Collect

1.1 Account Information

When you create an account, we collect:

DataPurposeStorage
Email addressAuthentication, account communicationPlaintext
PasswordAuthenticationbcrypt hashed (cost 10) — never stored in plaintext
OAuth profile (Google/GitHub)Authentication (optional, only if you choose OAuth sign-in)Email only, via provider
Subscription statusBilling and usage trackingPlaintext

1.2 Billing Information

When you subscribe to a paid plan:

  • Stripe customer ID and subscription ID are stored to link your account to your subscription
  • Payment card details are handled entirely by Stripe — card numbers, CVVs, and billing addresses never touch our servers

1.3 Content You Protect

Cloaked uses a proxy architecture — your article text is never stored in our database. When a visitor loads your page, we fetch the content directly from your CMS at that moment and hold it in a short-lived cache (up to 5 minutes) to serve concurrent requests efficiently. After that window the cached copy is discarded; see Section 7.3 for the derived render caches.

What we do store in our database:

  • The title and CMS identifier of each content source you register
  • A fingerprint (SHA-256 hash) of the last fetched content body, so we can detect when your content changes

We do not store your content in recoverable form, and we do not read, analyze, or share it.

1.4 Render Analytics

When your protected content is viewed by end users, we collect:

DataPurposeStorage
IP addressRate limiting, abuse preventionKeyed hash (HMAC-SHA256) only — raw IP never stored
User agentAnalytics (browser/device breakdown)Keyed hash (HMAC-SHA256) only — raw string never stored
Viewport widthResponsive rendering analyticsInteger value
Render timestampUsage tracking and billingTimestamp
Monthly render countFree render limit enforcementInteger counter

1.5 API Keys

  • API keys you create are stored as a bcrypt hash; the full key is shown to you once at creation and cannot be retrieved afterward
  • A short identifying prefix (currently the first 16 characters) is stored in plaintext so you can tell keys apart in the dashboard
  • The dashboard’s own provisioned API key, which it uses to call the API on your behalf, is stored in a form that allows retrieval rather than as a one-way hash

1.6 Site Configuration

If you integrate Cloaked with a CMS:

  • Site base URL is stored in plaintext
  • CMS API keys are encrypted at the application layer
  • Webhook secrets are randomly generated (nanoid)

2. Information We Do NOT Collect

We want to be explicit about what we avoid:

  • Raw IP addresses — only keyed hashes (HMAC-SHA256 with a server-held secret), which cannot be recomputed or matched against precomputed tables without that secret
  • Raw user agent strings — only keyed hashes, using the same server-held secret
  • Your article text — it is proxied from your CMS at render time and held only in a short-lived cache (Section 7.3); only its title, CMS identifier and a content fingerprint are written to our database (Section 1.3)
  • Tracking cookies — we use no tracking, advertising, or analytics cookies
  • Cross-site identifiers — we do not track users across websites
  • Payment card details — fully handled by Stripe; we have no access
  • Third-party analytics — no Google Analytics, no pixel trackers, no ad networks
  • Content of renders for end users — we do not profile or track your readers

3. How We Protect Your Data

3.1 Encryption and Hashing

MethodApplied To
bcrypt (cost 10)Account passwords, API keys
AES-256-GCMCMS credentials at rest (your CMS API key and fetch secret)
HMAC-SHA256 (keyed)IP addresses, user agents
SHA-256Content change detection
TLS 1.2+All data in transit

3.2 Infrastructure Security

  • Our application and database run on infrastructure we operate and control directly, not on a third-party application-hosting platform
  • Traffic is served through Cloudflare for DNS, CDN and DDoS protection, over encrypted connections
  • Backups are encrypted before they leave our infrastructure and stored with Google Cloud Storage (see Section 7.4)

3.3 Access Controls

  • JWT-based authentication; sessions expire after a period of inactivity (currently 24 hours) rather than a fixed lifetime
  • API rate limiting to prevent abuse (per-endpoint limits with sliding windows)
  • API keys are hashed; only the identifying prefix (currently the first 16 characters) is visible in the dashboard
  • No shared admin accounts; individual account access only

4. How We Use Your Information

We use your information for the following purposes:

PurposeLegal Basis (GDPR)Data Used
Providing the ServiceContract performanceAccount info, content, API keys
AuthenticationContract performanceEmail, password hash, OAuth tokens
BillingContract performanceStripe IDs, subscription status
Rate limitingLegitimate interestIP hashes, API key prefixes
Render analyticsLegitimate interestIP hashes, user agent hashes, viewport, timestamps
Abuse preventionLegitimate interestIP hashes, rate limit counters
Service communicationContract performanceEmail address
Security monitoringLegitimate interestAccess logs, error logs

We do not use your data for:

  • Advertising or marketing profiling
  • Selling to third parties
  • Training machine learning models
  • Behavioral tracking across sites

5. Third-Party Data Sharing

We share data with third-party service providers only as necessary to operate the Service:

ServiceRoleData SharedPrivacy Policy
StripePayment processingEmail, subscription statusstripe.com/privacy
BrevoTransactional email (verification, password reset, account and ops notices)Recipient email address and message content for the email being sentbrevo.com/privacy
CloudflareDNS, CDN, DDoS protection, and widget asset deliveryTraffic passing through Cloudflare's network in transit, plus static widget assetscloudflare.com/privacy
Google Cloud StorageEncrypted offsite backup storageBackups of our systems, encrypted before upload so Google cannot read their contentscloud.google.com/privacy
GoogleOAuth provider (optional)Email (only if user chooses Google sign-in)policies.google.com
GitHubOAuth provider (optional)Email (only if user chooses GitHub sign-in)github.com/privacy

We do not sell your personal data to anyone, ever.

6. Cookies and Sessions

6.1 What We Use

  • JWT session token: A secure, HTTP-only token for authentication. It expires after a period of inactivity (currently 24 hours) rather than a fixed lifetime. This is a functional session cookie, not a tracking mechanism.

6.2 What We Do Not Use

  • No advertising cookies
  • No analytics cookies
  • No third-party tracking pixels
  • No cross-site tracking of any kind

Because we only use a functional session token, most cookie-consent requirements do not apply. However, we inform you here for full transparency.

7. Data Retention

7.1 Account Data

  • Account information is retained for as long as your account is active
  • Upon account deletion, we remove your account profile and credentials, API keys, site configuration and encrypted content credentials, your monthly render-count records, and subscription and billing references
  • Any residual render event records are pseudonymized rows that lose their association with your content when it is deleted, and they are automatically deleted from our live systems within the retention window described in 7.2

7.2 Render Analytics

  • Render and interaction events — keyed hashes of IP address and browser user agent, viewport width, and event metadata such as the page URL — are retained for approximately 90 days, then automatically deleted from our live systems
  • Monthly render counts reset each billing cycle

7.3 Ephemeral Data

  • Fetched article content is held in a cache for up to 5 minutes to serve concurrent render requests, then discarded
  • Layout caches — holding the glyph geometry derived from your article, itself a recoverable representation of the text — expire automatically, currently within an hour (longer-lived than the content cache above)
  • Other Redis-cached data, such as rate limit counters and token IDs, also expires automatically via TTL and is not retained long-term

7.4 Backups

  • Database backups may retain data after it is removed from our live systems: daily snapshots are kept for 30 days and monthly snapshots for 12 months, as part of disaster recovery
  • Backups are encrypted before they leave our infrastructure and stored with Google Cloud Storage. The encryption key is never shared with Google, so the backup contents are not readable by them

8. Your Rights

8.1 All Users

Regardless of your location, you have the right to:

  • Access your personal data (available via the dashboard and API)
  • Correct inaccurate data (update your profile in the dashboard)
  • Delete your account and all associated data (see Section 7.1 for what remains during the retention window)
  • Export your account, content-source and usage data in standard formats

8.2 European Economic Area (GDPR)

If you are in the EEA, you additionally have the right to:

  • Object to processing based on legitimate interest
  • Restrict processing in certain circumstances
  • Data portability — receive your data in a structured, machine-readable format
  • Withdraw consent for any consent-based processing (note: we rely primarily on contract performance and legitimate interest, not consent)
  • Lodge a complaint with your local data protection authority

Lawful Bases for Processing:

  • Contract performance: Providing the Service you signed up for (account management, content rendering, billing)
  • Legitimate interest: Security measures (rate limiting, keyed IP hashing, abuse prevention) and aggregated analytics. We have assessed that these interests do not override your fundamental rights, particularly because we pseudonymize personal identifiers — replacing them with keyed hashes — and do not track individuals.

Pseudonymization, not anonymization: Because we hold the secret that produces these hashes, they remain pseudonymized personal data under GDPR Art. 4(5) rather than anonymous data, and the rights above apply to them.

Data Transfers: Your data is stored and processed in the United States, both by us and by the service providers listed in Section 5. If you access the Service from outside the United States, your data will be transferred there. We rely on Standard Contractual Clauses (SCCs) and provider-specific data protection agreements to ensure adequate safeguards for these international transfers.

8.3 California Residents (CCPA)

If you are a California resident, you have the right to:

  • Know what personal information we collect, use, and disclose
  • Delete your personal information
  • Opt out of sale — we do not sell personal information, so there is nothing to opt out of
  • Non-discrimination — we will not treat you differently for exercising your rights

Categories of Personal Information Collected (per CCPA definitions):

  • Identifiers: email address, Stripe customer ID
  • Internet activity: keyed-hashed IP addresses, keyed-hashed user agents, render counts
  • Commercial information: subscription status, usage counts, billing period

We do not sell personal information. We do not share personal information for cross-context behavioral advertising.

9. Children's Privacy

The Service is not directed at children under 13 years of age. We do not knowingly collect personal information from children under 13. If you believe a child under 13 has provided us with personal information, please contact us at [email protected] and we will promptly delete it.

10. Security Incident Response

In the event of a data breach that affects your personal information:

  • We will notify affected users via email within 72 hours of becoming aware of the breach
  • We will notify relevant data protection authorities as required by law
  • We will provide a clear description of what happened, what data was affected, and what steps we are taking

11. Changes to This Policy

We may update this Privacy Policy from time to time. When we make changes:

  • We will update the “Last updated” date at the top
  • For material changes, we will provide 30 days’ notice via email and/or dashboard notification
  • Your continued use of the Service after the notice period constitutes acceptance

12. Contact Us

For privacy-related questions, requests, or concerns:

For GDPR-specific requests, email [email protected] with the subject line “GDPR Request” and specify which right you are exercising.

For CCPA-specific requests, email [email protected] with the subject line “CCPA Request.”

This Privacy Policy is effective as of September 11, 2026.