pageta/CLAUDE.md
Till JS 05dc5d7c33 feat: Feed + Recherche dormant stellen, Landing entsprechend bereinigen
Der kuratierte Feed widerspricht Pagetas eigenem Versprechen (kein
Engagement-Feed) und war der commodity-Teil der App. Die Recherche pinnte
RSS-Feeds an, die nie gelesen wurden — feed.ts zog nur aus mana-news-pool,
customFeeds wurde nie gefetcht. Beide Flächen daher aus der Nav genommen,
Code/Endpoints bleiben dormant im Repo.

- web: Feed- + Recherche-Tab aus +layout.svelte raus (Routen bleiben)
- docs/FEED.md: Begründung + Revival-Bedingung (mana-discover-Andockung)
- CLAUDE.md: Use-Case-Liste ehrlich gemacht
- landing: Feed/RSS aus Copy (app.ts, index.astro, ueber.astro) — zentriert
  auf Lese-Liste + Markierungen + Pocket-Umzug; ueber.astro nennt den
  Feed-Rückbau transparent

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 13:53:57 +02:00

5.5 KiB

CLAUDE.md — pageta repo

Guidance für Claude Code in diesem Repository.

Wenn du gerade neu bist: lies zuerst STATUS.md — dort steht der aktuelle Phasen-Stand und was offen ist. Dieses CLAUDE.md ist nur die Konventions- und Architektur-Referenz.

Was dieses Repo ist

Pageta — eigenständige Reader-Webapp des Vereins mana e.V. Aktiver Kern-Use-Case:

  1. Lese-Liste — Pocket-Style Save-it-later mit Highlights, Tags, Bulk-Import bis 200 URLs.

Feed (kuratierte News aus dem Plattform-Pool) und Recherche (RSS-Feed-Discovery) sind seit 2026-06-01 dormant — aus der Nav genommen, Code bleibt im Repo. Feed wegen Werte-Spannung zum Engagement-Feed-Verbot; Recherche, weil angepinnte Feeds keinen Lese-Ort hatten (der Feed fetchte customFeeds nie). Begründung + Revival-Bedingung (mana-discover-Andockung): docs/FEED.md.

Pageta ist eine Peer-App im mana-Ökosystem: redet HTTP/JWT mit mana-auth, mana-news-pool, mana-research, mana-share, mana-credits. Eigene DB mana_pageta, eigenes Frontend, eigene Deploy-Pipeline.

                  HTTP/JWT      ┌──────────────┐
   mana e.V.   ◄─────────────── │  pageta/     │  Postgres `mana_pageta`
   Plattform                    │  (this repo) │  pageta.mana.how
   (auth/credits/share/etc.)    └──────────────┘

Status

LIVE 🚀 + voll-featured (λ-0..λ-6 ). App unter app.pageta.com, API unter pageta-api.mana.how, Marketing-Landing auf pageta.com. Aktueller Detail-Stand + offene Punkte: STATUS.md.

Konventionen

  • pnpm 9.15.x, Node 20+, Turborepo 2.x
  • Tabs für Indent, single quotes, 100-col Prettier (.prettierrc.json ist die Source of Truth)
  • Stack: SvelteKit 2 + Svelte 5 (runes-only) für Web, Hono + Bun + Drizzle für API, Postgres mit pgSchema('reader')
  • Drizzle 0.38 / drizzle-kit 0.30 / zod 3 — Parität zur managarten- und mana-Plattform-Toolchain
  • JWT-Validation lokal via JWKS-Cache (5 min), niemals Live-Call zu mana-auth pro Request
  • Service-to-Service-Calls via X-Service-Key
  • Tests: Vitest für Unit/Integration
  • Formatierung: pnpm run format vor jedem Commit

Architektonische Invarianten

  1. Event-sourced, local-first. User-owned-Daten (Lese-Liste, Highlights, Tags, Warnungen) laufen seit der G-3-Migration (2026-05-19) über sync2.mana.how mit lokalem EventLog/Outbox via @mana/event-syncnicht mehr server-authoritative. HTTP-only gegen die pageta-API bleiben nur stateless-Compute (Feed, /articles/extract/preview, /summarize, /research). Die retired user-CRUD-Routen antworten 410.
  2. Eigene Postgres-DB mana_pageta mit Schema-Isolation via pgSchema('reader').
  3. Föderation über @mana/shared-app-tpl. Pflicht-Endpoints (/.well-known/mana-app.json, /healthz, /api/v1/share/receive, /api/v1/tools/:name, /api/v1/search, /api/v1/dsgvo/...) kommen aus dem geteilten Boilerplate.
  4. Encryption initial AUS. Nachrüstbar, wenn sensibles Feld auftaucht. Reading-List, Highlights, Preferences sind heute plaintext.
  5. Keine externe SaaS, wo vermeidbar. Erlaubte Ausnahmen kommen über mana-Plattform.
  6. Aggregator-Policy gilt für kuratierten Feed-Pool und RSS-Recherche — siehe mana/docs/AGGREGATOR_POLICY.md. User-Agent ManaPageta/0.1 (+https://pageta.mana.how), robots.txt-Respekt.

Repo-Struktur

pageta/
├── apps/
│   ├── api/                  Hono+Bun-Backend (Port 3099)
│   └── web/                  SvelteKit-Frontend (Port 3100)
├── packages/
│   └── pageta-domain/         Pure-TS: Feed-Engine-Scoring, Types,
│                             Source-Meta-Liste
├── infrastructure/           docker-compose, tunnel-config
├── docs/                     DOMAIN.md, etc.
├── app-manifest.json         Source of Truth für Föderation
└── .github/workflows/        ci.yml, deploy.yml

@mana/* Konsumation

Pageta zieht alle Shared-Pakete aus Verdaccio (pkg.mana.how):

  • @mana/shared-share-protocol — Manifest, Envelope-Schemas
  • @mana/shared-app-tpl — Pflicht-Endpoint-Boilerplate
  • @mana/shared-hono — Auth-Middleware, Health-Routes, Error-Handler
  • @mana/shared-auth — Client-SDK für Login-Flow
  • @mana/shared-rss — RSS-Parsing + Readability (nach Lift-A; bis dahin vendored in apps/api/src/lib/shared-rss/)
  • @mana/shared-types, @mana/shared-icons, @mana/shared-i18n, @mana/shared-theme, @mana/shared-tailwind
  • @mana/themes — Theme-Variant (TBD)
  • @mana/shared-ui-2 — Greenfield-Komponenten

Wichtige Cross-Repo-Doks

  • mana/docs/FEDERATION.md — Architektur-Grundlagen
  • mana/docs/SHARE_PROTOCOL.md — Manifest- und Envelope-Schemas
  • mana/docs/MANA_AUTH_FEDERATION.md — App-Identitäts-Modell
  • mana/docs/SHARED_PACKAGES.md — Versionierungs-Disziplin
  • mana/docs/PORTS.md — Port-Allokation (pageta-api: 3099, pageta-web: 3100)
  • mana/docs/AGGREGATOR_POLICY.md — Crawl- + Source-Policy

Lokal entwickeln

pnpm install
pnpm docker:up                 # Lokales Postgres :5443
pnpm --filter @pageta/api db:push
pnpm dev                       # api + web parallel

Voraussetzungen:

  • mana-Plattform-Stack lokal laufend (mana-auth zumindest für Login- Test), oder Auth via JWT-Stub in DEV.
  • Verdaccio-Token in ~/.npmrc (npm login --registry=https://pkg.mana.how)