Files
cvfs/apps/webapp
Claude f5621f120f Add paperless-ngx integration for document storage and share links
- dlib/integrations/paperless.py: sync HTTP client wrapping the paperless-ngx
  REST API (upload doc, poll task, create/delete share links, delete document)
- config: PAPERLESS_ENABLED, PAPERLESS_BASE_URL, PAPERLESS_TOKEN, PAPERLESS_TAG_IDS
- PublicAsset model: paperless_document_id + paperless_share_slug columns
- publication service: after creating the asset, if paperless is enabled upload
  the patched PDF and create a share link; stores doc id + share slug on the asset
- public routes: pass expires_at through to publish_version; new
  POST /{slug}/share-links endpoint to (re)create expiring share links on demand
- schemas: PublishRequest.expires_at, PublicAssetResponse.paperless_share_url,
  new ShareLinkRequest model
- frontend: paperless_share_url field on PublicAsset type, createShareLink()
  and expiresAt param on publishVersion() in api.ts
- .env.example: documented paperless env vars

https://claude.ai/code/session_01YPVs6uBwCvcwVMvrfLBBdu
2026-04-09 09:27:26 +00:00
..
2026-04-02 19:15:47 +02:00
2026-04-02 18:47:14 +02:00
2026-04-02 18:47:14 +02:00
2026-04-02 18:47:14 +02:00
2026-04-02 18:47:14 +02:00
2026-04-02 18:47:14 +02:00
2026-04-02 18:47:14 +02:00

Next.js 15 webapp with React 19, Tailwind CSS 4, Supabase auth, and Turbopack.

Start

bun dev
# or from project root: make run.webapp

Open http://localhost:3000.

Scripts

Command Description
bun dev Dev server with Turbopack
bun build Production build
bun start Serve production build
bun lint Run ESLint
bun typecheck Run tsc --noEmit

Auth

Auth is wired to Supabase via NEXT_PUBLIC_SUPABASE_URL and NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY. Set NEXT_PUBLIC_REQUIRE_AUTH=false in .env to disable auth-gating entirely (default for quick prototyping).

Structure

src/
  app/           - Next.js App Router pages
  components/    - Reusable bare-bones components (style last)
  utils/supabase - Supabase client helpers
  libs/          - Shared utilities
  locales/       - i18n strings (add languages as needed)