# Die Beispiel-Apps

Die mitgelieferten Apps sind die realen Konsumenten des Vertrags aus diesem Bereich. Die erste Tabelle ordnet jede App nach Profil, Bausteinen des Server-Teils, Ressourcen und Signatur; die zweite nennt Kategorie, Klasse und die Gruppe der Bedingungen. Drei Apps sind die Referenzen, an denen sich eine neue App orientiert.

> **Typ:** nachschlagen
> **Für wen:** Entwickler, die für ein Vorhaben die nächstähnliche App suchen oder wissen wollen, welche App welchen Baustein trägt.
> **Voraussetzung:** keine; die Nutzersicht je App steht im Handbuch.

## Drei Profile, drei Referenzen

| Profil | Was dazukommt | Referenz | Seiten |
|---|---|---|---|
| Nur Widget | Ein Widget mit `noResolver: true`, runtime- und authoring-Bündel, kein Server-Teil, keine Ressourcen, keine App-Datenbank. | `clock` — die kleinste vollständige App: ein Manifest, ein Widget, zwei Bündel. | [Widget, Konfiguration und Vorschau](/de/apps-sdk/widget-and-preview) |
| Plus Fetcher | Ein Server-Teil mit `@WidgetResolver` und `@Fetcher` gegen eine fremde Quelle; keine App-Datenbank. | `weather` — die Stadt lebt in der Widget-Konfiguration, der Fetcher holt Lage und Vorhersage in den Cache. | [Server-Teil: Resolver, Fetcher und Jobs](/de/apps-sdk/backend) |
| Plus Ressourcen und Datenbank | Ressourcentypen, die die Organisation im Portal pflegt, ein eigenes Schema `apps_<id>`, bei Bedarf ein `@JobHandler`. | `pharmacies-on-duty` — trägt jeden Baustein des SDK: Resolver, Fetcher, Job alle 30 Minuten, zwei Ressourcen, `legal`, `signing: 'required'`. | [Das Manifest](/de/apps-sdk/manifest), [Datenzugriff, Rechte und Bedingungen](/de/apps-sdk/data-access) |

Die Stufen sind nicht streng kumulativ: `menu-board` trägt Ressourcen und eigenes Schema, holt aber nichts aus dem Netz — „fremde Quelle“ und „eigene Daten“ sind zwei unabhängige Bausteine. `pharmacies-on-duty` ist die eine App, die beide trägt. Eine neue App klont die Struktur der nächstähnlichen Referenz.

## Alle Apps

Die fünf Marken-Apps `bbc`, `bild`, `ndr`, `spiegel` und `deutschlandfunk` erben Widget, Server-Teil und Darstellung von `tagesschau`; sie tragen nur ein eigenes Manifest und ihre Identität (Kennung, Beschriftung, Akzentfarbe, Thema, Schrift). Die Tor-Apps `onedrive` und `video-wall` bringen kein Widget mit.

