# Cross-Platform-App-Muster

Wiederverwendbares Muster für Apps, die es auf mehreren Plattformen gibt (wie Convertly+).
**Eine App = ein Eintrag in `config/cross_apps.php`.** Daraus entstehen automatisch:

| URL | Inhalt |
|---|---|
| `<slug>.kotsch.tech` **und** `kotsch.tech/<slug>` | Allgemeine Übersicht (Multi-Plattform, alle Downloads + Features) |
| `android.kotsch.tech/de/<slug>` → `/android/<slug>` | Android-fokussiert |
| `windows.kotsch.tech/de/<slug>` → `/windows/<slug>` | Windows-fokussiert |
| `ios.kotsch.tech/de/<slug>` → `/apple/<slug>` | Apple (bestehendes Apple-System, `resources/views/apple/`) |

Auf den Plattform-Seiten ist die Multi-Plattform-Sektion **ausgeblendet** (fokussiert), nur ein
Rücklink zur Übersicht. Die Übersicht verlinkt zu jeder Plattform-Seite. APK wird nie auf der
Windows-Seite angeboten (Android-only) und umgekehrt.

## Neue App hinzufügen

1. **Eintrag** in `config/cross_apps.php` (Vorlage steht dort auskommentiert). Ohne `'view'` wird die
   generische Seite `resources/views/apps/show.blade.php` genutzt (config-getrieben). Mit `'view' => '<blade>'`
   eine eigene Seite (wie Convertly `'view' => 'convertly'`).
2. **Assets**: Icon/Hero/Screenshots nach `public/img/<slug>/`, Binärdateien nach
   `public/downloads/<slug>/` (APK/MSIX). Der Download-Button erscheint automatisch, sobald die Datei da ist.
3. **Shop-Key** (optional): Produkt mit `meta.license_app_id` anlegen und `shop_slug` setzen →
   „Key kaufen" + automatische Key-Ausgabe beim Kauf (siehe Lizenzsystem).
4. `php artisan config:cache` (neue Subdomain/Route wird erst danach live).
5. **DNS/Tunnel**: `<slug>.kotsch.tech` auf den Wildcard-Tunnel (→ :85) — bei Wildcard bereits abgedeckt.

## Wie es intern funktioniert

- **Subdomain**: `App\Support\SubdomainRegistry::all()` mischt `config('cross_apps')` als Subdomain-
  Einträge ein → der bestehende `SubdomainDispatcher` routet `<slug>.kotsch.tech/*` auf `/<slug>/*`.
- **Routen**: `routes/web.php` erzeugt in einer Schleife pro App `/<slug>`, `/android/<slug>`,
  `/windows/<slug>` (vor den generischen `windows/{slug}`- und `android/{slug}`-Routen).
- **Plattform-Fokus**: die View bekommt `$platform` (`null|android|windows`); `apps.show` und
  `convertly.blade` reagieren darauf (Banner, fokussierte Sektion, korrekte Download-Buttons).
- **Styles**: `resources/views/apps/_styles.blade.php` (geteilt).

## Tests
`tests/Feature/Convertly/AndroidConvertlyTest.php` (Convertly-Instanz + Subdomains) und
`GenericAppPageTest.php` (generische Seite aus Config). Blade-Falle: `@if`/`@endif` nie direkt an ein
Wort kleben (`kaufen@if` / `@endifApp`) — Leerzeichen oder Ternary nutzen.
