Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
mastodon
GitHub Repository: mastodon/joinmastodon
Path: blob/main/pages/verification.tsx
1006 views
1
import Head from "next/head"
2
import Image from "next/legacy/image"
3
import Hero from "../components/Hero"
4
import Layout from "../components/Layout"
5
import { withDefaultStaticProps } from "../utils/defaultStaticProps"
6
import { IconCard } from "../components/IconCard"
7
import LinkButton from "../components/LinkButton"
8
import { useIntl, FormattedMessage } from "react-intl"
9
import verified from "../data/verified"
10
11
import illoProfile from "../public/illustrations/verification_profile.png"
12
import illoEdit from "../public/illustrations/verification_edit.png"
13
14
const Account = ({ name, username, url, image }) => (
15
<a
16
href={url}
17
rel="noopener"
18
className="group flex rounded-lg bg-white p-8 text-gray-0 hover:text-blurple-500"
19
>
20
<div className="relative h-14 w-14 flex-shrink-0 rounded-[50%]">
21
{image && (
22
<Image src={image} alt="" layout="fill" className="rounded-[50%] " />
23
)}
24
</div>
25
26
<div className="truncate px-4">
27
<span className="b1 block truncate !font-bold">{name}</span>
28
<span className="b2 !font-semibold text-blurple-600 group-hover:text-blurple-500">
29
@{username}
30
</span>
31
</div>
32
</a>
33
)
34
35
const Verification = () => {
36
const intl = useIntl()
37
38
return (
39
<Layout>
40
<div dir="ltr" className="[unicode-bidi:plaintext]">
41
<Hero homepage>
42
<div className="b2 mb-4 pt-8 !font-bold uppercase text-nightshade-100">
43
<FormattedMessage
44
id="verification.feature_highlight"
45
defaultMessage="Feature Highlight"
46
/>
47
</div>
48
49
<h1 className="h1 mb-4">
50
<FormattedMessage
51
id="verification.title"
52
defaultMessage="Verification on Mastodon"
53
/>
54
</h1>
55
56
<p className="sh1 mb-11 max-w-[40ch]">
57
<FormattedMessage
58
id="verification.lead"
59
defaultMessage="Verifying your identity on Mastodon is for everyone. Based on open web standards, now and forever free."
60
/>
61
</p>
62
63
<div className="flex justify-center gap-12">
64
<LinkButton size="large" href="/apps">
65
<FormattedMessage
66
id="home.get_the_app"
67
defaultMessage="Get an app"
68
/>
69
</LinkButton>
70
71
<LinkButton size="large" href="/servers" light borderless>
72
<FormattedMessage
73
id="home.create_account"
74
defaultMessage="Create account"
75
/>
76
</LinkButton>
77
</div>
78
</Hero>
79
80
<div className="full-width-bg">
81
<div className="full-width-bg__inner">
82
<section className="grid grid-cols-12 gap-gutter pb-20">
83
<div className="col-span-12 grid gap-gutter md:grid-cols-3 xl:col-span-10 xl:col-start-2">
84
<IconCard
85
title={
86
<FormattedMessage
87
id="verification.why.privacy.title"
88
defaultMessage="Privacy-friendly"
89
/>
90
}
91
icon="privacy"
92
copy={
93
<FormattedMessage
94
id="verification.why.privacy.body"
95
defaultMessage="You do not need to submit your documents anywhere, so there is no chance of them being leaked."
96
/>
97
}
98
/>
99
100
<IconCard
101
title={
102
<FormattedMessage
103
id="verification.why.equality.title"
104
defaultMessage="For everyone"
105
/>
106
}
107
icon="safe"
108
copy={
109
<FormattedMessage
110
id="verification.why.equality.body"
111
defaultMessage="You do not have to be a celebrity to verify your identity. You just need to have a website or web page."
112
/>
113
}
114
/>
115
116
<IconCard
117
title={
118
<FormattedMessage
119
id="verification.why.decentralization.title"
120
defaultMessage="Decentralized"
121
/>
122
}
123
icon="decentralized"
124
copy={
125
<FormattedMessage
126
id="verification.why.decentralization.body"
127
defaultMessage="There is no need to trust a central authority. The verification can be manually confirmed anytime."
128
/>
129
}
130
/>
131
</div>
132
</section>
133
</div>
134
</div>
135
136
<div className="full-width-bg bg-gray-5">
137
<div className="full-width-bg__inner">
138
<section className="pt-14 pb-[4.5rem] md:grid md:grid-cols-2 md:items-center md:gap-gutter xl:grid-cols-12">
139
<div className="order-2 row-span-full xl:col-span-5 xl:col-start-8">
140
<Image src={illoProfile} alt="" />
141
</div>
142
143
<div className="row-span-full xl:col-span-5 xl:col-start-2">
144
<h2 className="h4 md:h3 mb-2 md:mb-5">
145
<FormattedMessage
146
id="verification.features.no_badge.title"
147
defaultMessage="There is no blue badge"
148
/>
149
</h2>
150
<p className="sh1 mb-8 text-gray-1">
151
<FormattedMessage
152
id="verification.features.no_badge.body"
153
defaultMessage={`Identity is not a yes or no question. There are few truly unique names in the world, so why should only the famous ones get a "yes"? At Mastodon, we don't rely on legal names and blue badges. Instead, we rely on the fact that people can be identified by their official websites.`}
154
/>
155
</p>
156
</div>
157
</section>
158
</div>
159
</div>
160
161
<div className="full-width-bg">
162
<div className="full-width-bg__inner">
163
<section className="pt-14 pb-[4.5rem] md:grid md:grid-cols-2 md:items-center md:gap-gutter xl:grid-cols-12">
164
<div className="row-span-full xl:col-span-5 xl:col-start-2">
165
<Image src={illoEdit} alt="" />
166
</div>
167
168
<div className="row-span-full xl:col-span-5 xl:col-start-8">
169
<h2 className="h4 md:h3 mb-2 md:mb-5">
170
<FormattedMessage
171
id="verification.features.how_to.title"
172
defaultMessage="Here's how"
173
/>
174
</h2>
175
<p className="sh1 mb-8 text-gray-1">
176
<FormattedMessage
177
id="verification.features.how_to.body"
178
defaultMessage={`Put a link to your Mastodon profile on your website or webpage. The important part is that the link has to have a <code>rel="me"</code> attribute on it. Then edit your Mastodon profile and put the address of your website or web page in one of your four profile fields. Save your profile, that's it!`}
179
values={{
180
code: (text) => (
181
<code className="font-mono font-medium text-blurple-600">
182
{text}
183
</code>
184
),
185
}}
186
/>
187
</p>
188
</div>
189
</section>
190
</div>
191
</div>
192
193
<div className="full-width-bg -mb-footer-offset bg-gray-5 pb-footer-offset">
194
<div className="full-width-bg__inner">
195
<section className="grid grid-cols-12 gap-gutter py-20">
196
<div className="col-span-12 lg:col-span-10 lg:col-start-2">
197
<h3 className="h3 pb-6 text-center">
198
<FormattedMessage
199
id="verification.examples.title"
200
defaultMessage="In the wild"
201
/>
202
</h3>
203
204
<p className="b1 mb-16 text-center ">
205
<FormattedMessage
206
id="verification.examples.lead"
207
defaultMessage="Anyone can use verification on Mastodon, but here are some of the well-known names that do…"
208
/>
209
</p>
210
211
<div className="grid grid-cols-[repeat(auto-fill,minmax(20rem,1fr))] gap-1">
212
{verified.map(({ url, ...other }) => (
213
<Account key={url} url={url} {...other} />
214
))}
215
</div>
216
</div>
217
</section>
218
</div>
219
</div>
220
</div>
221
222
<Head>
223
<title>
224
{`${intl.formatMessage({
225
id: "verification.page_title",
226
defaultMessage: "Verification",
227
})} - Mastodon`}
228
</title>
229
230
<meta
231
property="og:title"
232
content={intl.formatMessage({
233
id: "verification.page_title",
234
defaultMessage: "Verification",
235
})}
236
/>
237
238
<meta
239
name="description"
240
content={intl.formatMessage({
241
id: "verification.page_description",
242
defaultMessage: "Learn how to get verified on Mastodon",
243
})}
244
/>
245
246
<meta
247
name="og:description"
248
content={intl.formatMessage({
249
id: "verification.page_description",
250
defaultMessage: "Learn how to get verified on Mastodon",
251
})}
252
/>
253
</Head>
254
</Layout>
255
)
256
}
257
258
export default Verification
259
260
export const getStaticProps = withDefaultStaticProps()
261
262