Monorepo for wisp.place. A static site hosting service built on top of the AT Protocol.
wisp.place
1import { createRoot } from 'react-dom/client'
2import Layout from '@public/layouts'
3import { Button } from '@public/components/ui/button'
4import { Card } from '@public/components/ui/card'
5import { ArrowLeft, Shield, AlertCircle, CheckCircle, Scale } from 'lucide-react'
6
7function AcceptableUsePage() {
8 return (
9 <div className="min-h-screen bg-background">
10 {/* Header */}
11 <header className="border-b border-border/40 bg-background/80 backdrop-blur-sm sticky top-0 z-50">
12 <div className="container mx-auto px-4 py-4 flex items-center justify-between">
13 <div className="flex items-center gap-2">
14 <img src="/transparent-full-size-ico.png" alt="wisp.place" className="w-8 h-8" />
15 <span className="text-xl font-semibold text-foreground">
16 wisp.place
17 </span>
18 </div>
19 <Button
20 variant="ghost"
21 size="sm"
22 onClick={() => window.location.href = '/'}
23 >
24 <ArrowLeft className="w-4 h-4 mr-2" />
25 Back to Home
26 </Button>
27 </div>
28 </header>
29
30 {/* Hero Section */}
31 <div className="bg-gradient-to-b from-accent/10 to-background border-b border-border/40">
32 <div className="container mx-auto px-4 py-16 max-w-4xl text-center">
33 <div className="inline-flex items-center justify-center w-16 h-16 rounded-full bg-accent/20 mb-6">
34 <Shield className="w-8 h-8 text-accent" />
35 </div>
36 <h1 className="text-4xl md:text-5xl font-bold mb-4">Acceptable Use Policy</h1>
37 <div className="flex items-center justify-center gap-6 text-sm text-muted-foreground">
38 <div className="flex items-center gap-2">
39 <span className="font-medium">Effective:</span>
40 <span>November 10, 2025</span>
41 </div>
42 <div className="h-4 w-px bg-border"></div>
43 <div className="flex items-center gap-2">
44 <span className="font-medium">Last Updated:</span>
45 <span>November 10, 2025</span>
46 </div>
47 </div>
48 </div>
49 </div>
50
51 {/* Content */}
52 <div className="container mx-auto px-4 py-12 max-w-4xl">
53 <article className="space-y-12">
54 {/* Our Philosophy */}
55 <section>
56 <h2 className="text-3xl font-bold mb-6 text-foreground">Our Philosophy</h2>
57 <div className="space-y-4 text-lg leading-relaxed text-muted-foreground">
58 <p>
59 wisp.place exists to give you a corner of the internet that's truly yours—a place to create, experiment, and express yourself freely. We believe in the open web and the fundamental importance of free expression. We're not here to police your thoughts, moderate your aesthetics, or judge your taste.
60 </p>
61 <p>
62 That said, we're also real people running real servers in real jurisdictions (the United States and the Netherlands), and there are legal and practical limits to what we can host. This policy aims to be as permissive as possible while keeping the lights on and staying on the right side of the law.
63 </p>
64 </div>
65 </section>
66
67 {/* What You Can Do */}
68 <Card className="bg-green-500/5 border-green-500/20 p-8">
69 <div className="flex items-start gap-4">
70 <div className="flex-shrink-0">
71 <CheckCircle className="w-8 h-8 text-green-500" />
72 </div>
73 <div className="space-y-4">
74 <h2 className="text-3xl font-bold text-foreground">What You Can Do</h2>
75 <div className="space-y-4 text-lg leading-relaxed text-muted-foreground">
76 <p>
77 <strong className="text-green-600 dark:text-green-400">Almost anything.</strong> Seriously. Build weird art projects. Write controversial essays. Create spaces that would make corporate platforms nervous. Express unpopular opinions. Make things that are strange, provocative, uncomfortable, or just plain yours.
78 </p>
79 <p>
80 We support creative and personal expression in all its forms, including adult content, political speech, counter-cultural work, and experimental projects.
81 </p>
82 </div>
83 </div>
84 </div>
85 </Card>
86
87 {/* What You Can't Do */}
88 <section>
89 <div className="flex items-center gap-3 mb-6">
90 <AlertCircle className="w-8 h-8 text-red-500" />
91 <h2 className="text-3xl font-bold text-foreground">What You Can't Do</h2>
92 </div>
93
94 <div className="space-y-8">
95 <Card className="p-6 border-2">
96 <h3 className="text-2xl font-semibold mb-4 text-foreground">Illegal Content</h3>
97 <p className="text-muted-foreground mb-4">
98 Don't host content that's illegal in the United States or the Netherlands. This includes but isn't limited to:
99 </p>
100 <ul className="space-y-3 text-muted-foreground">
101 <li className="flex items-start gap-3">
102 <span className="text-red-500 mt-1">•</span>
103 <span><strong>Child sexual abuse material (CSAM)</strong> involving real minors in any form</span>
104 </li>
105 <li className="flex items-start gap-3">
106 <span className="text-red-500 mt-1">•</span>
107 <span><strong>Realistic or AI-generated depictions</strong> of minors in sexual contexts, including photorealistic renders, deepfakes, or AI-generated imagery</span>
108 </li>
109 <li className="flex items-start gap-3">
110 <span className="text-red-500 mt-1">•</span>
111 <span><strong>Non-consensual intimate imagery</strong> (revenge porn, deepfakes, hidden camera footage, etc.)</span>
112 </li>
113 <li className="flex items-start gap-3">
114 <span className="text-red-500 mt-1">•</span>
115 <span>Content depicting or facilitating human trafficking, sexual exploitation, or sexual violence</span>
116 </li>
117 <li className="flex items-start gap-3">
118 <span className="text-red-500 mt-1">•</span>
119 <span>Instructions for manufacturing explosives, biological weapons, or other instruments designed for mass harm</span>
120 </li>
121 <li className="flex items-start gap-3">
122 <span className="text-red-500 mt-1">•</span>
123 <span>Content that facilitates imminent violence or terrorism</span>
124 </li>
125 <li className="flex items-start gap-3">
126 <span className="text-red-500 mt-1">•</span>
127 <span>Stolen financial information, credentials, or personal data used for fraud</span>
128 </li>
129 </ul>
130 </Card>
131
132 <Card className="p-6 border-2">
133 <h3 className="text-2xl font-semibold mb-4 text-foreground">Intellectual Property Violations</h3>
134 <div className="space-y-4 text-muted-foreground">
135 <p>
136 Don't host content that clearly violates someone else's copyright, trademark, or other intellectual property rights. We're required to respond to valid DMCA takedown notices.
137 </p>
138 <p>
139 We understand that copyright law is complicated and sometimes ridiculous. We're not going to proactively scan your site or nitpick over fair use. But if we receive a legitimate legal complaint, we'll have to act on it.
140 </p>
141 </div>
142 </Card>
143
144 <Card className="p-6 border-2 border-red-500/30 bg-red-500/5">
145 <h3 className="text-2xl font-semibold mb-4 text-foreground">Hate Content</h3>
146 <div className="space-y-4 text-muted-foreground">
147 <p>
148 You can express controversial ideas. You can be offensive. You can make people uncomfortable. But pure hate—content that exists solely to dehumanize, threaten, or incite violence against people based on race, ethnicity, religion, gender, sexual orientation, disability, or similar characteristics—isn't welcome here.
149 </p>
150 <p>
151 There's a difference between "I have deeply unpopular opinions about X" and "People like X should be eliminated." The former is protected expression. The latter isn't.
152 </p>
153 <div className="bg-background/50 border-l-4 border-red-500 p-4 rounded">
154 <p className="font-medium text-foreground">
155 <strong>A note on enforcement:</strong> While we're generally permissive and believe in giving people the benefit of the doubt, hate content is where we draw a hard line. I will be significantly more aggressive in moderating this type of content than anything else on this list. If your site exists primarily to spread hate or recruit people into hateful ideologies, you will be removed swiftly and without extensive appeals. This is non-negotiable.
156 </p>
157 </div>
158 </div>
159 </Card>
160
161 <Card className="p-6 border-2">
162 <h3 className="text-2xl font-semibold mb-4 text-foreground">Adult Content Guidelines</h3>
163 <div className="space-y-4 text-muted-foreground">
164 <p>
165 Adult content is allowed. This includes sexually explicit material, erotica, adult artwork, and NSFW creative expression.
166 </p>
167 <p className="font-medium">However:</p>
168 <ul className="space-y-2">
169 <li className="flex items-start gap-3">
170 <span className="text-red-500 mt-1">•</span>
171 <span>No content involving real minors in any sexual context whatsoever</span>
172 </li>
173 <li className="flex items-start gap-3">
174 <span className="text-red-500 mt-1">•</span>
175 <span>No photorealistic, AI-generated, or otherwise realistic depictions of minors in sexual contexts</span>
176 </li>
177 <li className="flex items-start gap-3">
178 <span className="text-green-500 mt-1">•</span>
179 <span>Clearly stylized drawings and written fiction are permitted, provided they remain obviously non-photographic in nature</span>
180 </li>
181 <li className="flex items-start gap-3">
182 <span className="text-red-500 mt-1">•</span>
183 <span>No non-consensual content (revenge porn, voyeurism, etc.)</span>
184 </li>
185 <li className="flex items-start gap-3">
186 <span className="text-red-500 mt-1">•</span>
187 <span>No content depicting illegal sexual acts (bestiality, necrophilia, etc.)</span>
188 </li>
189 <li className="flex items-start gap-3">
190 <span className="text-yellow-500 mt-1">•</span>
191 <span>Adult content should be clearly marked as such if discoverable through public directories or search</span>
192 </li>
193 </ul>
194 </div>
195 </Card>
196
197 <Card className="p-6 border-2">
198 <h3 className="text-2xl font-semibold mb-4 text-foreground">Malicious Technical Activity</h3>
199 <p className="text-muted-foreground mb-4">Don't use your site to:</p>
200 <ul className="space-y-2 text-muted-foreground">
201 <li className="flex items-start gap-3">
202 <span className="text-red-500 mt-1">•</span>
203 <span>Distribute malware, viruses, or exploits</span>
204 </li>
205 <li className="flex items-start gap-3">
206 <span className="text-red-500 mt-1">•</span>
207 <span>Conduct phishing or social engineering attacks</span>
208 </li>
209 <li className="flex items-start gap-3">
210 <span className="text-red-500 mt-1">•</span>
211 <span>Launch DDoS attacks or network abuse</span>
212 </li>
213 <li className="flex items-start gap-3">
214 <span className="text-red-500 mt-1">•</span>
215 <span>Mine cryptocurrency without explicit user consent</span>
216 </li>
217 <li className="flex items-start gap-3">
218 <span className="text-red-500 mt-1">•</span>
219 <span>Scrape, spam, or abuse other services</span>
220 </li>
221 </ul>
222 </Card>
223 </div>
224 </section>
225
226 {/* Our Approach to Enforcement */}
227 <section>
228 <div className="flex items-center gap-3 mb-6">
229 <Scale className="w-8 h-8 text-accent" />
230 <h2 className="text-3xl font-bold text-foreground">Our Approach to Enforcement</h2>
231 </div>
232 <div className="space-y-6">
233 <div className="space-y-4 text-lg leading-relaxed text-muted-foreground">
234 <p>
235 <strong>We actively monitor for obvious violations.</strong> Not to censor your creativity or police your opinions, but to catch the clear-cut stuff that threatens the service's existence and makes this a worse place for everyone. We're looking for the blatantly illegal, the obviously harmful—the stuff that would get servers seized and communities destroyed.
236 </p>
237 <p>
238 We're not reading your blog posts looking for wrongthink. We're making sure this platform doesn't become a haven for the kind of content that ruins good things.
239 </p>
240 </div>
241
242 <Card className="p-6 bg-muted/30">
243 <p className="font-semibold mb-3 text-foreground">We take action when:</p>
244 <ol className="space-y-2 text-muted-foreground">
245 <li className="flex items-start gap-3">
246 <span className="font-bold text-accent">1.</span>
247 <span>We identify content that clearly violates this policy during routine monitoring</span>
248 </li>
249 <li className="flex items-start gap-3">
250 <span className="font-bold text-accent">2.</span>
251 <span>We receive a valid legal complaint (DMCA, court order, etc.)</span>
252 </li>
253 <li className="flex items-start gap-3">
254 <span className="font-bold text-accent">3.</span>
255 <span>Someone reports content that violates this policy and we can verify the violation</span>
256 </li>
257 <li className="flex items-start gap-3">
258 <span className="font-bold text-accent">4.</span>
259 <span>Your site is causing technical problems for the service or other users</span>
260 </li>
261 </ol>
262 </Card>
263
264 <Card className="p-6 bg-muted/30">
265 <p className="font-semibold mb-3 text-foreground">When we do need to take action, we'll try to:</p>
266 <ul className="space-y-2 text-muted-foreground">
267 <li className="flex items-start gap-3">
268 <span className="text-accent">•</span>
269 <span>Contact you first when legally and practically possible</span>
270 </li>
271 <li className="flex items-start gap-3">
272 <span className="text-accent">•</span>
273 <span>Be transparent about what's happening and why</span>
274 </li>
275 <li className="flex items-start gap-3">
276 <span className="text-accent">•</span>
277 <span>Give you an opportunity to address the issue if appropriate</span>
278 </li>
279 </ul>
280 </Card>
281
282 <p className="text-muted-foreground">
283 For serious or repeated violations, we may suspend or terminate your account.
284 </p>
285 </div>
286 </section>
287
288 {/* Regional Compliance */}
289 <Card className="p-6 bg-blue-500/5 border-blue-500/20">
290 <h2 className="text-2xl font-bold mb-4 text-foreground">Regional Compliance</h2>
291 <p className="text-muted-foreground">
292 Our servers are located in the United States and the Netherlands. Content hosted on wisp.place must comply with the laws of both jurisdictions. While we aim to provide broad creative freedom, these legal requirements are non-negotiable.
293 </p>
294 </Card>
295
296 {/* Changes to This Policy */}
297 <section>
298 <h2 className="text-2xl font-bold mb-4 text-foreground">Changes to This Policy</h2>
299 <p className="text-muted-foreground">
300 We may update this policy as legal requirements or service realities change. If we make significant changes, we'll notify active users.
301 </p>
302 </section>
303
304 {/* Questions or Reports */}
305 <section>
306 <h2 className="text-2xl font-bold mb-4 text-foreground">Questions or Reports</h2>
307 <p className="text-muted-foreground">
308 If you have questions about this policy or need to report a violation, contact us at{' '}
309 <a
310 href="mailto:contact@wisp.place"
311 className="text-accent hover:text-accent/80 transition-colors font-medium"
312 >
313 contact@wisp.place
314 </a>
315 .
316 </p>
317 </section>
318
319 {/* Final Message */}
320 <Card className="p-8 bg-accent/10 border-accent/30 border-2">
321 <p className="text-lg leading-relaxed text-foreground">
322 <strong>Remember:</strong> This policy exists to keep the service running and this community healthy, not to limit your creativity. When in doubt, ask yourself: "Is this likely to get real-world authorities knocking on doors or make this place worse for everyone?" If the answer is yes, it probably doesn't belong here. Everything else? Go wild.
323 </p>
324 </Card>
325 </article>
326 </div>
327
328 {/* Footer */}
329 <footer className="border-t border-border/40 bg-muted/20 mt-12">
330 <div className="container mx-auto px-4 py-8">
331 <div className="text-center text-sm text-muted-foreground">
332 <p>
333 Built by{' '}
334 <a
335 href="https://bsky.app/profile/nekomimi.pet"
336 target="_blank"
337 rel="noopener noreferrer"
338 className="text-accent hover:text-accent/80 transition-colors font-medium"
339 >
340 @nekomimi.pet
341 </a>
342 {' • '}
343 Contact:{' '}
344 <a
345 href="mailto:contact@wisp.place"
346 className="text-accent hover:text-accent/80 transition-colors font-medium"
347 >
348 contact@wisp.place
349 </a>
350 {' • '}
351 Legal/DMCA:{' '}
352 <a
353 href="mailto:legal@wisp.place"
354 className="text-accent hover:text-accent/80 transition-colors font-medium"
355 >
356 legal@wisp.place
357 </a>
358 </p>
359 <p className="mt-2">
360 <a
361 href="/acceptable-use"
362 className="text-accent hover:text-accent/80 transition-colors font-medium"
363 >
364 Acceptable Use Policy
365 </a>
366 </p>
367 </div>
368 </div>
369 </footer>
370 </div>
371 )
372}
373
374const root = createRoot(document.getElementById('elysia')!)
375root.render(
376 <Layout className="gap-6">
377 <AcceptableUsePage />
378 </Layout>
379)