an independent Bluesky client using Constellation, PDS Queries, and other services
reddwarf.app
frontend
spa
bluesky
reddwarf
microcosm
client
app
1// please change the branding if you are not it hosting on reddwarf.app
2export const HOST_MAIN_TITLE = "Red Dwarf" // large text in branding
3export const HOST_SUB_TITLE = " .app" // smaller text in branding
4export const HOST_TITLE = HOST_MAIN_TITLE + HOST_SUB_TITLE // composite used in paragraphs
5// also replace favicon files and defaultpfp.png and check LogoSvg.tsx
6export const HOST_LOGO_USE_FAVICON = false; // ignores LogoSvg.tsx (recolorable svg) for a static image (the favicon)
7export const HOST_DEFAULT_HUE = 28; // default is 28 for red. mod 360. 294 is a nice purple
8export const HOST_HERO = "/sunset.jpg" // path to the "banner" image of the instance
9export const HOST_ADMIN = "did:plc:tufumi46dykq4fzwtp2ur6kx" // did of the owner/admin, does not give special perms
10export const HOST_DESCRIPTION = "The official flagship hosted Red Dwarf instance, hosted on reddwarf.app, running the latest updates and features" // short 1 sentence description
11/**
12 * --- RED DWARF POLICY.TS — MARKDOWN FLAVOR ---
13 *
14 * This file uses a deliberately minimal Markdown subset.
15 *
16 * Supported syntax:
17 * - Two consecutive line breaks create a new paragraph
18 * - `##` denotes a collapsible section heading
19 * - links via [link text](link url)
20 * - Self-closing predefined components (e.g. `<PolicyViewer />`)
21 *
22 * REQUIRED COMPONENTS (strictly one of each):
23 * - <PolicyViewer />
24 *
25 * NOTE:
26 * If the app detects that any required custom component is missing,
27 * the application will refuse to run. Treat this file as critical.
28 */
29export const HOST_ABOUT_MARKDOWN = `
30## About this instance
31
32reddwarf.app is the flagship hosted instance of Red Dwarf, a Bluesky application built to provide an independent social experience.
33This hosted instance mandates Bluesky Moderation to limit moderation scope and keep resources focused on developing Red Dwarf software.
34
35
36## About Red Dwarf
37
38Red Dwarf is a Bluesky client that does not depend on Bluesky’s AppView servers.
39
40It preserves authoritative independence by fetching records directly from each user’s PDS (via Slingshot)
41and reconstructing relationships through backlinks (via Constellation),
42while optionally using AppView as an optimization layer when available.
43
44## Hosting Your Own Instance
45
46Red Dwarf is open source. You can host your own instance specifically tailored to your community.
47Hosting your own instance gives you full control over policy, branding, and additional features.
48
49Repository: [https://tangled.org/whey.party/red-dwarf](https://tangled.org/whey.party/red-dwarf)
50
51Instructions for setup, configuration, and labeler policies are included in the repository.
52
53## RedDwarf.app Policy
54
55<PolicyViewer />
56`
57
58export const HOST_UNAUTHED_DEFAULT_FEEDS = [
59 "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.generator/whats-hot"
60]
61
62export const HOST_LOGIN_BLURB = "Experience Bluesky under a different light" //todo dont be corny
63export const HOST_SIGNUP_PDS = false // false-able string
64
65// very important. if this is empty the app will refuse to load anything
66// because this powers all the labels in the app (assuming youre using the newer useAutoLabels and not useModeration)
67export const HOST_LABELMERGE = "https://labelmerge.reddwarf.app"
68
69
70// forced label providers
71// applies to everyone
72export const FORCED_LABELER_DIDS = [
73 "did:plc:ar7c4by46qjdydhdevvrndac" // bluesky moderation
74];
75
76
77
78// unauthed forced label policy
79// hides some content only when not logged in
80// needs labelers to be set in FORCED_LABELER_DIDS
81// TODO: add separate unauthed_forced_labeler_dids later
82
83export const UNAUTHED_FORCE_WARN_LABELS = new Set([
84 "porn",
85 "sexual",
86 "graphic-media",
87 "nudity",
88 "nsfl",
89 "gore",
90 "!no-unauthenticated",
91 "illicit",
92 "self-harm",
93 "sensitive",
94]);
95
96export const UNAUTHED_PREVENT_OPENING_WARNS = true;
97
98
99
100// forced label policy
101// hides content labeled with FORCE_HIDE_LABELS
102// needs labelers to be set in FORCED_LABELER_DIDS and FORCE_HIDE_LABELS_WHITELISTED_SOURCE
103
104export const FORCE_HIDE_LABELS_WHITELISTED_SOURCE = new Set([
105 "did:plc:ar7c4by46qjdydhdevvrndac" // bluesky moderation
106])
107
108export const FORCE_HIDE_LABELS = new Set([
109 "!takedown",
110 "!hide",
111]);
112
113
114
115// todo generate manifest.json and index.html from this file