PageSourceSearch

https://getcopy.app/privacy

html getcopy.app collected 2026-10-02 15:59:00 UTC 33,288 bytes, 557 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3<head>
4  <meta charset="utf-8" />
5  <meta name="viewport" content="width=device-width, initial-scale=1" />
6  <title>Privacy Policy — COPY</title>
7  <meta name="description" content="Privacy policy for the COPY voice messaging app — end-to-end encrypted, zero-knowledge server." />
8  <meta property="og:title" content="Privacy Policy — COPY" />
9  <meta property="og:description" content="Privacy policy for the COPY voice messaging app — end-to-end encrypted, zero-knowledge server." />
10  <meta property="og:type" content="website" />
11  <link rel="preconnect" href="https://fonts.googleapis.com" />
12  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;600;700&family=Lora:wght@400;500&display=swap" rel="stylesheet" />
13  <style>
14    * { margin: 0; padding: 0; box-sizing: border-box; }
15    html { -webkit-text-size-adjust: 100%; }
16    body {
17      background: #0a0a0a;
18      color: #e4e4e4;
19      font-family: 'Inter', system-ui, -apple-system, sans-serif;
20      font-size: 16px;
21      line-height: 1.7;
22    }
23    .container {
24      max-width: 720px;
25      margin: 0 auto;
26      padding: 40px 24px 80px;
27    }
28    .eyebrow {
29      font-family: 'JetBrains Mono', monospace;
30      font-size: 11px;
31      letter-spacing: 3px;
32      color: #e84a1b;
33      text-transform: uppercase;
34      margin-bottom: 16px;
35    }
36    h1 {
37      font-size: 32px;
38      font-weight: 700;
39      color: #fff;
40      margin-bottom: 8px;
41      letter-spacing: -0.02em;
42    }
43    h2 {
44      font-size: 20px;
45      font-weight: 700;
46      color: #fff;
47      margin-top: 40px;
48      margin-bottom: 12px;
49      letter-spacing: -0.01em;
50    }
51    h3 {
52      font-size: 16px;
53      font-weight: 600;
54      color: #fff;
55      margin-top: 24px;
56      margin-bottom: 8px;
57    }
58    p { margin-bottom: 14px; color: #c4c4c4; }
59    strong { color: #fff; font-weight: 600; }
60    ul, ol { margin: 12px 0 14px 24px; color: #c4c4c4; }
61    li { margin-bottom: 6px; }
62    hr {
63      border: none;
64      border-top: 1px solid #262626;
65      margin: 40px 0;
66    }
67    .meta {
68      font-family: 'JetBrains Mono', monospace;
69      font-size: 12px;
70      color: #888;
71      margin-bottom: 40px;
72      line-height: 1.8;
73    }
74    a { color: #e84a1b; text-decoration: none; }
75    a:hover { text-decoration: underline; }
76    table {
77      width: 100%;
78      border-collapse: collapse;
79      margin: 16px 0 20px;
80      font-size: 14px;
81    }
82    th, td {
83      padding: 10px 12px;
84      text-align: left;
85      border-bottom: 1px solid #262626;
86      vertical-align: top;
87    }
88    th {
89      color: #fff;
90      font-weight: 600;
91      background: #131313;
92      font-size: 13px;
93    }
94    td { color: #c4c4c4; }
95    .contact {
96      margin-top: 8px;
97      padding: 16px 20px;
98      background: #131313;
99      border-radius: 6px;
100      border-left: 3px solid #e84a1b;
101    }
102    .contact p { margin-bottom: 4px; }
103    
104  .site-footer {
105    --site-footer-strong: #f6f4ef;
106    --site-footer-muted: #8c8275;
107    --site-footer-rule: rgba(247, 245, 240, 0.10);
108    --site-footer-shelf: rgba(247, 245, 240, 0.025);
109    width: 100%;
110    margin-top: 64px;
111    color: var(--site-footer-muted);
112    text-align: center;
113  }
114  .site-footer-content {
115    width: min(720px, calc(100% - 40px));
116    margin: 0 auto;
117    padding: 50px 0 46px;
118    display: flex;
119    flex-direction: column;
120    align-items: center;
121    gap: 22px;
122  }
123  .site-footer-signoff {
124    margin: 0;
125    color: var(--site-footer-muted);
126    font-family: 'JetBrains Mono', ui-monospace, monospace;
127    font-size: 11px;
128    letter-spacing: 0.18em;
129    line-height: 1.4;
130    text-transform: uppercase;
131  }
132  .site-footer-builders {
133    margin: -10px 0 0;
134    display: inline-flex;
135    align-items: center;
136    justify-content: center;
137    flex-wrap: wrap;
138    gap: 4px;
139    color: var(--site-footer-muted);
140    font-family: 'Lora', Georgia, 'Times New Roman', serif;
141    font-size: 11px;
142    line-height: 1.4;
143  }
144  .site-footer-credit,
145  .site-founder-link {
146    display: inline-flex;
147    align-items: center;
148    gap: 4px;
149  }
150  .site-footer-credit {
151    justify-content: center;
152    flex-wrap: wrap;
153  }
154  .site-founder-link {
155    min-height: 36px;
156    padding: 10px 0;
157    margin: -10px 0;
158    color: var(--site-footer-strong);
159    text-decoration: underline;
160    text-decoration-color: color-mix(in srgb, var(--site-footer-strong) 24%, transparent);
161    text-underline-offset: 4px;
162    transition: text-decoration-color 160ms ease;
163  }
164  .site-founder-link:hover {
165    text-decoration-color: var(--site-footer-strong);
166  }
167  .site-bluesky-mark {
168    width: 13px;
169    height: 12px;
170    display: inline-block;
171    flex: 0 0 auto;
172    background: currentColor;
173    -webkit-mask: url('/bluesky.svg') center / contain no-repeat;
174    mask: url('/bluesky.svg') center / contain no-repeat;
175  }
176  .site-footer-links {
177    display: inline-flex;
178    align-items: center;
179    justify-content: center;
180    flex-wrap: wrap;
181    gap: 8px;
182    color: var(--site-footer-muted);
183    font-family: 'JetBrains Mono', ui-monospace, monospace;
184    font-size: 13px;
185    letter-spacing: 0.01em;
186  }
187  .site-footer-links a {
188    min-height: 36px;
189    padding: 9px 0;
190    margin: -9px 0;
191    display: inline-flex;
192    align-items: center;
193    color: inherit;
194    text-decoration: none;
195    transition: color 160ms ease;
196  }
197  .site-footer-links a:hover {
198    color: var(--site-footer-strong);
199  }
200  .site-footer-current {
201    color: var(--site-footer-strong);
202    text-decoration: underline;
203    text-decoration-color: color-mix(in srgb, var(--site-footer-strong) 38%, transparent);
204    text-underline-offset: 4px;
205  }
206  .site-footer-separator {
207    opacity: 0.7;
208  }
209  .site-press-shelf {
210    width: 100%;
211    border-top: 1px solid var(--site-footer-rule);
212    background: var(--site-footer-shelf);
213  }
214  .site-press-shelf-inner {
215    min-height: 72px;
216    padding: 18px 32px;
217    display: flex;
218    align-items: center;
219    justify-content: center;
220    gap: 26px;
221  }
222  .site-press-link {
223    display: inline-flex;
224    align-items: center;
225    min-height: 36px;
226    padding: 10px 0;
227    margin: -10px 0;
228    gap: 6px;
229    color: var(--site-footer-muted);
230    font-family: 'JetBrains Mono', ui-monospace, monospace;
231    font-size: 10px;
232    line-height: 1;
233    text-decoration: none;
234    transition: color 160ms ease;
235  }
236  .site-press-link:hover {
237    color: var(--site-footer-strong);
238  }
239  .site-press-link strong {
240    color: var(--site-footer-strong);
241    font-weight: 600;
242  }
243  .site-press-dot {
244    width: 6px;
245    height: 6px;
246    flex: 0 0 auto;
247    border-radius: 50%;
248    background: #c96442;
249    opacity: 0.85;
250  }
251  .site-press-dot-tapsmart {
252    background: #269ac2;
253  }
254  .site-press-arrow {
255    width: 11px;
256    height: 11px;
257    display: inline-block;
258    flex: 0 0 auto;
259    background: currentColor;
260    -webkit-mask: url('/arrow-up-right.svg') center / contain no-repeat;
261    mask: url('/arrow-up-right.svg') center / contain no-repeat;
262  }
263  .site-press-divider {
264    width: 1px;
265    height: 20px;
266    background: color-mix(in srgb, var(--site-footer-strong) 11%, transparent);
267  }
268  .site-footer a:focus-visible {
269    outline: 2px solid var(--site-footer-strong);
270    outline-offset: 4px;
271    border-radius: 2px;
272  }
273  @media (max-width: 560px) {
274    .site-footer {
275      margin-top: 48px;
276    }
277    .site-footer-content {
278      padding: 42px 0;
279    }
280    .site-footer-builders {
281      max-width: 340px;
282      font-size: 11px;
283    }
284    .site-footer-links {
285      gap: 8px 6px;
286      font-size: 12px;
287    }
288    .site-press-shelf-inner {
289      min-height: 66px;
290      padding: 17px 20px;
291      gap: 18px;
292    }
293  }
294  @media (prefers-reduced-motion: reduce) {
295    .site-footer a {
296      transition: none;
297    }
298  }
299
300    @media (max-width: 600px) {
301      body { font-size: 15px; }
302      .container { padding: 24px 16px 60px; }
303      h1 { font-size: 26px; }
304      h2 { font-size: 18px; }
305      table { font-size: 13px; }
306      th, td { padding: 8px; }
307    }
308  </style>
309</head>
310<body>
311  <div class="container">
312    <div class="eyebrow">COPY</div>
313    <h1>Privacy Policy</h1>
314    <div class="meta">
315      <strong>COPY — Voice Messaging App</strong><br/>
316      Effective Date: April 13, 2026<br/>
317      Last Updated: September 24, 2026
318    </div>
319
320    <p>Matt Moss ("we," "us," or "our") operates the COPY mobile application (the "App") and the getcopy.app website. This Privacy Policy explains what information we collect, how we use it, and the choices you have.</p>
321
322    <p>COPY is designed around a core principle: <strong>your conversations are yours</strong>. We built the App so that we cannot read, listen to, or access the content of your voice messages. This policy describes that architecture honestly and completely.</p>
323
324    <hr/>
325
326    <h2>1. Information We Collect</h2>
327
328    <h3>1.1 Information You Provide</h3>
329    <p><strong>Display Name.</strong> You may optionally set a display name so your friends can identify you on their channels. This is stored on our servers and visible to people you share a channel with. You are not required to use your real name.</p>
330    <p><strong>Voice Messages.</strong> When you record a voice message, the App encrypts it on your device before transmitting it to our servers. We store the encrypted audio file temporarily (see Section 3 for retention details). We cannot decrypt, listen to, or read the contents of your voice messages.</p>
331    <p><strong>Support and QA Correspondence.</strong> If you email us for support, feedback, or to apply for a testing program, we receive your email address and the contents of your message. COPY Club QA applications may include the preferred name, iPhone model, iOS version, and testing interests you choose to provide. Do not send recovery words, private keys, pass codes, channel links, or message content.</p>
332
333    <h3>1.2 Information Generated Automatically</h3>
334    <p><strong>Cryptographic Identity.</strong> When you first open the App, it generates an Ed25519 key pair on your device. The public key serves as your identity — there is no email, phone number, username, or password. Your private key never leaves your device and is stored in your device's secure enclave (iOS Keychain / Android Keystore).</p>
335    <p><strong>Push Notification Token.</strong> If you enable notifications, the App registers with Expo Push Notification Service, which issues a device token. We store this token on our servers to deliver notifications when you receive a voice message. You can disable push notifications at any time through your device settings, though this means you will not be notified of new messages until you open the App.</p>
336    <p><strong>Channel Membership.</strong> When you join a channel via an invite link, we store your membership in that channel, including which slot number the channel occupies on your device and your role (owner or member).</p>
337    <p><strong>Cosmetic Grant Metadata.</strong> When COPY gives you a starting skin or you claim a free skin through an in-app achievement, we store the skin and achievement identifiers with your cryptographic identity. This small record 
337is readable account metadata and is used to maintain and restore those grants after reinstalling or recovering the same identity. Product analytics use aggregate, coded progress states and do not retain achievement or reward identifiers in Analytics Engine. Paid purchase records remain with Apple or Google.</p>
338    <p><strong>Session Tokens.</strong> We issue short-lived JSON Web Tokens (JWTs) with a 24-hour expiration for authenticating your device with our servers. These tokens contain only your user identifier and an expiration timestamp.</p>
339
340    <h3>1.3 Operational Data</h3>
341    <p><strong>Analytics Events.</strong> We record limited first-party operational and product-health metrics using Cloudflare Analytics Engine, including: that a message was sent, played, or acknowledged; push notification delivery attempts; message delivery latency; coarse onboarding completion; active skin choices; and coded unlock progress. Events use truncated device and channel identifiers where needed for aggregate rates, but never include message content, audio, display names, contacts, invite URLs or tokens, channel secrets, advertising identifiers, or an individual social graph. We use this data to monitor service health, debug delivery issues, and understand aggregate product usage. We do not use it for targeted advertising or to recommend message content.</p>
342    <p><strong>Expo Diagnostics.</strong> The App uses Expo's built-in diagnostic reporting, which may collect crash reports, app launch times, and update delivery metrics. This data is processed by Expo (Expo, Inc.) under their privacy policy.</p>
343
344    <h3>1.4 Information We Do Not Collect</h3>
345    <p>The App does not collect or require your legal name, email address, phone number, physical address, date of birth, payment information, contacts list, location data, browsing history, device advertising identifiers, or any biometric data. If you voluntarily email us, we receive the sender address and correspondence described above, but it is not attached to your in-app cryptographic identity unless you choose to include identifying information. We do not create a user account in the traditional sense — your identity is your cryptographic key pair, generated entirely on your device.</p>
346
347    <h3>1.5 Website Analytics</h3>
348    <p>If you choose "Allow website analytics" in the website footer, the getcopy.app marketing website loads Google Analytics 4 to understand visits and clicks through to the App Store. Google Analytics uses cookies and browser identifiers and processes page views, browser and device information, referring websites, approximate location, and App Store button clicks. Our click events identify the button's placement and App Store destination.</p>
349    <p>We remove query strings and fragments from the page addresses we send to Google Analytics and send only the origin of the referring website. We disable Google signals and advertising personalization. We do not send COPY account identifiers, channel information, recovery words, or voice messages to Google Analytics, and we do not link website analytics to your COPY identity.</p>
350    <p>Website analytics are off until you opt in. You can withdraw permission using the same footer control. We save your choice in this browser; withdrawing stops future collection and removes the website's Google Analytics cookies. It does not erase data already sent to Google.</p>
351    <p>Google processes this data as our analytics provider. Learn more about <a href="https://policies.google.com/technologies/partner-sites">how Google uses information from sites that use its services</a>.</p>
352
353    <hr/>
354
355    <h2>2. End-to-End Encryption</h2>
356    <p>All voice messages are encrypted on your device before being transmitted to our servers, using the libsodium cryptographic library.</p>
357    <p><strong>How it works:</strong> Channels use symmetric encryption (XSalsa20-Poly1305 via <code>crypto_secretbox_easy</code>). A shared channel secret is established when a channel is created and distributed to members through the invite link. The secret is derived into an encryption key using the BLAKE2b key derivation function. Message authenticity is verified using Ed25519 digital signatures (<code>crypto_sign_detached</code>).</p>
358    <p><strong>What this means:</strong> Our servers store encrypted audio blobs that we cannot decrypt. We do not hold the encryption keys. Even if our servers were compromised, an attacker could not listen to your messages without obtaining the channel secret, which is shared directly between users and never transmitted to our servers in plaintext.</p>
359    <p><strong>Key rotation:</strong> When a member leaves a channel, the channel secret is automatically rotated. All existing sealed keys are invalidated and redistributed to remaining members. Previous invite links stop working.</p>
360
361    <hr/>
362
363    <h2>3. Data Retention and Deletion</h2>
364    <p><strong>Voice messages</strong> are retained in encrypted form only as long as necessary for delivery:</p>
365    <ul>
366      <li>When all recipients in a channel have played (acknowledged) a message, the encrypted audio file is immediately and permanently deleted from our servers.</li>
367      <li>Unplayed messages are automatically and permanently deleted after <strong>
3677 days</strong>, regardless of whether they have been played.</li>
368      <li>24 hours before a message expires, we send a reminder notification to recipients who have not yet played it.</li>
369    </ul>
370    <p><strong>Channel data</strong> (membership, metadata) persists as long as the channel is active. Channels with one or fewer members and no activity for 90 days are automatically deleted ("zombie reaping").</p>
371    <p><strong>Cosmetic grant metadata</strong> persists with your active cryptographic identity so COPY can restore starting and claimed free skins. It is permanently deleted when you use Delete Account.</p>
372    <p><strong>Push notification tokens</strong> are stored as long as your device is registered. If a token becomes invalid (e.g., you uninstall the App), it is removed when our server detects the invalid token during the next delivery attempt.</p>
373    <p><strong>App analytics data</strong> is retained according to Cloudflare Analytics Engine's standard retention policy (typically 90 days for raw event data).</p>
374    <p><strong>Support and QA correspondence</strong> remains in the COPY team's email accounts while reasonably needed to review the application, operate the testing program, respond to the conversation, and maintain ordinary business records. It is not added to a marketing list. You may ask us to delete your correspondence, subject to records we must retain for legal, security, or abuse-prevention purposes.</p>
375    <p><strong>Deleting your data:</strong> You can delete all your messages in a specific channel at any time from within the App. When you leave a channel, your membership data and any sealed keys associated with your identity are deleted from that channel. Delete Account permanently removes the profile, memberships, messages, push token, and cosmetic grants tied to that COPY identity. Because voluntary email correspondence is separate from your cryptographic identity, Delete Account does not delete it; contact us to request deletion.</p>
376
377    <hr/>
378
379    <h2>4. How We Use Your Information</h2>
380    <p>We use the information described above solely to:</p>
381    <ul>
382      <li>Deliver your encrypted voice messages to the intended recipients.</li>
383      <li>Send push notifications when you receive a new message.</li>
384      <li>Maintain channel membership so your device knows which channels you belong to.</li>
385      <li>Monitor service health and debug delivery issues through anonymized operational metrics.</li>
386      <li>Enforce message expiration and clean up expired data.</li>
387      <li>Respond to support and feedback, review QA applications, coordinate testing, and follow up with testers.</li>
388      <li>Understand aggregate visits to our marketing website and clicks through to the App Store.</li>
389    </ul>
390    <p>We do not use your information for targeted advertising or message-content recommendations. Website analytics help us understand how people find and use the marketing website.</p>
391
392    <hr/>
393
394    <h2>5. How We Share Your Information</h2>
395    <p><strong>We do not sell your information.</strong> We do not share your information with third parties for their marketing or advertising purposes.</p>
396    <p>We share limited data with the following service providers, to operate the App, website, and support:</p>
397    <table>
398      <thead>
399        <tr><th>Provider</th><th>Data Shared</th><th>Purpose</th></tr>
400      </thead>
401      <tbody>
402        <tr>
403          <td><strong>Cloudflare, Inc.</strong></td>
404          <td>Encrypted audio blobs, channel metadata, user identifiers, analytics events, and email routing metadata and contents when you write to a getcopy.app address</td>
405          <td>Infrastructure: Workers (compute), Durable Objects (state), R2 (object storage), KV (key-value store), Analytics Engine (metrics), and Email Routing</td>
406        </tr>
407        <tr>
408          <td><strong>Expo, Inc.</strong></td>
409          <td>Push notification tokens, crash diagnostics</td>
410          <td>Push notification delivery (routed to Apple APNs and Google FCM), over-the-air app updates, diagnostic reporting</td>
411        </tr>
412        <tr>
413          <td><strong>Apple Inc.</strong></td>
414          <td>Push notification tokens (via APNs)</td>
415          <td>iOS push notification delivery</td>
416        </tr>
417        <tr>
418          <td><strong>Google LLC</strong></td>
419          <td>Push notification tokens (via FCM), correspondence routed to the COPY team's Gmail inboxes, and the website analytics described 
419in Section 1.5</td>
420          <td>Android push notification delivery, team email hosting, and website measurement through Google Analytics 4</td>
421        </tr>
422      </tbody>
423    </table>
424    <p>These providers process data under their respective privacy policies and terms of service. We do not transmit decrypted message content to any third party because we do not possess the decryption keys.</p>
425
426    <hr/>
427
428    <h2>6. Data Security</h2>
429    <p>In addition to end-to-end encryption of all voice message content, we implement the following security measures:</p>
430    <ul>
431      <li><strong>Authentication</strong> uses a cryptographic challenge-response protocol — your device proves its identity by signing a server-issued nonce with its private Ed25519 key. No passwords are transmitted or stored.</li>
432      <li><strong>Session tokens</strong> expire after 24 hours and are signed with HMAC-SHA256.</li>
433      <li><strong>WebSocket connections</strong> for real-time notifications use authenticated upgrade requests with short-lived tokens (60-second validity).</li>
434      <li><strong>Invite links</strong> contain a cryptographic secret that grants access to the channel encryption key. When a member leaves, the secret is rotated and old links are invalidated.</li>
435      <li><strong>Infrastructure</strong> runs on Cloudflare's global network with encryption at rest and in transit.</li>
436    </ul>
437    <p>No system is perfectly secure. If you believe your device or channel has been compromised, you can leave the affected channel (which triggers key rotation for remaining members) and create a new one.</p>
438
439    <hr/>
440
441    <h2>7. Children's Privacy</h2>
442    <p>COPY is not intended for children under the age of 13. We do not knowingly collect information from children under 13. Because the App does not require account registration or collect age-verifiable information, we rely on the age-gating mechanisms of the Apple App Store and Google Play Store, as well as this policy notice.</p>
443    <p>If you are a parent or guardian and believe your child under 13 has used the App, please contact us at the address below. We will take steps to delete any data associated with the child's device.</p>
444
445    <hr/>
446
447    <h2>8. Your Rights and Choices</h2>
448    <p>Depending on your jurisdiction, you may have certain rights regarding your personal information:</p>
449
450    <h3>8.1 All Users</h3>
451    <ul>
452      <li><strong>Disable push notifications</strong> at any time through your device's system settings.</li>
453      <li><strong>Delete your messages</strong> within the App.</li>
454      <li><strong>Leave a channel</strong> to remove your membership and trigger key rotation.</li>
455      <li><strong>Uninstall the App</strong> to delete all locally stored data, including your private encryption key. Server-side data associated with your device identifier will be cleaned up through our standard retention and deletion processes.</li>
456    </ul>
457
458    <h3>8.2 European Economic Area, United Kingdom, and Switzerland (GDPR)</h3>
459    <p>If you are located in the EEA, UK, or Switzerland, we process your personal data under the following legal bases:</p>
460    <ul>
461      <li><strong>Legitimate interest</strong> (Article 6(1)(f) GDPR): Delivering your messages and maintaining the service, operational analytics, service security, and responding to voluntary support and QA correspondence.</li>
462      <li><strong>Consent</strong> (Article 6(1)(a) GDPR): Sending push notifications (you may withdraw consent by disabling notifications in your device settings) and optional website analytics (you may withdraw consent using the website footer control).</li>
463    </ul>
464    <p>You have the right to access, rectify, erase, restrict processing, and port your personal data, and to object to processing. To exercise these rights, contact us at the address below. We will respond within 30 days.</p>
465    <p><strong>Data transfers:</strong> Your data may be processed on Cloudflare's global network, which includes servers outside the EEA. Cloudflare maintains appropriate safeguards for international data transfers, including Standard Contractual Clauses. If you enable website analytics, Google may al
465so process website data outside your country. Google describes its safeguards in its <a href="https://policies.google.com/privacy/frameworks">international data transfer policy</a>.</p>
466
467    <h3>8.3 California (CCPA/CPRA)</h3>
468    <p>If you are a California resident, you have the right to know what personal information we collect, to request its deletion, and to opt out of its sale. <strong>We do not sell personal information.</strong> To exercise your rights, contact us at the address below.</p>
469    <p><strong>Categories of personal information collected:</strong> Identifiers (device-generated cryptographic public key, push notification token, and an email address if you voluntarily write to us); internet or electronic network activity (operational and website analytics events); website cookie identifiers and approximate location; correspondence you choose to send; audio information (encrypted, inaccessible to us).</p>
470
471    <h3>8.4 Other U.S. State Privacy Laws</h3>
472    <p>Residents of Colorado, Connecticut, Virginia, Utah, Texas, Oregon, Montana, and other states with comprehensive privacy laws have similar rights to access, delete, and correct personal information, and to opt out of the sale or sharing of personal information. <strong>We do not sell or share personal information for targeted advertising.</strong> To exercise your rights, contact us at the address below.</p>
473
474    <hr/>
475
476    <h2>9. International Data Transfers</h2>
477    <p>COPY's infrastructure runs on Cloudflare's globally distributed network. Your encrypted voice messages and service metadata may be processed in data centers outside your country of residence. Voice message content is end-to-end encrypted and cannot be read by Cloudflare or us without the channel secret held only on members' devices. Other information described in this policy, including service metadata and voluntary support or QA correspondence, is not protected by COPY's message encryption and may be readable by the providers and recipients identified in Section 5.</p>
478
479    <hr/>
480
481    <h2>10. Changes to This Policy</h2>
482    <p>We may update this Privacy Policy from time to time. When we make material changes, we will update the "Last Updated" date at the top of this page. For significant changes that affect your rights, we will provide notice through the App. Your continued use of the App after changes take effect constitutes acceptance of the revised policy.</p>
483
484    <hr/>
485
486    <h2>11. Security Incidents</h2>
487    <p>
487If we become aware of a security incident that compromises the confidentiality, integrity, or availability of your personal data, we will investigate promptly, take reasonable steps to mitigate harm, and notify affected users and applicable supervisory authorities within the timeframes required by applicable law (including, where required, within 72 hours under GDPR Article 33). Because voice message content is end-to-end encrypted and the encryption keys are not stored on our servers, the scope of data at risk in a server-side incident is limited to the categories listed in Sections 1 and 12.</p>
488
489    <hr/>
490
491    <h2>12. Contact</h2>
492    <p>If you have questions about this Privacy Policy or wish to exercise your privacy rights, contact:</p>
493    <div class="contact">
494      <p><strong>Matt Moss</strong></p>
495      <p>Email: <a href="mailto:[email protected]">[email protected]</a></p>
496      <p>Website: <a href="https://getcopy.app">https://getcopy.app</a></p>
497    </div>
498    <p style="margin-top: 16px;">If you are located in the EEA and are unsatisfied with our response, you have the right to lodge a complaint with your local data protection authority.</p>
499
500    <hr/>
501
502    <h2>13. Summary of Data Flows</h2>
503    <p>For transparency, here is a complete summary of all data that touches our servers:</p>
504    <table>
505      <thead>
506        <tr><th>Data</th><th>Stored?</th><th>Encrypted?</th><th>Retention</th><th>Who Can Read It</th></tr>
507      </thead>
508      <tbody>
509        <tr><td>Voice message audio</td><td>Yes (temporary)</td><td>Yes (E2E, on-device)</td><td>Until all recipients play it, or 7 days max</td><td>Only channel members with the channel secret</td></tr>
510        <tr><td>Cryptographic public key</td><td>Yes</td><td>No (public by design)</td><td>Lifetime of the device identity</td><td>Anyone in your channels</td></tr>
511        <tr><td>Display name</td><td>Yes</td><td>No</td><td>Until you change or delete it</td><td>Channel members</td></tr>
512        <tr><td>Push notification token</td><td>Yes</td><td>No</td><td>Until invalidated or device unregistered</td><td>Us, Expo, Apple/Google</td></tr>
513        <tr><td>Channel membership</td><td>Yes</td><td>No</td><td>Until you leave or the channel is reaped</td><td>Our server (for message routing)</td></tr>
514        <tr><td>Analytics events</td><td>Yes</td><td>No</td><td>~90 days</td><td>Us (via Cloudflare Analytics Engine)</td></tr>
515        <tr><td>Voluntary support and QA email</td><td>Yes</td><td>Not end-to-end encrypted by COPY; handled under the email providers' protections</td><td>While reasonably needed for the conversation, testing program, ordinary records, security, or legal obligations</td><td>The COPY team and its email providers</td></tr>
516        <tr><td>Private encryption key</td><td>No (device only)</td><td>Yes (secure enclave)</td><td>Until app is uninstalled</td><td>Only you</td></tr>
517        <tr><td>Message content (decrypted)</td><td>Never</td><td>N/A</td><td>N/A</td><td>Only sender and recipients</td></tr>
518      </tbody>
519    </table>
520  </div>
521  
522  <footer class="site-footer" id="site-footer">
523    <div class="site-footer-content">
524      <p class="site-footer-signoff">— end of transmission —</p>
525      <nav class="site-footer-links" aria-label="Footer"><a href="/">Home</a><span class="site-footer-separator" aria-hidden="true">·</span><a href="/changelog">Updates</a><span class="site-footer-separator" aria-hidden="true">·</span><span class="site-footer-current" aria-current="page">Privacy</span><span class="site-footer-separator" aria-hidden="true">·</span><a href="/terms">Terms</a></nav>
526      <p class="site-footer-builders site-footer-credit">
527        Built by
528        <a class="site-founder-link" href="https://bsky.app/profile/mattmoss.me" target="_blank" rel="noreferrer" aria-label="Matt on Bluesky">
529          <span class="site-bluesky-mark" aria-hidden="true"></span><span>Matt</span>
530        </a>
531        and
532        <a class="site-founder-link" href="https://bsky.app/profile/atippins.bsky.social" target="_blank" rel="noreferrer" aria-label="Alan on Bluesky">
533          <span class="site-bluesky-mark" aria-hidden="true"></span><span>Alan</span>
534        </a>.
535      </p>
536    </div>
537    <nav class="site-press-shelf" aria-label="COPY press mentions">
538      <div class="site-press-shelf-inner">
539        <a class="site-press-link" href="https://forg.to/projects/copy" target="_blank" rel="noreferrer" aria-label="Read about COPY on Forg">
540          <span class="site-press-dot" aria-hidden="true"></span>
541          <span>Featured on</span>
542          <strong>Forg</strong>
543          <span class="site-press-arrow" aria-hidden="true"></span>
544        </a>
545        <span class="site-press-divider" aria-hidden="true"></span>
546        <a class="site-press-link" href="https://www.tapsmart.com/apps/copy-walkie-talkie-review/" target="_blank" rel="noreferrer" aria-label="Read about COPY on TapSmart">
547          <span class="site-press-dot site-press-dot-tapsmart" aria-hidden="true"></span>
548          <span>Featured on</span>
549          <strong>TapSmart</strong>
550          <span class="site-press-arrow" aria-hidden="true"></span>
551        </a>
552      </div>
553    </nav>
554  </footer>
555<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"821e60d229c84a31995c3757f0d7e870","r":1,"spa":2}' crossorigin="anonymous"></script>
555
556</body>
557</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.