initial commit

This commit is contained in:
laura 2025-11-06 21:45:58 -03:00
commit e2466b202a
Signed by: w
GPG key ID: BCD2117C99E69817
50 changed files with 4356 additions and 0 deletions

31
routes/_app.tsx Normal file
View file

@ -0,0 +1,31 @@
/**
* Copyright (c) 2025 favewa
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import { define } from "../utils.ts";
export default define.page(function App({ Component }) {
return (
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" type="image/png" href="/favicon.png" />
<meta property="og:site_name" content="acpi.at" />
<meta property="og:type" content="profile" />
<meta
property="og:description"
content="one of the girls of all time"
/>
<meta property="og:image" content="https://acpi.at/bnuy.webp" />
<meta property="og:title" content="random corner" />
<meta name="theme-color" content="#a0bdfc" />
<title>acpi.at</title>
</head>
<body>
<Component />
</body>
</html>
);
});

15
routes/_error.tsx Normal file
View file

@ -0,0 +1,15 @@
/**
* Copyright (c) 2025 favewa
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import Empty from "@/components/Empty.tsx";
import { HttpError, PageProps } from "fresh";
export default function Err(props: PageProps) {
const error = props.error;
if (error instanceof HttpError && error.status == 404) {
return <Empty path={props.url.pathname} />;
}
return <h1>oopsie, uh oh</h1>;
}

245
routes/index.tsx Normal file
View file

@ -0,0 +1,245 @@
/**
* Copyright (c) 2025 favewa
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import { Fm } from "../components/Fm.tsx";
import { Header } from "../components/Header.tsx";
import Links from "../components/Links.tsx";
import ProjectCard from "../components/ProjectCard.tsx";
import Code from "../islands/Code.tsx";
import Meow from "../islands/Meow.tsx";
export default function Home() {
return (
<>
<Links selected="home" />
<Header class="home" />
<section id="about">
<h2>About</h2>
<p>
Advocate for open access to information and knowledge and aspiring
electrical engineer with complementary interests in systems
programming and linguistics.
</p>
<p>
On the side, I maintain a modest FreeBSD server where I self-host this
website and various services. This is nothing particularly impressive,
just a growing curiosity about systems administration.
</p>
</section>
<section id="links">
<h2>Links</h2>
<p>
Feel free to reach out through any of the platforms listed above. For
email correspondence, you can reach me at{" "}
<Code>
base64 -d &lt;&lt;&lt; bXV4QGFjcGkuYXQK
</Code>.
</p>
<p>
Psst! When discussing sensitive matters over email or other insecure
communication channels, I'd really appreciate it if you could encrypt
your message with my <a href="/pgp-key.asc">PGP key</a> (fingerprint:
{" "}
<Code>AC14 9A39 5013 C572 CA74 8799 BCD2 117C 99E6 9817</Code>).
</p>
<div class="griddy">
<div class="column">
<h3>Social</h3>
<ul>
<li>
<a title="Bluesky" href="https://bsky.app/profile/acpi.at">
at://acpi.at
</a>
</li>
<li>
<a
title="Discord"
href="https://discord.com/users/797566974024351745"
>
@favewa on Discord
</a>
</li>
<li>
<a title="Telegram" href="https://t.me/favewa">
@favewa on Telegram
</a>
</li>
</ul>
</div>
<div class="column">
<h3>Code</h3>
<ul>
<li>
<a title="GitHub" href="https://github.com/misties">
misties on GitHub
</a>
</li>
<li>
<a title="Forĝejo" href="https://git.acpi.at/w">
kyu.re/~«repo»
</a>
</li>
<li>
<a title="Codeberg" href="https://codeberg.org/ex">
ex on Codeberg
</a>
</li>
</ul>
</div>
<div class="column">
<h3>Services</h3>
<ul>
<li>sowwy, none for now~ :&lt;</li>
</ul>
</div>
</div>
</section>
<section id="projects">
<h2>Projects</h2>
<ul>
<li>
<ProjectCard
author="favewa"
name="disinterest"
description="pinterest frontend that requires zero client-side js "
url="http://github.com/favewa/disinterest"
languageColor="#3178c6"
languageName="TypeScript"
/>
</li>
<li>
<ProjectCard
author="w"
name="acpi.at"
description="personal website"
url="http://kyu.re/~web"
languageColor="#3178c6"
languageName="TypeScript"
/>
</li>
</ul>
</section>
<Fm />
<section id="donation">
<h2>Piggy bank</h2>
<p>
If you enjoy throwing money at people on the internet, please consider
me! It keeps the server alive, fuels my tinkering with esoteric
technology, and helps me navigate some rough financial patches and
stay afloat while things are tight.
</p>
<div class="silly-table">
<div class="row">
<span class="key">WEB</span>
<code class="value">
<a href="https://ko-fi.com/west">west@ko-fi</a>
<a href="https://github.com/sponsors/favewa">favewa@github</a>
</code>
</div>
<div class="row">
<span class="key">XMR</span>
<code class="value">
456tmp4CU158sV95Pjh75QfMcANNsRCFTdpmc86G31eKg9urvcYunnuBVyUmazAbuihUXwRDVojkhFTbzg6X2GuAJ7t3MCT
</code>
</div>
<div class="row">
<span class="key">LTC</span>
<code class="value">
ltc1ql30jtr2r0pkr0wshspf465rdupvlpmwacql7wp
</code>
</div>
<div class="row">
<span class="key">BTC</span>
<code class="value">
bc1qj3l6cpxz604vlfz5zqlnhzr7g0aq7xlslnmzcm
</code>
</div>
<div class="row">
<span class="key">BCH</span>
<code class="value">
bitcoincash:qrs8y70dwzvz2kvxnv30c9k4pxa0vatzvudle5aaa3
</code>
</div>
<div class="row">
<span class="key">XNO</span>
<code class="value">
nano_1qbbwrzxnutw53kuykdo6zcwteawf3befpbf95zrz66b33yxpz5ans6wrw4w
</code>
</div>
<div class="row">
<span class="key">ETH</span>
<code class="value">
0x9bb671035Dde19C674769592AbC20E63f36b5Aa9
</code>
</div>
</div>
</section>
<section id="friends">
<h2>Friends</h2>
<p>
Precious friendships; from the bottom of my heart, I am genuinely
grateful for their existence~
</p>
<div class="buttons">
<Meow />
<a href="https://worf.win">
<img
src="https://worf.win/images/worfwin.gif"
alt="worf"
/>
</a>
<a href="https://codeberg.org/paige">
<img src="/88x31/paige.gif" alt="paige" />
</a>
<a href="https://mugman.tech">
<img
src="https://mugman.tech/88x31/me.gif"
alt="mugman"
/>
</a>
<a href="https://f.dog">
<img
src="https://x86.pet/~strawberry/june_88x31.png"
alt="june"
/>
</a>
<a
rel="noopener"
referrerpolicy="strict-origin"
href="https://rushii.dev"
>
<img
src="https://rushii.dev/88x31/rushii.webp"
alt="rushii's site"
/>
</a>
<a href="https://www.juwuba.xyz">
<img src="https://www.juwuba.xyz/88x31.gif" alt="Júlia" />
</a>
<a href="https://katelyn.moe/">
<img src="https://katelyn.moe/8831.png" alt="katelyn" />
</a>
<a href="https://meow-d.github.io">
<img src="/88x31/meow_d.webp" alt="meow_d" />
</a>
<a href="https://caitlyn.moe">
<img src="https://caitlyn.moe/88x31.png" alt="caitlyn" />
</a>
</div>
<div class="pfps">
<a title="12 reais" href="https://github.com/nightdavisao">
<img src="https://github.com/nightdavisao.png" alt="Nightdavisao" />
</a>
<a title="emily" href="https://implied.win">
<img src="https://github.com/impliedgg.png" alt="emily" />
</a>
<a title="bem pelada" href="https://codeberg.org/paige">
<img src="https://codeberg.org/paige.png" alt="bem pelada" />
</a>
</div>
</section>
</>
);
}

49
routes/reports/[rkey].tsx Normal file
View file

@ -0,0 +1,49 @@
/**
* Copyright (c) 2025 favewa
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import { PageProps } from "fresh";
import { getCachedReports } from "@/utils/atproto.ts";
import Empty from "@/components/Empty.tsx";
export default function PostPage(props: PageProps) {
const { rkey } = props.params;
const post = getCachedReports().find((rep) =>
rep.rkey === rkey.toLowerCase()
);
if (!post) {
return <Empty path={`/reports/${rkey}`} />;
}
return (
<>
<a href="/reports"> exit this report</a>
<article>
<header>
<div class="meta">
<time datetime={post?.createdAt}>{post?.createdAt}</time>
</div>
<h1>{post.title}</h1>
{post.tags && (
<div class="tags">
{post.tags.map((tag) => <span key={tag} class="tag">{tag}</span>)}
</div>
)}
</header>
<div
class="content typewriting"
dangerouslySetInnerHTML={{ __html: post.content }}
/>
<footer>
<a href="/">
You reached the end of the page. It is now safe to turn off your
computer.
</a>
</footer>
</article>
</>
);
}

18
routes/reports/index.tsx Normal file
View file

@ -0,0 +1,18 @@
/**
* Copyright (c) 2025 favewa
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import { Header } from "@/components/Header.tsx";
import Reports from "@/components/Reports.tsx";
import Links from "@/components/Links.tsx";
import { getCachedReports } from "@/utils/atproto.ts";
export default function Page() {
return (
<>
<Links selected="reports" />
<Reports reports={getCachedReports()} />
</>
);
}