deer social fork for personal usage. but you might see a use idk. github mirror

continued rebrand (big squash):

commit 3c6e494ae2b3f7675710077731d54adbbea75a46
Author: Aviva Ruben <aviva@rubenfamily.com>
Date: Thu Apr 17 17:40:09 2025 -0500

license fix

commit 9bdc35b7e3555f208dd840264121304bab9e5849
Author: Aviva <72410860+a-viv-a@users.noreply.github.com>
Date: Thu Apr 17 17:38:25 2025 -0500

Update README.md

commit 651d8e8a7323ba44c6684ce5042602f9c189f948
Author: Aviva <72410860+a-viv-a@users.noreply.github.com>
Date: Thu Apr 17 17:35:54 2025 -0500

Update README.md

commit 60f51544525705c5d9326a23d287ceb38bf43066
Author: Aviva <72410860+a-viv-a@users.noreply.github.com>
Date: Thu Apr 17 17:22:02 2025 -0500

Update README.md

commit 1653e18e1234cbff73a589f906f0b8b2339f2013
Author: Aviva Ruben <aviva@rubenfamily.com>
Date: Thu Apr 17 16:52:41 2025 -0500

update template

commit 8cdea5a05486987fea6ea7750851f95bd35fa784
Author: Aviva Ruben <aviva@rubenfamily.com>
Date: Thu Apr 17 16:50:50 2025 -0500

replace zendesk

commit f79f821f9ab1291d80a5139dc6f79e2c85b459fb
Author: Aviva Ruben <aviva@rubenfamily.com>
Date: Thu Apr 17 16:40:21 2025 -0500

link to relevent on both

commit e85973fb11fe41ebc3132f80cc845231f5d2408e
Author: Aviva Ruben <aviva@rubenfamily.com>
Date: Thu Apr 17 16:35:23 2025 -0500

privacy policy

commit 790620c8265ae1cb4944ceca5b369afc0a2dfd65
Author: Aviva Ruben <aviva@rubenfamily.com>
Date: Thu Apr 17 16:23:37 2025 -0500

fix title

commit 68202bcfc53ff0b3844ea3d99ee4b6a7e020a24d
Author: Aviva Ruben <aviva@rubenfamily.com>
Date: Thu Apr 17 16:20:57 2025 -0500

about index redirect

commit 54f99ae049a0fbb3741e8b33d8ea249e24bdae29
Author: Aviva Ruben <aviva@rubenfamily.com>
Date: Thu Apr 17 16:17:25 2025 -0500

privacy policy

commit 40e2fe0322fecea0023d4cceeafa51eef7d55ab4
Author: Aviva Ruben <aviva@rubenfamily.com>
Date: Thu Apr 17 14:47:11 2025 -0500

rewrite references to bsky social

Aviva Ruben da42a48f 42672d1e

