---
title: "Seitenvorhang"
description: "Das kurze Banner, das auf Ring-Seiten erscheint und Zum Startbildschirm hinzufügen oder ein beworbenes Produkt anbietet, wie Besucher es schließen, wie Händler Produkte freischalten und wie Seitenautoren eine Provision verdienen"
locale: "de"
---
# Seitenvorhang

Der Seitenvorhang ist ein schmales Banner (etwa 10% der Bildschirmhöhe), das erscheint, wenn ein Besucher aufhört zu scrollen. Es zeigt eines von zwei Angeboten: **Zum Startbildschirm hinzufügen** für die App oder ein **Produkt**, das ein Händler bewerben möchte. Auf Newsartikeln und Beiträgen im Mitgliederblog kann ein aus dem Vorhang hinzugefügtes Produkt dem Autor der Seite eine Provision einbringen, wenn der Käufer später bezahlt.

> **Info**
> Nutze die Tabs **Founder** / **Developer** in der Seitenleiste der Dokumentation, um diese Seite zu filtern. Gemeinsame Abschnitte gelten für beide Zielgruppen.

> **Success**
> **Status (2026-10-26):** In Layer 1 ausgeliefert und pro Klon über den Block `curtain` in `ring-config.json` konfigurierbar. Die Warteschlange berücksichtigt jetzt frühere Ablehnungen, sodass ein Besucher, der Heute nicht gewählt hat, dasselbe Banner auf der nächsten Seite nicht erneut sieht.

| Ohne Vorhang | Mit Vorhang |
|--------------|-------------|
| Installationshinweise hängen vom Browser ab | Ring bietet Zum Startbildschirm hinzufügen selbst an, einmal pro Richtlinienfenster |
| Autoren verdienen nichts an erwähnten Produkten | Autoren erhalten zusätzliches Guthaben auf bezahlte Warenkörbe, die auf ihrer Seite begonnen haben |
| Händler zahlen anderswo für Werbung | Händler schalten ein Produkt frei und legen eine Autorenprovision von 1% bis 10% fest |

### For founders

## Warum das für deine Community wichtig ist

Autoren bringen Leser, Händler wollen Käufer. Der Vorhang verbindet beide ohne separates Werbesystem. Ein Händler markiert ein Produkt, ein Autor verlinkt es oder schreibt über dasselbe Thema, und wenn ein Leser es kauft, wird der Autor mit Plattformguthaben belohnt. Die Auszahlung an den Händler sinkt nicht: Die Provision wird als zusätzliches Guthaben ausgegeben.

  
- **[News](/docs/features/news.md)** — Auf Artikelseiten erscheinen die Produktangebote.

  
- **[Mitgliederblog](/docs/features/member-blog.md)** — Mitgliederbeiträge erhalten dieselben Produktangebote und Autorenprovision.

  
- **[Shop](/docs/features/store.md)** — Händler schalten die Vorhang-Werbung im Produktformular ein.

### Typische Szenarien

- **Eine Food-Bloggerin verlinkt den Honig eines Hofs** in einem Artikel. Leser sehen den Honig im Vorhang, tippen auf In den Warenkorb und bezahlen innerhalb von 30 Tagen. Die Bloggerin erhält 5% dieser Position als Guthaben.
- **Ein neuer Besucher am Handy** liest drei Seiten. Auf einer davon bietet der Vorhang Zum Startbildschirm hinzufügen an. Er tippt auf Heute nicht und sieht es 24 Stunden lang nicht wieder.
- **Ein Leser tippt bei einem Produkt auf Nicht für mich.** Dieses Produkt erscheint ihm nie wieder.

```mermaid
flowchart LR
  A[Vendor enables advertise] --> B[Article page]
  B --> C[Curtain offer]
  C -->|Add to cart| D[Signed touch stored]
  D --> E[Paid order within 30 days]
  E --> F[Author gets credit]
```

### Wo du die Ergebnisse siehst

- **Händler:** Die Einnahmenseite zeigt einen 7-Tage-Trichter des Vorhangs: gezeigt, erneut gezeigt, CTA, heute nicht, nicht für mich, weggescrollt, bezahlt und ausgegebenes Guthaben.
- **Autoren:** My News (`/my-news`) zeigt denselben 7-Tage-Trichter für die eigenen Seiten plus verdientes Vorhang-Guthaben.
- **Betreiber:** Die Admin-Analyseseite zeigt denselben Trichter für den ganzen Klon, neben der aktiven Vorhang-Richtlinie.

### For developers

## Konfiguration

`ring-config.template.json` liefert diese Standardwerte. Überschreibe beliebige Schlüssel in der `ring-config.json` deines Klons. Die Werte liest `getCurtainPolicy()` in `lib/ring-config-core.ts`, validiert werden sie von `parseCurtainPolicy` in `features/curtain/lib/policy.ts`.

| Schlüssel | Standard | Erlaubte Werte |
|-----------|----------|----------------|
| `curtain.enabled` | `true` | `false` schaltet alle Angebote ab |
| `curtain.productSource` | `page_then_pool` | `page_then_pool`, `page_only`, `pool_only` |
| `curtain.maxImpressionsPerDay` | `5` | 1 bis 50 pro Angebot und UTC-Tag |
| `curtain.notTodayHours` | `24` | 1 bis 168 |

