Bütün ürünleriniz için tek gelen kutusu.
Yuva, bütün ürünlerinizin destek e-postalarını, canlı sohbetlerini ve uygulama içi konuşmalarını ekibiniz için tek bir ortak gelen kutusunda toplar. Açık kaynaktır, kendi sunucunuzda çalışır; tek bir Go programı ve Postgres yeterlidir.
Sunucu AGPL-3.0, SDK'lar MIT. Konuşmalarınız kendi sunucularınızda kalır.

Neden Yuva
Birden çok ürün, birden çok yerde yanıt vermek demek.
Küçük ekipler nadiren tek bir ürünle yetinir. Bir uygulama, onun sitesi, bir yan proje ve faturaları ödeyen bir araç vardır; her biri mesajları başka bir yerde toplar.
Destek postası dağınık
Canlı sohbet yalnızca parası ödenen yerde
Uygulama içi mesajlar kapalı bir kutuda
Yuva hepsine tek bir yuva olur: her ürün bir gelen kutusudur, her kanal aynı konuşma modeline düşer ve bütün ekip, sizin yönettiğiniz sunucularda tek bir panelden yanıt verir.
Nasıl çalışır
Mesajlar her kanaldan gelir. Ekibiniz tek yerden yanıtlar.
Her mesaj bir gelen kutusundaki konuşmanın parçası olur, ekip de panelden yanıtlar. Yuva olup biteni imzalı webhook'larla sunucunuza bildirir; anlık bildirimleri kendi uygulamalarınız gönderir.
Ürünlerinizi bağlayın
Her ürün için bir gelen kutusu açın ve ona kanallar verin: bir destek adresi, bir sohbet bileşeni, bir uygulama anahtarı, bir API.
Tek panelden yanıtlayın
Her kanaldan gelen konuşma aynı listede, aynı görünümde, aynı araçlarla durur. Ekip üyeleri yalnızca kendilerine verilen gelen kutularını görür.
Sunucunuz tepki versin
İmzalı webhook'lar sunucunuza yeni mesajları haber verir; sunucunuz da yanıtı, elindeki anahtarlarla kapalı uygulamaya bildirim olarak iletir.
Kanallar
Her kanal, tek bir konuşma modeli.
Canlı sohbetle eşzamansız mesajlaşma arasındaki fark yalnızca ayarlarda. Konuşma hangi kanalda başlarsa başlasın panelde aynı görünür, aynı çalışır; her gelen kutusu canlı mı eşzamansız mı olacağını kendisi seçer.
E-postaE-posta, olması gerektiği gibi
Bir destek adresini Cloudflare Email Worker, herhangi bir MTA ya da imzalı bir HTTP isteğiyle Yuva'ya yönlendirin. Yanıtlar her kanalın kendi SMTP hesabından çıkar: SES, Postmark ya da kendi sunucunuz.
- Yazışmalar In-Reply-To ve References başlıklarını izler; bir e-posta istemcisi bu başlıkları atsa bile yanıt kendi konuşmasını bulur.
- Okuduğunuz metinden alıntılar ve imzalar ayıklanır; tam metin, temizlenmiş HTML ve mesajın aslı saklanır.
- Alan adı başına tümünü yakalayan adresler ve kendi kanalına ulaşan ad+etiket adresleri.
- Döngü koruması: otomatik yanıtlar, toplu postalar ve Yuva'nın kendi mesajları asla yeni bir otomatik mesajı tetiklemez.
- Teslim raporlarından ve Amazon SES'ten gelen geri dönmeler, adresi ulaşılamaz olarak işaretler.
Canlı sohbetCanlı sohbet ve gömülü konuşmalar
Tek bir script etiketiyle yüklenen tek bir web bileşeni. Bir sitede köşede duran sohbet düğmesi olarak kullanın ya da bir konuşmayı doğrudan kendi ürününüzün paneline yerleştirin.
- Shadow DOM: sizin stilleriniz dışarıda, bileşenin stilleri içeride kalır.
- Canlı gelen kutularında çevrimiçi durumu, yazıyor bilgisi ve okundu bilgisi; eşzamansız olanlarda tahmini yanıt süresi.
- Ziyaretçi ayrıldıysa okunmamış yanıtlar ona e-postayla ulaşır; onun yanıtı da aynı konuşmadan devam eder.
- İster anonim ziyaretçiler, ister sunucunuzun verdiği kimlik jetonuyla giriş yapmış kullanıcılar.
- Türkçe ve İngilizce; soldan sağa ve sağdan sola.

