Skip to content

Phase 10 — Marketplace + Power-Features

Status: 10.1 (Marketplace-Plattform) IST UMGESETZT (2026-05-01). Siehe marketplace-implementation.md fuer den Ist-Stand.

10.2-10.6 (Versions-Diff, Y.js-Multi-User, Mobile-Edit, API-v2, Premium-Templates): weiterhin Konzept — die Premium-Templates-Idee ist via Stripe-Connect bereits in 10.1 enthalten.

Geschaetzte Dauer (urspruenglich): Variabel — modular in 10.1..10.6 aufgeteilt, je 1–4 Tage.


Ausgangslage nach Phase 9

Phase 9 hat Export/Import + Clone + Versionierung geliefert. Damit kann ein Schul-Admin einen Flow exportieren als .flow.json, das per E-Mail/GitHub/Forum teilen, eine andere Schule importiert es → fertig.

Was fehlt:

  • Zentraler Ort wo curated Templates entdeckbar sind (Marketplace)
  • Versions-Diff zwischen v1 und v2 desselben Templates
  • Multi-User-Live-Edit (Y.js — wurde in Phase 4.7 entfernt, koennte zurueckkommen)
  • Mobile-Edit (heute Read-Only)
  • API-Versioning v2 (echte Breaking-Change-Strategie)
  • Fixed-Author-Templates / Premium-Templates (Drittanbieter verkauft Templates ueber Marketplace)

Sub-Phasen

10.1 — Marketplace-Plattform: zentrale Template-Registry (~3-4 Tage)

Vision: Schulen koennen kuratierte Process-Engine-Templates entdecken + 1-Click-Aktivieren. Wie n8n-Marketplace oder Zapier-Templates.

Architektur:

┌─────────────────────────────────────────────────────────┐
│   prilog-marketplace (neuer Service oder admin-Modul)   │
│   - PostgreSQL-Tabelle marketplace_templates            │
│   - Volltextsuche (Postgres tsvector)                   │
│   - Kategorien: Schul-Workflows, Verein, Kita, ...      │
│   - Bewertungen (👍/👎)                                  │
│   - Meta: author, license, lastUpdated, downloads       │
└──────────────────────┬──────────────────────────────────┘

                       ▼ GET /marketplace/templates
                       │ POST /marketplace/install/:id

┌──────────────────────┴──────────────────────────────────┐
│   prilog-backend-api / Hub im Web-Client                │
│   - "Marketplace"-Tab im Flows-Hub                      │
│   - Liste mit Suchleiste + Kategorie-Filter             │
│   - Detail-Page: Beschreibung, Components-Preview,      │
│     "Auf Tenant aktivieren"-Button                      │
│   - One-Click-Install: clone-from-marketplace           │
└─────────────────────────────────────────────────────────┘

Tabelle:

prisma
model MarketplaceTemplate {
  id          String   @id
  slug        String   @unique
  name        String
  description String
  category    String   // 'school' | 'verein' | 'kita' | 'health' | ...
  appKind     AppKind
  authorName  String
  authorEmail String?
  license     String   // 'MIT' | 'CC-BY-SA' | 'commercial'
  payload     Json     // das `prilog.process-engine/v1` JSON
  downloads   Int      @default(0)
  rating      Float    @default(0)
  lastUpdated DateTime
  isFeatured  Boolean
}

Endpoints:

  • GET /marketplace/templates — paginated, filterbar nach category, appKind, q (Volltext)
  • GET /marketplace/templates/:slug — Detail
  • POST /marketplace/install/:slug — kopiert payload als ProcessTemplate auf den aktuellen Tenant
  • (Admin) POST /admin/marketplace/templates — Template hinzufuegen
  • (Admin) PUT /admin/marketplace/templates/:slug/feature — featuren

Curation: Erstmal nur Prilog-Team kann Templates hinzufuegen (Admin-Endpoint). Spaeter: Drittanbieter koennen Templates submitten, Prilog reviewt + freischaltet.

Auswirkungen:

  • Neuer "Marketplace"-Tab im Flows-Hub
  • 5–10 vorgefertigte Templates fuer Demo (Schul-Klingel, Krankmeldung, Notfall, etc.)
  • Nicht im Scope: Premium/Bezahl-Templates (wuerde Stripe-Integration brauchen)

