Appearance
Learnguai — Proje Tanıtım Dokümanı
"Dil öğrenmek sıkıcı olmak zorunda değil. Ve pahalı olmak zorunda da değil."
Içindekiler
- Problem & Vizyon
- Ürün Nedir?
- Teknik Mimari
- Temel Algoritma: The Deep Drill
- Spaced Repetition: Öğrenme Motoru
- Veri Modeli
- Gelir Modeli
- Şu Anki Durum & Yol Haritası
- Neden Biz Kazanabiliriz?
1. Problem & Vizyon
Mevcut Pazar Sorunu
Duolingo, dil öğrenme pazarının tartışmasız devi. $700M+ yıllık gelir, 500M+ kullanıcı. Ama temel bir sorunu var: içerik üretimi insan editörlere bağlı, skalası sınırlı, ve pedagojik derinliği yüzeysel.
ChatGPT / Gemini ile kendi kendine çalışmak ise yapısız. Her soru için AI'ya ödeme var, tutarlılık yok, ilerleme takibi yok.
| Rakip | Güçlü Yanı | Zayıf Yanı |
|---|---|---|
| Duolingo | Kullanıcı tabanı, gamification | İçerik skalası sınırlı, AI yok |
| Babbel | Pedagoji kalitesi | Pahalı, eğlenceli değil |
| ChatGPT | Sonsuz esneklik | Yapısız, takip yok, her sohbet maliyeti |
| Anki | Spaced repetition | Teknik, kullanıcı dostu değil |
Learnguai'nin Cevabı
AI'yı bir kez kullan, milyonlara sun.İçerik üretimini AI ile otomatize et, öğrenme deneyimini SRS (Spaced Repetition) ile kişiselleştir, ve bunu neredeyse sıfır içerik maliyetiyle yap.
Vizyon: Her dil için, her seviyede, sonsuz ve kişiselleştirilmiş içerik sunan — Duolingo'nun kullanım kolaylığı + Anki'nin bilimsel derinliği + AI'nın ölçeklenebilirliği.
2. Ürün Nedir?
Learnguai bir mobil dil öğrenme uygulaması (React Native / Expo). Şu an hedef kitle: Türkçe konuşanlar için İngilizce öğrenimi. Mimari diğer dil çiftlerine hazır.
Kullanıcı Akışı
Uygulama Açılır
|
v
[Neural Link Ekranı] -- Onboarding animasyonu
|
v
[Dil Seçimi] -- Kullanıcının anadili
|
v
[LessonFlow] ──────────────────────────────────────────┐
| |
v |
[SmartCard Gösterilir] |
| |
┌──┴──┐ |
| | |
Doğru Yanlış |
| | |
| ├─ [AI Açıklama Sheet] ← Gemini açıklama |
| └─ Kart deck'e 3 sıra ileriye eklenir |
| |
└──── Kart Vault'a kaydedilir |
Sonraki karta geç ─────────────────────────────┘5 Kart Tipi
Dil yetkinliği tek boyutlu değil. Her kart tipi farklı bir öğrenme boyutunu hedefler:
| Tip | Hedef Beceri | AI Üretim Maliyeti | En Kritik Seviye |
|---|---|---|---|
quiz | Kelime anlamı (lexical) | Düşük | A1–C2 |
fillGap | Bağlamsal kullanım (grammar) | Düşük | A2–C2 |
sentenceBuilder | Sözdizimi, kelime sırası | Düşük | A1–B2 |
idiom | Kalıp, deyim, phrasal verb | Orta | B1–C2 |
errorCorrection | Hata farkındalığı, gramer içselleştirme | SIFIR | A2–C1 |
1. Quiz (Kelime Anlamı)
Soru: "Ephemeral"
[A] Eternal [B] Short-lived ✓ [C] Heavy [D] Bright2. Fill the Gap (Boşluk Doldurma)
"The system _____ automatically upon detection of an error."
[reboots ✓] [deletes] [sleeps] [ignores]3. Sentence Builder (Cümle Kurma)
Hedef: "Güvenlik protokolleri nedeniyle erişim reddedildi."
Parçalar: [Access] [denied] [due] [to] [security] [protocols]
Kullanıcı sıraya dizer → cevap kontrol edilir4. Idiom (Kalıp & Deyim)
Türkçe'de phrasal verb kavramı yok. "Give up / give in / give away / give out" — bunların hiçbiri tek tek kelime bilgisinden türetilemiyor. B1→C1 geçişinin önündeki en büyük engeldir. Kolokasyonlar da bu tipe girer: "make a decision" doğrudur, "do a decision" değil; ama neden? Çünkü kalıp böyle.
Bağlam: "Doktoru uyardıktan sonra sigarayı bıraktı."
"She _____ smoking after the doctor's warning."
[gave up ✓] [gave in] [gave away] [gave back]Bağlam: "Uzun bir toplantıdan sonra bir ara vermek istiyorsun."
"I need to _____ for a while."
[take a break ✓] [make a pause] [do a rest] [have a stop]Kaynak: COCA Phrasal Verb List, BNC Idiom Frequency Lists.
5. Error Correction (Hata Tespiti)
Türk öğrenciler sistematik, tahmin edilebilir hatalar yapar: 3. tekil şahıs -s, perfect tense çekimi, article kullanımı, preposition seçimi. Bu hataları görmek ve düzeltmek kuralları pasif ezberden çok daha iyi içselleştirir.
Hangi cümle dilbilgisel olarak DOĞRU?
[A] She don't know the answer.
[B] She doesn't knows the answer.
[C] She doesn't know the answer. ✓
[D] She not know the answer.Hangi cümle DOĞRU?
[A] I have went to the market yesterday.
[B] I went to the market yesterday. ✓
[C] I was went to the market yesterday.
[D] I did went to the market yesterday.Pipeline avantajı:
errorCorrectionkartları Gemini gerektirmiyor. Tatoeba'dan alınan doğru bir cümleye algoritmik hata dönüşümleri uygulanır (yanlış tense, eksik -s, yanlış preposition). Maliyet: $0.00 / kart.
Ekranlar
| Ekran | Açıklama |
|---|---|
| LessonFlow | Ana öğrenme ekranı, kart akışı |
| Vault | Kaydedilen kelimeler + hatalı kelimeler |
| Profile | İstatistikler, seviye yolculuğu, streak |
| AI Sheet | Yanlış cevapta açıklama + doğru cevap |
| Subscription | Pro pass satın alma ekranı |
Pedagoji Katmanları
Dil yetkinliği tek boyutlu değil. Uygulamanın öğretme gücü 4 katmanda derinleşiyor. Her katman bir öncekinin üzerine inşa edilir.
Katman 4 ░░░░░░░░░░ KONUŞMA & AKICILIK — keşfedilecek
Katman 3 ▒▒▒▒▒▒▒▒░░ AKTİF ÜRETİM — planlandı
Katman 2 ▓▓▓▓▓▓░░░░ KAVRAMA & ADAPTASYON — planlandı
Katman 1 ██████████ TANIMI & SEÇME — mevcut (MVP)Katman 1 — Tanıma (Recognition)
Mevcut durum. Şu an uygulama bu katmanda.
Kullanıcı içeriği görür, doğruyu seçenekler arasından bulur. Beyin pasif modda çalışır: "Bu bana tanıdık geldi mi?"
Kapsayan tipler: quiz / fillGap / idiom / errorCorrection / sentenceBuilder
Kapsanan beceri: kelime anlamı, gramer tanıma, kalıp tanıma
Sınırı: Tanıdık gelme ≠ HatırlayabilmeKatman 2 — Kavrama & Adaptasyon
Mevcut 5 kartın üzerine 3 bileşen eklenir.
2A — reading Kart Tipi
Kısa paragraf (3–6 cümle) + anlama sorusu. B1 sonrasında kelime öğreniminin asıl bağlamı metindir. Kart bazlı öğrenim tek cümle sınırını burada aşar.
"Scientists discovered that during deep sleep, the brain replays
memories and moves them to long-term storage. This is why a
good night's sleep before an exam improves performance."
Soru: Uykunun hafızaya etkisi nedir?
[A] Anıları siler
[B] Uzun süreli belleğe aktarır ✓
[C] Yeni anılar oluşturur
[D] Beyin aktivitesini durdururÜretim: Tatoeba yerine Gemini, Wikipedia extract veya BBC Learning English kaynaklarından kısa pasajlar. Seviye (A2–C2) kelime frekansına göre belirlenir.
2B — Zayıf Alan Hedefleme (Adaptive Difficulty)
Şu an SRS ne zaman gösterileceğini biliyor ama neyin daha fazla gösterileceğini bilmiyor. grammar_rule alanı zaten var — sadece seçim algoritmasında kullanılmıyor.
Kural: Kullanıcı aynı grammar_rule'dan kartı
3 kez üst üste yanlış yaparsa →
o kural için ek 5 kart önce sıralanır
Örnek:
"article_countable" kuralında 3 hata
→ sistem A2 seviye article kartlarını öne alır
→ kullanıcı farkında olmadan o alanda yoğunlaşırYeni içerik gerektirmiyor. Sadece SRS seçim mantığına grammar_rule failure count ağırlığı ekleniyor.
2C — CEFR Seviye Testi
Her CEFR geçişinde (A2→B1, B1→B2...) 20 soruluk kapı testi. Yeni içerik üretilmiyor — mevcut kartlardan seçiliyor, sadece zamanlama ve eşik mantığı ekleniyor.
A2 packlerini %75 tamamla
│
▼
"B1 Seviye Testi" (20 soru, karma tip)
│
┌──┴──┐
≥%70 <%70
│ │
B1 açılır A2 paketi tekrar önerilirBu özellik hem motivasyon hem de kullanıcının gerçek sertifika yolculuğunu (IELTS/TOEFL) simüle etmesi açısından güçlü.
Katman 3 — Aktif Üretim (Free Production)
Tanıma → Üretim geçişi. En kritik pedagojik atlama.
Araştırmalar net: kelimeyi seçenekler arasında bulmak ile o kelimeyi boş sayfada üretmek farklı beyin bölgeleri kullanıyor. Gerçek akıcılık ikincisini gerektiriyor.
3A — Hard Mode (Yazarak Cevap)
Mevcut quiz/fillGap kartlarına ek render modu. Seçenekler gösterilmez, kullanıcı cevabı klavyeyle yazar. Aynı 235K kart, farklı zorluk.
Normal Mode: Hard Mode:
"The sun _____ in "The sun _____ in
the west." the west."
[sets ✓] [rises] [ ] ← kullanıcı yazar
[falls] [stays]Validasyon: exact match (lowercase, trim) + Levenshtein distance ≤ 2 (typo toleransı). Runtime'da AI çağrısı yok.
B1+ seviyede unlock, Pro kullanıcılara açık.
3B — Ters Çeviri (TR → EN)
Mevcut kartların sentence_native / question_native alanları zaten var. Bunlar ters yönde kullanılır:
Türkçe gösterilir: "Güneş batıda batar."
Kullanıcı yazar: "The sun sets in the west."Bu kart tipi için yeni içerik üretilmiyor. Mevcut fillGap kartlarının çift yönlü kullanımı.
3C — Açık Cümle Tamamlama
Cümlenin başı verilir, kullanıcı devamını yazar. Validation LLM gerektirdiğinden bu en pahalı feature — kullanıcı başına bir Gemini çağrısı.
"If I had more time, I would ___________________"Serbest cevap → Gemini "dilbilgisel olarak doğru mu + bağlama uygun mu?" değerlendirmesi yapar. Pro kullanıcılar için günlük 5 hak.
Katman 4 — Konuşma & Akıcılık (keşfedilecek)
Bu katman teknik ve iş modeli açısından ayrı bir tartışma gerektiriyor.
Dil öğreniminin nihai hedefi konuşmak. Katman 1–3 okuma ve yazmayı kapsamlı şekilde öğretiyor ama konuşma boyutu henüz tanımlanmamış.
Gerekli olduğu kesin. Nasıl yapılacağı sonraki aşamada ele alınacak.
3. Teknik Mimari
Genel Stack
┌─────────────────────────────────────────────────────┐
│ CLIENT (Mobile App) │
│ │
│ React Native 0.81 + Expo 54 │
│ ├── expo-router (Navigation) │
│ ├── nativewind (Tailwind CSS for RN) │
│ ├── react-native-reanimated (Animations) │
│ ├── expo-blur (Glass morphism UI) │
│ ├── expo-speech (TTS - sesli okuma) │
│ ├── expo-haptics (Dokunsal geri bildirim) │
│ └── AsyncStorage (Local persistence) │
│ │
└──────────────────┬──────────────────────────────────┘
│
(Planlanan backend)
│
┌──────────────────┴──────────────────────────────────┐
│ BACKEND (Planned) │
│ │
│ Supabase (PostgreSQL) │
│ ├── users tablosu │
│ ├── cards tablosu ← statik, AI ile önceden üretildi│
│ ├── user_progress ← SRS state │
│ └── packs ← kart paketleri │
│ │
│ Edge Functions │
│ └── /ai-explain ← Gemini API çağrısı (runtime) │
│ │
└──────────────────┬──────────────────────────────────┘
│
┌──────────────────┴──────────────────────────────────┐
│ AI LAYER │
│ │
│ Gemini Flash │
│ ├── Offline kullanım: SIFIR çağrı (kartlar static) │
│ └── Online kullanım: sadece AI açıklama için │
│ │
└─────────────────────────────────────────────────────┘Bileşen Ağacı
App (expo-router)
└── LessonFlow ← Ana state yöneticisi
├── AILoadingScreen ← Onboarding
├── LanguageSelector ← Dil seçimi
├── SmartCard ← Kart renderer
│ ├── Quiz variant
│ ├── FillGap variant
│ ├── SentenceBuilder variant
│ ├── Idiom variant ← YENİ: Quiz UI yeniden kullanılır
│ └── ErrorCorrection variant ← YENİ: Quiz UI yeniden kullanılır
├── AIExplanation (Sheet) ← Yanlış cevap açıklaması
├── VaultScreen ← Hafıza bankası
├── ProfileScreen ← Kullanıcı profili
└── SubscriptionScreen ← Pro satın almaLazy Language Pair Initialization
TR-EN tek el yapımlı dil çiftidir. Diğer tüm çiftler talep üzerine üretilir.
Kullanıcı dil seçer: "Español (ES)"
│
▼
system: language_pairs tablosunda 'es-en' var mı?
│
┌────┴─────┐
VAR YOK (ilk ES kullanıcısı)
│ │
│ ▼
│ Background job tetiklenir:
│ "ES-EN Translation Batch"
│ │
│ ▼
│ Mevcut 235K kart için
│ Gemini'ye ES çevirisi ürettirilir
│ translations JSONB'ye 'es' key eklenir
│ │
│ ▼
│ ~1 saat sonra tamamlanır (~$0.90)
│ language_pairs: es-en → 'ready'
│ Kullanıcı bildirim alır
│ │
└──────────────┘
│
▼
ES-EN içerik statik olarak servis edilir
Sonraki tüm ES kullanıcıları: $0, anındaKullanıcı deneyimi (üretim sırasında): İlk ES kullanıcısı beklemek zorunda değil. TR-EN demo içeriği gösterilir ya da "İspanyolca içerik hazırlanıyor, hazır olunca bildirim alacaksınız" mesajı verilir. Kuyruktaki kullanıcı sayısına göre öncelik verilebilir.
Kart şemasına etkisi: English içerik (sentence, options, answer) tüm çiftlerde aynı — dil-agnostik. Tek değişen translations JSONB içindeki native language key'i:
json
{
"translations": {
"tr": { "question": "Geçici", "context": "Zaman algısı" },
"es": { "question": "Efímero", "context": "Percepción del tiempo" },
"ru": { "question": "Мимолётный", "context": "Восприятие времени" }
}
}Yeni dil çifti = mevcut kartlara yeni key eklenir. Kart sayısı değişmez.
State Akışı (Veri Katmanları)
┌─────────────────┐ loadVault() ┌──────────────────┐
│ AsyncStorage │ ──────────────────► │ LessonFlow │
│ (local disk) │ ◄────────────────── │ State │
└─────────────────┘ saveVault() │ │
│ deck[] │
┌─────────────────┐ fetchInitialDeck() │ idx │
│ ApiService │ ──────────────────► │ savedItems[] │
│ (mock/future │ │ mistakeItems[] │
│ Supabase) │ │ feedback │
└─────────────────┘ └──────────────────┘
│
props olarak aşağı
│
┌────────┴───────┐
│ SmartCard │
│ onAnswer() │
└────────────────┘4. Temel Algoritma: The Deep Drill
Bu, Learnguai'nin maliyet avantajının kalbi.
Felsefe: "Write Once, Serve Millions"
Geleneksel yaklaşım:
Kullanıcı istek atar → AI çağrısı → Cevap → Para biter
(1M kullanıcı = 1M API çağrısı = $$$)Learnguai yaklaşımı:
Bir kez: 10,000 cümle → AI ile işle → 100,000 statik kart → DB'ye yaz
Her zaman: Kullanıcı → DB'den oku → API çağrısı YOK → $0Pipeline: 4 Aşamalı Maden Ocağı
THE DEEP DRILL PIPELINE
━━━━━━━━━━━━━━━━━━━━━━━
┌─────────────────────────────────────────────────────────────┐
│ ADIM 1: RAW ORE EXTRACTION (Zero Cost) │
│ │
│ ┌──────────────┐ ┌─────────────────┐ ┌───────────────┐ │
│ │ Tatoeba │ │ Project │ │ Wiktionary │ │
│ │ (cümle çiftleri│ │ Gutenberg │ │ (kelime │ │
│ │ En-Tr, En-Es│ │ (kamu domain │ │ tanımları) │ │
│ │ milyonlarca)│ │ kitaplar) │ │ │ │
│ └──────┬───────┘ └────────┬────────┘ └───────┬───────┘ │
│ └──────────────────┼────────────────────┘ │
│ │ │
│ Ham cümle havuzu │
└─────────────────────────────┬───────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ ADIM 2: THE SIEVE (CPU-only, sıfır AI) │
│ │
│ Gelen cümle │
│ │ │
│ ├─ Uzunluk filtresi ──► < 3 kelime? → ATLA │
│ │ > 20 kelime? → ATLA │
│ │ │
│ └─ CEFR Seviye Tayini (Kelime Frekans Listesi) │
│ │ │
│ ├─ Oxford 3000'deki ilk 500 kelime → A1 │
│ ├─ Oxford 3000 → A2/B1 │
│ ├─ Academic Word List → B2/C1 │
│ └─ Düşük frekanslı ("ephemeral") → C1/C2 │
│ │
│ Çıktı: Seviyelendirilmiş ham cümleler │
└─────────────────────────────┬───────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ ADIM 3: THE REFINERY │
│ │
│ Kart tipine göre iki farklı yol: │
│ │
│ YOL A — Gemini Flash (quiz / fillGap / idiom) │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ PROMPT (tek seferde 50 cümle): │ │
│ │ "Here are 50 English sentences. │ │
│ │ For each: │ │
│ │ 1. Identify the hardest target word │ │
│ │ 2. Generate 3 plausible distractors │ │
│ │ 3. Verify the Turkish translation │ │
│ │ Output as JSON array." │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ YOL B — Algoritmik (errorCorrection) — AI YOK │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ INPUT: Doğru cümle (Tatoeba'dan) │ │
│ │ "She doesn't know the answer." │ │
│ │ │ │
│ │ Hata dönüşüm kuralları (deterministik): │ │
│ │ • 3. tekil -s kaldır → "She don't know..." │ │
│ │ • Yanlış tense → "She didn't knew..." │ │
│ │ • Yanlış yardımcı → "She not know..." │ │
│ │ │ │
│ │ Çıktı: 1 doğru + 3 sistematik yanlış seçenek │ │
│ │ Maliyet: $0.00 │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ Toplam Maliyet Hesabı: │
│ • Gemini Flash: ~$0.075 / 1M input token │
│ • quiz/fillGap/idiom: 50 kart/prompt ≈ 2000 token │
│ • errorCorrection: $0 (algoritmik) │
│ • 50,000 karma kart için toplam: ~$0.20 │
│ TOPLAM: < $1 │
└─────────────────────────────┬───────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ ADIM 4: CRYSTALLIZE (Statik JSON / DB) │
│ │
│ { │
│ "id": "c_4521", │
│ "level": "C1", │
│ "type": "fillGap", │
│ "sentence": "The AI's logic was _____ to comprehension", │
│ "options": ["impenetrable","easy","open","visible"], │
│ "answer": "impenetrable", │
│ "translations": { │
│ "tr": { "sentence": "Yapay zekanın mantığı..." } │
│ } │
│ } │
│ │
│ • Değişmez (immutable) │
│ • Runtime'da API key gerektirmez │
│ • Offline çalışır │
│ • CDN'den serve edilebilir │
└─────────────────────────────────────────────────────────────┘Content Scale: Kaç Kart Üretilebilir?
Mevcut açık kaynak verilerden tek bir pipeline run ile üretilebilecek kart sayısı:
| Tip | Kaynak | Yöntem | Tahmini Kart |
|---|---|---|---|
quiz | Tatoeba + Wiktionary | Gemini batch | ~30,000 |
fillGap | Tatoeba (180K cümle) | Gemini batch | ~100,000 |
sentenceBuilder | Tatoeba (5–12 kelime) | Gemini batch | ~40,000 |
idiom | COCA + BNC + Gemini üretimi | Gemini batch | ~15,000 |
errorCorrection | Tatoeba + Gutenberg | Algoritmik ($0) | ~50,000 |
| TOPLAM | ~235,000 |
Toplam üretim maliyeti (235,000 kart): ~$1.30
Duolingo'nun aynı içeriği üretmesi: editör + pedagog + studio → aylar + $$$CEFR başına dağılım:
A1 (~18K) ██░░░░░░░░░░░░░░░░░░ 8%
A2 (~28K) ███░░░░░░░░░░░░░░░░░ 12%
B1 (~52K) █████░░░░░░░░░░░░░░░ 22%
B2 (~66K) ███████░░░░░░░░░░░░░ 28%
C1 (~47K) █████░░░░░░░░░░░░░░░ 20%
C2 (~24K) ██░░░░░░░░░░░░░░░░░░ 10%Örnek: Bir Cümlenin Dönüşümü
INPUT (Tatoeba):
"The sun sets in the west."
│
▼ SIEVE
Kelimeler: the(A1), sun(A1), sets(A1), in(A1), west(A1)
→ Seviye: A1 | Hedef kelime: "sets" (fiil, bağlamsal anlam)
│
▼ REFINERY (Gemini)
Distractors: ["rises", "falls", "stays"]
TR çeviri: "Güneş batıda batar."
│
▼ OUTPUT CARD
{
type: "fillGap",
sentence: "The sun _____ in the west.",
options: ["sets", "rises", "falls", "stays"],
answer: "sets",
level: "A1"
}5. Spaced Repetition: Öğrenme Motoru
SRS (Spaced Repetition System), bilimsel olarak kanıtlanmış en etkili ezber tekniği. Temel fikir: Kartı doğru cevapladıkça gösterim aralığı uzar. Yanlış cevaplandıkça kısalır.
Ebbinghaus Unutma Eğrisi
Hafıza
%
100 ─┐
│╲ ← öğrenme anı
80 │ ╲_____ SRS ile tekrar ──────────────── %90+
│ ╲_
60 │ ╲___
│ ╲___
40 │ ╲____
│ ╲____
20 │ ╲_____
│ Tekrarsız unutma eğrisi ╲_____
0 └──────────────────────────────────────────────► Zaman
0 1s 1g 3g 1h 1ayHermann Ebbinghaus 1885'te bunu keşfetti: öğrenilen şey tekrar edilmezse üstel bir eğriyle unutuluyor. SRS bu eğriye karşı oynuyor — her tekrar "unutma saatini" sıfırlamak yerine belleği daha derin göçüyor, bir sonraki tekrar aralığı uzuyor.
SM-2: 35 Yıl Kullanılan Standart
Piotr Wozniak tarafından 1987'de geliştirilen SM-2, Anki'nin temel algoritmasıdır. Bugün hâlâ dünyada en yaygın kullanılan SRS algoritması.
Nasıl çalışır:
Her kartın iki parametresi var:
interval— kaç gün sonra tekrar gösterilecekEF(Easiness Factor) — kartın kolay/zor katsayısı, 1.3–2.5 arası
Kullanıcı her kartı 0–5 arasında derecelendiriyor:
0 = Hiç hatırlamadım 3 = Zorlanarak hatırladım
1 = Yanlış 4 = Kolayca hatırladım
2 = Yanlış ama tanıdık 5 = Çok kolayYeni interval hesabı:
Grade < 3 → interval = 1 (sıfırla, yarın tekrar göster)
1. tekrar → interval = 1
2. tekrar → interval = 6
3.+ tekrar → interval = interval × EF
EF güncelleme:
EF = EF + (0.1 - (5 - grade) × (0.08 + (5 - grade) × 0.02))
EF minimum: 1.3SM-2'nin sınırları:
Problem 1 — Sadece 2 parametre var (interval + EF)
Hafızayı modelliyor mu? Hayır.
Sadece "ne zaman göster?" sorusuna cevap veriyor.
Problem 2 — Geç veya erken tekrar cezası yok
10 günlük kartı 20 gün sonra gördün?
SM-2 bunu bilmiyor, o an gerçek hatırlama olasılığını hesaplayamıyor.
Problem 3 — 0-5 derecelendirme subjektif
"Zorlandım ama hatırladım" 3 mü, 4 mü?
Tutarsız kullanıcı girdisi = güvenilmez parametre güncelleme.
Problem 4 — Kişiselleştirme yok
Herkes aynı formülü kullanıyor.
Bazı insanlar daha hızlı unutur — SM-2 bunu öğrenemiyor.FSRS: Neden Geçiş Yaptık?
FSRS (Free Spaced Repetition Scheduler), Jarrett Ye tarafından 2022'de geliştirildi. İlginç olan: SM-2'nin yaratıcısı Wozniak'ın kendi geliştirdiği DSR (Difficulty-Stability-Retrievability) modeline dayanıyor. Yani SM-2'nin mucidi, yıllar sonra çok daha iyi bir model ortaya koydu.
FSRS'in 3 temel parametresi:
D — Difficulty (Zorluk)
Kartın kendine özgü zorluğu. 0–10 arası.
Yüksek D = bu kart herkes için zor.
Güncellenir ama yavaş değişir.
S — Stability (Kararlılık)
"Bu hafıza kaç gün dayanır?"
S=10 → 10 gün sonra %90 ihtimalle hatırlarsın.
S=30 → 30 gün sonra %90 ihtimalle hatırlarsın.
Doğru cevapta artar. Yanlışta sıfırlanır.
R — Retrievability (Erişilebilirlik)
"Şu an hatırlama olasılığım nedir?"
Her an hesaplanabilir: R = 0.9^(t / S)
t = son tekrardan bu yana geçen günMatematiksel model:
R(t, S) = 0.9^(t / S)
Örnekler:
S=10, t=10 → R = 0.9^1 = %90 ← ideal tekrar anı
S=10, t=5 → R = 0.9^0.5 = %95 ← erken, ama güvenli
S=10, t=20 → R = 0.9^2 = %81 ← geç, unutma başladı
S=10, t=30 → R = 0.9^3 = %73 ← tehlike bölgesiHedef: R = %90 olduğunda göster. Bu demek ki: next_review = now + S gün
Doğru cevap sonrası S güncelleme:
S_new = S_old × f(D, R)
f(D, R): zorluk düşükse ve R yüksekse (erken tekrar) → küçük artış
zorluk yüksekse ve R düşükse (geç tekrar) → büyük artış
(formül 19 ağırlık parametresi içeriyor, makine öğrenmesiyle optimize edilebilir)Yanlış cevap sonrası:
S_new = S_old × w (w < 0.5, büyük düşüş)
D_new = D_old + sabit (kart daha zor olarak işaretlenir)
next_review = 10 dakika (acil tekrar)SM-2 vs FSRS: Karşılaştırma
| Kriter | SM-2 | FSRS |
|---|---|---|
| Hafıza modeli | Yok (sezgisel interval) | Matematiksel (R = 0.9^(t/S)) |
| Parametreler | 2 (interval, EF) | 3 (D, S, R) + 19 ağırlık |
| Geç tekrar etkisi | Yok sayılır | R üzerinden doğru hesaplanır |
| Erken tekrar etkisi | Yok sayılır | S artışı daha küçük olur (doğru) |
| Kişiselleştirme | Yok | 19 ağırlık kullanıcı verisine göre optimize edilebilir |
| Anlık hatırlama tahmini | Hesaplanamaz | Her an R hesaplanabilir |
| Aynı %90 için review sayısı | Baseline | %20–30 daha az |
| Kullanım yaygınlığı | Anki (35 yıl) | Anki v23.10+, yeni nesil uygulamalar |
| Açık kaynak | Evet | Evet (MIT) |
| Kullanıcı derecelendirmesi | 0–5 (6 seçenek) | 1–4 (Again/Hard/Good/Easy) |
Neden FSRS seçtik:
- Aynı öğrenme hedefine daha az tekrarla ulaşılıyor → kullanıcı daha az yoruluyor
- Anlık R hesabı: "Bu kullanıcının bu kelimeyi şu an hatırlama ihtimali %67" bilgisi analytics ve adaptif içerik için çok değerli
- Anki resmi olarak 2023'te FSRS'e geçti — sektör standardı değişiyor
- 19 ağırlık parametresi Pro kullanıcılar için kişiselleştirilebilir — premium özellik olarak sunulabilir
FSRS Akışı (Learnguai İçin)
Kart gösterilir
│
▼
R hesaplanır: R = 0.9^(t / S)
(Kullanıcıya gösterilebilir: "Bu kelimeyi hatırlama şansın: %73")
│
▼
Kullanıcı cevaplar
│
┌──┴────────────────────────┐
│ │
DOĞRU YANLIŞ
│ │
▼ ▼
S_new = S × f(D, R) S_new = S × 0.3 (büyük düşüş)
D_new = max(1, D - 0.15) D_new = min(10, D + 0.5)
next_review = now + S_new next_review = now + 10 dakika
lapses++
│ │
└────────────┬──────────────┘
│
▼
user_progress güncelle
{ S, D, next_review, lapses, last_review }Mobil UX için derecelendirme:
Yanlış cevap → sistem otomatik "Again (1)" sayar
Doğru cevap → kullanıcıya 2 seçenek:
[Zorlandım] [Kolaydı]
Hard (2) Easy (4)
S biraz artar S çok artar
D biraz artar D azalırBasit binary (doğru/yanlış) da çalışır — mobil UX'i bozmadan. 4'lü derecelendirme Pro kullanıcılara açılabilir (daha hassas SRS için).
Mevcut Durum vs Hedef
| Özellik | Şu An (MVP) | Hedef |
|---|---|---|
| Kart sırası | Sabit deck, döngü | next_review bazlı FSRS sıralaması |
| Yanlış cevap | 3 sıra ileriye ekle | S sıfırla, 10dk sonra göster |
| Doğru cevap | Vault'a kaydet | S artır, next_review hesapla |
| Günlük hedef | Hardcoded | next_review ≤ now olan kartlar |
| Kişiselleştirme | Yok | 19 ağırlık, kullanıcı verisine göre optimize |
6. Veri Modeli
Entity-Relationship Şeması
┌──────────────────────────────────────────────────────┐
│ users │
├──────────────────────────────────────────────────────┤
│ id UUID PK │
│ email TEXT │
│ native_lang TEXT ('tr','es','fr'...) │
│ target_lang TEXT ('en') │
│ level TEXT (A1..C2) │
│ xp INT │
│ streak_current INT │
│ streak_best INT │
│ last_active_at TIMESTAMPTZ │
│ daily_goal INT (dakika) │
│ is_pro BOOL │
└──────────────────┬───────────────────────────────────┘
│ 1
│
│ N
┌──────────────────┴───────────────────────────────────┐
│ user_progress │
├──────────────────────────────────────────────────────┤
│ user_id UUID FK → users.id │
│ card_id TEXT FK → cards.id │
│ status ENUM (new|learning|review|mastered) │
│ stability FLOAT (SRS: kaç gün hatırlanacak) │
│ difficulty FLOAT (SRS: kartın zorluğu 0-1) │
│ last_review TIMESTAMPTZ │
│ next_review TIMESTAMPTZ ← index'lenmeli! │
│ lapses INT (kaç kez unutuldu) │
└──────────────────┬───────────────────────────────────┘
│ N
│
│ 1
┌──────────────────┴───────────────────────────────────┐
│ cards │
├──────────────────────────────────────────────────────┤
│ id TEXT PK ("c_1024") │
│ pack_id TEXT FK → packs.id │
│ level TEXT (A1..C2) │
│ complexity_score FLOAT (0.0-1.0) │
│ type ENUM (quiz|fillGap|sentenceBuilder| │
│ idiom|errorCorrection) │
│ context TEXT ("Travel • Polite Requests") │
│ content JSONB (polymorphic: question/sentence/ │
│ words/options/answer) │
│ translations JSONB ({ tr: {...}, es: {...} }) │
└──────────────────┬───────────────────────────────────┘
│ N
│
│ 1
┌──────────────────┴───────────────────────────────────┐
│ packs │
├──────────────────────────────────────────────────────┤
│ id TEXT PK ("p_nature_c1") │
│ title TEXT ("Nature & Environment") │
│ level TEXT │
│ card_count INT │
│ is_free BOOL ← freemium kapısı │
└──────────────────────────────────────────────────────┘language_pairs Tablosu
Hangi dil çiftlerinin üretildiğini ve durumunu takip eder.
┌──────────────────────────────────────────────────────┐
│ language_pairs │
├──────────────────────────────────────────────────────┤
│ native_lang TEXT PK ('tr','es','ru','ja'...) │
│ target_lang TEXT PK ('en') ← şimdilik sabit │
│ status ENUM (pending|generating|ready) │
│ triggered_by UUID FK → users.id ← ilk isteyen │
│ generated_at TIMESTAMPTZ ← ne zaman tamamlandı │
│ card_count INT ← kaç kart üretildi │
│ cost_usd FLOAT ← üretim maliyeti (log için) │
└──────────────────────────────────────────────────────┘
TR-EN: status='ready', elle oluşturuldu
ES-EN: status='pending' → 'generating' → 'ready'
JA-EN: henüz kimse istemedi → tabloda yokDB'ye Kim Yazar?
Veritabanına iki ayrı kaynak yazar. Bunların karışmaması önemli.
┌─────────────────────────────────────────────────────────────┐
│ PIPELINE YAZAR (tek seferlik, statik, immutable) │
│ │
│ cards ← 235K kart, bir kez yazılır, hiç değişmez │
│ packs ← kart grupları + curriculum graph │
│ passages ← Katman 2 reading paragrafları │
│ │
│ Ne zaman: pipeline çalıştırıldığında (yılda 1-2 kez) │
│ Kim tetikler: geliştirici │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ UYGULAMA YAZAR (runtime, dinamik, kullanıcı başına) │
│ │
│ users ← kayıt / profil güncelleme │
│ user_progress ← her cevap sonrası SRS state │
│ (stability, next_review, lapses...) │
│ │
│ Ne zaman: kullanıcı her kart cevapladığında │
│ Kim tetikler: kullanıcı aksiyonu │
└─────────────────────────────────────────────────────────────┘Ölçek: user_progress Tablosu
En çok büyüyecek tablo bu. Doğru planlanmazsa sorun çıkarır.
Aktif kullanıcı başına ortalama görülen kart: ~10,000
(Tüm 235K kartı kimse tamamlamaz, aktif kullanım böyle)
100K kullanıcı × 10K kart = 1 milyar satır
500K kullanıcı × 10K kart = 5 milyar satırBu rakamlar büyük görünüyor ama PostgreSQL bu ölçeği kaldırır. Kritik olan tek şey doğru index:
sql
-- Günlük "hangi kartları bugün göster?" sorgusu:
SELECT card_id FROM user_progress
WHERE user_id = $1
AND next_review <= NOW()
ORDER BY next_review ASC
LIMIT 20;
-- Bu sorgunun hızlı çalışması için:
CREATE INDEX idx_user_progress_review
ON user_progress (user_id, next_review);
-- Bu index olmadan 1B satırda full scan → felaket
-- Bu index ile → milisaniyeCihazda (AsyncStorage) Ne Tutar?
Uygulama internet bağlantısı olmadan da çalışmalı. Bunun için her oturum başında bir günlük kart paketi lokale yazılır.
DB (Supabase) Cihaz (AsyncStorage)
───────────────── ────────────────────
• Tüm kartlar (235K) • Bugünkü deck (~20-50 kart)
• Tüm user_progress • Vault önbelleği
• Kullanıcı profili • Dil tercihi
Senkronizasyon:
• Uygulama açıldığında → DB'den bugünkü kartları çek → lokale yaz
• Cevap verildiğinde → lokale işle → bağlantı gelince DB'ye syncBu mimari hem hız sağlar (lokalde her şey anlık) hem de offline çalışmayı mümkün kılar.
7. Gelir Modeli
Strateji: Freemium + Subscription
FREE TIER PRO TIER ($7.99/ay veya $49.99/yıl)
───────────────────────── ──────────────────────────────────
• İlk 3 pack (A1-A2) • Tüm packler (A1-C2, tüm konular)
• Günlük 20 kart limiti • Sınırsız kart
• Yalnızca quiz + fillGap • 5 kart tipi (sentenceBuilder + idiom
+ errorCorrection dahil)
• AI açıklama yok • AI açıklama (yanlış cevapta)
• Offline yok • Offline mod
• Reklam var • Reklam yok
• Detaylı istatistikler
• Gelişmiş SRS kontrolGelir Projeksiyonu
Varsayımlar:
• %3 freemium → pro dönüşüm (sektör ortalaması %2-5)
• Aylık aktif kullanıcı (MAU) büyümesi
MAU | Free | Pro (%3) | Aylık Gelir ($7.99)
──────────────────────────────────────────────────
1,000 | 970 | 30 | $240
10,000 | 9,700 | 300 | $2,397
50,000 |48,500 | 1,500 | $11,985
100,000 |97,000 | 3,000 | $23,970
500,000 |485,000| 15,000 | $119,850Maliyet Yapısı (Rakip Analizi)
Duolingo içerik maliyeti:
→ Editörler + pedagoglar + studio = yüzlerce çalışan
→ İçerik başına maliyet: yüksek, ölçeklenemiyor
Learnguai içerik maliyeti:
→ 50,000 kart üretimi: ~$0.30 (tek seferlik)
→ Runtime AI maliyeti: sadece AI açıklama = ~$0.001/açıklama
→ 1,000 kullanıcı günlük 10 yanlış cevap = $10/gün
→ Infrastructure: Supabase free tier → $25/ay (100k kullanıcıya kadar)
Marj: Pro kullanıcı başına ~$7.50 net (Stripe fee sonrası)Ek Gelir Kanalları
| Kanal | Açıklama | Potansiyel |
|---|---|---|
| B2B Kurumsal | Şirket dil eğitimi (takım lisansı) | Yüksek (tek sözleşme = 50-500 kullanıcı) |
| Pack Marketplace | Kullanıcıların pack oluşturup satması | Platform fee %30 |
| API Lisansı | Deep Drill pipeline'ı diğer uygulamalara sat | Pasif gelir |
| Affiliate | Dil sertifika sınavlarına yönlendirme (IELTS, TOEFL) | Düşük ama pasif |
8. Şu Anki Durum & Yol Haritası
MVP Durumu (Şu An)
[TAMAMLANDI]
├── UI/UX: Tüm ekranlar tasarlandı ve çalışıyor
├── 3 kart tipi tamamen işlevsel
├── Vault (kayıt + hata takibi) çalışıyor
├── Lokalizasyon altyapısı (7 dil UI)
├── TTS (sesli okuma) entegrasyonu
├── Haptic feedback
└── Mock AI açıklama sistemi
[YOK / MOCK]
├── Backend (Supabase) bağlantısı yok, hardcoded data
├── SRS algoritması yok (düz döngü var)
├── Gerçek Gemini API bağlantısı yok (simüle)
├── Kullanıcı authentication yok
└── Gerçek kartlar yok (5 demo kart)Yol Haritası
SPRINT 1 (1-2 hafta) — Backend Foundation
├── Supabase kurulumu
├── users + cards + user_progress tablolar
├── Authentication (email + Apple/Google OAuth)
└── fetchInitialDeck → gerçek DB sorgusu
SPRINT 2 (2-3 hafta) — Content Pipeline v1
├── Tatoeba EN-TR dataset import (~450K cümle)
├── The Sieve: uzunluk + CEFR seviye filtresi
├── Konu taksonomisi tanımı (~80 leaf topic)
├── Batch Gemini Flash işlemesi (quiz / fillGap / idiom + topic tag)
├── Gramer hata kataloğu (ilk 10 kural) + errorCorrection üretici
├── Quality gate (distractor plausibility skoru)
├── Exact hash deduplication
└── İlk 1,000 gerçek kart (A1–B1, tüm 5 tip, 5 konu)
SPRINT 3 (2 hafta) — SRS Engine
├── FSRS algoritması implementasyonu
├── user_progress güncelleme
├── next_review bazlı kart seçimi
└── Günlük hedef sistemi
SPRINT 4 (1-2 hafta) — Curriculum & Scale
├── Pack schema + curriculum graph (prerequisite zinciri)
├── Pack içi kart sıralama (quiz önce → errorCorrection sonda)
├── Semantic dedup (embedding bazlı, ~$0.50 one-time)
├── Full pipeline run → 10,000 kart (A1–B2, 20 konu)
└── Pack unlock sistemi (%75 tamamlanma kapısı)
SPRINT 5 (1-2 hafta) — Monetization
├── RevenueCat entegrasyonu (subscription)
├── Free vs Pro pack ayrımı
├── App Store / Play Store submission
└── Analytics (Amplitude veya PostHog)
SPRINT 6 — Lazy Language Pair System
├── language_pairs tablosu + status tracking
├── Background job queue (Supabase pg_cron veya Edge Function)
├── "Dil hazırlanıyor" UX + push notification
├── translations JSONB'ye dinamik key ekleme
└── İlk otomatik test: ES-EN tetikleme + doğrulama
SPRINT 7+ — Growth & Full Content
├── Full pipeline run → 50,000 kart (A1–C2, 50 konu)
├── Streak + push notification sistemi
├── Gramer hata kataloğu genişletme (25 kural)
├── Sosyal özellikler (leaderboard)
└── Full run → 235,000 kart (yılda 1–2 kez pipeline tekrarı)9. Neden Biz Kazanabiliriz?
Sürdürülebilir Rekabet Avantajları
1. Maliyet Yapısı Rakipler içerik üretimine para harcarken, biz pipeline'ı bir kez kuruyoruz. TR-EN tüm içerik: ~$1.30 (tek seferlik). Yeni dil çifti (örn. ES-EN): ~$0.90 + otomatik tetiklenir, geliştirici müdahalesi yok. Duolingo için aynı iş: aylar + editör ekibi + studio.
2. AI-Native Pedagoji Mevcut uygulamalar AI'yı "sonradan" ekliyor. Learnguai, AI olmadan var olamaz — bu bir kırılganlık değil, bir savunma duvarı.
3. Infinite Content Flywheel
Daha fazla kullanıcı
│
▼
Daha fazla hata verisi
│
▼
Hangi kartların zor olduğunu öğreniyoruz
│
▼
Pipeline daha iyi kartlar üretiyor
│
▼
Daha iyi öğrenme oranı → daha fazla kullanıcı4. Lazy Language Pair Architecture TR-EN el ile kurulur ve tüm kararlar bilinçli alınır. Diğer tüm dil çiftleri o dili konuşan ilk kullanıcı geldiğinde otomatik olarak tetiklenir, ~1 saatte üretilir, sonsuza kadar statik kalır. Yeni bir dil eklemek için geliştirici müdahalesi gerekmez. Sistem büyüdükçe kendiliğinden genişler.
Tek Cümlelik Pitch
Learnguai, Duolingo'nun gamification'ını Anki'nin bilimi ve Gemini'nin içerik üretim gücüyle birleştiren, marjinal içerik maliyeti neredeyse sıfır olan bir dil öğrenme platformudur.
Ekler
Teknoloji Seçim Gerekçeleri
| Teknoloji | Alternatif | Neden Bu? |
|---|---|---|
| React Native + Expo | Flutter | JS ekosistemi, hızlı prototipleme, OTA update |
| Supabase | Firebase | PostgreSQL (relational, SRS sorguları için kritik), open source |
| Gemini Flash | GPT-4o mini | Fiyat/kalite oranı, 1M token context |
| FSRS | SM-2 (Anki) | Daha modern, açık kaynak, daha az parametre |
| NativeWind | StyleSheet | Tailwind bilgisi transferi, hız |
| Algoritmik hata üretici | Gemini (errorCorrection için) | Sıfır maliyet, deterministik, ölçeksiz |
Referans Linkler
- Tatoeba Project: açık kaynak cümle çiftleri (tatoeba.org)
- FSRS Algoritması: github.com/open-spaced-repetition/fsrs4anki
- Oxford 3000 Kelime Listesi: oxford learner's dictionaries
- Gemini Flash Fiyatlandırma: ai.google.dev/pricing
Doküman tarihi: Mart 2026 | Versiyon: 1.0