grain.social is a photo sharing platform built on atproto.
1import { BffContext, RouteHandler } from "@bigmoves/bff";
2import { ComponentChildren } from "preact";
3import { Breadcrumb } from "../components/Breadcrumb.tsx";
4import { State } from "../state.ts";
5
6export const handler: RouteHandler = (
7 _req,
8 _params,
9 ctx: BffContext<State>,
10) => {
11 ctx.state.meta = [
12 { title: "Community Guidelines — Grain" },
13 ];
14 return ctx.render(
15 <div className="px-4 py-4">
16 <Breadcrumb
17 items={[{ label: "support", href: "/support" }, {
18 label: "community guidelines",
19 }]}
20 />
21 <h1 className="text-3xl font-bold mb-6 text-zinc-900 dark:text-white">
22 Community Guidelines
23 </h1>
24 <Section title="About Grain Social">
25 <p>
26 Grain Social is a photo-sharing service built on the AT Protocol.
27 These guidelines apply specifically to Grain Social. While the
28 protocol is decentralized and supports many independent services, our
29 focus is on fostering a respectful, creative, and safe experience
30 within our app.
31 </p>
32 </Section>
33
34 <Section title="Our Principles">
35 <ul className="list-disc pl-5 space-y-1">
36 <li>
37 <strong>User choice</strong>: We are committed to empowering users
38 with control over where their data is stored, how their content is
39 moderated, and which algorithms power their feeds (hopefully more
40 options soon!).
41 </li>
42 <li>
43 <strong>Welcoming space</strong>: We aim to build a friendly,
44 inclusive environment where people enjoy sharing and discovering
45 photos.
46 </li>
47 <li>
48 <strong>Evolving standards</strong>: Our policies will adapt over
49 time based on your feedback and the needs of the community.
50 </li>
51 </ul>
52 </Section>
53
54 <Section title="What’s Not Allowed">
55 <p>
56 Don't use Grain Social to break the law, harm others, or disrupt the
57 network. Specifically, do not:
58 </p>
59 <ul className="list-disc pl-5 space-y-1">
60 <li>Promote hate groups or terrorism</li>
61 <li>
62 Share child sexual abuse material or any sexual content involving
63 minors
64 </li>
65 <li>Engage in trafficking, exploitation, or predatory behavior</li>
66 <li>Trade illegal goods or substances</li>
67 <li>Share private personal info without consent</li>
68 <li>Hack, phish, scam, or impersonate others</li>
69 <li>Spam, abuse automation, or manipulate engagement</li>
70 <li>Violate copyrights or trademarks</li>
71 <li>Spread false or misleading election info</li>
72 <li>
73 Evade moderation actions (e.g., ban evasion) by creating new
74 accounts
75 </li>
76 </ul>
77 </Section>
78
79 <Section title="Respect Others">
80 <p>We expect respectful conduct. This includes avoiding:</p>
81 <ul className="list-disc pl-5 space-y-1">
82 <li>Harassment, bullying, or targeted abuse</li>
83 <li>Hate speech or extremist content</li>
84 <li>Threats of violence or glorification of harm</li>
85 <li>Promotion of self-harm or suicide</li>
86 <li>Graphic violence or non-consensual sexual content</li>
87 <li>Misleading impersonation of individuals or organizations</li>
88 </ul>
89 </Section>
90
91 <Section title="Reporting Violations">
92 <p>
93 Help us keep the community safe. You can report photos, galleries, or
94 accounts directly through the app (soon!) or by contacting us at{" "}
95 <a
96 href="mailto:support@grain.social"
97 className="text-sky-500 underline hover:underline"
98 >
99 support@grain.social
100 </a>
101 . Our moderation team will review and take action where needed.
102 Reports may consider off-platform context when relevant.
103 </p>
104 </Section>
105 </div>,
106 );
107};
108
109type SectionProps = {
110 title: string;
111 children: ComponentChildren;
112};
113
114const Section = ({ title, children }: SectionProps) => (
115 <section className="mb-8">
116 <h2 className="text-xl font-bold mb-2 text-zinc-800 dark:text-zinc-100">
117 {title}
118 </h2>
119 <div className="space-y-2 text-zinc-700 dark:text-zinc-300">
120 {children}
121 </div>
122 </section>
123);