feat: gebruikersprofiel met avatar, bio en uitgebreide beschrijving

- Schema: bio (160), bio_detail (2000) en avatar_data (bytea) op User
- POST /api/profile/avatar: validatie MIME-type + max 12 MB vóór verwerking,
  Sharp resize naar max 700x700 (fit inside), output WebP q85, opgeslagen als bytea in Neon
- GET /api/profile/avatar: serveert avatar met Cache-Control private 1u
- updateProfileAction: slaat bio en bio_detail op via Server Action + Zod
- ProfileEditor client component: avatar preview, upload met client-side validatie,
  bio-velden met tekenlimieten
- Settings page: profiel-sectie bovenaan, uitgeschakeld voor demo-gebruiker
- next.config: sharp als serverExternalPackage

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Janpeter Visser 2026-04-25 13:30:38 +02:00
parent 45011a3347
commit 1ff894a6c0
7 changed files with 300 additions and 1 deletions

View file

@ -2,6 +2,7 @@ import type { NextConfig } from "next"
import pkg from "./package.json"
const nextConfig: NextConfig = {
serverExternalPackages: ['sharp'],
env: {
NEXT_PUBLIC_APP_VERSION: pkg.version,
NEXT_PUBLIC_BUILD_DATE: new Date().toISOString(),