# Hosting auf lima-city

Die Karte ist eine **rein statische Website**. Auf dem Server läuft kein Python, kein PHP und kein Node:

- `node build.js` läuft **nur auf deinem Mac** und erzeugt den Ordner `dist/`.
- Die Rückmeldungen gehen direkt aus dem Browser der Gäste an Google Apps Script (`config.json → rsvp.endpoint`).
- Hochgeladen wird **nur der Inhalt von `dist/`**, rund 13 MB.

Damit reicht bei lima-city jeder Webspace, auch der kostenlose. Node.js auf dem Server braucht ihr nicht.

## Stand miluke.de (geprüft am 12.11.2026)

- Die Domain ist registriert und aktiv. Die Nameserver sind `ns01/ns02.domainssaubillig.de` (gehören zu lima-city).
- `miluke.de` zeigt schon auf `frontend.lima-city.de`. Der Aufruf liefert aber **404**, weil die Domain im Panel noch keinem Ordner zugewiesen ist.
- **https** antwortet noch nicht, es gibt also noch kein Zertifikat.
- `www.miluke.de` zeigt auf eine andere IP (159.69.102.208) und noch nicht auf lima-city.

Offen im lima-city-Panel:
1. *Domains* → `miluke.de` → Ziel: einen Ordner im Webspace wählen, z. B. `/miluke`
2. Für `www` dasselbe einrichten (oder als Weiterleitung auf `miluke.de`)
3. SSL-Zertifikat (Let's Encrypt) aktivieren. Das klappt erst, wenn Schritt 1 und 2 aktiv sind.
4. Den Inhalt von `dist/` per FTP in diesen Ordner hochladen

## Was ihr braucht

| | |
|---|---|
| lima-city-Account | Webspace (Free reicht), einen FTP-Zugang anlegen |
| Domain | eigene Domain (z. B. `mi-und-luke.de`) **oder** kostenlose Subdomain `xyz.lima-city.de` |
| SSL | im lima-city-Panel bei der Domain das kostenlose Let's-Encrypt-Zertifikat aktivieren (**https** ist wichtig für Video und Musik auf dem Handy) |
| Node.js ≥ 18 auf dem Mac | schon vorhanden (`node -v`) |
| FTP-Programm | z. B. FileZilla oder Cyberduck |

## Schritt für Schritt

1. **Domain festlegen** und in `config.json` eintragen:
   ```json
   "base_url": "https://mi-und-luke.de",
   ```
   Daraus werden die Links in `links.csv` gebaut. Liegt die Seite in einem Unterordner, dann `https://domain.de/ordner`.
2. **Bauen:**
   ```bash
   cd hochzeitskarte && node build.js
   ```
   Der Build darf keine Warnung zu `base_url` mehr zeigen.
3. **Im lima-city-Panel:**
   - Domain bzw. Subdomain anlegen und einem Ordner zuweisen (z. B. `/hochzeit`)
   - SSL-Zertifikat aktivieren
   - FTP-Zugang anlegen und Server, Benutzer und Passwort notieren
4. **Hochladen:** In FileZilla den **Inhalt** von `dist/` (nicht den Ordner selbst) in den Domain-Ordner ziehen.
   Dabei die versteckte Datei **`.htaccess`** mitnehmen. In FileZilla: *Server → Anzeige versteckter Dateien erzwingen*,
   im Mac-Finder: `Cmd + Shift + .`
5. **Testen:** `https://eure-domain/` zeigt „Mi & Luke · 15 · 05 · 2027“. Danach einen Link aus `links.csv` auf dem Handy öffnen
   und testweise eine Rückmeldung schicken. Sie muss in der Google-Tabelle ankommen.

## Siegel-Code (Login)

Jede Karte ist mit einem gemeinsamen Code gesperrt: `config.json → access.code`.
`build.js` verschlüsselt die ganze Karte (AES-256-GCM, Schlüssel per PBKDF2 aus dem Code).
Auf dem Server liegt nur ein Wachssiegel mit Eingabefeld. Ohne Code ist im HTML nichts lesbar,
weder Namen noch Adresse, Hotelpreise oder PayPal-Links.

- Groß-/Kleinschreibung und Leerzeichen sind egal (`Ardington` = `ardington`).
- Nach einmaliger Eingabe merkt sich das Handy den Code und öffnet die Karte direkt.
- Code ändern: neuen Code eintragen → `node build.js` → `dist/` neu hochladen.
  Gäste mit dem alten Code sehen dann wieder das Siegel.
- `build.py` leitet automatisch an `build.js` weiter, damit nie ungeschützte Karten entstehen.
- Ohne Code (oder mit weniger als 6 Zeichen) bricht der Build ab.

## Was NICHT hochgeladen wird

`.secret`, `build.js`, `build.py`, `config.json`, `links.csv`, `src/`, `musik/`, `liste.xlsx`.
Vor allem `.secret` und `links.csv` nicht: Damit ließen sich alle Gäste-Links ablesen.
Zur Sicherheit sperrt die `.htaccess` trotzdem alle Dateien, die mit einem Punkt beginnen.

## Was die `.htaccess` macht (wird von `build.js` erzeugt)

- keine Ordnerlisten, damit niemand `/` durchblättern und alle Gäste-Ordner sehen kann
- `noindex` für Suchmaschinen (zusätzlich zur `robots.txt`)
- richtige Dateitypen für `.m4a`, `.mp4`, `.webp` und `.ics`
- Bilder und Videos werden eine Woche gecacht, die Karten selbst nie, damit Änderungen sofort ankommen

## Änderungen später

Liste, Texte oder `config.json` geändert → `node build.js` → `dist/` erneut hochladen (Dateien überschreiben).
Die Links der Gäste bleiben gleich, solange `.secret` und die Namen in `liste.xlsx` gleich bleiben.
**`.secret` daher sichern und nie löschen.**