| App | Widget | Profil | Bausteine des Server-Teils | Ressourcen / Datenbank | Signatur | Besonderheit |
|---|---|---|---|---|---|---|
| `clock` („Uhr“) | `clock` | nur Widget | — | — | `optional` | Referenz für das Profil „nur Widget“; Zeitzone je Instanz übersteuerbar. |
| `webpage` („Webseite“) | `iframe` | nur Widget | — | — | `optional` | Einzige App mit Abruf einer fremden Adresse ohne Server-Teil: der Player lädt die Seite selbst. |
| `notice-board` („Aushang“) | `rich-text` | nur Widget | — | — | `optional` | Sicheres Autoren-Markup: ein Markdown-Teil wird zu einem typisierten Block-Modell, nie zu HTML-Text. |
| `countdown` („Countdown“) | `countdown` | nur Widget | — | — | `optional` | Zählt auf einen Ziel-Zeitpunkt herunter; Ziel, Einheiten und Abgelaufen-Text stehen in der Konfiguration. |
| `countup` („Tage-Zähler“) | `countup` | nur Widget | — | — | `optional` | Zählt seit einem Ereignis hoch und hebt Meilensteine hervor. |
| `world-clock` („Weltzeit“) | `world-clock` | nur Widget | — | — | `optional` | Mehrere Zeitzonen nebeneinander als Liste gleichrangiger Kacheln. |
| `word-clock` („Wort-Uhr“) | `word-clock` | nur Widget | — | — | `optional` | Zeit als Satz statt als Zahl, Raster-Darstellung mit Sprachwahl. |
| `ticker` („Lauftext“) | `ticker` | nur Widget | — | — | `optional` | Einzige App mit Dauerbewegung; auf eingefrorenen Flächen ein Standbild der ersten Meldung. |
| `qr-code` („QR-Code“) | `qr-code` | nur Widget | — | — | `optional` | Erzeugt die QR-Matrix im Bündel (Adresse, WLAN, vCard, Freitext). |
| `youtube` („YouTube“) | `youtube` | nur Widget | — | — | `optional` | Bettet Videos ohne Tracking-Cookie vor der Wiedergabe ein. |
| `stream` („Live-Stream“) | `stream` | nur Widget | — | — | `optional` | Bringt einen HLS-Abspieler im Bündel mit, damit auch Browser ohne eigene HLS-Wiedergabe streamen. |
| `embed` („Einbettung“) | `embed` | nur Widget | — | — | `optional` | Rendert ein HTML-Fragment in einem abgeschotteten Rahmen ohne Zugriff auf die Player-Seite. |
| `menu-board` („Menükarte“) | `menu-board` | plus Ressourcen und Datenbank | `@WidgetResolver` | 1 Ressource (`cards`), Schema `apps_menu_board` | `optional` | Karten als Ressource der Organisation, die Tafel wählt eine Karte. Die Gültigkeit der Momentaufnahme endet am nächsten Wechsel (5 Uhr, Stichtag, Zeitfenster einer Kategorie). |
| `weather` („Wetter“) | `weather` | plus Fetcher | `@WidgetResolver`, `@Fetcher` | — | `optional` | Referenz für das Fetcher-Profil; zwei Wetteranbieter, der zweite als Ausweichquelle. |
| `rss` („RSS-Feed“) | `rss` | plus Fetcher | `@WidgetResolver`, `@Fetcher` | — | `optional` | Freie Feed-Adresse aus der Konfiguration; der Abruf läuft — wie bei `calendar` und `tagesschau` — über `APP_GUARDED_FETCH`. |
| `tagesschau` („Tagesschau“) | `tagesschau` | plus Fetcher | `@WidgetResolver`, `@Fetcher` | — | `optional` | Kuratierte Quellen statt freier Adresse; Basis der fünf Marken-Apps. |
| `calendar` („Kalender“) | `calendar` | plus Fetcher | `@WidgetResolver`, `@Fetcher` | 1 Ressource (`calendars`) im Dateispeicher der App | `optional` | Eigener ICS-Leser für Kalender-Abonnements; dokumentiert die Grenzen seiner Wiederholungsregeln. |
| `bbc`, `bild`, `ndr`, `spiegel`, `deutschlandfunk` | je gleichnamig | plus Fetcher (geerbt) | von `tagesschau` geerbt | — | `optional` | Marken-Apps: eigenes Manifest und eigene Anmutung, kein eigener Darstellungs- oder Server-Code. |
| `pharmacies-on-duty` („Notdienst“) | `pharmacies-on-duty-display` | plus Ressourcen und Datenbank | `@WidgetResolver`, `@Fetcher`, `@JobHandler` (`*/30 * * * *`) | 2 Ressourcen (`locations`, `schedules`), Schema `apps_pharmacies_on_duty` | `required` | Umfangreichste App und Referenz für Voll-Daten-Apps; `vertical: 'pharmacy'`; einzige App mit `signing: 'required'`. |
| `opening-hours` („Öffnungszeiten“) | `opening-hours` | Resolver ohne Fetcher | `@WidgetResolver` | — | `optional` | Liest die Öffnungszeiten am Standort (`player-location`, `location-hours`) und rechnet den Zustand in der Anzeige; Referenz für Vorlagen je Form nach dem Wetter. |
| `onedrive` („OneDrive“) | — | Tor-App | — | — | `optional` | `unlocks: ['library-places']`, `connects: ['microsoft-graph']`; kein runtime- und kein authoring-Bündel. |
| `video-wall` („Leinwand“) | — | Tor-App | — | — | `optional` | `unlocks: ['video-walls']`; die Funktion lebt in der Plattform, die App ist ihr Schlüssel. |

