Zum Inhalt springen
Yuva
GitHub
Neu in 0.0.3: Sammelaktionen, Kontakte zusammenführen und Unterhaltungen verschieben

Ein Posteingang für alle Ihre Produkte.

Yuva bringt Support-E-Mails, Live-Chat und In-App-Unterhaltungen aus all Ihren Produkten in einen gemeinsamen Posteingang für Ihr Team. Es ist Open Source und läuft als ein Go-Binary mit Postgres, sodass Sie es auch selbst hosten können.

Open Source · Gehostet oder selbst betrieben · Pre-Alpha

Funktioniert mit

  • Cloudflare Email Workers
  • Amazon SES
  • Postmark
  • S3 · R2 · MinIO
  • APNs · FCM
  • Docker
Das Yuva-Panel: Unterhaltungen aus drei Produkten in einer Liste, eine In-App-Unterhaltung mit interner Notiz und Antwort sowie die Kontaktdaten, die die App mitschickt.

Kanäle

Jeder Kanal, ein Unterhaltungsmodell.

Live-Chat und asynchrone Nachrichten unterscheiden sich nur in den Einstellungen. Egal, über welchen Kanal eine Unterhaltung beginnt: Im Panel sieht sie gleich aus und funktioniert gleich, und jeder Posteingang wählt live oder asynchron.

E-Mail

E-Mail, richtig gemacht

Leiten Sie eine Support-Adresse über einen Cloudflare Email Worker, einen beliebigen MTA oder eine signierte HTTP-Anfrage an Yuva. Antworten gehen über das SMTP-Konto des jeweiligen Kanals hinaus: SES, Postmark oder Ihr eigenes Relay.

  • Verläufe folgen In-Reply-To und References, und Antworten finden ihre Unterhaltung auch dann, wenn ein Mailprogramm die Header verwirft.
  • Zitate und Signaturen werden beim Lesen ausgeblendet; Volltext, bereinigtes HTML und die Originalnachricht bleiben erhalten.
  • Catch-all-Adressen pro Domain und lokal+tag-Adressen, die ihren Kanal erreichen.
E-Mail-Anleitung →

Live-Chat

Live-Chat und eingebettete Verläufe

Eine Web-Komponente, geladen mit einem Script-Tag. Nutzen Sie sie als schwebenden Launcher auf einer Website oder betten Sie einen Verlauf in das Panel Ihres eigenen Produkts ein.

  • Shadow DOM: Ihre Styles bleiben draußen, die des Widgets drinnen.
  • Anwesenheit, Tippanzeige und Lesebestätigungen in Live-Posteingängen; eine erwartete Antwortzeit in asynchronen.
  • Hat der Besucher die Seite verlassen, folgen ihm ungelesene Antworten per E-Mail, und seine Antwort setzt dieselbe Unterhaltung fort.
Widget-Anleitung →
Das Yuva-Chat-Widget auf der Website eines Newsletter-Tools: die Frage eines Besuchers und die Antwort eines Mitglieds, das als online angezeigt wird.

In-App

In-App-Nachrichten und Feedback

Native SDKs für iOS (YuvaKit, SwiftUI) und Android (Kotlin, Jetpack Compose) geben Ihrer App eine Unterhaltungsliste, Verläufe mit Anhängen und ein Feedback-Formular, oder einen Headless-Client für Ihre eigene Oberfläche.

  • Feedback mit Kategorie (Fehler, Idee, Lob, Sonstiges), Screenshots und Gerätedaten: App-Version, Build, System, Gerät und Bildschirm.
  • Das Panel filtert Feedback nach Kategorie und zählt, was noch offen ist.
  • Nutzer schreiben unter eigenem Namen, über ein kurzlebiges Token, das Ihr Backend signiert; Yuva sieht Ihre Nutzerdatenbank nie.
Anleitung für die Mobile-SDKs →
Der Nachrichtenbildschirm des iOS-SDK in einer Beispiel-App, mit einem Feedback-Verlauf und einer Unterhaltung.

API

Und eine API für alles andere

Ein Feedback-Formular aus Ihrem eigenen Backend sendet mit einem Workspace-API-Schlüssel an /v1/feedback. Skripte legen Posteingänge, Kanäle und Schlüssel an, und Ihr Backend findet oder löscht Kontakte über die eigene Nutzer-ID.

API-Vertrag →
curl https://support.example.com/v1/feedback \
  -H "Authorization: Bearer $YUVA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "inbox_id": "8c5a…",
    "contact": { "external_id": "user_42" },
    "category": "idea",
    "body": "A dark mode for the reading view, please."
  }'

So funktioniert es

Nachrichten kommen über jeden Kanal. Ihr Team antwortet an einem Ort.

  1. 1Produkte verbinden

    Legen Sie pro Produkt einen Posteingang an und geben Sie ihm Kanäle: eine Support-Adresse, ein Chat-Widget, einen App-Schlüssel, eine API.

  2. 2Aus einem Panel antworten

    Unterhaltungen aus allen Kanälen teilen sich eine Liste, eine Verlaufsansicht und dieselben Werkzeuge. Mitglieder sehen nur die Posteingänge, die ihnen zugeteilt sind.

  3. 3Ihr Backend reagieren lassen

    Signierte Webhooks informieren Ihr Backend über neue Nachrichten, damit es eine Antwort mit den vorhandenen Schlüsseln als Push an eine geschlossene App senden kann.

Das Team-Panel

Gebaut für die Menschen, die antworten.

Das Panel steckt im Binary. Es ist schnell, für die Tastatur gemacht und läuft auf dem Smartphone als installierbare App.

Gemeinsamer Posteingang
Alle, meine, nicht zugewiesene, pro Posteingang und pro Label; offen, wartend, zurückgestellt und geschlossen.
Zuweisung
Unterhaltungen zuweisen, priorisieren und übergeben; jede Änderung wird im Verlauf festgehalten.
Interne Notizen
Notizen stehen neben den Antworten und erreichen den Kontakt nie.
Labels und Textbausteine
Unterhaltungen mit Labels versehen und gespeicherte Antworten mit / im Editor einfügen.
Echtzeit
Neue Nachrichten, Tippanzeigen und Änderungen im Team erscheinen live über WebSocket.
Benachrichtigungen
Installieren Sie das Panel als App und erhalten Sie Web-Push auf Smartphone und Desktop, mit E-Mail als Rückfall.
Das Panel auf dem Smartphone: die Unterhaltungsliste mit Labels, Prioritäten und Zuständigen.

Für Entwickler

Gemacht, um in Ihre Produkte eingebettet zu werden.

Yuva ist für Teams gebaut, die eigene Software entwickeln. Jede Schnittstelle hat einen typisierten Vertrag und eine kleine, dokumentierte Integration.

Website: das Chat-Widget

<script src="https://support.example.com/yuva.js" defer></script>
<yuva-chat channel="yuva_pk_xxxxxxxxxxxxxxxx"></yuva-chat>

Selbst hosten

Ihres zum Betreiben, auf einem kleinen Server.

Yuva ist ein Go-Binary und eine Postgres-Datenbank. Job-Queue, Echtzeit-Ereignisse und Suche leben alle in Postgres, es gibt also nichts weiter zu betreiben.

Installationsanleitung öffnen →
docker pull ghcr.io/productdevbook/yuva:0.0.3
# compose.yaml and .env: copy both from the install guide
docker run --rm ghcr.io/productdevbook/yuva:0.0.3 vapid-keys >> .env
docker compose up -d
docker compose exec yuva /yuva bootstrap --email you@example.com --workspace "Example" --name "Your Name"

Sicherheit und Datenschutz

Sorgsam mit dem, was es aufbewahrt.

