An ATproto social media client -- with an independent Appview.

feat: rename bsky.app -> social.shatteredsky.net

Changed files
+48 -37
bskyembed
src
components
screens
bskylink
bskyweb
cmd
bskyweb
embedr
templates
modules
BlueskyClip
expo-bluesky-swiss-army
src
Referrer
src
+2 -2
README.md
··· 4 4 5 5 Get the app itself: 6 6 7 - - **Web: bsky.app** 7 + - **Web: social.shatteredsky.net** 8 8 9 9 <a href="https://apps.obtainium.imranr.dev/redirect?r=obtainium://add/https://github.com/NekoDrone/catsky-social"> 10 10 <img src="https://github.com/ImranR98/Obtainium/blob/main/assets/graphics/badge_obtainium.png?raw=true" ··· 48 48 - Stay away from PRs like... 49 49 - Changing "Post" to "Skeet." 50 50 - Refactoring the codebase, e.g., to replace React Query with Redux Toolkit or something. 51 - - Adding entirely new features without prior discussion. 51 + - Adding entirely new features without prior discussion. 52 52 53 53 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! 54 54
+2 -1
app.config.js
··· 18 18 const IS_DEV = !IS_TESTFLIGHT || !IS_PRODUCTION 19 19 20 20 const ASSOCIATED_DOMAINS = [ 21 + 'applinks:shatteredsky.net', 21 22 'applinks:bsky.app', 22 23 'applinks:staging.bsky.app', 23 24 'appclips:bsky.app', ··· 159 160 data: [ 160 161 { 161 162 scheme: 'https', 162 - host: 'bsky.app', 163 + host: 'social.shatteredsky.net', 163 164 }, 164 165 IS_DEV && { 165 166 scheme: 'http',
+1
bskyembed/src/components/post.tsx
··· 158 158 className="text-blue-500 hover:underline" 159 159 disableTracking={ 160 160 !segment.link.uri.startsWith('https://bsky.app') && 161 + !segment.link.uri.startsWith('https://social.shatteredsky.net') && 161 162 !segment.link.uri.startsWith('https://go.bsky.app') 162 163 }> 163 164 {segment.text}
+2 -2
bskyembed/src/screens/landing.tsx
··· 18 18 import {niceDate} from '../util/nice-date' 19 19 20 20 const DEFAULT_POST = 21 - 'https://bsky.app/profile/did:plc:vjug55kidv6sye7ykr5faxxn/post/3jzn6g7ixgq2y' 21 + 'https://social.shatteredsky.net/profile/did:plc:vjug55kidv6sye7ykr5faxxn/post/3jzn6g7ixgq2y' 22 22 const DEFAULT_URI = 23 23 'at://did:plc:vjug55kidv6sye7ykr5faxxn/app.bsky.feed.post/3jzn6g7ixgq2y' 24 24 ··· 59 59 } else { 60 60 try { 61 61 const urlp = new URL(uri) 62 - if (!urlp.hostname.endsWith('bsky.app')) { 62 + if (!urlp.hostname.endsWith('shatteredsky.net')) { 63 63 throw new Error('Invalid hostname') 64 64 } 65 65 const split = urlp.pathname.slice(1).split('/')
+2 -2
bskyembed/src/screens/post.tsx
··· 90 90 91 91 function ErrorMessage() { 92 92 return ( 93 - <Container href="https://bsky.app/"> 93 + <Container href="https://social.shatteredsky.net/"> 94 94 <Link 95 - href="https://bsky.app/" 95 + href="https://social.shatteredsky.net/" 96 96 className="transition-transform hover:scale-110 absolute top-4 right-4"> 97 97 <img src={logo} className="h-6" /> 98 98 </Link>
+1 -1
bskylink/src/config.ts
··· 74 74 version: env.version, 75 75 hostnames: env.hostnames, 76 76 hostnamesSet: new Set(env.hostnames), 77 - appHostname: env.appHostname ?? 'bsky.app', 77 + appHostname: env.appHostname ?? 'social.shatteredsky.net', 78 78 safelinkEnabled: env.safelinkEnabled ?? false, 79 79 safelinkPdsUrl: env.safelinkPdsUrl, 80 80 safelinkAgentIdentifier: env.safelinkAgentIdentifier,
+1 -1
bskylink/src/html/linkWarningContents.ts
··· 38 38 </div> 39 39 <div class="button-group"> 40 40 ${continueButton} 41 - <a class="button primary" href="https://bsky.app">${req.__('Return to Bluesky')}</a> 41 + <a class="button primary" href="https://social.shatteredsky.net">${req.__('Return to Shattered Sky')}</a> 42 42 </div> 43 43 ` 44 44 }
+1 -1
bskyweb/cmd/bskyweb/main.go
··· 84 84 Name: "cors-allowed-origins", 85 85 Usage: "list of allowed origins for CORS requests", 86 86 Required: false, 87 - Value: cli.NewStringSlice("https://bsky.app", "https://main.bsky.dev", "https://app.staging.bsky.dev"), 87 + Value: cli.NewStringSlice("https://bsky.app", "https://main.bsky.dev", "https://app.staging.bsky.dev", "https://social.shatteredsky.net"), 88 88 EnvVars: []string{"CORS_ALLOWED_ORIGINS"}, 89 89 }, 90 90 &cli.StringFlag{
+7 -7
bskyweb/cmd/embedr/handlers.go
··· 78 78 if err != nil { 79 79 return nil, err 80 80 } 81 - if u.Hostname() != "bsky.app" { 82 - return nil, fmt.Errorf("only bsky.app URLs currently supported") 81 + if u.Hostname() != "social.shatteredsky.net" { 82 + return nil, fmt.Errorf("only social.shatteredsky.net URLs currently supported") 83 83 } 84 84 pathParts := strings.Split(u.Path, "/") // NOTE: pathParts[0] will be empty string 85 85 if len(pathParts) != 5 || pathParts[1] != "profile" || pathParts[3] != "post" { 86 - return nil, fmt.Errorf("only bsky.app post URLs currently supported") 86 + return nil, fmt.Errorf("only social.shatteredsky.net post URLs currently supported") 87 87 } 88 88 atid, err := syntax.ParseAtIdentifier(pathParts[2]) 89 89 if err != nil { ··· 142 142 143 143 aturi, err := srv.parseBlueskyURL(c.Request().Context(), c.QueryParam("url")) 144 144 if err != nil { 145 - return c.String(http.StatusBadRequest, fmt.Sprintf("Expected 'url' to be bsky.app URL or AT-URI: %v", err)) 145 + return c.String(http.StatusBadRequest, fmt.Sprintf("Expected 'url' to be social.shatteredsky.net URL or AT-URI: %v", err)) 146 146 } 147 147 if aturi.Collection() != syntax.NSID("app.bsky.feed.post") { 148 148 return c.String(http.StatusNotImplemented, "Only posts (app.bsky.feed.post records) can be embedded currently") ··· 169 169 Type: "rich", 170 170 Version: "1.0", 171 171 AuthorName: "@" + post.Author.Handle, 172 - AuthorURL: fmt.Sprintf("https://bsky.app/profile/%s", post.Author.Handle), 173 - ProviderName: "Bluesky Social", 174 - ProviderURL: "https://bsky.app", 172 + AuthorURL: fmt.Sprintf("https://social.shatteredsky.net/profile/%s", post.Author.Handle), 173 + ProviderName: "Shattered Sky", 174 + ProviderURL: "https://social.shatteredsky.net", 175 175 CacheAge: 86400, 176 176 Width: &width, 177 177 Height: nil,
+2 -2
bskyweb/cmd/embedr/snippet.go
··· 64 64 PostText: post.Text, 65 65 PostAuthor: authorName, 66 66 PostIndexedAt: sortAt, 67 - ProfileURL: template.URL(fmt.Sprintf("https://bsky.app/profile/%s?ref_src=embed", aturi.Authority())), 68 - PostURL: template.URL(fmt.Sprintf("https://bsky.app/profile/%s/post/%s?ref_src=embed", aturi.Authority(), aturi.RecordKey())), 67 + ProfileURL: template.URL(fmt.Sprintf("https://social.shatteredsky.net/profile/%s?ref_src=embed", aturi.Authority())), 68 + PostURL: template.URL(fmt.Sprintf("https://social.shatteredsky.net/profile/%s/post/%s?ref_src=embed", aturi.Authority(), aturi.RecordKey())), 69 69 WidgetURL: template.URL("https://embed.bsky.app/static/embed.js"), 70 70 } 71 71
+1 -1
bskyweb/templates/post.html
··· 63 63 "author": { 64 64 "@type": "Person", 65 65 "name": "{{ postView.Author.DisplayName }}", 66 - "url": "https://bsky.app/profile/{{ postView.Author.Handle }}" 66 + "url": "https://social.shatteredsky.net/profile/{{ postView.Author.Handle }}" 67 67 }, 68 68 {%- if postText %} 69 69 "text": "{{ postText }}",
+3 -3
modules/BlueskyClip/ViewController.swift
··· 34 34 webView.navigationDelegate = self 35 35 self.view.addSubview(webView) 36 36 self.webView = webView 37 - self.webView?.load(URLRequest(url: URL(string: "https://bsky.app/?splash=true&clip=true")!)) 37 + self.webView?.load(URLRequest(url: URL(string: "https://social.shatteredsky.net/?splash=true&clip=true")!)) 38 38 } 39 39 40 40 func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { ··· 86 86 } 87 87 88 88 switch host { 89 - case "bsky.app": 89 + case "social.shatteredsky.net": 90 90 if url.pathComponents.count == 4, 91 91 url.pathComponents[1] == "start" || url.pathComponents[1] == "starter-pack" { 92 92 return true ··· 109 109 self.webView?.load(URLRequest(url: url)) 110 110 } 111 111 } else { 112 - self.webView?.load(URLRequest(url: URL(string: "https://bsky.app/?splash=true&clip=true")!)) 112 + self.webView?.load(URLRequest(url: URL(string: "https://social.shatteredsky.net/?splash=true&clip=true")!)) 113 113 } 114 114 } 115 115
+1 -1
modules/expo-bluesky-swiss-army/src/Referrer/index.web.ts
··· 17 17 ) { 18 18 try { 19 19 const url = new URL(document.referrer) 20 - if (url.hostname !== 'bsky.app') { 20 + if (url.hostname !== 'social.shatteredsky.net') { 21 21 return { 22 22 referrer: url.href, 23 23 hostname: url.hostname,
+2 -2
src/Navigation.tsx
··· 795 795 const LINKING = { 796 796 // TODO figure out what we are going to use 797 797 // note: `bluesky://` is what is used in app.config.js 798 - prefixes: ['bsky://', 'bluesky://', 'https://bsky.app'], 798 + prefixes: ['bsky://', 'bluesky://', 'https://social.shatteredsky.net'], 799 799 800 800 getPathFromState(state: State) { 801 801 // find the current node in the navigation tree ··· 1085 1085 1086 1086 if (isWeb) { 1087 1087 const referrerInfo = Referrer.getReferrerInfo() 1088 - if (referrerInfo && referrerInfo.hostname !== 'bsky.app') { 1088 + if (referrerInfo && referrerInfo.hostname !== 'social.shatteredsky.net') { 1089 1089 logEvent('deepLink:referrerReceived', { 1090 1090 to: window.location.href, 1091 1091 referrer: referrerInfo?.referrer,
+1 -1
src/lib/constants.ts
··· 14 14 export const HELP_DESK_URL = `https://github.com/NekoDrone/catsky-social/issues/new/choose` 15 15 export const EMBED_SERVICE = 'https://embed.bsky.app' 16 16 export const EMBED_SCRIPT = `${EMBED_SERVICE}/static/embed.js` 17 - export const BSKY_DOWNLOAD_URL = 'https://bsky.app/download' 17 + export const BSKY_DOWNLOAD_URL = 'https://social.shatteredsky.net/download' 18 18 export const STARTER_PACK_MAX_SIZE = 150 19 19 20 20 // HACK
+1 -1
src/lib/hooks/useIntentHandler.ts
··· 34 34 React.useEffect(() => { 35 35 const handleIncomingURL = (url: string) => { 36 36 const referrerInfo = Referrer.getReferrerInfo() 37 - if (referrerInfo && referrerInfo.hostname !== 'bsky.app') { 37 + if (referrerInfo && referrerInfo.hostname !== 'social.shatteredsky.net') { 38 38 logger.metric('deepLink:referrerReceived', { 39 39 to: url, 40 40 referrer: referrerInfo?.referrer,
+2 -2
src/lib/routes/links.ts
··· 50 50 rkey?: string, 51 51 ) { 52 52 if (typeof starterPackOrName === 'string') { 53 - return `https://bsky.app/start/${starterPackOrName}/${rkey}` 53 + return `https://social.shatteredsky.net/start/${starterPackOrName}/${rkey}` 54 54 } else { 55 55 const uriRkey = new AtUri(starterPackOrName.uri).rkey 56 - return `https://bsky.app/start/${starterPackOrName.creator.handle}/${uriRkey}` 56 + return `https://social.shatteredsky.net/start/${starterPackOrName.creator.handle}/${uriRkey}` 57 57 } 58 58 }
+2 -2
src/lib/strings/embed-player.ts
··· 9 9 ? // @ts-ignore only for web 10 10 window.location.host === 'localhost:8100' 11 11 ? 'http://localhost:8100' 12 - : 'https://bsky.app' 12 + : 'https://social.shatteredsky.net' 13 13 : __DEV__ && !process.env.JEST_WORKER_ID 14 14 ? 'http://localhost:8100' 15 - : 'https://bsky.app' 15 + : 'https://social.shatteredsky.net' 16 16 17 17 export const embedPlayerSources = [ 18 18 'youtube',
+10 -3
src/lib/strings/url-helpers.ts
··· 7 7 import {startUriToStarterPackUri} from '#/lib/strings/starter-pack' 8 8 import {logger} from '#/logger' 9 9 10 - export const BSKY_APP_HOST = 'https://bsky.app' 10 + export const BSKY_APP_HOST = 'https://social.shatteredsky.net' 11 11 const BSKY_TRUSTED_HOSTS = [ 12 + 'social\\.shatteredsky\\.net', 13 + 'shatteredsky\\.net', 12 14 'bsky\\.app', 13 15 'bsky\\.social', 14 16 'blueskyweb\\.xyz', ··· 91 93 } 92 94 93 95 export function isBskyAppUrl(url: string): boolean { 94 - return url.startsWith('https://bsky.app/') 96 + return ( 97 + url.startsWith('https://bsky.app/') || 98 + url.startsWith('https://social.shatteredsky.net/') 99 + ) 95 100 } 96 101 97 102 export function isRelativeUrl(url: string): boolean { ··· 100 105 101 106 export function isBskyRSSUrl(url: string): boolean { 102 107 return ( 103 - (url.startsWith('https://bsky.app/') || isRelativeUrl(url)) && 108 + (url.startsWith('https://bsky.app/') || 109 + url.startsWith('https://social.shatteredsky.net/') || 110 + isRelativeUrl(url)) && 104 111 /\/rss\/?$/.test(url) 105 112 ) 106 113 }
+4 -2
src/screens/Moderation/index.tsx
··· 423 423 <Trans> 424 424 Adult content can only be enabled via the Web at{' '} 425 425 <InlineLinkText 426 - label={_(msg`The Bluesky web application`)} 426 + label={_(msg`The Shattered Sky web application`)} 427 427 to="" 428 428 onPress={evt => { 429 429 evt.preventDefault() 430 - Linking.openURL('https://bsky.app/') 430 + Linking.openURL( 431 + 'https://social.shatteredsky.net/', 432 + ) 431 433 return false 432 434 }}> 433 435 bsky.app