45 lines
1.1 KiB
TypeScript
45 lines
1.1 KiB
TypeScript
import type { Project } from "../../lib/projects";
|
|
|
|
function Content() {
|
|
return (
|
|
<>
|
|
<h1>KUNSTENKAMP</h1>
|
|
|
|
<p>
|
|
Event registration system for Kunstenkamp Open Mic Night. Built with
|
|
TanStack Start (SSR), oRPC, Drizzle ORM, and deployed to Cloudflare
|
|
Workers.
|
|
</p>
|
|
|
|
<h2>Stack</h2>
|
|
<ul>
|
|
<li>TanStack Start (SSR React)</li>
|
|
<li>oRPC (type-safe RPC)</li>
|
|
<li>Drizzle ORM + Turso (libSQL)</li>
|
|
<li>better-auth (magic link)</li>
|
|
<li>Cloudflare Workers (via Alchemy)</li>
|
|
</ul>
|
|
|
|
<h2>About</h2>
|
|
<p>
|
|
Attendees can register for the event, performers can indicate their art
|
|
form, and admins can manage and export the registration list. Auth is
|
|
handled via email magic links — no passwords.
|
|
</p>
|
|
|
|
<p className="text-small opacity-60 mt-12">
|
|
This blog was written and reviewed by myself with the help of AI
|
|
</p>
|
|
</>
|
|
);
|
|
}
|
|
|
|
export default {
|
|
slug: "kunstenkamp",
|
|
title: "KUNSTENKAMP",
|
|
description: "Event registration system for Kunstenkamp Open Mic Night.",
|
|
tags: ["tanstack-start", "cloudflare", "drizzle", "typescript"],
|
|
url: "https://kunstenkamp.be",
|
|
Content,
|
|
} satisfies Project;
|