the problems with the original implementation was mostly around error handling. sources had to be tracked manually and provided to each incremental output. the `hasArtifact` check was frequently forgotten. this has been re-abstracted through `incr.work()`, which is given an `io` object. all fs reads and module loads go through this interface, which allows the sources to be properly tracked, even if it throws. closes #12
45 lines
1.1 KiB
Text
45 lines
1.1 KiB
Text
import type { Meta } from "#meta";
|
|
import "./index.css";
|
|
|
|
export const theme = {
|
|
bg: "#fff",
|
|
fg: "#666",
|
|
};
|
|
static const title = "paper clover";
|
|
static const description = "and then we knew, just like paper airplanes: that we could fly...";
|
|
export const meta: Meta = {
|
|
title,
|
|
description,
|
|
openGraph: {
|
|
title,
|
|
description,
|
|
type: "website",
|
|
url: "https://paperclover.net",
|
|
},
|
|
alternates: {
|
|
canonical: "https://paperclover.net",
|
|
types: {
|
|
"application/rss+xml": [
|
|
{ url: "rss.xml", title: "rss" },
|
|
],
|
|
},
|
|
},
|
|
};
|
|
|
|
<main>
|
|
<div>
|
|
<h2>posts</h2>
|
|
<p>song: <a href="/in-the-summer">in the summer</a> (2025-01-01)</p>
|
|
<p>song: <a href="/waterfalls">waterfalls</a> (2025-01-01)</p>
|
|
<h2>things</h2>
|
|
<p><a href="/q+a">questions and answers</a></p>
|
|
<p><a href="/file">file browser</a></p>
|
|
<p><a href="/subscribe">mailing list</a></p>
|
|
<p><a href="/donate">donate</a></p>
|
|
<p><a href="/rss.xml">rss feed</a></p>
|
|
<p style="position: relative; z-index: 10"><a href="/discord">discord</a></p>
|
|
<h1>
|
|
paper clover
|
|
</h1>
|
|
</div>
|
|
</main>
|