Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
mastodon
GitHub Repository: mastodon/joinmastodon
Path: blob/main/data/hosting.ts
1006 views
1
import { ReactElement, SVGProps } from "react"
2
import { defineMessages, MessageDescriptor } from "react-intl"
3
import { StaticImageData } from "next/image"
4
5
import AltStoreLogo from "../public/logos/hosting-partners/altstore.png"
6
import EULogo from "../public/logos/hosting-partners/eu-commission.svg?inline"
7
import FlipboardLogo from "../public/logos/hosting-partners/flipboard.svg?inline"
8
import MediumLogo from "../public/logos/hosting-partners/medium.svg?inline"
9
import SchleswigHolsteinLogo from "../public/logos/hosting-partners/schleswig-holstein.svg?inline"
10
import WikimediaLogo from "../public/logos/hosting-partners/wikimedia.svg?inline"
11
import EmailIcon from "../public/ui/email.svg?inline"
12
import GlobeIcon from "../public/ui/globe.svg?inline"
13
import AnnouncementIcon from "../public/ui/announcement.svg?inline"
14
15
const messages = defineMessages({
16
partnersEuBody: {
17
id: "hosting.partners.eu.body",
18
defaultMessage:
19
"The European Commission runs an official Mastodon server to broaden public engagement across the Fediverse, support European open-source platforms, and provide a privacy-focused channel for official communications.",
20
},
21
partnersSchleswigHolsteinBody: {
22
id: "hosting.partners.schleswig-holstein.body",
23
defaultMessage:
24
"To strengthen public digital services and local collaboration, the German state of Schleswig-Holstein launched social.schleswig-holstein.de — an official, Mastodon server open to state administrations, public-sector companies and non-profits in the region.",
25
},
26
partnersAltStoreBody: {
27
id: "hosting.partners.altstore.body",
28
defaultMessage:
29
"AltStore is a home for apps that push the boundaries of iOS with no jailbreak required. An announcement from the AltStore team is coming soon with more details on our partnership.",
30
},
31
benefitsIdentityTitle: {
32
id: "hosting.benefits.identity.title",
33
defaultMessage: "Your Identity in Every Username",
34
},
35
benefitsIdentityBody: {
36
id: "hosting.benefits.identity.body",
37
defaultMessage:
38
"Each account lives under your domain (for example @[email protected]). Staff, members, or citizens become instantly recognisable and discoverable across the Fediverse, reinforcing organisational identity with every interaction.",
39
},
40
benefitsHostingTitle: {
41
id: "hosting.benefits.hosting.title",
42
defaultMessage: "Data Locality & Compliance",
43
},
44
benefitsHostingBody: {
45
id: "hosting.benefits.hosting.body",
46
defaultMessage:
47
"Decide exactly where your server is hosted, in the EU, or many other approved jurisdictions - so you meet sovereignty, GDPR, or internal policy requirements without compromise.",
48
},
49
benefitsReachTitle: {
50
id: "hosting.benefits.reach.title",
51
defaultMessage: "Reclaim Control of Your Reach and Audience",
52
},
53
benefitsReachBody: {
54
id: "hosting.benefits.reach.body",
55
defaultMessage:
56
"Define your own server rules and moderation standards - with no third-party or outside platform algorithm. You decide how discourse is moderated and how your messages travel.",
57
},
58
stepDomainTitle: {
59
id: "hosting.steps.domain.title",
60
defaultMessage: "Select your domain name",
61
},
62
stepDomainBody: {
63
id: "hosting.steps.domain.body",
64
defaultMessage:
65
"Use your organization’s domain for account handles (for example, @[email protected]). It makes every profile recognisable across the Fediverse and builds trust, just like a custom email address.",
66
},
67
stepSpaceTitle: {
68
id: "hosting.steps.space.title",
69
defaultMessage: "Tailor Your Community Space",
70
},
71
stepSpaceBody: {
72
id: "hosting.steps.space.body",
73
defaultMessage:
74
"Set the look, feel, and rules to fit your organizational identity. You can add a description, set branding and define relevant rules for your server.",
75
},
76
stepTeamTitle: {
77
id: "hosting.steps.team.title",
78
defaultMessage: "Invite & Onboard Your Team",
79
},
80
stepTeamBody: {
81
id: "hosting.steps.team.body",
82
defaultMessage:
83
"The final step is about sending invites, assigning roles if needed, and letting community members set up their profiles. You are ready to post, follow, and connect across the Fediverse.",
84
},
85
})
86
87
export const SalesScheduleLink = "https://tally.so/r/woJ2EX"
88
89
type MessageOrString = string | MessageDescriptor
90
type SVGComponent = (props: SVGProps<SVGSVGElement>) => ReactElement
91
export type ImageOrSvg = StaticImageData | SVGComponent
92
export type CardItem = {
93
title: MessageOrString
94
body: MessageDescriptor
95
image?: ImageOrSvg
96
icon?: SVGComponent
97
}
98
99
export const partnerCards = [
100
{
101
title: "European Commission",
102
body: messages.partnersEuBody,
103
image: EULogo,
104
},
105
{
106
title: "Schleswig-Holstein",
107
body: messages.partnersSchleswigHolsteinBody,
108
image: SchleswigHolsteinLogo,
109
},
110
{
111
title: "AltStore",
112
body: messages.partnersAltStoreBody,
113
image: AltStoreLogo,
114
},
115
] satisfies CardItem[]
116
117
export const benefitsCards = [
118
{
119
title: messages.benefitsIdentityTitle,
120
body: messages.benefitsIdentityBody,
121
icon: EmailIcon,
122
},
123
{
124
title: messages.benefitsHostingTitle,
125
body: messages.benefitsHostingBody,
126
icon: GlobeIcon,
127
},
128
{
129
title: messages.benefitsReachTitle,
130
body: messages.benefitsReachBody,
131
icon: AnnouncementIcon,
132
},
133
] satisfies CardItem[]
134
135
export const stepsCards = [
136
{
137
title: messages.stepDomainTitle,
138
body: messages.stepDomainBody,
139
},
140
{
141
title: messages.stepSpaceTitle,
142
body: messages.stepSpaceBody,
143
},
144
{
145
title: messages.stepTeamTitle,
146
body: messages.stepTeamBody,
147
},
148
] satisfies CardItem[]
149
150
export type LogoItem = Pick<CardItem, "image" | "title">
151
152
export const hostingLogos = [
153
{
154
title: "Medium",
155
image: MediumLogo,
156
},
157
{
158
title: "Flipboard",
159
image: FlipboardLogo,
160
},
161
{
162
title: "Wikimedia",
163
image: WikimediaLogo,
164
},
165
] satisfies LogoItem[]
166
167