{`{
  "curtain": {
    "enabled": true,
    "productSource": "page_only",
    "maxImpressionsPerDay": 3,
    "notTodayHours": 48
  }
}`}

## Wie Angebote ausgewählt werden

`requestCurtainDrop` in `features/curtain/actions.ts` liefert bis zu drei Angebote (`CURTAIN_QUEUE_MAX`):

1. Wird komplett übersprungen, wenn die Richtlinie aus ist oder der Pfad mit `/admin`, `/login`, `/register`, `/auth`, `/vendor` oder `/store/checkout` beginnt.
2. Produktangebote nur auf Seiten, die über `CurtainPageProvider` eine `newsArticleId` übergeben (Newsartikel und Beiträge im Mitgliederblog). Der Artikel muss veröffentlicht und für den Betrachter laut `canViewNewsArticle` sichtbar sein.
3. **Seiten**produkte sind `/store/`-Links im Artikeltext. **Pool**produkte sind aktive Produkte mit `curtainAdvertiseEnabled`. Jedes muss beworben, aktiv und mit Preis versehen sein, darf kein eigenes Händlerprodukt des Betrachters sein und nicht unterdrückt sein.
4. Sortierung: zuerst verlinkte Produkte, dann Themenüberschneidung mit Kategorie und Tags des Artikels, dann weniger Einblendungen heute.
5. Ein freier Platz wird mit Zum Startbildschirm hinzufügen gefüllt, wenn der Browser nicht schon die installierte App ausführt.

`curtain-host.tsx` zeigt die Warteschlange an und wendet `canShowOffer` auf jedes Element an. Das behebt das Wiederauftauchen geschlossener Banner.

## Reaktionen der Besucher

| Reaktion | Wirkung |
|----------|---------|
| CTA | In den Warenkorb (Produkt) oder Installationshinweis (A2HS) |
| Heute nicht | Unterdrückt für `notTodayHours` ab jetzt |
| Nicht für mich | Für dieses Angebot dauerhaft unterdrückt |
| Wegscrollen | Wird protokolliert, keine Unterdrückung |

Einstellungen liegen in `localStorage` (`ring_curtain_prefs`) und für angemeldete Mitglieder zusätzlich in der Tabelle `curtain_preferences` (Migration `050`, Teil von `schema.sql`) über `syncCurtainPrefs`.

## Attribution und Provision

- Jedes Produktangebot trägt ein HMAC-`offerToken` aus `features/curtain/lib/offer-token.ts`, signiert mit `AUTH_SECRET`. Es verknüpft Angebot, Produkt, Autor und Artikel.
- CTA-Kontakte werden im Cookie `ring_curtain_attr` und im Speicher gehalten (30-Tage-Fenster, höchstens 12 Kontakte).
- Der Checkout behält nur Kontakte, die `verifyCurtainTouches` bestehen. Autor und Prozentsatz stammen aus dem Token und dem aktuellen Produkt, nie aus dem Browser.
- Nach der Zahlung schreibt `mintCurtainAuthorCommission` in `features/curtain/services/commission.ts` dem Autor Guthaben gut: Zwischensumme der Position mal Prozentsatz des Produkts (1 bis 10, Standard 5). Eigenkäufe, der Werber der Bestellung und Duplikate werden übersprungen, und es läuft nur, wenn Guthaben-Belohnungen aktiviert sind.
- Die Ereignisse `curtain_shown`, `curtain_response`, `curtain_cta`, `curtain_suppress` und `curtain_paid` speisen `getCurtainFunnel` in `features/analytics/lib/curtain-analytics.ts`.

## Freischaltung durch Händler

Das Produktformular des Händlers enthält `AdvertiseProductWidget` (`features/curtain/components/advertise-product-widget.tsx`). Es schreibt `curtainAdvertise: { enabled, commissionPercent }` und `curtainAdvertiseEnabled` in das Produkt. Ein Produkt ohne Preis kann nicht beworben werden.

## Häufige Fragen

### Auswirkung

#### Geht die Provision von der Auszahlung des Händlers ab?

Nein. Es ist zusätzliches Guthaben für den Autor, verbucht mit der Quelle `curtain_author`.

### Migration

#### Brauche ich eine Migration?

Nicht bei einer Neuinstallation. Bestehende Datenbanken brauchen `050_curtain_offers.sql` für `curtain_preferences` und den Analyse-Index.

### Betrieb

#### Wie schalte ich den Vorhang für einen Klon ab?

Setze `"curtain": { "enabled": false }` in der `ring-config.json` dieses Klons und baue neu.

  
- [features/store](/docs/features/store.md) — Abhängigkeit: Produkte, Warenkorb und bezahlte Bestellungen, die die Provision auslösen.

  
- [features/news](/docs/features/news.md) — Gleicher Ablauf: Artikelseiten mit Produktangeboten.

  
- [features/member-blog](/docs/features/member-blog.md) — Gleicher Ablauf: Mitgliederbeiträge zeigen dieselben Angebote.

  
- [features/rewards](/docs/features/rewards.md) — Siehe auch: Guthaben-Belohnungen, die für die Provision aktiviert sein müssen.

  
- [features/refcodes](/docs/features/refcodes.md) — Siehe auch: Empfehlungsattribution mit demselben 30-Tage-Fenster.
