Add Resetera and pubkey fingerprint, and block bots
This commit is contained in:
parent
3804cbe39e
commit
5e368d6e34
11 changed files with 136 additions and 184 deletions
4
.vscode/settings.json
vendored
4
.vscode/settings.json
vendored
|
|
@ -11,6 +11,8 @@
|
|||
"[typescript]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"prettier.requireConfig": true,
|
||||
"prettier.configPath": ".prettierrc.mjs",
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||
"editor.formatOnSave": true
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import { defineConfig, envField } from "astro/config";
|
||||
import tailwindIntegration from "@astrojs/tailwind";
|
||||
import htaccessIntegration from "astro-htaccess";
|
||||
import { AI_BOTS } from "./src/data/ai_bots";
|
||||
|
||||
// https://astro.build/config
|
||||
export default defineConfig({
|
||||
|
|
@ -11,6 +12,15 @@ export default defineConfig({
|
|||
}),
|
||||
htaccessIntegration({
|
||||
generateHtaccessFile: import.meta.env.APACHE_CONFIG === "true",
|
||||
customRules: [
|
||||
// Block AI bots
|
||||
"<IfModule mod_rewrite.c>",
|
||||
" RewriteEngine on",
|
||||
" RewriteBase /",
|
||||
` RewriteCond %{HTTP_USER_AGENT} ${AI_BOTS.map((bot) => `^${bot}$`).join("|")} [NC]`,
|
||||
" RewriteRule ^ – [F]",
|
||||
"</IfModule>",
|
||||
],
|
||||
redirects: [
|
||||
{
|
||||
match: /^\/@\/(aryion|ekas?(portal)?)\b/,
|
||||
|
|
@ -124,6 +134,10 @@ export default defineConfig({
|
|||
match: /^\/@\/redd\.?it\b/,
|
||||
url: "https://www.reddit.com/user/BadManners_",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/resetera\b/,
|
||||
url: "https://www.resetera.com/members/bad-manners.181209/",
|
||||
},
|
||||
{
|
||||
match: /^\/@\/signal\b/,
|
||||
url: "https://signal.me/#eu/ytt_rk0fFmAB2JAW-x2PbUiJyc_H3kYmfL_Pq4QNh5QIDsiFtjdFHaqFRs1D36tB",
|
||||
|
|
|
|||
|
|
@ -1,2 +0,0 @@
|
|||
User-agent: *
|
||||
Disallow: .htaccess
|
||||
|
|
@ -1 +1 @@
|
|||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ3QAZd3E95gxef2kiXppWa/xhcwBtnKMZJaW6s4d7Tm Bad Manners <me@badmanners.xyz>
|
||||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ3QAZd3E95gxef2kiXppWa/xhcwBtnKMZJaW6s4d7Tm Bad Manners <me@badmanners.xyz>
|
||||
1
public/ssh.pub.fingerprint
Normal file
1
public/ssh.pub.fingerprint
Normal file
|
|
@ -0,0 +1 @@
|
|||
SHA256:KdH6YixZQlyFZvTw0M60qVqei4ds4sfomVikMbw0n6E
|
||||
15
src/components/icons/brands/IconResetera.astro
Normal file
15
src/components/icons/brands/IconResetera.astro
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
import SVGIcon from "../SVGIcon.astro";
|
||||
|
||||
type Props = {
|
||||
width: string;
|
||||
height: string;
|
||||
class?: string;
|
||||
};
|
||||
---
|
||||
|
||||
<SVGIcon {...Astro.props} viewBox="0 0 24 24">
|
||||
<path
|
||||
d="M 0,4.0461603 V 24 h 10.489299 l 4.733529,-4.733529 -0.03777,-0.03525 -4.695762,-4.695762 v 4.695762 H 4.7687789 V 10.489299 8.8149392 4.7687789 h 4.0461603 1.6743598 8.741922 v 5.7205201 h -4.695762 l 4.695762,4.695762 0.03525,0.03777 L 24,10.489299 V 0 H 4.0461603 0 Z"
|
||||
></path>
|
||||
</SVGIcon>
|
||||
|
|
@ -18,6 +18,7 @@ export { default as IconMastodon } from "./IconMastodon.astro";
|
|||
export { default as IconNeocities } from "./IconNeocities.astro";
|
||||
export { default as IconPicarto } from "./IconPicarto.astro";
|
||||
export { default as IconReddit } from "./IconReddit.astro";
|
||||
export { default as IconResetera } from "./IconResetera.astro";
|
||||
export { default as IconSignal } from "./IconSignal.astro";
|
||||
export { default as IconSoFurry } from "./IconSoFurry.astro";
|
||||
export { default as IconSteam } from "./IconSteam.astro";
|
||||
|
|
|
|||
38
src/data/ai_bots.ts
Normal file
38
src/data/ai_bots.ts
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
export const AI_BOTS = [
|
||||
"AI2Bot",
|
||||
"Ai2Bot-Dolma",
|
||||
"Amazonbot",
|
||||
"Applebot",
|
||||
"Applebot-Extended",
|
||||
"Bytespider",
|
||||
"CCBot",
|
||||
"ChatGPT-User",
|
||||
"Claude-Web",
|
||||
"ClaudeBot",
|
||||
"Diffbot",
|
||||
"FacebookBot",
|
||||
"FriendlyCrawler",
|
||||
"GPTBot",
|
||||
"Google-Extended",
|
||||
"GoogleOther",
|
||||
"GoogleOther-Image",
|
||||
"GoogleOther-Video",
|
||||
"ICC-Crawler",
|
||||
"ImagesiftBot",
|
||||
"Meta-ExternalAgent",
|
||||
"Meta-ExternalFetcher",
|
||||
"OAI-SearchBot",
|
||||
"PerplexityBot",
|
||||
"PetalBot",
|
||||
"Scrapy",
|
||||
"Timpibot",
|
||||
"VelenPublicWebCrawler",
|
||||
"Webzio-Extended",
|
||||
"YouBot",
|
||||
"anthropic-ai",
|
||||
"cohere-ai",
|
||||
"facebookexternalhit",
|
||||
"img2dataset",
|
||||
"omgili",
|
||||
"omgilibot",
|
||||
] as const;
|
||||
|
|
@ -23,6 +23,7 @@ import {
|
|||
IconNeocities,
|
||||
IconPicarto,
|
||||
IconReddit,
|
||||
IconResetera,
|
||||
IconSignal,
|
||||
IconSoFurry,
|
||||
IconSteam,
|
||||
|
|
@ -79,11 +80,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
data-clipboard={Astro.site}
|
||||
data-noun="URL"
|
||||
>
|
||||
<IconLink
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconLink height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="sr-only select-none">https://badmanners.xyz</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -98,11 +95,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
aria-label="Main gallery"
|
||||
data-age-restricted
|
||||
>
|
||||
<IconBriefcase
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconBriefcase height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="sr-only select-none">Gallery on https://gallery.badmanners.xyz</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -114,11 +107,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="Pronouns (he/they)"
|
||||
>
|
||||
<IconCommentDots
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconCommentDots height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">@BadManners on pronouns.cc</p>
|
||||
<p class="p-pronoun hidden">he/him/his/his/himself</p>
|
||||
<p class="p-pronoun hidden">they/them/their/theirs/themself</p>
|
||||
|
|
@ -134,11 +123,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
data-clipboard="me@badmanners.xyz"
|
||||
data-noun="E-mail address"
|
||||
>
|
||||
<IconEnvelope
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconEnvelope height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="sr-only select-none">me@badmanners.xyz</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -150,11 +135,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="Bluesky"
|
||||
>
|
||||
<IconBluesky
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconBluesky height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">@badmanners.xyz on Bluesky</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -166,11 +147,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="Codeberg"
|
||||
>
|
||||
<IconCodeberg
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconCodeberg height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">BadManners on Codeberg</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -182,11 +159,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="Cohost"
|
||||
>
|
||||
<IconCohost
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconCohost height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">BadManners on Cohost</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -199,11 +172,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
data-noun="Discord username"
|
||||
aria-disabled="true"
|
||||
>
|
||||
<IconDiscord
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconDiscord height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">badmanners on Discord</p>
|
||||
</button>
|
||||
</li>
|
||||
|
|
@ -215,11 +184,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="Eka's Portal"
|
||||
>
|
||||
<IconEkasPortal
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconEkasPortal height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">BadManners on Eka's Portal</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -231,11 +196,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="Fur Affinity"
|
||||
>
|
||||
<IconFurAffinity
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconFurAffinity height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">BadManners on Fur Affinity</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -247,11 +208,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="GitGud"
|
||||
>
|
||||
<IconGitGud
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconGitGud height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">BadMannersXYZ on GitGud</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -263,11 +220,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="GitHub"
|
||||
>
|
||||
<IconGithub
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconGithub height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">BadMannersXYZ on GitHub</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -279,11 +232,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="GitLab"
|
||||
>
|
||||
<IconGitlab
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconGitlab height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">Bad_Manners on GitLab</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -297,11 +246,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
data-clipboard="badmanners.vore@gmail.com"
|
||||
data-noun="Gmail address"
|
||||
>
|
||||
<IconGoogle
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconGoogle height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="sr-only select-none">badmanners.vore@gmail.com</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -314,11 +259,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
data-clipboard={gpgKey}
|
||||
data-noun="GPG key"
|
||||
>
|
||||
<IconKey
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconKey height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="sr-only select-none">GPG public key</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -330,11 +271,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="Inkbunny"
|
||||
>
|
||||
<IconInkbunny
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconInkbunny height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">BadManners on Inkbunny</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -346,11 +283,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="Itaku"
|
||||
>
|
||||
<IconItaku
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconItaku height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">badmanners on Itaku</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -362,11 +295,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="Itch.io"
|
||||
>
|
||||
<IconItchIO
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconItchIO height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">Bad Manners on Itch.io</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -378,11 +307,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="Keybase"
|
||||
>
|
||||
<IconKeybase
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconKeybase height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">badmanners on Keybase</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -394,11 +319,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="Keyoxide"
|
||||
>
|
||||
<IconKeyoxide
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconKeyoxide height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="sr-only select-none">
|
||||
<span class="p-uid">aspe:keyoxide.org:UWYBVFCBFXTVUF2U6FS6AYJHLU</span> on Keyoxide
|
||||
</p>
|
||||
|
|
@ -412,11 +333,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="Ko-fi"
|
||||
>
|
||||
<IconKofi
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconKofi height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">badmanners on Ko-fi</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -428,11 +345,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="Mastodon"
|
||||
>
|
||||
<IconMastodon
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconMastodon height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">@BadManners@meow.social on Mastodon</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -444,11 +357,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="Neocities"
|
||||
>
|
||||
<IconNeocities
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconNeocities height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">badmanners.neocities.org on Neocities</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -460,11 +369,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="Picarto"
|
||||
>
|
||||
<IconPicarto
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconPicarto height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">BadManners on Picarto</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -476,14 +381,22 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="Reddit"
|
||||
>
|
||||
<IconReddit
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconReddit height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">/u/BadManners_ on Reddit</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
id="resetera"
|
||||
class="u-url text-link group block w-full py-2 transition-colors motion-reduce:transition-none"
|
||||
href="https://www.resetera.com/members/bad-manners.181209/"
|
||||
rel="me"
|
||||
aria-label="Resetera"
|
||||
>
|
||||
<IconResetera height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">Bad Manners on Resetera</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
id="signal"
|
||||
|
|
@ -492,11 +405,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="Signal"
|
||||
>
|
||||
<IconSignal
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconSignal height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">badmanners.10 on Signal</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -508,11 +417,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="SoFurry"
|
||||
>
|
||||
<IconSoFurry
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconSoFurry height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">Bad Manners on SoFurry</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -525,11 +430,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
data-clipboard={sshKey}
|
||||
data-noun="SSH key"
|
||||
>
|
||||
<IconSSH
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconSSH height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="sr-only select-none">SSH public key</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -541,11 +442,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="Steam"
|
||||
>
|
||||
<IconSteam
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconSteam height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">badmanners_ on Steam</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -557,11 +454,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="SubscribeStar"
|
||||
>
|
||||
<IconSubscribeStar
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconSubscribeStar height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">Bad Manners on SubscribeStar</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -573,11 +466,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="Telegram"
|
||||
>
|
||||
<IconTelegram
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconTelegram height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">@bad_manners on Telegram</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -589,11 +478,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="Tumblr"
|
||||
>
|
||||
<IconTumblr
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconTumblr height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">badmannersxyz on Tumblr</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -605,11 +490,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="Twitch"
|
||||
>
|
||||
<IconTwitch
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconTwitch height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">bad__manners on Twitch</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -621,11 +502,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="Weasyl"
|
||||
>
|
||||
<IconWeasyl
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconWeasyl height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">BadManners on Weasyl</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -637,11 +514,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="X"
|
||||
>
|
||||
<IconX
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconX height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">@BadManners__ on X</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
@ -653,11 +526,7 @@ const sshKey = await readFile("./public/ssh.pub", { encoding: "utf-8" });
|
|||
rel="me"
|
||||
aria-label="YouTube"
|
||||
>
|
||||
<IconYouTube
|
||||
height="1.75rem"
|
||||
width="1.75rem"
|
||||
class="inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100"
|
||||
/>
|
||||
<IconYouTube height="1.75rem" width="1.75rem" class="contact-icon" />
|
||||
<p class="p-nickname sr-only select-none">@BadMannersXYZ on YouTube</p>
|
||||
</a>
|
||||
</li>
|
||||
|
|
|
|||
10
src/pages/robots.txt.ts
Normal file
10
src/pages/robots.txt.ts
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
import type { APIRoute } from "astro";
|
||||
import { AI_BOTS } from "../data/ai_bots";
|
||||
|
||||
export const GET: APIRoute = async () => {
|
||||
const robots = [AI_BOTS.map((bot) => `User-agent: ${bot}`), "Disallow: /", "", "User-agent: *", "Disallow: .htaccess"]
|
||||
.flat()
|
||||
.join("\n");
|
||||
|
||||
return new Response(robots, { headers: { "Content-Type": "text/plain; charset=utf-8" } });
|
||||
};
|
||||
|
|
@ -27,4 +27,8 @@
|
|||
.button-close {
|
||||
@apply rounded-full p-[6px] text-stone-800 hover:bg-stone-300 hover:text-stone-800 focus:bg-stone-300 focus:text-stone-800 sm:p-2 dark:text-zinc-300 dark:hover:bg-zinc-500 dark:hover:text-zinc-800 dark:focus:bg-zinc-500 dark:focus:text-zinc-800;
|
||||
}
|
||||
|
||||
.contact-icon {
|
||||
@apply inline transition-transform group-hover:scale-150 group-focus:scale-150 motion-reduce:transition-none motion-reduce:group-hover:scale-100 motion-reduce:group-focus:scale-100;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue