Projects · Mobil
PixieTales

PixieTales bir uyku ürünüdür, bir sohbet penceresi değil. Ebeveyn bir çocuğu, bir temayı ve bir ortamı tarif eder. API sayfaları yazar, her sayfaya bir görsel iliştirir, hikâyeyi o hesapta saklar ve ancak abonelik diyorsa devam ettirir ya da PDF yapar.
Çözümler
Biçimi olan bir hikâye
Üretim bir karakter adı, bir tema, bir yaş bandı ve bir ortam alır. Sonuç, her sayfasında metin, bir görsel adresi ve görseli çizen istem bulunan, başlıklı sayfalardan bir hikâyedir. Tek paragraf değil, bir kitaptır.
Önce kredi, sonra premium
Ücretsiz bir hesap hikâye kredisi tutar. Hikâye üretmek bir kredi harcar ve kaç tane kaldığını döner. Hikâyeyi sürdürmek ve PDF indirmek premium korumasının ardındadır.
Kütüphane hesapta kalır
Ebeveyn her hikâyeyi listeleyebilir, tüm sayfalarıyla birini açabilir ve ona dönebilir. Devam, ilgisiz ikinci bir hikâye başlatmak yerine o hikâyeye sayfa ekler.
Süreç
01
Giriş
Uygulama Supabase’e karşı kimlik doğrular. Korumalı yollar bir JWT taşıyıcı jeton bekler. Profil, abonelik katmanını ve kalan krediyi döner.
02
Çocuğu tarif et
Üretim çağrısı istemi yollar: karakter kim, tema ne, yaş grubu ve ortam, bir de görselin premium olup olmayacağı.
03
Yaz, sonra çiz
OpenAI servisi sayfalar için GPT-4’e, resimler için DALL-E’ye sorar. Her sayfa hem düzyazıyı hem görsel istemini tutar, böylece resim sonra açıklanabilir.
04
Sakla, sürdür ya da bas
Hikâye sayfalarıyla saklanır. Premium bir hesap sürdürebilir. İndirme yolu PDF’i hazırlar. Diğer herkes ürettiğini yine okuyabilir.
Teknoloji
Modüllerde bir NestJS API
Kimlik, hikâyeler ve çekirdek servisler ayrı modüllerdir. Kimlikte bir JWT stratejisi, bir JWT koruması ve bir premium koruması vardır. Hikâyelerin kendi denetleyicisi, servisi ve DTO’su vardır. Supabase ve OpenAI’nin her birinin çekirdekte bir servisi vardır.
Kimlik ve satırlar için Supabase
Kullanıcılar, krediler ve hikâyeler Supabase’te durur. Satır düzeyi güvenlik şema işinin parçasıdır, böylece bir hikâye kamuya açık bir kova değildir. Profil, subscription_tier’ı ücretsiz ya da premium ve story_credits bakiyesini açar.
Model API’nin ardında
Flutter uygulaması OpenAI’yi kendisi çağırmaz. POST /api/stories/generate ve POST /api/stories/:id/continue çağırır. Anahtar, istemin kurulması ve kredi kontrolü sunucuda kalır.
Bir hikâye kaydının aslında ne olduğu
Bir kimlik, bir başlık, bir karakter adı ve sayfalar. Bir sayfanın numarası, içeriği, bir görsel adresi ve görsel istemi vardır. Hikâyeleri listelemek başlığı, karakteri, sayfa sayısını ve tarihi döner, kitabın tümünü değil.
- Flutter
- NestJS
- TypeScript
- Supabase
- GPT-4
- DALL-E