GÖREV: Jev karar modelini kullanabileceğim basit bir web arayüzü kur. Bu promptu yeni veya mevcut bir proje klasöründe uygulayabilirsin. Önce projeyi incele. Klasör boşsa Next.js, TypeScript ve App Router ile küçük bir proje oluştur. Var olan bir proje varsa kullandığı yapıya, paket yöneticisine ve tasarım diline uyum sağla. Mevcut dosyaları gereksiz yere değiştirme. AMAÇ Jev'e sohbet ekranı yapmıyoruz. Kullanıcı bir durum girecek, o durum hakkında Boolean, Choice veya Score türünde karar soruları hazırlayacak ve Jev'in tipli sonuçlarını görecek. SAĞLAYICI Bağlantı katmanında TanStack AI'nin decide() yapısını kullan. Böylece karar soruları değişmeden sağlayıcı değiştirilebilsin. Şu erişim yollarını destekle: 1. TypeSafe doğrudan - Ortam değişkeni: TYPESAFE_API_KEY - Paket: @tanstack/ai-typesafe - Adaptör: typesafeDecider("jev-latest") 2. Vercel AI Gateway - Ortam değişkeni: AI_GATEWAY_API_KEY - Paket: @tanstack/ai-vercel-gateway - Adaptör: vercelGatewayDecider("typesafe-ai/jev") 3. OpenRouter - Ortam değişkeni: OPENROUTER_API_KEY - Paket: @tanstack/ai-openrouter - Adaptör: openRouterDecider("~typesafe/jev-latest") JEV_PROVIDER ortam değişkeni typesafe, vercel veya openrouter değerlerinden birini alsın. Yalnızca seçilen sağlayıcının anahtarı zorunlu olsun. Projede zaten çalışan bir Jev bağlantısı varsa onu koru ve aynı arayüze bağla. API anahtarını arayüzde isteme, tarayıcıya gönderme, localStorage'a yazma veya kaynak koda ekleme. Bütün Jev çağrıları sunucu tarafında çalışsın. .env.local dosyasını git dışında tut ve anahtarsız bir .env.example hazırla. ARAYÜZ Tek sayfalık, temiz ve anlaşılır bir ekran oluştur. 1. Durum - Büyük bir metin alanı. - Metin, JSON veya projedeki uygun veri yapısı girilebilsin. - "Örnek yükle" düğmesi gerçekçi ama uydurma bir müşteri mesajı doldursun. 2. Karar soruları - Kullanıcı birden fazla soru ekleyebilsin, silebilsin ve sıralayabilsin. - Her soruda benzersiz bir alan adı, soru türü ve instructions alanı bulunsun. Boolean: - Evet/hayır kararı için kullanılır. - Örnek: "Müşteri açıkça para iadesi istiyor mu?" Choice: - Tanımlı seçeneklerden birini seçmek için kullanılır. - En az iki seçenek olsun. - Her seçeneğin kodu ve ne anlama geldiğini açıklayan kısa bir ölçütü bulunsun. - Örnek seçenekler: satis, destek, fatura. Score: - Bir durumu sıralı seviyelerle ölçmek için kullanılır. - En az iki seviye olsun ve kullanıcı sırasını belirleyebilsin. - Örnek seviyeler: dusuk, orta, yuksek. 3. Sonuçlar - Her sorunun sonucunu ayrı kartta göster. - Seçilen değer, probability ve confidence alanlarını anlaşılır etiketlerle göster. - Choice sonucunda seçenek dağılımı dönüyorsa onu da listele. - Ham JSON çıktısını açılıp kapanan ayrı bir bölümde göster. - Sonuçları "kesin doğru" gibi sunma. Bunların uygulamanın kullanacağı karar sinyalleri olduğunu belirt. 4. Durumlar - İstek sürerken yükleniyor durumu göster. - Boş durum, geçersiz soru, eksik seçenek, eksik anahtar, yetkilendirme hatası ve sağlayıcı hatası için anlaşılır mesajlar yaz. - Aynı istek iki kez gönderilmesin. SUNUCU AKIŞI - Bir sunucu endpoint'i veya server action oluştur. - Gelen state ve questions verisini doğrula. - Soru tanımlarını TanStack AI içindeki boolean(), choice() ve score() yardımcılarına çevir. - Seçilen sağlayıcının adaptörüyle decide() çağrısını yap. - Sonucu arayüz için tutarlı bir JSON biçimine dönüştür. - Sağlayıcıya özel kodu küçük ve ayrı bir server-only dosyada tut. Arayüz sağlayıcının ayrıntılarını bilmesin. KAPSAM - Üyelik, veritabanı, ödeme, yönetim paneli ve deploy ekleme. - Gereksiz animasyon veya süslü landing page yapma. - Kullanıcının API anahtarını arayüzde gireceği bir alan oluşturma. - Jev'e metin yazdırmaya çalışma. Jev yalnızca tanımlı karar sorularını değerlendirsin. MEVCUT PROJEYE EKLERKEN - Önce mevcut yapıyı ve kullanılan tasarım sistemini incele. - Karar ekranını ayrı bir rota veya mevcut akışa uygun bir bileşen olarak ekle. - Var olan API, kimlik doğrulama, stil ve veri akışını bozma. - Projede karar verilecek gerçek bir veri varsa örnek durumu ona göre uyarlayabilmek için kısa bir entegrasyon noktası bırak. TESLİM - Çalışan arayüzü oluştur. - .env.example dosyasına sağlayıcı seçeneklerini ekle. - Kısa bir README bölümünde anahtarın nereye yazılacağını ve uygulamanın nasıl başlatılacağını anlat. - Mümkün olan testleri, lint ve build komutlarını çalıştır. - Sonunda değiştirdiğin dosyaları, kullanılan sağlayıcıyı ve çalıştırma komutunu kısa şekilde bildir.