10.2 — Versions-Diff (~1 Tag)

Heute: "Neue Version" macht Clone, alte wird archiviert. User kann zwischen Versionen nicht vergleichen.

Phase 10.2:

  • GET /process/templates/:id/diff/:otherId — liefert strukturierten Diff
  • Frontend-Page /flows/:id/diff/:otherId: 3-Spalten-View
    • Components added (gruen), removed (rot), changed (gelb)
    • Edges added/removed/changed
    • Config-JSON-Diff pro Component (Monaco-Editor mit diff)

Aufwand: Backend-Diff ist trivial (Set-Vergleich), Frontend mit Monaco-diff ist die meiste Arbeit.


10.3 — Multi-User-Live-Edit (Y.js zurueck) (~2-3 Tage)

Heute: Optimistic local state, save bei Blur. Wenn 2 Admins gleichzeitig im Editor sind → Conflict beim Save (last-write-wins, kann Daten verlieren).

Phase 10.3:

  • Y.js als Conflict-free Datenmodell pro ProcessTemplate
  • Y.js-Websocket bei /api/platform/v1/process/templates/:id/yjs
  • Frontend nutzt y-react-flow (statt direkter setState)
  • Persistenz: Y.js-Updates batched in process_templates.yjsState (Bytes-Spalte)
  • Awareness: zeige andere User als Cursor + Avatar im Canvas

Aufwand: Y.js-Integration mit React-Flow ist nicht-trivial. Es gibt OSS-Loesungen aber die sind nicht plug-and-play.

Risiko: Y.js + Process-Engine = zwei Wahrheits-Quellen. Was ist authoritativ wenn ein Y.js-Update auf eine geloeschte Component zeigt?

Alternative-Plan: Optimistic-Lock via template.version-Field. Frontend schickt If-Match: <version>-Header. Backend lehnt mit 409 ab wenn Version nicht stimmt. Frontend zeigt "Andere haben editiert — neu laden". Viel einfacher, aber kein "live" Multi-User.


10.4 — Mobile-Edit (~2-3 Tage)

Heute: Mobile zeigt Read-Only-Liste der Components.

Phase 10.4:

  • Mobile-Edit-Mode: Add/Remove Components aus der Liste (vertikales scrollen, swipe-to-delete)
  • Edge-Editing als Modal: "Wohin soll dieser Component verbinden?" mit Component-Picker
  • Properties-Panel als Bottom-Sheet
  • Test-Run-Button bleibt sichtbar
  • Drag-and-Drop ist out-of-scope (touchscreen-React-Flow ist eine Welt fuer sich)

Aufwand: UI-Polish primaer. Funktional einfach, aber pixel-perfekt mobile braucht Zeit.


10.5 — API-Versioning v2 (~1 Tag, defer bis es noetig ist)

