Skip to content

Commit 2210fe9

Browse files
committed
update projects and site polish
1 parent a2ac54b commit 2210fe9

6 files changed

Lines changed: 117 additions & 33 deletions

File tree

_components/ShareIcons.tsx

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,26 +9,25 @@ const ShareIcons = ({
99
showDivider = true,
1010
class: className = "",
1111
}: ShareIconsProps) => {
12-
const rootClass =
13-
showDivider || withBlob
14-
? "mb-[1.2em] relative flex flex-col"
15-
: "relative flex flex-col";
12+
const rootClass = showDivider || withBlob
13+
? "mb-[1.2em] relative flex flex-col"
14+
: "relative flex flex-col";
1615

1716
return (
1817
<div class={[rootClass, className].join(" ")}>
1918
{showDivider && (
2019
<hr class="w-1/2 mx-auto mt-0 mb-7 not-prose border-primary/10" />
2120
)}
2221
<div
23-
className="mx-auto inline-flex items-center share-icons"
22+
className="share-icons mx-auto flex flex-wrap items-center justify-center gap-x-1 gap-y-1"
2423
style={{
2524
"--scale-timing": "0.15s",
2625
}}
2726
>
2827
<a
2928
href="https://twitter.com/rix1"
3029
target="_blank"
31-
class="p-3 flex flex-col items-center"
30+
class="flex flex-col items-center p-2 sm:p-3"
3231
rel="noreferrer"
3332
>
3433
<svg
@@ -41,14 +40,15 @@ const ShareIcons = ({
4140
width="24"
4241
stroke="#000"
4342
>
44-
<path d="M23 3a10.9 10.9 0 01-3.14 1.53 4.48 4.48 0 00-7.86 3v1A10.66 10.66 0 013 4s-4 9 5 13a11.64 11.64 0 01-7 2c9 5 20 0 20-11.5a4.5 4.5 0 00-.08-.83A7.72 7.72 0 0023 3z"></path>
43+
<path d="M23 3a10.9 10.9 0 01-3.14 1.53 4.48 4.48 0 00-7.86 3v1A10.66 10.66 0 013 4s-4 9 5 13a11.64 11.64 0 01-7 2c9 5 20 0 20-11.5a4.5 4.5 0 00-.08-.83A7.72 7.72 0 0023 3z">
44+
</path>
4545
</svg>
4646
<small>Twitter</small>
4747
</a>
4848
<a
4949
href="https://bsky.app/profile/rix1.bsky.social"
5050
target="_blank"
51-
class="p-3 flex flex-col items-center"
51+
class="flex flex-col items-center p-2 sm:p-3"
5252
rel="noreferrer"
5353
>
5454
<svg
@@ -61,14 +61,15 @@ const ShareIcons = ({
6161
width="32"
6262
stroke="#000"
6363
>
64-
<path d="M12 11.5c-1.6-3.3-4.4-6-6.8-6-1.6 0-2.2 1.1-2.2 2.5 0 2.5 2.9 5.1 6 6.4-2.9.3-5.2 1.7-5.2 3.7 0 1.2 1 2.2 2.5 2.2 2.1 0 4.4-2.1 5.7-4.8 1.3 2.7 3.6 4.8 5.7 4.8 1.5 0 2.5-1 2.5-2.2 0-2-2.3-3.4-5.2-3.7 3.1-1.3 6-3.9 6-6.4 0-1.4-.6-2.5-2.2-2.5-2.4 0-5.2 2.7-6.8 6Z"></path>
64+
<path d="M12 11.5c-1.6-3.3-4.4-6-6.8-6-1.6 0-2.2 1.1-2.2 2.5 0 2.5 2.9 5.1 6 6.4-2.9.3-5.2 1.7-5.2 3.7 0 1.2 1 2.2 2.5 2.2 2.1 0 4.4-2.1 5.7-4.8 1.3 2.7 3.6 4.8 5.7 4.8 1.5 0 2.5-1 2.5-2.2 0-2-2.3-3.4-5.2-3.7 3.1-1.3 6-3.9 6-6.4 0-1.4-.6-2.5-2.2-2.5-2.4 0-5.2 2.7-6.8 6Z">
65+
</path>
6566
</svg>
6667
<small>Bluesky</small>
6768
</a>
6869
<a
6970
href="https://github.com/rix1"
7071
target="_blank"
71-
class="p-3 flex flex-col items-center"
72+
class="flex flex-col items-center p-2 sm:p-3"
7273
rel="noreferrer"
7374
>
7475
<svg
@@ -81,14 +82,15 @@ const ShareIcons = ({
8182
width="24"
8283
stroke="#000"
8384
>
84-
<path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 00-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0020 4.77 5.07 5.07 0 0019.91 1S18.73.65 16 2.48a13.38 13.38 0 00-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 005 4.77a5.44 5.44 0 00-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 009 18.13V22"></path>
85+
<path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 00-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0020 4.77 5.07 5.07 0 0019.91 1S18.73.65 16 2.48a13.38 13.38 0 00-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 005 4.77a5.44 5.44 0 00-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 009 18.13V22">
86+
</path>
8587
</svg>
8688
<small>Github</small>
8789
</a>
8890
<a
8991
href="https://instagram.com/rix1"
9092
target="_blank"
91-
class="p-3 flex flex-col items-center"
93+
class="flex flex-col items-center p-2 sm:p-3"
9294
rel="noreferrer"
9395
>
9496
<svg
@@ -102,14 +104,15 @@ const ShareIcons = ({
102104
stroke="#000"
103105
>
104106
<rect width="20" height="20" x="2" y="2" rx="5" ry="5"></rect>
105-
<path d="M16 11.37A4 4 0 1112.63 8 4 4 0 0116 11.37zM17.5 6.5h.01"></path>
107+
<path d="M16 11.37A4 4 0 1112.63 8 4 4 0 0116 11.37zM17.5 6.5h.01">
108+
</path>
106109
</svg>
107110
<small>Instagram</small>
108111
</a>
109112
<a
110113
href="https://linkedin.com/in/riix1"
111114
target="_blank"
112-
class="p-3 flex flex-col items-center"
115+
class="flex flex-col items-center p-2 sm:p-3"
113116
rel="noreferrer"
114117
>
115118
<svg
@@ -122,15 +125,16 @@ const ShareIcons = ({
122125
width="24"
123126
stroke="#000"
124127
>
125-
<path d="M16 8a6 6 0 016 6v7h-4v-7a2 2 0 00-2-2 2 2 0 00-2 2v7h-4v-7a6 6 0 016-6zM2 9h4v12H2z"></path>
128+
<path d="M16 8a6 6 0 016 6v7h-4v-7a2 2 0 00-2-2 2 2 0 00-2 2v7h-4v-7a6 6 0 016-6zM2 9h4v12H2z">
129+
</path>
126130
<circle cx="4" cy="4" r="2"></circle>
127131
</svg>
128132
<small>LinkedIn</small>
129133
</a>
130134
<a
131135
href="https://keybase.io/rix1"
132136
target="_blank"
133-
class="p-3 flex flex-col items-center"
137+
class="flex flex-col items-center p-2 sm:p-3"
134138
rel="noreferrer"
135139
>
136140
<svg
@@ -139,7 +143,8 @@ const ShareIcons = ({
139143
viewBox="0 0 24 24"
140144
xmlns="http://www.w3.org/2000/svg"
141145
>
142-
<path d="M10.445 21.372a.953.953 0 11-.955-.954c.524 0 .951.43.951.955m5.923-.001a.953.953 0 11-.958-.954c.526 0 .954.43.954.955m4.544-9.16l-.156-.204c-.046-.06-.096-.116-.143-.175-.045-.06-.094-.113-.141-.169-.104-.12-.21-.239-.32-.359l-.075-.08-.091-.099-.135-.13c-.015-.019-.032-.035-.05-.054a10.87 10.87 0 00-3.955-2.504l-.23-.078.035-.083a4.109 4.109 0 00-.12-3.255 4.11 4.11 0 00-2.438-2.16c-.656-.216-1.23-.319-1.712-.305-.033-.105-.1-.577.496-1.848L10.662 0l-.287.399c-.33.455-.648.895-.945 1.328a1.857 1.857 0 00-1.245-.58L6.79 1.061h-.012c-.033-.003-.07-.003-.104-.003-.99 0-1.81.771-1.87 1.755l-.088 1.402v.003a1.876 1.876 0 001.755 1.98l1.002.06c-.065.84.073 1.62.405 2.306a11.28 11.28 0 00-3.66 2.484C.912 14.392.912 18.052.912 20.995v1.775l1.305-1.387c.266.93.652 1.807 1.145 2.615H5.06a9.197 9.197 0 01-1.68-3.848l1.913-2.03-.985 3.09 1.74-1.267c3.075-2.234 6.745-2.75 10.91-1.53 1.806.533 3.56.04 4.474-1.256l.104-.165c.09.498.14.998.14 1.496 0 1.563-.254 3.687-1.38 5.512h1.612c.776-1.563 1.181-3.432 1.181-5.512-.001-2.2-.786-4.421-2.184-6.274zM8.894 6.192c.122-1.002.577-1.949 1.23-2.97a1.36 1.36 0 001.283.749c.216-.008.604.025 1.233.232a2.706 2.706 0 011.608 1.425c.322.681.349 1.442.079 2.15a2.69 2.69 0 01-.806 1.108l-.408-.502-.002-.003a1.468 1.468 0 00-2.06-.205c-.334.27-.514.66-.534 1.058-1.2-.54-1.8-1.643-1.628-3.04zm4.304 5.11l-.52.425a.228.228 0 01-.323-.032l-.11-.135a.238.238 0 01.034-.334l.51-.42-1.056-1.299a.307.307 0 01.044-.436.303.303 0 01.435.041l2.963 3.646a.309.309 0 01-.168.499.315.315 0 01-.31-.104l-.295-.365-1.045.854a.244.244 0 01-.154.055.237.237 0 01-.186-.09l-.477-.58a.24.24 0 01.035-.335l1.05-.858-.425-.533zM7.752 4.866l-1.196-.075a.463.463 0 01-.435-.488l.09-1.4a.462.462 0 01.461-.437h.024l1.401.091a.459.459 0 01.433.488l-.007.101a9.27 9.27 0 00-.773 1.72zm12.525 11.482c-.565.805-1.687 1.08-2.924.718-3.886-1.141-7.397-.903-10.469.7l1.636-5.122-5.29 5.609c.098-3.762 2.452-6.967 5.757-8.312.471.373 1.034.66 1.673.841.16.044.322.074.48.102a1.41 1.41 0 00.21 1.408l.075.09c-.172.45-.105.975.221 1.374l.476.582a1.39 1.39 0 001.079.513c.32 0 .635-.111.886-.314l.285-.232c.174.074.367.113.566.113a1.45 1.45 0 00.928-.326c.623-.51.72-1.435.209-2.06l-1.67-2.057a4.07 4.07 0 00.408-.38c.135.036.27.077.4.12.266.096.533.197.795.314a9.55 9.55 0 012.77 1.897c.03.03.06.055.086.083l.17.176c.038.039.076.079.11.12.08.085.16.175.24.267l.126.15c.045.053.086.104.13.16l.114.15c.04.05.079.102.117.154.838 1.149.987 2.329.404 3.157v.005zM7.718 4.115l-.835-.05.053-.836.834.051z"></path>
146+
<path d="M10.445 21.372a.953.953 0 11-.955-.954c.524 0 .951.43.951.955m5.923-.001a.953.953 0 11-.958-.954c.526 0 .954.43.954.955m4.544-9.16l-.156-.204c-.046-.06-.096-.116-.143-.175-.045-.06-.094-.113-.141-.169-.104-.12-.21-.239-.32-.359l-.075-.08-.091-.099-.135-.13c-.015-.019-.032-.035-.05-.054a10.87 10.87 0 00-3.955-2.504l-.23-.078.035-.083a4.109 4.109 0 00-.12-3.255 4.11 4.11 0 00-2.438-2.16c-.656-.216-1.23-.319-1.712-.305-.033-.105-.1-.577.496-1.848L10.662 0l-.287.399c-.33.455-.648.895-.945 1.328a1.857 1.857 0 00-1.245-.58L6.79 1.061h-.012c-.033-.003-.07-.003-.104-.003-.99 0-1.81.771-1.87 1.755l-.088 1.402v.003a1.876 1.876 0 001.755 1.98l1.002.06c-.065.84.073 1.62.405 2.306a11.28 11.28 0 00-3.66 2.484C.912 14.392.912 18.052.912 20.995v1.775l1.305-1.387c.266.93.652 1.807 1.145 2.615H5.06a9.197 9.197 0 01-1.68-3.848l1.913-2.03-.985 3.09 1.74-1.267c3.075-2.234 6.745-2.75 10.91-1.53 1.806.533 3.56.04 4.474-1.256l.104-.165c.09.498.14.998.14 1.496 0 1.563-.254 3.687-1.38 5.512h1.612c.776-1.563 1.181-3.432 1.181-5.512-.001-2.2-.786-4.421-2.184-6.274zM8.894 6.192c.122-1.002.577-1.949 1.23-2.97a1.36 1.36 0 001.283.749c.216-.008.604.025 1.233.232a2.706 2.706 0 011.608 1.425c.322.681.349 1.442.079 2.15a2.69 2.69 0 01-.806 1.108l-.408-.502-.002-.003a1.468 1.468 0 00-2.06-.205c-.334.27-.514.66-.534 1.058-1.2-.54-1.8-1.643-1.628-3.04zm4.304 5.11l-.52.425a.228.228 0 01-.323-.032l-.11-.135a.238.238 0 01.034-.334l.51-.42-1.056-1.299a.307.307 0 01.044-.436.303.303 0 01.435.041l2.963 3.646a.309.309 0 01-.168.499.315.315 0 01-.31-.104l-.295-.365-1.045.854a.244.244 0 01-.154.055.237.237 0 01-.186-.09l-.477-.58a.24.24 0 01.035-.335l1.05-.858-.425-.533zM7.752 4.866l-1.196-.075a.463.463 0 01-.435-.488l.09-1.4a.462.462 0 01.461-.437h.024l1.401.091a.459.459 0 01.433.488l-.007.101a9.27 9.27 0 00-.773 1.72zm12.525 11.482c-.565.805-1.687 1.08-2.924.718-3.886-1.141-7.397-.903-10.469.7l1.636-5.122-5.29 5.609c.098-3.762 2.452-6.967 5.757-8.312.471.373 1.034.66 1.673.841.16.044.322.074.48.102a1.41 1.41 0 00.21 1.408l.075.09c-.172.45-.105.975.221 1.374l.476.582a1.39 1.39 0 001.079.513c.32 0 .635-.111.886-.314l.285-.232c.174.074.367.113.566.113a1.45 1.45 0 00.928-.326c.623-.51.72-1.435.209-2.06l-1.67-2.057a4.07 4.07 0 00.408-.38c.135.036.27.077.4.12.266.096.533.197.795.314a9.55 9.55 0 012.77 1.897c.03.03.06.055.086.083l.17.176c.038.039.076.079.11.12.08.085.16.175.24.267l.126.15c.045.053.086.104.13.16l.114.15c.04.05.079.102.117.154.838 1.149.987 2.329.404 3.157v.005zM7.718 4.115l-.835-.05.053-.836.834.051z">
147+
</path>
143148
</svg>
144149
<small>Keybase</small>
145150
</a>

_components/SiteFooter.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
export default ({ comp }: Lume.Data) => {
22
return (
3-
<footer class="not-prose mx-auto mt-20 max-w-5xl px-4 pb-12 pt-8 sm:px-6 lg:px-8">
3+
<footer class="not-prose mx-auto mt-16 max-w-5xl px-4 pb-12 pt-8 sm:mt-20 sm:px-6 lg:px-8">
44
<div class="border-t border-primary/10 pt-8">
5-
<div class="flex items-start gap-4">
5+
<div class="flex flex-col items-center gap-4 text-center">
66
<p class="m-0 max-w-2xl text-sm leading-6 text-gray-600">
77
This is Rix1's personal site for notes on products, technology,
88
design, building things, and life.
99
</p>
10-
<comp.ShareIcons showDivider={false} class="w-full self-center" />
10+
<comp.ShareIcons showDivider={false} class="w-full" />
1111
</div>
1212
</div>
1313
</footer>

_data/index.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,42 @@
11
export const repos = [
2+
{
3+
title: "YT stats",
4+
when: "2026",
5+
ai: true,
6+
description:
7+
"Spotify Wrapped for YouTube. Drop your watch history JSON and get a private, local-first report in the browser or terminal.",
8+
link: "https://yt-stats.rix1.dev/",
9+
repo: "https://github.com/rix1/yt-stats",
10+
},
11+
{
12+
title: "Barnehageutforsker",
13+
when: "2026",
14+
ai: true,
15+
description:
16+
"Browse and compare kindergartens in Oslo with a sortable table, map, filters, favorites, and scraped public data.",
17+
link: "https://github.com/rix1/barnehageutforsker",
18+
repo: "https://github.com/rix1/barnehageutforsker",
19+
},
20+
{
21+
title: "drop",
22+
when: "2026",
23+
ai: true,
24+
wip: true,
25+
description:
26+
"A small local file sharing tool for explicit, expiring shares over a reverse tunnel such as Cloudflare Tunnel or Tailscale Funnel.",
27+
link: "https://github.com/rix1/drop",
28+
repo: "https://github.com/rix1/drop",
29+
},
30+
{
31+
title: "R3",
32+
when: "2026",
33+
ai: true,
34+
wip: true,
35+
description:
36+
"An experimental Readwise Reader to reMarkable workflow for sending articles to the tablet and recovering highlights back into Readwise.",
37+
link: "https://github.com/rix1/r3",
38+
repo: "https://github.com/rix1/r3",
39+
},
240
{
341
title: "Wine",
442
when: "2024",
@@ -65,6 +103,7 @@ export const repos = [
65103
{
66104
title: "Cabin planner",
67105
when: "2022",
106+
wip: true,
68107
description:
69108
"An app for managing resources in large families, FRP if you want. Built with T3 and Supabase",
70109
link: "https://hytta.rix1.dev/",
@@ -73,6 +112,7 @@ export const repos = [
73112
{
74113
title: "Flow Writer",
75114
when: "2022",
115+
wip: true,
76116
description:
77117
"A tool for unclear writing, modelled after my messy brain. Built with Next.js",
78118
link: "https://twitter.com/rix1/status/1510736583154147330",

_includes/layouts/command-palette-data.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
type Project = {
22
title: string;
33
when: string;
4+
ai?: boolean;
5+
wip?: boolean;
46
description: string;
57
link: string;
68
};
@@ -45,7 +47,11 @@ export default ({ search, index }: Lume.Data) => {
4547
title: project.title,
4648
description: stripMarkdownLinks(project.description),
4749
url: project.link,
48-
meta: project.when,
50+
meta: [
51+
project.when,
52+
project.ai ? "AI-assisted" : undefined,
53+
project.wip ? "WIP" : undefined,
54+
].filter(Boolean).join(" · "),
4955
}));
5056

5157
return JSON.stringify({ posts, projects });

_includes/layouts/landing.tsx

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
type Project = {
22
title: string;
33
when: string;
4-
status: "broken" | "live" | "unfinished";
4+
ai?: boolean;
5+
wip?: boolean;
6+
status?: "broken" | "live" | "unfinished";
57
description: string;
68
link: string;
79
repo?: string;
@@ -24,16 +26,16 @@ export default ({ comp, title, heading, children, index }: Lume.Data) => {
2426

2527
<title>{title}</title>
2628
</head>
27-
<body class="relative mx-auto my-24 max-w-7xl px-4 sm:px-6 lg:px-8 prose lg:prose-xl prose-headings:bricolage-grotesque-heavy">
28-
<main class="grid items-end gap-4 md:grid-cols-2">
29-
<div>
29+
<body class="prose relative mx-auto my-12 max-w-7xl px-4 prose-headings:bricolage-grotesque-heavy sm:my-16 sm:px-6 sm:prose-lg lg:my-24 lg:px-8 lg:prose-xl">
30+
<main class="grid items-center gap-10 md:grid-cols-[minmax(0,1fr)_minmax(240px,0.8fr)] lg:gap-14">
31+
<div class="max-w-2xl">
3032
<comp.FancyHeading>{heading}</comp.FancyHeading>
3133
{children}
3234
</div>
33-
<div class="mb-[1.2em] font-[1.25rem]">
34-
<div class="relative blob-wrapper">
35+
<div class="mb-[1.2em] text-base sm:text-[1.25rem]">
36+
<div class="blob-wrapper relative mx-auto max-w-[min(100%,22rem)]">
3537
<div
36-
class="not-prose mx-auto my-0 p-0 md:[--image-size:400px]"
38+
class="not-prose mx-auto my-0 p-0 [--image-size:240px] sm:[--image-size:280px] md:[--image-size:360px] lg:[--image-size:400px]"
3739
id="blobby-avatar"
3840
/>
3941
<div id="blob"></div>
@@ -42,17 +44,29 @@ export default ({ comp, title, heading, children, index }: Lume.Data) => {
4244
</div>
4345
</main>
4446

45-
<section class="mt-24">
46-
<h2 class="mb-8">{index.repos.length} of my latest creations:</h2>
47-
<div class="grid grid-flow-row grid-cols-2 gap-6 md:grid-cols-3 lg:grid-rows-3">
47+
<section class="mt-16 sm:mt-24">
48+
<h2 class="mb-8 text-2xl leading-tight sm:text-3xl lg:text-4xl">
49+
{index.repos.length} of my latest creations:
50+
</h2>
51+
<div class="grid grid-flow-row grid-cols-1 gap-7 sm:grid-cols-2 md:grid-cols-3">
4852
{(index.repos as Project[]).sort(compareFn).map((project) => (
49-
<article key={project.title} class="mb-4 max-w-xs">
53+
<article key={project.title} class="mb-2 max-w-none">
5054
<p class="not-prose my-0 inline-flex flex-wrap items-baseline gap-2">
5155
<a href={project.link} class="font-semibold underline">
5256
{project.title}
5357
</a>
5458
&middot;
5559
<span class="rounded-full text-sm">{project.when}</span>
60+
{project.ai && (
61+
<span class="rounded-full border border-primary/15 bg-primary/5 px-1.5 py-0.5 text-[0.68rem] font-medium uppercase leading-none tracking-wide text-primary/80">
62+
AI
63+
</span>
64+
)}
65+
{project.wip && (
66+
<span class="rounded-full border border-gray-300/70 bg-gray-50 px-1.5 py-0.5 text-[0.68rem] font-medium uppercase leading-none tracking-wide text-gray-600">
67+
WIP
68+
</span>
69+
)}
5670
</p>
5771
<p class="not-prose my-0 block">
5872
{{ __html: markdownToHtmlLinks(project.description) }}

serve.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,29 @@
11
import Server from "lume/core/server.ts";
2+
import notFound from "lume/middlewares/not_found.ts";
3+
4+
const root = `${Deno.cwd()}/_site`;
25

36
const server = new Server({
47
port: 8000,
5-
root: `${Deno.cwd()}/_site`,
8+
root,
69
});
710

11+
server.use((request, next) => {
12+
const hostname = request.headers.get("host")?.split(":")[0].toLowerCase();
13+
14+
if (hostname === "www.rix1.dev") {
15+
const url = new URL(request.url);
16+
url.protocol = "https:";
17+
url.hostname = "rix1.dev";
18+
19+
return Promise.resolve(Response.redirect(url, 308));
20+
}
21+
22+
return next(request);
23+
});
24+
25+
server.use(notFound({ root, page404: "/404.html" }));
26+
827
server.start();
928

1029
console.log("Listening on http://localhost:8000");

0 commit comments

Comments
 (0)