15 KiB
Pageta — Status
Letzter Stand: 2026-05-22. LIVE 🚀 + voll-featured
2026-06-03 — Rechtsklick-Kontextmenü auf der Lese-Liste
Geteiltes @mana/shared-ui/organisms ContextMenu auf jedem Artikel-<li>:
Lesen / Original öffnen / Status (gelesen·ungelesen) / Archivieren bzw.
Aus-Archiv / Taggen / Löschen — dieselben api.batch*-Handler wie die
Batch-Toolbar, aber direkt pro Artikel ohne Auswahl-Modus. Ergänzt die
sichtbaren Aktionen (Touch/Mobile bleibt bedienbar). svelte-check 0 neue
Fehler, build grün, Screenshot verifiziert, live auf app.pageta.com.
(683ff3f)
Folge-Sprint 2026-05-22 — Web-/Native-Parität + Cross-Device
Landing-Cutover 2026-05-22 19:30
Subdomain-Migration ausgeführt (LANDING_CUTOVER.md):
pageta.com zeigt jetzt auf die Astro-Marketing-Landing
(pageta-landing:3201), die App lebt unter app.pageta.com
(pageta-web:3100, war vorher pageta.com).
GET https://pageta.com/→ 200 Marketing-Landing (Title: „pageta — Pocket ist tot. Lies in Ruhe weiter.")GET https://pageta.com/{ueber,mitwirken,pocket-import}→ 200GET https://pageta.com/sitemap.xml→ 200 (4 Marketing-URLs)GET https://pageta.com/.well-known/apple-app-site-association→ 200 application/json (Universal Links bleiben funktional)GET https://pageta.com/{lese-liste,article/*,feed,konto,markierungen,recherche,auth/*}→ 301 → app.pageta.com/...GET https://app.pageta.com/→ 307 → /lese-liste (App-Default)GET https://app.pageta.com/{lese-liste,feed,konto,markierungen}→ 200GET https://pageta-api.mana.how/healthz→{"status":"ok"}POST https://pageta-api.mana.how/api/v1/summarize(kein JWT) → 401 ✓
Offene Punkte aus dem Cutover:
- Native iOS-App-AASA hardcoded auf
pageta.com— Universal-Links auf/article/*und/lese-liste/*werden weiterhin vom Landing-nginx korrekt ausgeliefert (gleicher JSON-Payload, gleiche App-IDs). Im nächsten TestFlight-Build verifizieren. - Erst-Login auf
app.pageta.combei einem User, der vorher aufpageta.comeingeloggt war: ggf. erneutes Login nötig, weil App- spezifische Cookies (falls vorhanden) auf der alten Apex-Domain verwaisen. mana-auth-Cookie auf.mana.howist nicht betroffen.
Cross-Device Cookie-Wall via @mana/shared-schemas@0.1.11
warning: string | null lebt jetzt im event-sourced ArticleState,
nicht mehr in localStorage. Zwei neue Events:
ArticleWarningFlaggedsetztstate.warning(heute nur"probable_consent_wall")ArticleWarningClearedlöscht ihn (UI „Hinweis ausblenden")
Bewusst eigene Events statt ArticleSaved-Payload-Erweiterung —
evt_article_saved_v1 bleibt frozen. Native + Web schreiben + lesen
beide via ev/article:<id>-Aggregat; Banner zeigt sich auf jedem
Gerät, das den Event-Stream replayed hat.
Schaden + Recovery 2026-05-22 13:43:
Beim ersten Publish-Versuch wurde @mana/shared-schemas versehentlich
komplett unpublished (DELETE auf /-rev/latest). 0.1.1/0.1.6/0.1.7/
0.1.8/0.1.10 sind weg, nur 0.1.11 ist live. Recovery via Lockfile-Bump
pnpm installin allen 8 Schwester-Apps (uload/moodlit/werdrobe/ comicello/nutriphi/wordeck/mukke/herbatrium) auf^0.1.11. Funktional unkritisch — Schema-Änderungen nur in pageta-Sub-Schema, andere Sub-Schemas byte-gleich.
Konkret eingefügt, alles im Web:
- Routing-Restructure:
/redirected auf/lese-liste(= Standardseite, wie Native). Feed-Tab lebt jetzt auf/feed. Tab-Reihenfolge im Layout spiegelt Native: Lese-Liste · Markierungen · Feed · Recherche · Konto. /kontoneue Seite: E-Mail/Tier/Konto-ID, Abmelden + „Konto verwalten ↗",ThemeToggle+VariantPicker(alle 8 mana-Themes), Bookmarklet-Link, Über-Sektion (Datenschutz/Verein/pageta.com). ThemeToggle ist aus dem Header raus (lebt jetzt in /konto), genau wie bei Native.- Save-from-Feed: Feed-Items haben jetzt einen „+ In Lese-Liste"-Button (zuvor read-only, nur Original-Link).
- Vor/Nach-Sibling-Navigation im Reader-Footer (Pfeil + Titel-Karte, identisch zur Native-Variante).
- Cookie-Wall-Banner im Web-Reader. Lokal-persistiert via
localStorage-Map keyed by articleId (Schema-Bump in@mana/shared-schemasvermieden). Banner mit „Original im Browser öffnen" + „Hinweis ausblenden". - Tag-Read-back:
Article.tagsdurchgereicht ausArticleState. Reader zeigt Tags als Pills + Tag-Hinzufügen-Input; emittiertArticleTagsSet. Native kann Tags ab sofort auch sehen, sobald sie das DTO-Feld liest (eigener Followup, betrifftpageta-native/Sources/Core/Domain/Article.swift). - Reading-Progress persistiert: Window-Scroll-Listener mit Debounce
(1.5 s), emit
ArticleProgressUpdatedab 2 %-Differenz; beim Re-Open springt der Reader an die gespeicherte Position.beforeunload-Hook flusht Pending-Progress vor Tab-Close. - LLM-Zusammenfassung im Reader: neue Route
POST /api/v1/summarizein pageta-api ruftmana-llmmit Aliasmana/fast-text. Client-Sektion „Zusammenfassen ✨" im Reader, ohne Persistierung (Volltext bleibt Source-of-Truth). Pendant zum NativeArticleSummarySection(Foundation Models / Gemma).
Phase
λ-0 ✅ + λ-1 ✅ + λ-2 ✅ + λ-3 ✅ + λ-4 ✅ + λ-5 ✅ + λ-6 ✅ +
Lift-A ✅ + Lift-B ✅ + CI ✅ + Deploy ✅ + Login-Flow ✅ +
Verein-Landing ✅ — pageta.mana.how ist erreichbar, alle
ursprünglich geplanten λ-Phasen sind live.
Folge-Sprint 2026-05-17
- Echter Login-Flow — Cards-Pattern: SSO-Cookie → /auth/refresh → JWT
in localStorage.
apps/web/src/lib/auth/session.svelte.ts,apps/web/src/routes/auth/callback/+page.svelte, AuthGate im Layout mit silent-refresh + Redirect zum Auth-Portal. mana-auth-web hatlesenin der App-Allowlist (Forest-Branding, pageta.mana.how + localhost:3100 als erlaubte Redirect-Origins). - Verein-Landing — mana-ev.ch zeigt Lesen als 12. App-Card +
Intro „elf eigenständige Produkte". Eigenes
lesen.svg. - λ-5 Bulk-Import — POST /api/v1/imports (cap 200/Job), Tick-Worker
alle 2s mit Postgres
pg_try_advisory_lock, State-Machine pending → extracting → saved/duplicate/error. Worker bootet im Container. - λ-6 Tool-Handler — 5 Tools live unter /api/v1/tools/:name
(save_article, list_articles, archive_article, add_article_tag,
add_article_highlight). Alle JWT-gated + zod-validated. JSON-Schemas
pro Tool im
app-manifest.json#tools[]für mana-mcp-Discovery.
Live-Smoke (2026-05-16 19:13)
GET https://pageta.mana.how/→ 200 (SvelteKit-SSR)GET https://pageta-api.mana.how/healthz→{"status":"ok","app":"pageta"}GET https://pageta-api.mana.how/.well-known/mana-app.json→ ManifestGET https://pageta-api.mana.how/api/v1/feed(kein JWT) → 401POST https://pageta-api.mana.how/api/v1/dsgvo/export(kein Key) → 401POST .../dsgvo/export(Service-Key) → 200, leerer User-Exportmana-news-poolTick: 1133 Artikel im Pool
Container (alle healthy)
| Container | Port | Wo |
|---|---|---|
pageta-postgres |
127.0.0.1:5447 | pageta-postgres-Volume /Volumes/ManaData/pageta/postgres/ |
pageta-api |
127.0.0.1:3099 | im Netz pageta_default + manacore-monorepo_default |
pageta-web |
127.0.0.1:3100 | im Netz pageta_default |
mana-news-pool |
127.0.0.1:3079 | im Netz manacore-monorepo_default, DB mana_news_pool auf mana-infra-postgres |
Was steht
| Phase | Inhalt | Status |
|---|---|---|
| λ-0 | Repo-Skelett: pnpm-workspace, turbo, tsconfig, prettier, docker-compose | ✅ |
| λ-0 | apps/api Hono-Skeleton (/healthz, /.well-known/mana-app.json) |
✅ |
| λ-0 | apps/web SvelteKit-Skeleton mit drei Tab-Stubs |
✅ |
| λ-0 | packages/pageta-domain Pure-TS Feed-Engine + Types + Sources, 9/9 Tests grün |
✅ |
| λ-0 | PORTS.md-Eintrag in mana/ (pageta-api: 3099, pageta-web: 3100) |
✅ |
| λ-1 | DB-Schema (Drizzle, 8 Tabellen in Schema reader), db:push grün |
✅ |
| λ-2 | Auth-Middleware (JWKS + serviceKey), /dsgvo/export+delete, /search, /share/receive, /tools/:name |
✅ |
| λ-3 | Core-API: /feed (Pool-Proxy + Server-side-Ranking), /articles CRUD, /highlights, /preferences, /reactions mit Auto-Weight-Diff, /extract/preview |
✅ |
| λ-4 | Web-UI: 3 Tabs, API-Client, Feed + Lese-Liste, Reader-Detail /article/[id] mit Highlight-Selection (4 Farben, Selection-Listener, Plain-Text-Offsets, Highlight-Liste mit Delete), Status-Toggles, Favorit, Delete |
✅ |
| CI | .github/workflows/ci.yml — install, type-check, db:push, build, web-check, domain-tests |
✅ |
| Compose | infrastructure/docker-compose.production.yml + Dockerfiles für api/web; .env.production.example |
✅ |
| λ-5 | Bulk-Import-Worker (Job/Items/Pickup-Pipeline gegen 200 URLs/Job) | offen |
| λ-6 | Föderation: accepts: [url] Handler vollständig, Tools-Handler-Implementierungen |
offen |
| λ-7 | Deployment auf mana-server (pageta.mana.how, pageta-api.mana.how) | bereit, ausstehend |
Plattform-Lifts (parallel, vor λ-7)
| Phase | Inhalt | Status |
|---|---|---|
| Lift-A | @mana/shared-rss aus managarten nach mana/packages/ + Verdaccio |
✅ (Code in mana/packages/shared-rss/, npm publish pending) |
| Lift-B | news-ingester aus managarten → mana-news-pool Plattform-Service (Port 3079) |
✅ (Code in mana/services/mana-news-pool/, eigene DB mana_news_pool, Schema pool, Dockerfile, Compose-Snippet im CLAUDE.md) |
| Lift-C | News-Research-Endpoints in mana-research integrieren |
deferred |
Verifizierter Stand (lokal, 2026-05-16)
pnpm installgrünpnpm docker:up→ Postgres :5443pnpm --filter @pageta/api db:push→ 8 Tabellen + 11 Indizes in Schemareaderpnpm --filter @pageta/api type-check→ grünpnpm --filter @pageta/api dev→ bootet auf :3099GET /healthz→ 200GET /.well-known/mana-app.json→ Manifest 200GET /api/v1/feed(ohne Auth) → 401GET /api/v1/articles(ohne Auth) → 401POST /api/v1/articles/extract/preview(ohne Auth) → 401POST /api/v1/dsgvo/export(ohne Service-Key) → 401POST /api/v1/dsgvo/export(mit Service-Key + userId) → 200 leerer Export
pnpm --filter @pageta/domain test→ 9/9 grünpnpm --filter @pageta/web check→ 0 errors / 0 warnings (252 files)pnpm --filter @pageta/web build→ grün, adapter-node Bundle
Was noch fehlt für „real benutzbar"
- Echte Auth-Integration: heute
localStorage['pageta.dev_token']-Stub. Migration auf@mana/shared-authmit Auth-Portal-Redirect kommt mit λ-6 (oder mit dem Auth-Portal-Plan im Memoryproject_auth_portal_migration). - Echter Pool-Endpoint:
/api/v1/feedruftMANA_NEWS_POOL_URL/feed— zeigt heute auflocalhost:3066(managartens news-ingester). Nach Lift-B wechseln aufmana-news-pool:3079. - Reader-Detail-View
/article/[id]mit Highlight-Selection - Recherche-Tab (heute Stub) braucht mana-research-Endpoints
- CI (.github/workflows/ci.yml)
- Deploy (docker-compose.macmini.yml + Cloudflared)
Offene Punkte
- Port-Range knapp: 3099+3100 sind die letzten freien. Memoro/Who-Range (3100+) wird damit bewusst angekratzt — beide haben eigene Repos.
- Encryption AUS: Reading-List + Highlights bleiben Server-side plaintext
in Postgres
mana_pageta. Nachrüstbar wenn Threat-Modell sich ändert. shared-rssvendored: Code-Copy inapps/api/src/lib/shared-rss/. Wechsel auf Verdaccio-Paket nach Lift-A.- Tier-Gate: Manifest sagt
tier_required: "public". Wenn Lesen Beta bleiben soll bis Mature, hier umstellen +auth.apps-Eintrag bei mana-auth. - Source-Liste: SOURCES_META in
packages/pageta-domain/src/sources.tsmuss synchron mitmana-news-poolbleiben. Heute Source-of-Truth istmanagarten/services/news-ingester/src/sources.ts. Drift-Risiko bis Lift-B durch. - DEV-Token-Setup: kein lokaler mana-auth gestartet → man kann lokal
keine Live-Calls testen. Quick-Fix:
pageta.dev_tokenim Browser- LocalStorage von einemmana-auth-Token aus einer anderen App übernehmen. Sauber: Login-Flow gegenauth.mana.howin λ-6.