Uygulama içiUygulama içi mesajlaşma ve geri bildirim
iOS (YuvaKit, SwiftUI) ve Android (Kotlin, Jetpack Compose) için yerel SDK'lar uygulamanıza bir konuşma listesi, ekli mesajlaşma ve bir geri bildirim formu kazandırır; isterseniz kendi arayüzünüz için arayüzsüz bir istemci de sunar.
- Kategorisi (hata, fikir, övgü, diğer), ekran görüntüleri ve cihaz bilgileriyle geri bildirim: uygulama sürümü, derleme, sistem, cihaz ve ekran.
- Panel geri bildirimi kategoriye göre süzer ve hâlâ açık olanları sayar.
- Kullanıcılar, sunucunuzun imzaladığı kısa ömürlü bir jetonla kendi adlarına yazar; Yuva kullanıcı veritabanınızı hiç görmez.
- Anlık bildirim sizde kalır: Yuva bir webhook gönderir, bildirimi sunucunuz APNs ya da FCM üzerinden yollar.


Geri kalan her şey için de bir API
Ekip paneli
Yanıtlayan insanlar için yapıldı.
Panel programın içinde gelir. Hızlıdır, klavyeyle kullanılmak için yapılmıştır ve telefonlarda kurulabilir bir uygulama olarak çalışır.
- Ortak gelen kutusu
- Tümü, bana atananlar, atanmamışlar, gelen kutusuna ve etikete göre; açık, beklemede, ertelenmiş ve kapalı.
- Atama
- Konuşmaları atayın, önceliğini belirleyin, devredin; her değişiklik konuşmanın içinde kayıt altında.
- İç notlar
- Notlar yanıtların yanında durur ve asla kişiye ulaşmaz.
- Etiketler ve hazır yanıtlar
- Konuşmaları etiketleyin, yazı alanında / yazarak kayıtlı yanıtları ekleyin.
- Arama
- Postgres üzerinde, tüm konuşmalarda tam metin arama.
- Canlı
- Yeni mesajlar, yazıyor bilgisi ve ekip arkadaşlarınızın değişiklikleri WebSocket üzerinden anında görünür.
- Bildirimler
- Paneli uygulama olarak kurun; telefonda ve masaüstünde Web Push bildirimi alın, yedekte de e-posta olsun.
- Önce klavye
- Listede gezinin, yanıtlayın, not yazın, arayın; fareye uzanmadan.
- Kişinin bağlamı
- Ad, adresler, sizdeki kullanıcı kimliği, plan ya da uygulama sürümü gibi özellikler ve önceki konuşmalar.
- Parola yok
- E-postayla gelen bir kodla ya da passkey ile girilir. Açık kayıt yok; herkes davetle gelir.
- Roller ve erişim
- Sahipler, yöneticiler ve temsilciler; temsilciler yalnızca kendilerine verilen gelen kutularını görür.
- Türkçe ve İngilizce
- Panel, sohbet bileşeni ve SDK'lar iki dili de konuşur; her ekip üyesi kendi dilini seçer.

