From 40ff17657faa0d2ae69c408f657705763dde0272 Mon Sep 17 00:00:00 2001 From: m Date: Thu, 16 Apr 2026 10:48:42 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20Checklisten=20=E2=80=94=20interactive?= =?UTF-8?q?=20filing=20checklists=20with=20localStorage=20state?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Six bilingual patent-workflow checklists (UPC Statement of Claim, Defence, Confidentiality Application, Representative Registration; BPatG Nullity; EPO Opposition) with grouped items, rule references, and tips. Index page lists cards with regime filter and per-checklist progress; detail page persists check state in localStorage (patholo:checklist:), shows a live progress bar, supports reset and print, and submits feedback via Supabase checklisten_feedback. --- docs/migrations/002_checklisten_feedback.sql | 20 + frontend/build.ts | 6 + frontend/src/checklisten-detail.tsx | 95 ++++ frontend/src/checklisten.tsx | 44 ++ frontend/src/client/checklisten-detail.ts | 272 ++++++++++ frontend/src/client/checklisten.ts | 104 ++++ frontend/src/client/i18n.ts | 60 +++ frontend/src/components/Sidebar.tsx | 2 + frontend/src/index.tsx | 7 + frontend/src/styles/global.css | 379 ++++++++++++++ internal/handlers/checklisten.go | 510 +++++++++++++++++++ internal/handlers/handlers.go | 5 + 12 files changed, 1504 insertions(+) create mode 100644 docs/migrations/002_checklisten_feedback.sql create mode 100644 frontend/src/checklisten-detail.tsx create mode 100644 frontend/src/checklisten.tsx create mode 100644 frontend/src/client/checklisten-detail.ts create mode 100644 frontend/src/client/checklisten.ts create mode 100644 internal/handlers/checklisten.go diff --git a/docs/migrations/002_checklisten_feedback.sql b/docs/migrations/002_checklisten_feedback.sql new file mode 100644 index 0000000..714e7fd --- /dev/null +++ b/docs/migrations/002_checklisten_feedback.sql @@ -0,0 +1,20 @@ +-- Migration: Checklisten feedback table for patholo +-- Target: ydb.youpc.org (patholo's Supabase instance) +-- Apply via Supabase SQL editor or psql + +CREATE TABLE IF NOT EXISTS checklisten_feedback ( + id uuid PRIMARY KEY DEFAULT gen_random_uuid(), + feedback_type text NOT NULL, + checklist text NOT NULL DEFAULT '', + message text NOT NULL, + submitted_by text DEFAULT '', + created_at timestamptz NOT NULL DEFAULT now() +); + +ALTER TABLE checklisten_feedback ENABLE ROW LEVEL SECURITY; + +-- Authenticated users may insert feedback; read access is admin-only +-- (matches the gebuehrentabellen_feedback / glossar_suggestions pattern). +CREATE POLICY "authenticated_insert_feedback" ON checklisten_feedback + FOR INSERT TO authenticated + WITH CHECK (true); diff --git a/frontend/build.ts b/frontend/build.ts index 1e7712f..0d95d6b 100644 --- a/frontend/build.ts +++ b/frontend/build.ts @@ -8,6 +8,8 @@ import { renderDownloads } from "./src/downloads"; import { renderLinks } from "./src/links"; import { renderGlossar } from "./src/glossar"; import { renderGebuehrentabellen } from "./src/gebuehrentabellen"; +import { renderChecklisten } from "./src/checklisten"; +import { renderChecklistenDetail } from "./src/checklisten-detail"; const DIST = join(import.meta.dir, "dist"); @@ -27,6 +29,8 @@ async function build() { join(import.meta.dir, "src/client/links.ts"), join(import.meta.dir, "src/client/glossar.ts"), join(import.meta.dir, "src/client/gebuehrentabellen.ts"), + join(import.meta.dir, "src/client/checklisten.ts"), + join(import.meta.dir, "src/client/checklisten-detail.ts"), ], outdir: join(DIST, "assets"), naming: "[name].js", @@ -56,6 +60,8 @@ async function build() { await Bun.write(join(DIST, "links.html"), renderLinks()); await Bun.write(join(DIST, "glossar.html"), renderGlossar()); await Bun.write(join(DIST, "gebuehrentabellen.html"), renderGebuehrentabellen()); + await Bun.write(join(DIST, "checklisten.html"), renderChecklisten()); + await Bun.write(join(DIST, "checklisten-detail.html"), renderChecklistenDetail()); console.log("Build complete \u2192 dist/"); } diff --git a/frontend/src/checklisten-detail.tsx b/frontend/src/checklisten-detail.tsx new file mode 100644 index 0000000..84ec088 --- /dev/null +++ b/frontend/src/checklisten-detail.tsx @@ -0,0 +1,95 @@ +import { h } from "./jsx"; +import { Sidebar } from "./components/Sidebar"; +import { Footer } from "./components/Footer"; + +export function renderChecklistenDetail(): string { + return "" + ( + + + + + Checkliste — patHoLo + + + + + +
+
+
+ + + Zurück zur Übersicht + + +
+
+
+

 

+

 

+
+
+
+ + + +
+
+ +
+
+
+
+ 0 / 0 +
+
+ +
+ +
+

+ Hinweis: Diese Checklisten dienen als Gedächtnisstütze und ersetzen keine Prüfung im Einzelfall. Maßgeblich sind die jeweils geltenden Verfahrensregeln. +

+
+
+
+
+ + {/* Feedback modal */} +