featurebugfixdocs

Changelog — March 24, 2026

Introduced a full Fumadocs documentation site for the etouch platform, fixed watermark preview rendering, hardened production email URL validation, and stabilized the GraphQL codegen pipeline.

✨ New Features

  • Fumadocs Documentation Site — New apps/docs application built with Fumadocs (Next.js 15 + MDX), running on port 3002. Includes full GraphQL API documentation (queries, mutations, subscriptions, types from a 1816-line schema), Prisma database model documentation (all models, fields, relations, enums), and developer guides covering setup, Coolify deployment, and the project workflow state machine. Uses the same design tokens as the main app: shadcn/ui New York, Tailwind v4, and oklch CSS variables. A dedicated Dockerfile with standalone output was added for Coolify deployment. #320 → released as v1.20.0

🐛 Bug Fixes

  • Docs Build Errors — Resolved a series of compatibility issues introduced with the new documentation site: aligned Fumadocs to v15/v11, fixed Tailwind CSS / PostCSS configuration, added the .source stub required by fumadocs-mdx@11, suppressed TypeScript errors on Fumadocs-generated types, removed invalid shell operators from the Dockerfile COPY step, created the public/ directory at build time, and stripped duplicate H1 titles from all MDX files. #321 #322 #323 #324 #325 #326 → released as v1.20.1 and v1.20.2

  • Watermark Previews — Replaced the repeated watermark mosaic with a single, discreet "e-do studio" watermark. Watermark previews are now served consistently through the API with a cache-busting version token. Added a forced backfill option for existing assets and aligned metadata preview URLs accordingly. #319

  • Production Email URLs & GraphQL CodegengetBaseUrl() now relies directly on loadEnv() instead of filtering localhost and then falling back to it, preventing broken email links in production. loadEnv() now validates that AUTH_BASE_URL and DATABASE_URL contain no localhost references in production, crashing at boot with a clear message if they do. Stripe config throws on missing NEXT_PUBLIC_SITE_URL. Codegen no longer scans node_modules and .next, and the duplicate TrackDownload operation was renamed to TrackAssetDownload to unblock codegen. Workers now log authBaseUrl at startup for diagnostics. #318 → released as v1.19.1

By Théo Daguier