Geliştiriciler için
Ürünlerinizin içine yerleşmek için yapıldı.
Yuva kendi yazılımını yapan ekipler için tasarlandı. Her yüzeyin tipli bir sözleşmesi ve küçük, belgelenmiş bir entegrasyonu var.
OpenAPI 3.1 sözleşmesi
Kimlik jetonları
Standard Webhooks
Kullanıcılarınız sizde kalır
Web sitesi: sohbet bileşeni
<script src="https://support.example.com/yuva.js" defer></script>
<yuva-chat channel="yuva_pk_xxxxxxxxxxxxxxxx"></yuva-chat>Sunucunuz: Go ile kimlik jetonu
import "github.com/productdevbook/yuva/sdk/go/identity"
token, err := identity.Sign(os.Getenv("YUVA_IDENTITY_SECRET"), identity.Claims{
Subject: user.ID,
Email: user.Email,
EmailVerified: user.EmailConfirmed,
Name: user.Name,
Attrs: map[string]any{"plan": user.Plan},
})iOS: YuvaKit ve SwiftUI
import YuvaKit
let yuva = YuvaClient(configuration: YuvaConfiguration(
serverURL: URL(string: "https://support.example.com")!,
channelKey: "yuva_pk_xxxxxxxxxxxxxxxx",
identityToken: { try await MyAPI.yuvaIdentityToken() }
))
YuvaConversationsView(client: yuva, openConversationId: $openConversationId)Android: Kotlin ve Compose
val yuva = YuvaClient(
context,
YuvaConfiguration(
serverUrl = "https://support.example.com",
channelKey = "yuva_pk_xxxxxxxxxxxxxxxx",
identityToken = { myApi.yuvaIdentityToken() },
),
)
YuvaConversationsView(client = yuva, openConversationId = conversationId, onClose = { finish() })Webhook'lar: imzayı doğrulayın
import "github.com/productdevbook/yuva/sdk/go/webhook"
body, _ := io.ReadAll(io.LimitReader(r.Body, 1<<20))
if err := webhook.Verify(os.Getenv("YUVA_WEBHOOK_SECRET"), r.Header, body, 5*time.Minute); err != nil {
http.Error(w, "bad signature", http.StatusUnauthorized)
return
}Kendi sunucunuzda
Tek, küçük bir sunucuda, sizin elinizde.
Yuva tek bir Go programı ve bir Postgres veritabanıdır. İş kuyruğu, canlı olaylar ve arama Postgres'te durur; işletmeniz gereken başka bir şey yoktur.
Tek Docker imajı
Postgres 16 ya da üstü
Dosyalar istediğiniz yerde
İzlemesi kolay
İmajı çekin
Yayımlanan imajı GitHub Container Registry'den çekin; linux/amd64 ve linux/arm64 için hazır.
docker pull ghcr.io/productdevbook/yuva:0.0.1- Kurulum rehberini açın
compose.yaml ve .env dosyalarını yazın
İki dosyayı da kurulum rehberinden kopyalayın: Postgres, herkese açık adresiniz, bir ana anahtar, bir gelen posta sırrı ve bir SMTP hesabı.
Başlatın
Bir Web Push anahtar çifti ekleyin, sistemi başlatın ve hazır olduğunu kontrol edin. Veritabanı geçişleri açılışta kendiliğinden çalışır.
docker run --rm ghcr.io/productdevbook/yuva:0.0.1 vapid-keys >> .env docker compose up -d curl -s http://127.0.0.1:8080/readyz # {"status":"ok"}İlk sahibi oluşturun
Açık kayıt yok. Çalışma alanını ve sahibini oluşturun, e-postayla gelen kodla giriş yapın ve ekibinizi davet edin.
docker compose exec yuva /yuva bootstrap --email you@example.com --workspace "Example" --name "Your Name"
WebSocket'leri geçiren, TLS'li bir ters vekil sunucunun arkasına koyun; Caddy olduğu gibi çalışır. Kurulum rehberinde nginx, yedekleme, güncelleme ve tüm ayarlar da anlatılıyor. İşletim rehberi
Güvenlik ve gizlilik
Emanet ettiklerinize özen gösterir.
Bir destek kutusunda başkalarının sözleri durur. Yuva bunu bilerek yapıldı ve henüz bağımsız bir güvenlik denetiminden geçmediğini de açıkça söylüyor.
Güvenilmeyen posta zararsız kalır
İmzalı gelen posta
Ağınızın içine istek yok
Köken denetimi
Passkey'ler ve şifreli sırlar
Silebileceğiniz veriler
Bir güvenlik açığı mı buldunuz? Herkese açık bir issue'da değil, GitHub üzerinden gizlice bildirin. Güvenlik politikası
Açık kaynak ve lisans
Açık kaynak ve öyle kalacak.
Yuva iki lisans kullanır: sunucu açık kalır, kendi uygulamalarınıza gömdüğünüz parçalar ise hiçbir copyleft yükümlülüğü getirmez.
Sunucu ve panel
SDK'lar ve API sözleşmesi
Katkı Lisans Sözleşmesi
Ad ve logo
Neden bu ayrım?
Durum ve yol haritası
Bugün nerede duruyor.
Yuva alfa öncesi aşamada ve herkesin gözü önünde geliştiriliyor. Sürümler 0.0.1'den başlıyor, proje hazır olana kadar 1.0 yok ve ilk sürüm olan 0.0.1 artık yayında.
- Tamamlandı
Temel
Go sunucusu, OpenAPI sözleşmesi, veritabanı geçişleri, iş kuyruğu ve CI.
- Tamamlandı
Temel model ve giriş
Çalışma alanları, roller, gelen kutuları, kanallar, kişiler, konuşmalar, API anahtarları, kodlar ve passkey'ler.
- Tamamlandı
Ekip paneli
Liste, arama, konuşmalar, notlar, etiketler, hazır yanıtlar, canlı güncellemeler, Türkçe ve İngilizce.
- Tamamlandı
E-posta
Worker ya da herhangi bir MTA ile gelen posta, yazışma zinciri, alıntı ayıklama, SMTP, döngü koruması ve geri dönmeler.
- Tamamlandı
Web bileşeni
Canlı sohbet, gömülü konuşmalar, kimlik jetonları, çevrimiçi durumu ve e-postayla devam.
- Tamamlandı
Mobil SDK'lar, geri bildirim ve webhook'lar
iOS ve Android, cihaz bilgileriyle geri bildirim, Standard Webhooks.
- Tamamlandı
Ekip bildirimleri
Kurulabilir panel, Web Push, olay ve gelen kutusu bazında tercihler, yedek olarak e-posta.
- Tamamlandı
İlk herkese açık sürüm, 0.0.1
Giriş, istemci oturumları, gelen posta ve ek işleme sıkılaştırıldıktan sonra v0.0.1 etiketlendi; Docker imajı GitHub Container Registry'de.
- Sürüyor
İlk gerçek kullanım
Birkaç ürünün gerçek destek işini yalnızca Yuva ile yürütmek.
Sonra: bir Helm chart ve isteğe bağlı olarak Yuva'nın kendisinin gönderdiği anlık bildirimler. Şimdilik planda olmayanlar: CRM, pazarlama e-postası, herkese açık bilgi bankası ve sosyal medya kanalları. Yol haritasının tamamı
SSS
Sık sorulanlar.
Aradığınız yok mu? GitHub'da bir issue açın.
Henüz değil. Yuva alfa öncesi aşamada: API ve veritabanı şeması geçiş yolu sunulmadan değişebilir, kod da henüz bağımsız bir güvenlik denetiminden geçmedi. 0.0.1'i test verisiyle deneyin, sonraki sürümler için depoyu takip edin.
Yuva, birçok ürün yöneten tek bir ekip için yapıldı: her ürün kendi markası, kanalları ve ekip üyeleriyle bir gelen kutusudur ve hepsi tek panelden yanıtlanır. Kendi sunucunuzda çalışır, kişi başı ücret yoktur ve küçük kalır: tek program ve Postgres.
Docker çalışan bir sunucu, Postgres 16 ya da üstü, giriş kodları ve bildirimler için bir SMTP hesabı ve WebSocket'leri geçiren bir ters vekil sunucunun arkasında TLS'li bir alan adı. Ekler bir diskte ya da S3 uyumlu bir kovada durur.
Yuva SMTP dinlemez. Posta ona, birlikte gelen Cloudflare Email Worker'la, Postfix ya da başka bir MTA'dan yuva ingest-email komutuyla veya imzalı bir HTTP isteğiyle ulaşır.
Bildirimi sunucunuz gönderir. Yuva, kullanıcının çevrimiçi olup olmadığını da söyleyen imzalı bir message.created webhook'u yollar; sunucunuz bildirimi elindeki anahtarlarla APNs ya da FCM üzerinden gönderir, dokunulduğunda SDK'lar doğru konuşmayı açar. Ekibiniz ise panelden Web Push bildirimi alır.
Evet. SDK'lar ve API sözleşmesi MIT lisanslıdır. Yalnızca sunucu ve panel AGPL'dir; bu da ancak onları değiştirip başkalarına ağ hizmeti olarak sunduğunuzda önem taşır.
Panel, sohbet bileşeni ve mobil SDK'lar Türkçe ve İngilizce gelir. Her gelen kutusunun kendi varsayılan dili vardır; sohbet bileşeni sağdan sola yazılan dilleri de destekler.
Kendi şirketinizin içinde, değiştirerek ya da olduğu gibi, evet. Yuva adıyla barındırılan bir hizmet ya da ürün sunmak yazılı izin gerektirir; AGPL'yi koruyan, adı değiştirilmiş bir çatal her zaman serbesttir.
Her ürününüzün kullanıcısına size ulaşmanın bir yolunu verin.
Kodu okuyun, 0.0.1'i kendi makinenizde çalıştırın ve Yuva büyürken birlikte izleyin.