feat:accessibility, new routes, cookie consent, and UI improvements

- Add contact, privacy, and terms pages
- Add CookieConsent component with accept/decline and localStorage
- Add self-hosted DM Sans font with @font-face definitions
- Improve registration form with field validation, blur handlers, and
performer toggle
- Redesign Info section with 'Ongedesemd Brood' hero and FAQ layout
- Remove scroll-snap behavior from all sections
- Add reduced motion support and selection color theming
- Add SVG favicon and SEO meta tags in root layout
- Improve accessibility: aria attributes, semantic HTML, focus styles
- Add link-hover underline animation utility
This commit is contained in:
2026-03-02 20:45:17 +01:00
parent b343314931
commit 37d9a415eb
23 changed files with 1804 additions and 184 deletions

View File

@@ -1,8 +1,8 @@
import { randomUUID } from "node:crypto";
import { db } from "@kk/db";
import { adminRequest, registration } from "@kk/db/schema";
import { user } from "@kk/db/schema/auth";
import type { RouterClient } from "@orpc/server";
import { randomUUID } from "crypto";
import { and, count, desc, eq, gte, like, lte } from "drizzle-orm";
import { z } from "zod";
import { adminProcedure, protectedProcedure, publicProcedure } from "../index";
@@ -12,8 +12,10 @@ const submitRegistrationSchema = z.object({
lastName: z.string().min(1),
email: z.string().email(),
phone: z.string().optional(),
artForm: z.string().min(1),
wantsToPerform: z.boolean().default(false),
artForm: z.string().optional(),
experience: z.string().optional(),
extraQuestions: z.string().optional(),
});
const getRegistrationsSchema = z.object({
@@ -46,8 +48,10 @@ export const appRouter = {
lastName: input.lastName,
email: input.email,
phone: input.phone || null,
artForm: input.artForm,
wantsToPerform: input.wantsToPerform,
artForm: input.artForm || null,
experience: input.experience || null,
extraQuestions: input.extraQuestions || null,
});
return { success: true, id: result.lastInsertRowid };
@@ -149,8 +153,10 @@ export const appRouter = {
"Last Name",
"Email",
"Phone",
"Wants To Perform",
"Art Form",
"Experience",
"Extra Questions",
"Created At",
];
const rows = data.map((r) => [
@@ -159,8 +165,10 @@ export const appRouter = {
r.lastName,
r.email,
r.phone || "",
r.artForm,
r.wantsToPerform ? "Yes" : "No",
r.artForm || "",
r.experience || "",
r.extraQuestions || "",
r.createdAt.toISOString(),
]);