Nur die zwölf Apps mit Server-Teil — die sieben mit eigenem Server-Teil und die fünf Marken-Apps — laufen beim Start durch den App-Lader; die zwölf Widget-Apps und die zwei Tor-Apps kennt er nicht. Keine App ist startkritisch: Fällt eine beim Laden aus, protokolliert die Plattform das und startet ohne sie.

## Kategorie, Klasse und Bedingungen

`category` ist die eine Ordnungsachse der Plattform: Sie bestimmt den Filter im Store und den Abschnitt der Apps in der Palette des Szenen-Editors. `tier` ist die Klasse: `standard` trägt im Store keine Marke, `pro` die Marke **Pro**, `addon` die Marke **Add-on** und wird zugebucht. Wie eine App ihren Inhalt in ihrem Rahmen zeichnet, entscheidet ein Konfigurationsfeld, bei `pharmacies-on-duty` etwa vier `layout`-Werte, bei `clock` drei `composition`-Werte.

| App | `category` | `tier` | `legal`-Gruppe |
|---|---|---|---|
| `clock` | `zeit` | `standard` | — |
| `countdown` | `zeit` | `standard` | — |
| `countup` | `zeit` | `standard` | — |
| `world-clock` | `zeit` | `standard` | — |
| `word-clock` | `zeit` | `standard` | — |
| `weather` | `information` | `standard` | `wetter` |
| `rss` | `information` | `pro` | `nachrichten` |
| `tagesschau` | `information` | `pro` | `nachrichten` |
| `bbc`, `bild`, `ndr`, `spiegel`, `deutschlandfunk` | `information` | `pro` | `nachrichten` |
| `calendar` | `information` | `pro` | `verbindungen` |
| `webpage` | `web-video` | `standard` | `fremdinhalte` |
| `youtube` | `web-video` | `standard` | `fremdinhalte` |
| `stream` | `web-video` | `standard` | `fremdinhalte` |
| `embed` | `web-video` | `standard` | `fremdinhalte` |
| `notice-board` | `gestaltung` | `pro` | `eigene-inhalte` |
| `ticker` | `gestaltung` | `standard` | `eigene-inhalte` |
| `qr-code` | `gestaltung` | `standard` | `eigene-inhalte` |
| `pharmacies-on-duty` | `geschaeft` | `pro` | `notdienst` |
| `opening-hours` | `geschaeft` | `pro` | `oeffnungszeiten` |
| `menu-board` | `geschaeft` | `pro` | `eigene-inhalte` |
| `onedrive` | `geschaeft` | `standard` | `verbindungen` |
| `video-wall` | `geschaeft` | `addon` | — |

Apps ohne `tier` im Manifest tragen die Vorgabe `standard`. Was die Vorschau-Varianten einer App im Store bewirken, steht unter [Widget, Konfiguration und Vorschau](/de/apps-sdk/widget-and-preview#vorschau-varianten).

## Was hier nicht steht

Text, Bild, Video, Form, Grafik und Dokument sind keine Apps, sondern Kern-Widgets: Sie tragen die reservierte Kennung `core`, erscheinen nicht im Store, brauchen keine Installation und durchlaufen weder Release noch Signatur. Wer ein Widget baut, das ohne Datenquelle, ohne Rechte und ohne eigenes Produktversprechen auskommt, baut vermutlich einen Grundbaustein und keine App.

Die Nutzersicht jeder App — was sie zeigt, wie sie eingerichtet wird, welche Bedingungen sie mitbringt — steht im Handbuch: [Apps im Handbuch](https://szenera.com/de/docs/apps).

## Weiterführendes

- [Widget, Konfiguration und Vorschau](/de/apps-sdk/widget-and-preview) — Formate, Vorschau-Varianten und Vorschau-Zustände am Uhr-Beispiel.
- [Server-Teil: Resolver, Fetcher und Jobs](/de/apps-sdk/backend) — die Bausteine der Fetcher- und Daten-Apps.
- [Apps im Handbuch](https://szenera.com/de/docs/apps) — die Sicht der Organisation je App.
