En enkel løsning for å lage attester som kan verifiseres digitalt.
Når noen trenger en attest, fyller de ut et skjema med navn, rolle og tidsperiode. Systemet lager en PDF, og lagrer en hash av innholdet i databasen. Attesten får en QR-kode som lenker til en verifiseringsside — der kan hvem som helst sjekke at attesten er ekte.
Admin-brukere kan logge inn for å godkjenne forespørsler, redigere maler og oppdatere signaturer.
- Next.js + React (App Router)
- TypeScript
- Material UI
- Nhost (Postgres + Hasura + Auth)
- pdfme for PDF-generering i nettleseren
- Cloudflare Pages
organizations— identitet (slug, navn). Ingenting personlig.org_assets— per-org innholdsbibliotek (signaturer, logoer, tekstblokker, oppslagslister). Default-flagget styrer hva som hentes inn automatisk på nye attester.templates— uforanderlige PDF-maler. Hver mal har en pdfme-layout, etform_schema(skjemaet innsenderen ser), ogfield_bindings(hvor hvert PDF-felt henter sin verdi: skjema, system, asset, oppslag, sammensatt tekst, …).submissions— innsendte data, slettes manuelt etter PDF-generering.certificates— kun id, hash, template-id, org-id, tidsstempel. Ingen personalia.
Se CLAUDE.md for personvernsmodellen og hvorfor det er viktig at strukturen forblir slik.
src/app/
api/ — server-side API-ruter (DB-tilgang via Hasura admin)
login/ — admin-innlogging og dashboard
verify/ — gamle offentlige verifiseringssiden (legacy)
org/ — per-org offentlig form og verifisering
pdfinfo/ — bundlede pdfme-maler og startermaler
util/ — resolveBinding, validateTemplate, hashing, …
types/ — formSchema, fieldBindings, orgAssets, templateTypes
SQL-filer i scripts/migrations/ kjøres i Hasura SQL-konsollen, så
sporer du de nye/endrede tabellene i Hasura-grafQL-skjemaet.
Krever Nhost-miljøvariabler i .env.local — kopier fra .env.example.
cp .env.example .env.local
npm install
npm run dev