audio streaming app plyr.fm

fix: use 'public blob storage' instead of 'our servers' (#763)

* fix: use "public blob storage" instead of "our servers"

- ToS: clarify audio is in public blob storage we control, can remove
for policy violations, ATProto records may persist but audio is ours
- TermsOverlay: same fix for consistency

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* update some language

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>

authored by zzstoatzz.io

Claude Opus 4.5 and committed by
GitHub
3dc4f98a f13e2844

+28 -31
+2 -2
frontend/src/lib/components/TermsOverlay.svelte
··· 35 35 <ul> 36 36 <li> 37 37 <strong>your content:</strong> you own what you upload. audio files are stored 38 - on our servers; track metadata is written to your PDS. delete through {APP_NAME} 39 - and we remove it from our servers. 38 + in public blob storage we control; track metadata is written to your PDS. delete 39 + through {APP_NAME} and we remove the audio from storage. 40 40 </li> 41 41 <li> 42 42 <strong>copyright:</strong> don't upload content you don't have rights to.
+26 -29
frontend/src/routes/terms/+page.svelte
··· 16 16 <p class="last-updated">last updated: january 19, 2026</p> 17 17 18 18 <p class="intro"> 19 - these terms govern your use of {APP_NAME}, a music streaming platform built on the 20 - AT Protocol. by using the service, you agree to these terms. 19 + these terms govern your use of {APP_NAME}, a music streaming platform built on the AT 20 + Protocol. by using the service, you agree to these terms. 21 21 </p> 22 22 23 23 <section> 24 24 <h2>1. acceptance of terms</h2> 25 25 <p> 26 - by accessing or using {APP_NAME}, you agree to be bound by these terms. if you 27 - disagree with any part, you may not use the service. 26 + by accessing or using {APP_NAME}, you agree to be bound by these terms. if you disagree with 27 + any part, you may not use the service. 28 28 </p> 29 29 </section> 30 30 31 31 <section> 32 32 <h2>2. accounts</h2> 33 33 <p> 34 - {APP_NAME} uses AT Protocol for authentication. your identity is your DID 35 - (decentralized identifier), not an account we control. we do not store passwords. 34 + {APP_NAME} uses AT Protocol for authentication. your identity is your DID (decentralized identifier), 35 + not an account we control. we do not store passwords. 36 36 </p> 37 37 <p> 38 - we may terminate or suspend your access at any time, for any reason. termination 39 - removes your content from {APP_NAME} but does not affect your DID or data on your 40 - PDS—we don't control those. 38 + we may terminate or suspend your access at any time, for any reason. termination removes 39 + your content from {APP_NAME} but does not affect your DID or data on your PDS—we don't control 40 + those. 41 41 </p> 42 42 </section> 43 43 44 44 <section> 45 45 <h2>3. content</h2> 46 46 <p> 47 - you retain ownership of content you upload. by uploading, you grant us a 48 - non-exclusive, worldwide, royalty-free license to use, reproduce, modify, and 49 - distribute your content as necessary to provide the service. 47 + you retain ownership of content you upload. by uploading, you grant us a non-exclusive, 48 + worldwide, royalty-free license to use, reproduce, modify, and distribute your content as 49 + necessary to provide the service. 50 50 </p> 51 51 <p> 52 - you represent that you own or have the necessary rights to the content you upload, 53 - and that it does not infringe any third party's rights. 52 + you represent that you own or have the necessary rights to the content you upload, and that 53 + it does not infringe any third party's rights. 54 54 </p> 55 55 </section> 56 56 ··· 68 68 69 69 <section> 70 70 <h2>5. copyright & DMCA</h2> 71 - <p> 72 - we respond to valid DMCA takedown notices. our designated agent is: 73 - </p> 71 + <p>we respond to valid DMCA takedown notices. our designated agent is:</p> 74 72 <address class="dmca-agent"> 75 73 Nathan Nowack<br /> 76 74 DMCA Registration: {data.dmcaRegistrationNumber}<br /> 77 75 Email: <a href="mailto:{data.dmcaEmail}">{data.dmcaEmail}</a> 78 76 </address> 77 + <p>we terminate accounts of repeat infringers.</p> 79 78 <p> 80 - we terminate accounts of repeat infringers. 81 - </p> 82 - <p> 83 - <strong>AT Protocol limitation:</strong> audio files are stored on our servers 84 - and we can remove them at any time. track records on ATProto may be indexed 85 - elsewhere as metadata, but without the audio files they reference. 79 + <strong>AT Protocol limitation:</strong> audio files are stored in public blob storage that {APP_NAME} 80 + controls and can remove at any time for policy violations. ATProto records referring to deleted 81 + audio files may persist in user personal data servers (which {APP_NAME} does not control), but 82 + {APP_NAME} will not provide access to violating or deleted content. 86 83 </p> 87 84 </section> 88 85 89 86 <section> 90 87 <h2>6. disclaimers</h2> 91 88 <p> 92 - the service is provided "as is" and "as available" without warranties of any kind. 93 - we do not guarantee uptime or that the service will be error-free. 89 + the service is provided "as is" and "as available" without warranties of any kind. we do not 90 + guarantee uptime or that the service will be error-free. 94 91 </p> 95 92 <p> 96 - we are not liable for any indirect, incidental, special, or consequential damages 97 - resulting from your use of the service. 93 + we are not liable for any indirect, incidental, special, or consequential damages resulting 94 + from your use of the service. 98 95 </p> 99 96 </section> 100 97 101 98 <section> 102 99 <h2>7. changes</h2> 103 100 <p> 104 - we may update these terms. material changes will be posted with notice. continued 105 - use after changes constitutes acceptance. 101 + we may update these terms. material changes will be posted with notice. continued use after 102 + changes constitutes acceptance. 106 103 </p> 107 104 </section> 108 105