+873 -64
+1 -1
.github/ISSUE_TEMPLATE/feature_request.yml
··· 1 1 name: "Feature Request" 2 - description: "Suggest an idea for the Bluesky app." 2 + description: "Suggest an idea for the deer.social app." 3 3 labels: ["feature-request"] 4 4 body: 5 5 - type: markdown
+1 -1
LICENSE
··· 1 - Copyright 2023–2025 Bluesky PBC 1 + Copyright 2025 Aviva Ruben 2 2 3 3 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 4
+69 -35
README.md
··· 1 - # Bluesky Social App 1 + # deer.social 2 2 3 - Welcome friends! This is the codebase for the Bluesky Social app. 3 + This is a soft fork of [social app](https://github.com/bluesky-social/social-app). 4 4 5 5 Get the app itself: 6 6 7 - - **Web: [bsky.app](https://bsky.app)** 8 - - **iOS: [App Store](https://apps.apple.com/us/app/bluesky-social/id6444370199)** 9 - - **Android: [Play Store](https://play.google.com/store/apps/details?id=xyz.blueskyweb.app)** 7 + - **Web: [deer.social](https://deer.social)** 8 + - ~**iOS: [App Store]()**~ WIP 9 + - ~**Android: [Play Store]()**~ WIP 10 10 11 - ## Development Resources 11 + ## Features Today 12 12 13 - This is a [React Native](https://reactnative.dev/) application, written in the TypeScript programming language. It builds on the `atproto` TypeScript packages (like [`@atproto/api`](https://www.npmjs.com/package/@atproto/api)), code for which is also open source, but in [a different git repository](https://github.com/bluesky-social/atproto). 13 + - toggle to disable go.bsky.app link proxying for analytics 14 + - toggle to disable default app labeler 15 + - toggle to disable falling back to discover feed in the following feed 16 + - see through quote blocks and detatchments (nuclear block wrt quotes) 17 + - <img src="https://github.com/user-attachments/assets/e5084afd-b17e-43a7-9622-f6d7f19f53ca" width="300px" /> 18 + - enable features gates 19 + - configure the location used to determine regional labelers 20 + - entirely ignore `!no-unauthenticated` labels, even for logged out users 14 21 15 - There is a small amount of Go language source code (in `./bskyweb/`), for a web service that returns the React Native Web application. 22 + ### WIP/Planned 16 23 17 - The [Build Instructions](./docs/build.md) are a good place to get started with the app itself. 24 + - rewrite shared URLs to reference deer.social 25 + - opengraph support for sharing posts and profiles 26 + - selecting custom appviews 27 + - seeing past blocks in post threads (nuclear block for reply chains) 18 28 19 - The Authenticated Transfer Protocol ("AT Protocol" or "atproto") is a decentralized social media protocol. You don't *need* to understand AT Protocol to work with this application, but it can help. Learn more at: 29 + ## Philosophy 20 30 21 - - [Overview and Guides](https://atproto.com/guides/overview) 22 - - [Github Discussions](https://github.com/bluesky-social/atproto/discussions) 👈 Great place to ask questions 23 - - [Protocol Specifications](https://atproto.com/specs/atp) 24 - - [Blogpost on self-authenticating data structures](https://bsky.social/about/blog/3-6-2022-a-self-authenticating-social-protocol) 31 + - by default, deer.social should very similar to the official client 32 + - color and branding are different to distinguish from social-app 33 + - `!no-unauthenticated` behavior is different 34 + - analytics are not present 35 + - opinionated features behind toggles 36 + - focus on high impact, low diff size patches 37 + - specifically patches that won't require large conflicts to be resolved 38 + - focus on power users (but all users are welome!) 39 + - enable things that are possible but annoying today **without** egging on antisocial behavior 25 40 26 - The Bluesky Social application encompasses a set of schemas and APIs built in the overall AT Protocol framework. The namespace for these "Lexicons" is `app.bsky.*`. 41 + ## Development Resources 42 + 43 + This is a [React Native](https://reactnative.dev/) application, written in the TypeScript programming language. It builds on the `atproto` TypeScript packages (like [`@atproto/api`](https://www.npmjs.com/package/@atproto/api)), code for which is also open source, but in [a different git repository](https://github.com/bluesky-social/atproto). It is regularly rebased 44 + on top of new releases of [social-app](https://github.com/bluesky-social/social-app). 45 + 46 + There is vestigial Go language source code (in `./bskyweb/`), for a web service that returns the React Native Web application in the social app deployment. However, it is not used in current 47 + deer.social deployments. 48 + For deer, the intended deployment is with a websever than can serve static files, and reroute to `index.html` as needed. Today [deer.social](https://deer.social) is hosted on [cloudflare pages](https://pages.cloudflare.com/). 49 + 50 + The [Build Instructions](./docs/build.md) are a good place to get started with the app itself. If you use nix (and especially direnv) then `flake.nix` will get you a working environment for 51 + the web version of the app. 52 + 53 + The Authenticated Transfer Protocol ("AT Protocol" or "atproto") is a decentralized social media protocol. You don't *need* to understand AT Protocol to work with this application, but it can help. 54 + You may wish to reference [resources linked in social-app](https://github.com/bluesky-social/social-app#development-resources). However, please don't harass the Bluesky team with issues or questions 55 + pertaining to deer.social. 56 + 57 + Deer is a fork of the official client, social-app. It encompasses a set of schemas and APIs built in the overall AT Protocol framework. The namespace for these "Lexicons" is `app.bsky.*`. 27 58 28 59 ## Contributions 29 60 30 - > While we do accept contributions, we prioritize high quality issues and pull requests. Adhering to the below guidelines will ensure a more timely review. 61 + > deer.social is a community fork, and we'd love to merge your PR! 31 62 32 - **Rules:** 63 + As a rule of thumb, the best features for deer.social are ones that have a disproportionately positive impact on the user experience compared to the matinance overhead. 64 + Unlike some open source projects, since deer.social is a soft fork, any features (patches) we add on top of upstream social-app need to be maintained. For example, 65 + a change to the way posts are composed may be very invasive, touching lots of code across the codebase. If upstream refactors this component, we will need to rewrite this 66 + feature to be compatible or drop it from the client. 33 67 34 - - We may not respond to your issue or PR. 35 - - We may close an issue or PR without much feedback. 36 - - We may lock discussions or contributions if our attention is getting DDOSed. 37 - - We're not going to provide support for build issues. 68 + For this reason, bias towards features that change a relatively small amount of code that is present upstream. 69 + 70 + Without an overriding motivation, opinionated features should exist behind a toggle that is not enabled by default. This allows deer.social to cater to as many users as possible. 38 71 39 72 **Guidelines:** 40 73 41 74 - Check for existing issues before filing a new one please. 42 75 - Open an issue and give some time for discussion before submitting a PR. 76 + - This isn't strictly necessary, but I'd love to give my thoughts and scope out your willingness to maintain the feature before you write it. 43 77 - Stay away from PRs like... 44 78 - Changing "Post" to "Skeet." 45 79 - Refactoring the codebase, e.g., to replace MobX with Redux or something. 46 - - Adding entirely new features without prior discussion. 80 + - Include a new toggle and preference for your feature. 47 81 48 - Remember, we serve a wide community of users. Our day-to-day involves us constantly asking "which top priority is our top priority." If you submit well-written PRs that solve problems concisely, that's an awesome contribution. Otherwise, as much as we'd love to accept your ideas and contributions, we really don't have the bandwidth. That's what forking is for! 82 + If we don't merge your PR for whatever reason, you are welcome to fork and/or self host: 49 83 50 84 ## Forking guidelines 51 85 52 - You have our blessing 🪄✨ to fork this application! However, it's very important to be clear to users when you're giving them a fork. 86 + Just like social-app, you have our blessing 🪄✨ to fork this application! However, it's very important to be clear to users when you're giving them a fork. 53 87 54 88 Please be sure to: 55 89 56 - - Change all branding in the repository and UI to clearly differentiate from Bluesky. 57 - - Change any support links (feedback, email, terms of service, etc) to your own systems. 58 - - Replace any analytics or error-collection systems with your own so we don't get super confused. 90 + - Change all branding in the repository and UI to clearly differentiate from deer.social. 91 + - Change any support links (feedback, email, terms of service, issue tracker, etc) to your own systems. 59 92 60 - ## Security disclosures 93 + ## Self hosting & personal builds 61 94 62 - If you discover any security issues, please send an email to security@bsky.app. The email is automatically CCed to the entire team and we'll respond promptly. 95 + Self hosting is great! It is our intention that deer.social is easy to self host and build on your own. If you host your own instance of deer.social, or make your own builds, please 96 + make some level of effort to clarify that it is not an "official" build or instance. This can be in the form of a different domain or branding, but can also be as simple as not 97 + advertising your hosted instance or builds as "official" releases. 63 98 64 - ## Are you a developer interested in building on atproto? 99 + ## Security disclosures 65 100 66 - Bluesky is an open social network built on the AT Protocol, a flexible technology that will never lock developers out of the ecosystems that they help build. With atproto, third-party integration can be as seamless as first-party through custom feeds, federated services, clients, and more. 101 + If you discover any security issues, please send an email to aviva@rubenfamily.com. 102 + If the issue pertains to infastructure, code, or systems outside the scope of deer.social, please refer to the 103 + [disclosure guidelines on social-app](https://github.com/bluesky-social/social-app#security-disclosures) if it is hosted by Bluesky PBC. Otherwise, reference the 104 + security policy of that system as applicable <3 67 105 68 106 ## License (MIT) 69 107 70 108 See [./LICENSE](./LICENSE) for the full license. 71 - 72 - ## P.S. 73 - 74 - We ❤️ you and all of the ways you support us. Thank you for making Bluesky a great place!
+24
deer-static-about/index.html
··· 1 + <!DOCTYPE html> 2 + <html> 3 + <head> 4 + <meta charset="utf-8"> 5 + <meta name="theme-color"> 6 + <meta 7 + name="viewport" 8 + content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1.00001, viewport-fit=cover" 9 + /> 10 + <title>deer.social | about</title> 11 + <meta http-equiv="refresh" content="0;url=https://github.com/a-viv-a/deer-social"> 12 + 13 + <link rel="preload" as="font" type="font/woff2" href="/static/media/InterVariable.c504db5c06caaf7cdfba.woff2" crossorigin> 14 + 15 + <link rel="stylesheet" href="normalize.css" type="text/css"> 16 + <link rel="stylesheet" href="sakura.css" type="text/css"> 17 + </head> 18 + <script type="text/javascript"> 19 + window.location.href = "https://github.com/a-viv-a/deer-social"; 20 + </script> 21 + <body> 22 + <h1>redirecting to github readme...</h1> 23 + </body> 24 + </html>
+351
deer-static-about/normalize.css
··· 1 + /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ 2 + 3 + /* Document 4 + ========================================================================== */ 5 + 6 + /** 7 + * 1. Correct the line height in all browsers. 8 + * 2. Prevent adjustments of font size after orientation changes in iOS. 9 + */ 10 + 11 + html { 12 + line-height: 1.15; /* 1 */ 13 + -webkit-text-size-adjust: 100%; /* 2 */ 14 + } 15 + 16 + /* Sections 17 + ========================================================================== */ 18 + 19 + /** 20 + * Remove the margin in all browsers. 21 + */ 22 + 23 + body { 24 + margin: 0; 25 + } 26 + 27 + /** 28 + * Render the `main` element consistently in IE. 29 + */ 30 + 31 + main { 32 + display: block; 33 + } 34 + 35 + /** 36 + * Correct the font size and margin on `h1` elements within `section` and 37 + * `article` contexts in Chrome, Firefox, and Safari. 38 + */ 39 + 40 + h1 { 41 + font-size: 2em; 42 + margin: 0.67em 0; 43 + } 44 + 45 + /* Grouping content 46 + ========================================================================== */ 47 + 48 + /** 49 + * 1. Add the correct box sizing in Firefox. 50 + * 2. Show the overflow in Edge and IE. 51 + */ 52 + 53 + hr { 54 + box-sizing: content-box; /* 1 */ 55 + height: 0; /* 1 */ 56 + overflow: visible; /* 2 */ 57 + } 58 + 59 + /** 60 + * 1. Correct the inheritance and scaling of font size in all browsers. 61 + * 2. Correct the odd `em` font sizing in all browsers. 62 + */ 63 + 64 + pre { 65 + font-family: monospace, monospace; /* 1 */ 66 + font-size: 1em; /* 2 */ 67 + } 68 + 69 + /* Text-level semantics 70 + ========================================================================== */ 71 + 72 + /** 73 + * Remove the gray background on active links in IE 10. 74 + */ 75 + 76 + a { 77 + background-color: transparent; 78 + } 79 + 80 + /** 81 + * 1. Remove the bottom border in Chrome 57- 82 + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. 83 + */ 84 + 85 + abbr[title] { 86 + border-bottom: none; /* 1 */ 87 + text-decoration: underline; /* 2 */ 88 + text-decoration: underline dotted; /* 2 */ 89 + } 90 + 91 + /** 92 + * Add the correct font weight in Chrome, Edge, and Safari. 93 + */ 94 + 95 + b, 96 + strong { 97 + font-weight: bolder; 98 + } 99 + 100 + /** 101 + * 1. Correct the inheritance and scaling of font size in all browsers. 102 + * 2. Correct the odd `em` font sizing in all browsers. 103 + */ 104 + 105 + code, 106 + kbd, 107 + samp { 108 + font-family: monospace, monospace; /* 1 */ 109 + font-size: 1em; /* 2 */ 110 + } 111 + 112 + /** 113 + * Add the correct font size in all browsers. 114 + */ 115 + 116 + small { 117 + font-size: 80%; 118 + } 119 + 120 + /** 121 + * Prevent `sub` and `sup` elements from affecting the line height in 122 + * all browsers. 123 + */ 124 + 125 + sub, 126 + sup { 127 + font-size: 75%; 128 + line-height: 0; 129 + position: relative; 130 + vertical-align: baseline; 131 + } 132 + 133 + sub { 134 + bottom: -0.25em; 135 + } 136 + 137 + sup { 138 + top: -0.5em; 139 + } 140 + 141 + /* Embedded content 142 + ========================================================================== */ 143 + 144 + /** 145 + * Remove the border on images inside links in IE 10. 146 + */ 147 + 148 + img { 149 + border-style: none; 150 + } 151 + 152 + /* Forms 153 + ========================================================================== */ 154 + 155 + /** 156 + * 1. Change the font styles in all browsers. 157 + * 2. Remove the margin in Firefox and Safari. 158 + */ 159 + 160 + button, 161 + input, 162 + optgroup, 163 + select, 164 + textarea { 165 + font-family: inherit; /* 1 */ 166 + font-size: 100%; /* 1 */ 167 + line-height: 1.15; /* 1 */ 168 + margin: 0; /* 2 */ 169 + } 170 + 171 + /** 172 + * Show the overflow in IE. 173 + * 1. Show the overflow in Edge. 174 + */ 175 + 176 + button, 177 + input { 178 + /* 1 */ 179 + overflow: visible; 180 + } 181 + 182 + /** 183 + * Remove the inheritance of text transform in Edge, Firefox, and IE. 184 + * 1. Remove the inheritance of text transform in Firefox. 185 + */ 186 + 187 + button, 188 + select { 189 + /* 1 */ 190 + text-transform: none; 191 + } 192 + 193 + /** 194 + * Correct the inability to style clickable types in iOS and Safari. 195 + */ 196 + 197 + button, 198 + [type='button'], 199 + [type='reset'], 200 + [type='submit'] { 201 + -webkit-appearance: button; 202 + } 203 + 204 + /** 205 + * Remove the inner border and padding in Firefox. 206 + */ 207 + 208 + button::-moz-focus-inner, 209 + [type='button']::-moz-focus-inner, 210 + [type='reset']::-moz-focus-inner, 211 + [type='submit']::-moz-focus-inner { 212 + border-style: none; 213 + padding: 0; 214 + } 215 + 216 + /** 217 + * Restore the focus styles unset by the previous rule. 218 + */ 219 + 220 + button:-moz-focusring, 221 + [type='button']:-moz-focusring, 222 + [type='reset']:-moz-focusring, 223 + [type='submit']:-moz-focusring { 224 + outline: 1px dotted ButtonText; 225 + } 226 + 227 + /** 228 + * Correct the padding in Firefox. 229 + */ 230 + 231 + fieldset { 232 + padding: 0.35em 0.75em 0.625em; 233 + } 234 + 235 + /** 236 + * 1. Correct the text wrapping in Edge and IE. 237 + * 2. Correct the color inheritance from `fieldset` elements in IE. 238 + * 3. Remove the padding so developers are not caught out when they zero out 239 + * `fieldset` elements in all browsers. 240 + */ 241 + 242 + legend { 243 + box-sizing: border-box; /* 1 */ 244 + color: inherit; /* 2 */ 245 + display: table; /* 1 */ 246 + max-width: 100%; /* 1 */ 247 + padding: 0; /* 3 */ 248 + white-space: normal; /* 1 */ 249 + } 250 + 251 + /** 252 + * Add the correct vertical alignment in Chrome, Firefox, and Opera. 253 + */ 254 + 255 + progress { 256 + vertical-align: baseline; 257 + } 258 + 259 + /** 260 + * Remove the default vertical scrollbar in IE 10+. 261 + */ 262 + 263 + textarea { 264 + overflow: auto; 265 + } 266 + 267 + /** 268 + * 1. Add the correct box sizing in IE 10. 269 + * 2. Remove the padding in IE 10. 270 + */ 271 + 272 + [type='checkbox'], 273 + [type='radio'] { 274 + box-sizing: border-box; /* 1 */ 275 + padding: 0; /* 2 */ 276 + } 277 + 278 + /** 279 + * Correct the cursor style of increment and decrement buttons in Chrome. 280 + */ 281 + 282 + [type='number']::-webkit-inner-spin-button, 283 + [type='number']::-webkit-outer-spin-button { 284 + height: auto; 285 + } 286 + 287 + /** 288 + * 1. Correct the odd appearance in Chrome and Safari. 289 + * 2. Correct the outline style in Safari. 290 + */ 291 + 292 + [type='search'] { 293 + -webkit-appearance: textfield; /* 1 */ 294 + outline-offset: -2px; /* 2 */ 295 + } 296 + 297 + /** 298 + * Remove the inner padding in Chrome and Safari on macOS. 299 + */ 300 + 301 + [type='search']::-webkit-search-decoration { 302 + -webkit-appearance: none; 303 + } 304 + 305 + /** 306 + * 1. Correct the inability to style clickable types in iOS and Safari. 307 + * 2. Change font properties to `inherit` in Safari. 308 + */ 309 + 310 + ::-webkit-file-upload-button { 311 + -webkit-appearance: button; /* 1 */ 312 + font: inherit; /* 2 */ 313 + } 314 + 315 + /* Interactive 316 + ========================================================================== */ 317 + 318 + /* 319 + * Add the correct display in Edge, IE 10+, and Firefox. 320 + */ 321 + 322 + details { 323 + display: block; 324 + } 325 + 326 + /* 327 + * Add the correct display in all browsers. 328 + */ 329 + 330 + summary { 331 + display: list-item; 332 + } 333 + 334 + /* Misc 335 + ========================================================================== */ 336 + 337 + /** 338 + * Add the correct display in IE 10+. 339 + */ 340 + 341 + template { 342 + display: none; 343 + } 344 + 345 + /** 346 + * Add the correct display in IE 10. 347 + */ 348 + 349 + [hidden] { 350 + display: none; 351 + }
+54
deer-static-about/privacy.html
··· 1 + <!DOCTYPE html> 2 + <html> 3 + <head> 4 + <meta charset="utf-8"> 5 + <meta name="theme-color"> 6 + <!-- 7 + This viewport works for phones with notches. 8 + It's optimized for gestures by disabling global zoom. 9 + --> 10 + <meta 11 + name="viewport" 12 + content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1.00001, viewport-fit=cover" 13 + /> 14 + <title>deer.social | privacy policy</title> 15 + 16 + <link rel="preload" as="font" type="font/woff2" href="/static/media/InterVariable.c504db5c06caaf7cdfba.woff2" crossorigin> 17 + 18 + <link rel="stylesheet" href="normalize.css" type="text/css"> 19 + <link rel="stylesheet" href="sakura.css" type="text/css"> 20 + </head> 21 + 22 + <body> 23 + 24 + 25 + <h1>deer.social Privacy Policy</h1> 26 + 27 + <p><em><strong>Last Updated:</strong> April 17, 2025</em></p> 28 + 29 + <p>Welcome to deer.social. This privacy policy explains our approach to your data when you use our application.</p> 30 + 31 + <h2>No Data Collection by deer.social</h2> 32 + <p><strong>The deer.social application itself does not collect, store, track, or share any of your personal information or user data.</strong> We do not operate servers that store your account details, posts, or activity logs.</p> 33 + <p>Our application functions solely as a client interface to interact with the underlying Bluesky social network (AT Protocol).</p> 34 + 35 + <h2>Reliance on Third-Party Services (AppView and PDS)</h2> 36 + <p>When you use deer.social, you connect to the Bluesky network through a specific AppView and your chosen Personal Data Server (PDS). These services are responsible for storing and managing your account information, posts, social graph, and other associated data.</p> 37 + <p><strong>Your data handling and privacy are governed by the Terms of Service and Privacy Policies of the specific AppView and PDS you use.</strong> deer.social simply acts on your behalf to communicate with these services based on the credentials you provide locally on your device.</p> 38 + <p>We strongly recommend you review the policies of your chosen PDS provider and the AppView you are using. For reference, the Privacy Policy for the default Bluesky service (AppView provided by <a href="https://bsky.social" target="_blank" rel="noopener noreferrer">bsky.social</a>) can be found here:</p> 39 + <p><a href="https://bsky.social/about/support/privacy-policy" target="_blank" rel="noopener noreferrer">https://bsky.social/about/support/privacy-policy</a></p> 40 + 41 + <h2>Data Stored Locally on Your Device</h2> 42 + <p>To function, deer.social may store your login credentials or temporary session information on your own device. This data is not accessed by or transmitted to us.</p> 43 + 44 + <h2>Cookies and Analytics</h2> 45 + <p>deer.social does not use cookies or any tracking analytics.</p> 46 + 47 + <h2>Changes to This Policy</h2> 48 + <p>We may update this policy. If we do, we will update the "Effective Date" at the top of this page.</p> 49 + 50 + <h2>Contact Us</h2> 51 + <p>If you have questions specifically about the functionality of the deer.social application itself (and not about data managed by your PDS or AppView), please find our contact information on <a href="https://avivaruben.com" target="_blank" rel="noopener noreferrer">avivaruben.com</a>.</p> 52 + 53 + </body> 54 + </html>
+283
deer-static-about/sakura.css
··· 1 + /* Sakura.css v1.5.0 2 + * ================ 3 + * Minimal css theme. 4 + * Project: https://github.com/oxalorg/sakura/ 5 + */ 6 + /* Body */ 7 + html { 8 + font-size: 62.5%; 9 + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 10 + 'Helvetica Neue', Arial, 'Noto Sans', sans-serif; 11 + } 12 + 13 + body { 14 + font-size: 1.8rem; 15 + line-height: 1.618; 16 + max-width: 38em; 17 + margin: auto; 18 + color: #4a4a4a; 19 + background-color: #f9f9f9; 20 + padding: 13px; 21 + } 22 + 23 + @media (max-width: 684px) { 24 + body { 25 + font-size: 1.53rem; 26 + } 27 + } 28 + @media (max-width: 382px) { 29 + body { 30 + font-size: 1.35rem; 31 + } 32 + } 33 + @font-face { 34 + font-family: 'InterVariable'; 35 + src: url(/static/media/InterVariable.c504db5c06caaf7cdfba.woff2) 36 + format('woff2'); 37 + font-weight: 300 1000; 38 + font-style: normal; 39 + font-display: swap; 40 + } 41 + @font-face { 42 + font-family: 'InterVariableItalic'; 43 + src: url(/static/media/InterVariable-Italic.01dcbad1bac635f9c9cd.woff2) 44 + format('woff2'); 45 + font-weight: 300 1000; 46 + font-style: italic; 47 + font-display: swap; 48 + } 49 + h1, 50 + h2, 51 + h3, 52 + h4, 53 + h5, 54 + h6 { 55 + line-height: 1.1; 56 + font-family: InterVariable, -apple-system, BlinkMacSystemFont, 'Segoe UI', 57 + Roboto, 'Liberation Sans', Helvetica, Arial, sans-serif; 58 + font-weight: 700; 59 + margin-top: 3rem; 60 + margin-bottom: 1.5rem; 61 + overflow-wrap: break-word; 62 + word-wrap: break-word; 63 + -ms-word-break: break-all; 64 + word-break: break-word; 65 + } 66 + 67 + h1 { 68 + font-size: 2.35em; 69 + } 70 + 71 + h2 { 72 + font-size: 2em; 73 + } 74 + 75 + h3 { 76 + font-size: 1.75em; 77 + } 78 + 79 + h4 { 80 + font-size: 1.5em; 81 + } 82 + 83 + h5 { 84 + font-size: 1.25em; 85 + } 86 + 87 + h6 { 88 + font-size: 1em; 89 + } 90 + 91 + p { 92 + margin-top: 0px; 93 + margin-bottom: 2.5rem; 94 + } 95 + 96 + small, 97 + sub, 98 + sup { 99 + font-size: 75%; 100 + } 101 + 102 + hr { 103 + border-color: #1d7484; 104 + } 105 + 106 + a { 107 + text-decoration: none; 108 + color: #1d7484; 109 + } 110 + a:visited { 111 + color: #144f5a; 112 + } 113 + a:hover { 114 + color: #982c61; 115 + border-bottom: 2px solid #4a4a4a; 116 + } 117 + 118 + ul { 119 + padding-left: 1.4em; 120 + margin-top: 0px; 121 + margin-bottom: 2.5rem; 122 + } 123 + 124 + li { 125 + margin-bottom: 0.4em; 126 + } 127 + 128 + blockquote { 129 + margin-left: 0px; 130 + margin-right: 0px; 131 + padding-left: 1em; 132 + padding-top: 0.8em; 133 + padding-bottom: 0.8em; 134 + padding-right: 0.8em; 135 + border-left: 5px solid #1d7484; 136 + margin-bottom: 2.5rem; 137 + background-color: #f1f1f1; 138 + } 139 + 140 + blockquote p { 141 + margin-bottom: 0; 142 + } 143 + 144 + img, 145 + video { 146 + height: auto; 147 + max-width: 100%; 148 + margin-top: 0px; 149 + margin-bottom: 2.5rem; 150 + } 151 + 152 + /* Pre and Code */ 153 + pre { 154 + background-color: #f1f1f1; 155 + display: block; 156 + padding: 1em; 157 + overflow-x: auto; 158 + margin-top: 0px; 159 + margin-bottom: 2.5rem; 160 + font-size: 0.9em; 161 + } 162 + 163 + code, 164 + kbd, 165 + samp { 166 + font-size: 0.9em; 167 + padding: 0 0.5em; 168 + background-color: #f1f1f1; 169 + white-space: pre-wrap; 170 + } 171 + 172 + pre > code { 173 + padding: 0; 174 + background-color: transparent; 175 + white-space: pre; 176 + font-size: 1em; 177 + } 178 + 179 + /* Tables */ 180 + table { 181 + text-align: justify; 182 + width: 100%; 183 + border-collapse: collapse; 184 + margin-bottom: 2rem; 185 + } 186 + 187 + td, 188 + th { 189 + padding: 0.5em; 190 + border-bottom: 1px solid #f1f1f1; 191 + } 192 + 193 + /* Buttons, forms and input */ 194 + input, 195 + textarea { 196 + border: 1px solid #4a4a4a; 197 + } 198 + input:focus, 199 + textarea:focus { 200 + border: 1px solid #1d7484; 201 + } 202 + 203 + textarea { 204 + width: 100%; 205 + } 206 + 207 + .button, 208 + button, 209 + input[type='submit'], 210 + input[type='reset'], 211 + input[type='button'], 212 + input[type='file']::file-selector-button { 213 + display: inline-block; 214 + padding: 5px 10px; 215 + text-align: center; 216 + text-decoration: none; 217 + white-space: nowrap; 218 + background-color: #1d7484; 219 + color: #f9f9f9; 220 + border-radius: 1px; 221 + border: 1px solid #1d7484; 222 + cursor: pointer; 223 + box-sizing: border-box; 224 + } 225 + .button[disabled], 226 + button[disabled], 227 + input[type='submit'][disabled], 228 + input[type='reset'][disabled], 229 + input[type='button'][disabled], 230 + input[type='file']::file-selector-button[disabled] { 231 + cursor: default; 232 + opacity: 0.5; 233 + } 234 + .button:hover, 235 + button:hover, 236 + input[type='submit']:hover, 237 + input[type='reset']:hover, 238 + input[type='button']:hover, 239 + input[type='file']::file-selector-button:hover { 240 + background-color: #982c61; 241 + color: #f9f9f9; 242 + outline: 0; 243 + } 244 + .button:focus-visible, 245 + button:focus-visible, 246 + input[type='submit']:focus-visible, 247 + input[type='reset']:focus-visible, 248 + input[type='button']:focus-visible, 249 + input[type='file']::file-selector-button:focus-visible { 250 + outline-style: solid; 251 + outline-width: 2px; 252 + } 253 + 254 + textarea, 255 + select, 256 + input { 257 + color: #4a4a4a; 258 + padding: 6px 10px; /* The 6px vertically centers text on FF, ignored by Webkit */ 259 + margin-bottom: 10px; 260 + background-color: #f1f1f1; 261 + border: 1px solid #f1f1f1; 262 + border-radius: 4px; 263 + box-shadow: none; 264 + box-sizing: border-box; 265 + } 266 + textarea:focus, 267 + select:focus, 268 + input:focus { 269 + border: 1px solid #1d7484; 270 + outline: 0; 271 + } 272 + 273 + input[type='checkbox']:focus { 274 + outline: 1px dotted #1d7484; 275 + } 276 + 277 + label, 278 + legend, 279 + fieldset { 280 + display: block; 281 + margin-bottom: 0.5rem; 282 + font-weight: 600; 283 + }
+65
deer-static-about/tos.html
··· 1 + <!DOCTYPE html> 2 + <html> 3 + <head> 4 + <meta charset="utf-8"> 5 + <meta name="theme-color"> 6 + <!-- 7 + This viewport works for phones with notches. 8 + It's optimized for gestures by disabling global zoom. 9 + --> 10 + <meta 11 + name="viewport" 12 + content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1.00001, viewport-fit=cover" 13 + /> 14 + <title>deer.social | terms of service</title> 15 + 16 + <link rel="preload" as="font" type="font/woff2" href="/static/media/InterVariable.c504db5c06caaf7cdfba.woff2" crossorigin> 17 + 18 + <link rel="stylesheet" href="normalize.css" type="text/css"> 19 + <link rel="stylesheet" href="sakura.css" type="text/css"> 20 + </head> 21 + 22 + <body> 23 + 24 + 25 + <h1>Terms of Service for deer.social</h1> 26 + 27 + <p><em><strong>Last Updated:</strong> April 17, 2025</em></p> 28 + 29 + <h2>Introduction</h2> 30 + <p>Welcome to deer.social! These Terms of Service ("Terms") govern your use of the deer.social application ("App"). By accessing or using the App, you agree to be bound by these Terms.</p> 31 + 32 + <h2>Your Agreement</h2> 33 + <p>Using deer.social signifies your acceptance of these Terms. Please also review our <a href="/privacy">Privacy Policy</a>, which explains how we handle data related to the App itself.</p> 34 + 35 + <h2>Relationship to Other Services and Platforms</h2> 36 + <p>deer.social functions as a client or interface. It allows you to interact with decentralized social media protocols, instances, or servers (your "AppView" or "Personal Data Server" / "PDS").</p> 37 + <p><strong>Important:</strong> deer.social does not host your data or control the underlying networks or servers you connect to. Your interaction with these third-party services, including the content you post and view, is governed by the Terms of Service, acceptable use policies, and privacy policies of the specific AppView and/or PDS you choose to use.</p> 38 + <p>You are responsible for understanding and complying with the terms of those external services.</p> 39 + 40 + <p>We strongly recommend you review the policies of your chosen PDS provider and the AppView you are using. For reference, the Terms of Service for the default Bluesky service (AppView provided by <a href="https://bsky.social" target="_blank" rel="noopener noreferrer">bsky.social</a>) can be found here: </p> 41 + <p><a href="https://bsky.social/about/support/tos" target="_blank" rel="noopener noreferrer">https://bsky.social/about/support/tos</a></p> 42 + 43 + <h2>User Conduct</h2> 44 + <p>Your conduct while using deer.social must comply with the terms and rules set forth by the AppView and PDS you are connected to. deer.social is merely a tool to access these services, and Aviva Ruben is not responsible for enforcing the rules of those platforms or for the content accessed through them.</p> 45 + 46 + <h2>Disclaimer of Warranty</h2> 47 + <p>The App is provided "AS IS" and "AS AVAILABLE," without warranty of any kind, express or implied. Aviva Ruben does not warrant that the App will meet your requirements, be available uninterrupted, secure, or error-free.</p> 48 + 49 + <h2>Limitation of Liability</h2> 50 + <p>To the fullest extent permitted by applicable law, Aviva Ruben shall not be liable for any indirect, incidental, special, consequential, or punitive damages, or any loss of profits or revenues, whether incurred directly or indirectly, or any loss of data, use, goodwill, or other intangible losses, resulting from:</p> 51 + <ul> 52 + <li>Your access to or use of or inability to access or use the App;</li> 53 + <li>Any conduct or content of any third party on or through the App or the services it connects to (including your AppView or PDS);</li> 54 + <li>Unauthorized access, use, or alteration of your transmissions or content via the underlying services (AppView/PDS).</li> 55 + </ul> 56 + <p>In no event shall the aggregate liability of Aviva Ruben exceed the greater of zero U.S. dollars ($0.00).</p> 57 + 58 + <h2>Changes to These Terms</h2> 59 + <p>We may revise these Terms from time to time. The most current version will always be available within the App or on its associated website. By continuing to access or use the App after revisions become effective, you agree to be bound by the revised Terms.</p> 60 + 61 + <h2>Contact Information</h2> 62 + <p>If you have any questions about these Terms of Service, please refer to the contact information available on <a href="https://avivaruben.com" target="_blank" rel="noopener noreferrer">avivaruben.com</a>.</p> 63 + 64 + </body> 65 + </html>
+3
pages_build.sh
··· 9 9 10 10 # we need to copy the static iframe html to support youtube embeds 11 11 cp -r bskyweb/static/iframe/ web-build/iframe 12 + 13 + # copy our static pages over! 14 + cp -r deer-static-about web-build/about
+4 -15
src/lib/constants.ts
··· 7 7 export const BSKY_SERVICE = 'https://bsky.social' 8 8 export const PUBLIC_BSKY_SERVICE = 'https://public.api.bsky.app' 9 9 export const DEFAULT_SERVICE = BSKY_SERVICE 10 - const HELP_DESK_LANG = 'en-us' 11 - export const HELP_DESK_URL = `https://blueskyweb.zendesk.com/hc/${HELP_DESK_LANG}` 10 + export const HELP_DESK_URL = `https://github.com/a-viv-a/deer-social/issues/new/choose` 12 11 export const EMBED_SERVICE = 'https://embed.bsky.app' 13 12 export const EMBED_SCRIPT = `${EMBED_SERVICE}/static/embed.js` 14 13 export const BSKY_DOWNLOAD_URL = 'https://bsky.app/download' ··· 33 32 'did:plc:tgqseeot47ymot4zro244fj3': true, // iwsmith.bsky.social 34 33 } 35 34 36 - const BASE_FEEDBACK_FORM_URL = `${HELP_DESK_URL}/requests/new` 37 - export function FEEDBACK_FORM_URL({ 38 - email, 39 - handle, 40 - }: { 35 + const BASE_FEEDBACK_FORM_URL = `${HELP_DESK_URL}` 36 + export function FEEDBACK_FORM_URL(_params: { 41 37 email?: string 42 38 handle?: string 43 39 }): string { 44 - let str = BASE_FEEDBACK_FORM_URL 45 - if (email) { 46 - str += `?tf_anonymous_requester_email=${encodeURIComponent(email)}` 47 - if (handle) { 48 - str += `&tf_17205412673421=${encodeURIComponent(handle)}` 49 - } 50 - } 51 - return str 40 + return BASE_FEEDBACK_FORM_URL 52 41 } 53 42 54 43 export const MAX_DISPLAY_NAME = 64
+2 -2
src/screens/Settings/AboutSettings.tsx
··· 75 75 <Layout.Content> 76 76 <SettingsList.Container> 77 77 <SettingsList.LinkItem 78 - to="https://bsky.social/about/support/tos" 78 + to="https://deer.social/about/tos" 79 79 label={_(msg`Terms of Service`)}> 80 80 <SettingsList.ItemIcon icon={NewspaperIcon} /> 81 81 <SettingsList.ItemText> ··· 83 83 </SettingsList.ItemText> 84 84 </SettingsList.LinkItem> 85 85 <SettingsList.LinkItem 86 - to="https://bsky.social/about/support/privacy-policy" 86 + to="https://deer.social/about/privacy" 87 87 label={_(msg`Privacy Policy`)}> 88 88 <SettingsList.ItemIcon icon={NewspaperIcon} /> 89 89 <SettingsList.ItemText>
+2 -2
src/screens/Takendown.tsx
··· 3 3 import {KeyboardAwareScrollView} from 'react-native-keyboard-controller' 4 4 import {useSafeAreaInsets} from 'react-native-safe-area-context' 5 5 import {StatusBar} from 'expo-status-bar' 6 - import {ComAtprotoAdminDefs, ComAtprotoModerationDefs} from '@atproto/api' 6 + import {type ComAtprotoAdminDefs, ComAtprotoModerationDefs} from '@atproto/api' 7 7 import {msg, Trans} from '@lingui/macro' 8 8 import {useLingui} from '@lingui/react' 9 9 import {useMutation} from '@tanstack/react-query' ··· 215 215 Your account was found to be in violation of the{' '} 216 216 <InlineLinkText 217 217 label={_(msg`Bluesky Social Terms of Service`)} 218 - to="https://bsky.social/about/support/tos" 218 + to="https://deer.social/about/tos" 219 219 style={[a.text_md, a.leading_normal]} 220 220 overridePresentation> 221 221 Bluesky Social Terms of Service
+5 -2
src/view/screens/PrivacyPolicy.tsx
··· 5 5 import {useFocusEffect} from '@react-navigation/native' 6 6 7 7 import {usePalette} from '#/lib/hooks/usePalette' 8 - import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types' 8 + import { 9 + type CommonNavigatorParams, 10 + type NativeStackScreenProps, 11 + } from '#/lib/routes/types' 9 12 import {s} from '#/lib/styles' 10 13 import {useSetMinimalShellMode} from '#/state/shell' 11 14 import {TextLink} from '#/view/com/util/Link' ··· 36 39 The Privacy Policy has been moved to{' '} 37 40 <TextLink 38 41 style={pal.link} 39 - href="https://bsky.social/about/support/privacy-policy" 42 + href="https://deer.social/about/privacy" 40 43 text="bsky.social/about/support/privacy-policy" 41 44 /> 42 45 </Trans>
+5 -2
src/view/screens/TermsOfService.tsx
··· 5 5 import {useFocusEffect} from '@react-navigation/native' 6 6 7 7 import {usePalette} from '#/lib/hooks/usePalette' 8 - import {CommonNavigatorParams, NativeStackScreenProps} from '#/lib/routes/types' 8 + import { 9 + type CommonNavigatorParams, 10 + type NativeStackScreenProps, 11 + } from '#/lib/routes/types' 9 12 import {s} from '#/lib/styles' 10 13 import {useSetMinimalShellMode} from '#/state/shell' 11 14 import {TextLink} from '#/view/com/util/Link' ··· 35 38 <Trans>The Terms of Service have been moved to</Trans>{' '} 36 39 <TextLink 37 40 style={pal.link} 38 - href="https://bsky.social/about/support/tos" 41 + href="https://deer.social/about/tos" 39 42 text="bsky.social/about/support/tos" 40 43 /> 41 44 </Text>
+2 -2
src/view/shell/Drawer.tsx
··· 641 641 <InlineLinkText 642 642 style={[a.text_md]} 643 643 label={_(msg`Terms of Service`)} 644 - to="https://bsky.social/about/support/tos"> 644 + to="https://deer.social/about/tos"> 645 645 <Trans>Terms of Service</Trans> 646 646 </InlineLinkText> 647 647 <InlineLinkText 648 648 style={[a.text_md]} 649 - to="https://bsky.social/about/support/privacy-policy" 649 + to="https://deer.social/about/privacy" 650 650 label={_(msg`Privacy Policy`)}> 651 651 <Trans>Privacy Policy</Trans> 652 652 </InlineLinkText>
+2 -2
src/view/shell/desktop/RightNav.tsx
··· 106 106 </> 107 107 )} 108 108 <InlineLinkText 109 - to="https://bsky.social/about/support/privacy-policy" 109 + to="https://deer.social/about/privacy" 110 110 label={_(msg`Privacy`)}> 111 111 {_(msg`Privacy`)} 112 112 </InlineLinkText> 113 113 {' • '} 114 114 <InlineLinkText 115 - to="https://bsky.social/about/support/tos" 115 + to="https://deer.social/about/tos" 116 116 label={_(msg`Terms`)}> 117 117 {_(msg`Terms`)} 118 118 </InlineLinkText>