an independent Bluesky client using Constellation, PDS Queries, and other services reddwarf.app
frontend spa bluesky reddwarf microcosm client app

initial branding policy configurations

+21 -12
+6
policy.ts
··· 1 + // please change the branding if you are not it hosting on reddwarf.app 2 + export const HOST_TITLE = "Red Dwarf" 3 + // also replace favicon files and defaultpfp.png and check LogoSvg.tsx 4 + // todo generate manifest.json and index.html from this file 5 + // todo have the bottom left and right blurbs on the desktop (should move it to settings for mobile) also customizable 6 + 1 7 export const FORCED_LABELER_DIDS = [ 2 8 "did:plc:ar7c4by46qjdydhdevvrndac" // bluesky moderation 3 9 ];
+5 -4
src/routes/__root.tsx
··· 18 18 import { Toaster } from "sonner"; 19 19 import { KeepAliveOutlet, KeepAliveProvider } from "tanstack-router-keepalive"; 20 20 21 + import { HOST_TITLE } from "~/../policy"; 21 22 import { Composer } from "~/components/Composer"; 22 23 import { DefaultCatchBoundary } from "~/components/DefaultCatchBoundary"; 23 24 import { Import } from "~/components/Import"; ··· 45 46 content: "width=device-width, initial-scale=1", 46 47 }, 47 48 ...seo({ 48 - title: "Red Dwarf", 49 + title: HOST_TITLE, 49 50 description: `Distributed Bluesky Client`, 50 51 }), 51 52 ], ··· 260 261 }} 261 262 /> 262 263 <span className="font-extrabold text-2xl text-gray-900 dark:text-gray-100"> 263 - Red Dwarf{" "} 264 + {HOST_TITLE}{" "} 264 265 {/* <span className="text-gray-500 dark:text-gray-400 text-sm"> 265 266 lite 266 267 </span> */} ··· 663 664 <Login /> 664 665 <div className="flex-1"></div> 665 666 <p className="text-xs text-gray-400 dark:text-gray-500 text-justify mx-4 mb-4"> 666 - Red Dwarf is a Bluesky client that does not rely on any Bluesky API 667 + {HOST_TITLE} is a Bluesky client that does not rely on any Bluesky API 667 668 App Servers. Instead, it uses Microcosm to fetch records directly 668 669 from each users' PDS (via Slingshot) and connect them using 669 670 backlinks (via Constellation) ··· 854 855 }} 855 856 /> 856 857 <span className="font-bold text-lg text-gray-900 dark:text-gray-100"> 857 - Red Dwarf{" "} 858 + {HOST_TITLE}{" "} 858 859 {/* <span className="text-gray-500 dark:text-gray-400 text-sm"> 859 860 lite 860 861 </span> */}
+5 -4
src/routes/search.tsx
··· 4 4 import { useAtom } from "jotai"; 5 5 import { useEffect,useMemo } from "react"; 6 6 7 + import { HOST_TITLE } from "~/../policy"; 7 8 import { Header } from "~/components/Header"; 8 9 import { Import } from "~/components/Import"; 9 10 import { ··· 59 60 }, [lycanExists, authed, lycanReady, refetch]); 60 61 61 62 const maintext = !lycanExists 62 - ? "Sorry we dont have search. But instead, you can load some of these types of content into Red Dwarf:" 63 + ? `Sorry we dont have search. But instead, you can load some of these types of content into ${HOST_TITLE}:` 63 64 : authed 64 65 ? lycanReady 65 - ? "Lycan Search is enabled and ready! Type to search posts you've interacted with in the past. You can also load some of these types of content into Red Dwarf:" 66 - : "Sorry, while Lycan Search is enabled, you are not indexed. Index below please. You can load some of these types of content into Red Dwarf:" 67 - : "Sorry, while Lycan Search is enabled, you are unauthed. Please log in to use Lycan. You can load some of these types of content into Red Dwarf:"; 66 + ? `Lycan Search is enabled and ready! Type to search posts you've interacted with in the past. You can also load some of these types of content into ${HOST_TITLE}:` 67 + : `Sorry, while Lycan Search is enabled, you are not indexed. Index below please. You can load some of these types of content into ${HOST_TITLE}:` 68 + : `Sorry, while Lycan Search is enabled, you are unauthed. Please log in to use Lycan. You can load some of these types of content into ${HOST_TITLE}:`; 68 69 69 70 async function index(opts: { 70 71 agent?: Agent;
+5 -4
src/routes/settings.tsx
··· 3 3 import { Slider, Switch } from "radix-ui"; 4 4 import { useEffect, useState } from "react"; 5 5 6 + import { HOST_TITLE } from "~/../policy"; 6 7 import { Header } from "~/components/Header"; 7 8 import Login from "~/components/Login"; 8 9 import { ··· 89 90 atom={constellationURLAtom} 90 91 title={"Constellation"} 91 92 description={ 92 - "Customize the Constellation instance to be used by Red Dwarf" 93 + "Customize the Constellation instance to be used by " + HOST_TITLE 93 94 } 94 95 init={defaultconstellationURL} 95 96 /> 96 97 <TextInputSetting 97 98 atom={slingshotURLAtom} 98 99 title={"Slingshot"} 99 - description={"Customize the Slingshot instance to be used by Red Dwarf"} 100 + description={"Customize the Slingshot instance to be used by " + HOST_TITLE} 100 101 init={defaultslingshotURL} 101 102 /> 102 103 <TextInputSetting 103 104 atom={imgCDNAtom} 104 105 title={"Image CDN"} 105 106 description={ 106 - "Customize the Constellation instance to be used by Red Dwarf" 107 + "Customize the Constellation instance to be used by " + HOST_TITLE 107 108 } 108 109 init={defaultImgCDN} 109 110 /> 110 111 <TextInputSetting 111 112 atom={videoCDNAtom} 112 113 title={"Video CDN"} 113 - description={"Customize the Slingshot instance to be used by Red Dwarf"} 114 + description={"Customize the Slingshot instance to be used by " + HOST_TITLE} 114 115 init={defaultVideoCDN} 115 116 /> 116 117 <TextInputSetting