d5bfd1be3d73cf9cc1222609df45b48c0b084f41
Auf dem iPhone sprang die Seite beim Tippen ins Chatfeld weg (nur die Fusszeile war zu sehen), zoomte hinein und liess sich danach seitlich schieben. Beides sind bekannte Safari-Effekte: - window.scrollTo(0, 0) bei offener Tastatur kaempft gegen Safaris eigenes Hochschieben des Feldes und ist entfernt, ebenso das Verkleinern des Chats auf die sichtbare Hoehe, das das schon hochgeschobene Feld wieder aus dem Bild rutschen liess. Der Chat nutzt jetzt 100dvh: auf Android folgt das der Tastatur (interactive-widget=resizes-content), auf iOS bleibt die Hoehe stabil. - Auf iOS aendert sich beim Fokus keine Hoehe mehr (die Tab-Leiste wird nur optisch ausgeblendet). Ist die Chat-Eingabe nach der Tastatur-Animation doch verdeckt, wird sie gezielt nachgeschoben (gemessen am visualViewport). - iOS zoomt beim Fokus, wenn die Schrift effektiv unter 16 px liegt, z. B. bei Safari-Seitenzoom unter 100 %. maximum-scale=1 nur auf iOS verhindert diesen automatischen Zoom; mit zwei Fingern zoomen bleibt moeglich (WebKit ignoriert die Sperre dafuer seit iOS 10). Android bleibt unveraendert, dort wuerde es das Zoomen sperren. Im Ruhezustand pixelgleich zu main (28 Ansichten). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Webklar Kundenbereich
Kundenportal für Website-Projekte. Liest ausschließlich aus woms-database auf ticket.webklar.com (Ticketsystem). Es gibt keine eigene Portal-Datenbank mehr.
- Keine Kundenanlage im Portal
- Keine Admin-Funktionen
- Login über Appwrite Auth (ein User pro Kunde, verknüpft über
customers.appwriteUserId)
Verwaltung (Kunden, Passwörter, Projekte, Freischaltung): Ticketsystem.
Struktur
server/ Express-API, Appwrite, Gitea-Webhook
public/ Login & Dashboard (statisch)
Schnellstart
cp .env.example .env
# SESSION_SECRET (min. 32 Zeichen) und APPWRITE_API_KEY setzen
npm install
npm run dev
Öffnen: http://localhost:3000
API
| Methode | Pfad | Beschreibung |
|---|---|---|
| POST | /api/auth/login |
Appwrite Login + Portal-Prüfungen |
| POST | /api/auth/logout |
Session beenden |
| GET | /api/auth/me |
Aktueller Kunde |
| GET | /api/projects |
Eigene websiteProjects |
| GET | /api/features |
Eigene portalFeatures (enabled) |
| POST | /webhook/gitea?token=… |
Gitea Push → Deploy + DB-Update |
Appwrite
Schema und Collection-Anlage: siehe APPWRITE_SCHEMA.md.
Endpoint: https://ticket.webklar.com/v1
Project: 6a1058610003c5a13a05
Database: woms-database
Gitea / Preview
- Template: https://git.webklar.com/knso/webklar-preview-template.git
- Webhook-URL:
https://project.webklar.com/webhook/gitea - Secret:
GITEA_WEBHOOK_TOKENin.env - Vorschau:
https://<subdomain>.project.webklar.com
customerId wird im Ticketsystem am websiteProjects-Eintrag gesetzt, nicht im Webhook.
Deployment
npm start
# Reverse Proxy (nginx) → Port 3000
# PREVIEW_DEPLOY_ROOT für statische Vorschau-Dateien
Repositories
Languages
JavaScript
86.2%
HTML
11%
CSS
2.7%