Heute: Alle Endpoints unter /api/platform/v1/process/*. OpenAPI-Spec hat info.version: '1.0.0'.

Trigger fuer v2: wenn ein Drittanbieter-Kunde einen Breaking-Change blockiert. Wir koennen heute Backwards-Compatible bleiben — v2 wird erst noetig wenn:

  • ProcessTemplate-Schema sich grundlegend aendert (z.B. components werden nested)
  • ComponentKind-Config-Format ist nicht mehr abwaerts-compatible
  • Auth-Mechanismus aendert sich

Vorbereitung:

  • Routes unter /v1/ aliasen (heute: direkt unter /process/ — fuer v2 muessten wir /process/v2/ aufmachen)
  • ProcessTemplate.version-Field bedeutet Template-Version, nicht API-Version — das verwirrt. Doku-Klarstellung.

Defer: kein User braucht v2 heute. Aber ich notiere die Hooks die wir vorgespannt haben:

  • OpenAPI hat x-api-version: v1 schon drin
  • Endpoints sind versionsfaehig (Pfad-Prefix)

10.6 — Premium-Templates / Stripe-Integration (~1 Woche, post-MVP)

Vision: Drittanbieter-Authoren koennen Templates kostenpflichtig im Marketplace anbieten. Schule kauft → bekommt Template + Support.

Architektur:

  • MarketplaceTemplate.priceCents Feld
  • Stripe-Connect fuer Author-Payouts (analog zu billing/developer-payout.service.ts der schon existiert)
  • 70/30 Revenue-Split (Author/Prilog)
  • Activate-Endpoint prueft erst Subscription, dann clone

Voraussetzung: Marketplace-Plattform (10.1) muss erst da sein. Plus: Stripe-Connect-Onboarding fuer Authors (separate Phase).

Defer: wenn ein Author das aktiv anfragt. Bis dahin alles MIT-Lizenz im Marketplace.


Kombinations-Strategie

Phase 10 ist zu gross fuer "ein Stint". Vorschlag:

  1. Marketplace 10.1 zuerst — groesster sichtbarer Win, baut auf Phase 9 Export/Import auf (gleiches Format!).
  2. Versions-Diff 10.2 dann — 1-Tages-Win, schoen polish-Effekt.
  3. Mobile-Edit 10.4 — vor 10.3 weil weniger Risiko.
  4. Y.js 10.3 — wenn echte Multi-User-Konflikte auftreten.
  5. API-v2 + Stripe — defer bis Trigger.

Was NICHT in Phase 10 gehoert

  • GUEST-Permissions-Blocker (siehe project_open_items.md) — eigenes Thema, vor Phase 10 prio
  • ClamAV — Sicherheit, vor Marketplace prio (Templates koennten Schadcode-Refs in Configs enthalten)
  • E2EE-Rooms — orthogonal zur Engine
  • App-Store-Vision (project_app_store_vision.md) — anderer Begriff: "Apps" sind Module die ComponentKinds liefern, "Marketplace" sind nur Templates/Configs

Akzeptanz-Kriterien (Marketplace 10.1)

KriteriumVerifizierung
Marketplace-Tabelle existiertPrisma-Migration applied
5-10 Default-Templates geseedetBeim Backend-Start oder via Admin-Endpoint
Frontend "Marketplace"-Tab im HubClick → Liste sichtbar
Suche + Kategorie-Filter funktioniertManuell
Detail-Page mit Components-PreviewLese-Endpoint liefert Payload
1-Click-Install kopiert auf TenantVerify ProcessTemplate.metadata.marketplaceSlug existiert
Downloads-Counter zaehlt hochNach Install
Auto-Update bei Marketplace-UpdateNICHT in 10.1 — User muss manuell neu installieren

Risiken

RisikoMitigation
Marketplace-Templates enthalten boesartige flow.http-request-URLsSSRF-Block-Liste greift schon (Phase 3.5). Plus: Curation-Pflicht.
Drittanbieter-Templates haengen von TenantSecrets ab die der Schul-Admin nicht hatMarketplace-Detail-Page listet erforderliche Secrets ("Du musst erst stripe_api_key setzen")
Updates an Marketplace-Templates erreichen installierte Templates nichtabsichtlich — Templates sind Snapshots zum Install-Zeitpunkt. Unterscheidet sich von "App-Updates" der Engine selbst.
Authoren wollen ihre Templates nachtraeglich aendern und installierte Schulen sollen profitierenPhase 11+: Subscription-Modell, "Update verfuegbar"-Banner im Hub

Anschluss

  • Marketplace baut direkt auf Phase 9 (gleiches .flow.json-Format)
  • App-Store-Vision (project_app_store_vision.md): Marketplace ist die Template-Schicht, App-Store ist die Module-Schicht (eigene ComponentKinds)
  • ClamAV (project_clamav_plan.md) sollte vorher live sein wenn Marketplace User-Uploads erlaubt

Schaetzung

SubTage
10.1 Marketplace-Plattform3-4
10.2 Versions-Diff1
10.3 Multi-User-Live-Edit (Y.js)2-3
10.4 Mobile-Edit2-3
10.5 API v2 (defer)1 wenn noetig
10.6 Premium + Stripe (defer)1 Woche wenn noetig
Aktiv geplant: 10.1 + 10.2 + 10.46-8

Was ich nach Phase 9 angefangen habe und nicht beendet ist

Nichts offen. Phase 9 ist sauber abgeschlossen, deployed, getestet (Roundtrip Export/Import). Editor ist marketplace-ready ohne dass Marketplace-Plattform da ist — die Schul-Admins koennen heute schon .flow.json per E-Mail teilen.