Ein Support-Posteingang enthält die Worte anderer Menschen. Yuva ist mit diesem Bewusstsein gebaut und sagt offen, dass es noch kein unabhängiges Sicherheitsaudit gab.

  • Nicht vertrauenswürdige Mails bleiben wirkungslos

    Eingehendes HTML wird bereinigt und in einem abgeschotteten Frame unter einer strengen Content Security Policy angezeigt; externe Bilder laden erst, wenn ein Mitglied es will.

  • Keine Anfragen in Ihr Netzwerk

    Webhook-URLs, SMTP-Hosts und Push-Endpunkte werden aufgelöst und abgelehnt, wenn sie auf private, Loopback- oder Cloud-Metadaten-Adressen zeigen.

  • Daten, die Sie löschen können

    Löschen Sie einen Kontakt im Panel oder über Ihre eigene Nutzer-ID, und seine Unterhaltungen, Nachrichten und Dateien verschwinden mit ihm. An Dritte geht nur, was ein Kanal versenden soll.

Sicherheitsrichtlinie →

Open Source und Lizenzen

Open Source, und das soll so bleiben.

Yuva nutzt eine geteilte Lizenz: Der Server bleibt offen, und die Teile, die Sie in Ihre eigenen Apps einbetten, bringen keine Copyleft-Pflichten mit.

LICENSING.md lesen →
  • AGPL-3.0

    Server und Panel

    Nutzen, ändern, betreiben. Wer ein verändertes Yuva als Netzwerkdienst für andere betreibt, stellt ihnen den Quellcode bereit.

  • MIT

    SDKs und API-Vertrag

    Das Widget, die Swift-, Kotlin- und Go-SDKs und der OpenAPI-Vertrag stehen unter MIT und können ohne Auflagen in Closed-Source-Apps und Store-Builds ausgeliefert werden.

FAQ

Häufige Fragen.

Fehlt etwas? Eröffnen Sie ein Issue auf GitHub.

Ist Yuva bereit für den Produktivbetrieb?

Noch nicht. Yuva ist Pre-Alpha: API und Datenbankschema können sich ohne Migrationspfad ändern, und der Code wurde noch nicht unabhängig geprüft. Testen Sie 0.0.3 mit Testdaten und folgen Sie dem Repository für die nächsten Versionen.

Was unterscheidet Yuva von gehosteten Support-Tools?

Yuva ist für ein Team mit vielen Produkten gebaut: Jedes Produkt ist ein Posteingang mit eigenem Branding, eigenen Kanälen und Mitgliedern, beantwortet aus einem Panel. Sie hosten es selbst, es gibt keine Preise pro Platz, und es bleibt schlank: ein Binary und Postgres.

Was brauche ich für den Betrieb?

Einen Host mit Docker, Postgres 16 oder neuer, ein SMTP-Konto für Anmeldecodes und Benachrichtigungen und einen Hostnamen mit TLS hinter einem Reverse Proxy, der WebSockets durchreicht. Anhänge landen auf einem Volume oder in einem S3-kompatiblen Bucket.

Darf eine Closed-Source-App die SDKs nutzen?

Ja. SDKs und API-Vertrag stehen unter MIT. Nur Server und Panel stehen unter AGPL, und das spielt erst eine Rolle, wenn Sie sie verändern und anderen als Netzwerkdienst anbieten.

Darf ich es für meine Kunden hosten?

Innerhalb Ihres eigenen Unternehmens, verändert oder nicht: ja. Einen gehosteten Dienst oder ein Produkt unter dem Namen Yuva anzubieten, erfordert eine schriftliche Erlaubnis; ein umbenannter Fork unter der AGPL ist immer erlaubt.

Geben Sie den Nutzern jedes Produkts einen Weg zu Ihnen.

Lesen Sie den Code, starten Sie 0.0.3 auf Ihrem Rechner und verfolgen Sie, wie Yuva wächst.