pageta/docs/FEED.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

4.7 KiB
Raw Permalink Blame History

FEED.md — Feed und Recherche sind geparkt

Status: dormant seit 2026-06-01. Weder Feed noch Recherche sind in der Navigation (web + native). Code, Endpoint und Scoring-Engine bleiben im Repo, werden aber nicht gebaut/gewartet, bis die Revival-Bedingung unten erfüllt ist.

Die Recherche ist mitgeparkt, weil sie ohne den Feed ins Leere lief — siehe Abschnitt „Recherche" unten.

Was der Feed war

Ein kuratierter Nachrichten-Strom aus dem zentralen mana-news-pool, personalisiert über eine transparente Regel-Engine:

score = max(recency, 0.05) × topicWeight × sourceWeight

7 feste Themen (tech, wissenschaft, weltgeschehen, wirtschaft, kultur, gesundheit, politik) mit je ~34 kuratierten Quellen. Hard-Filter (selectedTopics, blockedSources, Sprache, weggewischte Artikel) vor dem Scoring, danach absteigend sortiert. Jede Reaktion („interessiert mich" / „nicht") justierte die Gewichte in der preferences-Tabelle nach. Kein ML, keine Black-Box — deterministisch und nachvollziehbar.

Warum geparkt

Zwei Gründe, der erste wiegt schwerer:

  1. Werte-Spannung. Pagetas ganzer Pitch (VISION.md): „du bestimmst, was auftaucht, kein Engagement-Algorithmus." Ein kuratierter Vorschlags-Strom ist aber genau die Sorte Feed, die die App ablehnt — nur ein ehrlicher. Er fühlt sich fremd an, weil er es ist.

  2. Commodity-Charakter. Lese-Liste (Pocket-Style) und Recherche (RSS-Discovery) sind das Eigene, das sonst keiner so baut. Generische Welt-News kann jeder RSS-Reader. Der Feed war der schwächste, am wenigsten differenzierende Teil — Pflege-Aufwand für etwas, woran wir nicht glauben.

Entscheidung: ganz raus aus der Default-Nav, Code dormant, dieser Doc. Bewusst kein Settings-Opt-in-Flag — ein geflaggtes Feature muss weiter mitlaufen (Endpoint, Scoring, web+native-Parität) und zahlt bei jedem Refactoring Steuer. Dormanter Code zahlt nichts.

Revival-Bedingung

Der Feed kommt zurück, wenn er kein Welt-News-Aggregator mehr ist, sondern Entdeckung im mana-Ökosystem — angedockt an mana-discover (Cross-Discovery-Katalog, Port 3127, siehe mana/-Spec). Also:

„Was gibt's Neues bei mana" statt „was passiert auf der Welt."

Das wäre on-mission (eigene Inhalte, kein Engagement-Sog) und eigen statt austauschbar. Bis dahin bleibt der Feed aus.

Ein simples „den alten generischen News-Feed wieder anschalten" ist kein ausreichender Grund — das brächte die Werte-Spannung zurück.

Recherche (mitgeparkt)

Die „Recherche" entdeckte RSS-Feeds zu einer Seite/einem Thema und ließ dich sie anpinnen (preferences.customFeeds). Diese angepinnten Feeds wurden aber nie gelesen: apps/api/src/routes/feed.ts zieht ausschließlich aus mana-news-pool (Pool-Query nutzt selectedTopics / lang, nicht customFeeds). Schon als der Feed live war, tauchten angepinnte Feeds dort nicht auf — Recherche pinnte ins Leere.

Darum ist die Recherche mit dem Feed zusammen dormant gestellt: ohne Lese-Ort ist „RSS-Feeds finden und abonnieren" ein halbes Versprechen. Route /recherche + apps/api/src/routes/research.ts bleiben im Repo.

Revival: entweder einen echten Lese-Ort für angepinnte Feeds bauen (dann ist „abonnieren und lesen" wahr), oder die Recherche zusammen mit dem mana-discover-Feed neu denken.

Was dormant im Repo liegt

Teil Pfad
Web-Route + UI apps/web/src/routes/feed/+page.svelte
Web-API-Call apps/web/src/lib/api.tsfeed(limit)
Backend-Endpoint apps/api/src/routes/feed.ts (GET /api/v1/feed)
Scoring-Engine packages/pageta-domain/src/feed-engine.ts
Topics + Quellen packages/pageta-domain/src/sources.ts
User-Prefs apps/api/src/routes/preferences.ts
Reactions apps/api/src/routes/reactions.ts
Recherche-Route + UI apps/web/src/routes/recherche/+page.svelte
Recherche-API apps/api/src/routes/research.ts
Native View ../pageta-native/Sources/Features/FeedTabView.swift
Native Reader ../pageta-native/Sources/Features/FeedItemReaderView.swift
Native API-Call ../pageta-native/Sources/Core/API/PagetaAPI.swiftfetchFeed

Nicht entfernt, nur abgehängt — siehe Kommentare in apps/web/src/routes/+layout.svelte und ../pageta-native/Sources/App/RootView.swift.

Wenn du den Feed reaktivierst

  1. Revival-Bedingung erfüllt? (mana-discover-Andockung, nicht generische News)
  2. Web: Tab-Eintrag in apps/web/src/routes/+layout.svelte wieder einfügen (ICON.feed steht schon).
  3. Native: .feed zurück in iosTabs (RootView, iOS) und macSidebar (RootView, macOS); iOS-TabView-Block wieder ergänzen; Siri-Shortcut in AppShortcuts.swift ggf. anpassen.
  4. Diesen Doc auf den neuen Stand bringen.