deneme test deposu
Find a file
2026-09-08 16:08:52 +03:00
api.php api.php Güncelle 2026-09-08 16:08:52 +03:00
index.php Dosyaları "/" dizinine yükle 2026-09-08 15:05:25 +03:00
README.md Dosyaları "/" dizinine yükle 2026-09-08 15:05:25 +03:00

LinguaForge 1.0.0

Taşınabilir PHP + SQLite tabanlı, mobil uygulama hissiyatına sahip kelime öğrenme sistemi.

Hızlı başlangıç

  1. linguaforge klasörünü PHP çalıştıran web dizinine kopyalayın.
  2. Web sunucusunun data/ klasörüne yazabildiğinden emin olun.
  3. Tarayıcıdan klasörü açın. Veritabanı ve örnek kurs ilk istekte otomatik oluşur.
  4. İlk yönetici hesabı: admin / 123456.
  5. İlk girişten sonra Profil > Şifre değiştir bölümünden yönetici şifresini değiştirin.

Yerel test için, PHP'de SQLite uzantıları yüklüyse:

cd linguaforge
php -S 127.0.0.1:8080

Sonra http://127.0.0.1:8080 adresini açın.

PWA kurulumu (Ana Ekrana Ekle) localhost veya HTTPS altında çalışır. Normal uzak HTTP adreslerinde tarayıcılar Service Worker/PWA kurulumunu engeller.

Gereksinimler

  • PHP 8.1+
  • PDO SQLite / SQLite3
  • mbstring opsiyoneldir; varsa Unicode işlemlerinde kullanılır, yoksa yerleşik fallback devreye girer.
  • XLSX içe aktarmak için ZipArchive + SimpleXML. Bunlar yoksa CSV içe aktarma çalışmaya devam eder.
  • JavaScript etkin modern tarayıcı

Bootstrap 5.3.8 ve Chart.js 4.5.1 arayüzde CDN üzerinden çağrılır. Uygulamanın ana stilleri ve öğrenme motoru yereldir; internet kesilse de daha önce önbelleğe alınan uygulama kabuğu çalışabilir. Tamamen air-gap kullanım istenirse bu iki vendor dosyası yerel assets/vendor/ altına alınabilir.

Özellikler

  • OOP PHP, PDO ve prepared statement tabanlı backend
  • Tek SQLite dosyasında kullanıcı, kurs, kelime, test ve istatistik verisi
  • Fetch API ile sayfa yenilemeden SPA benzeri gezinme
  • Mobil bottom navigation + masaüstü sidebar
  • Gündüz / gece / sistem teması
  • PWA manifest + Service Worker + 192/512 ikon
  • Kullanıcı kayıt/giriş sistemi ve CSRF koruması
  • Login brute-force kilidi ve tek kullanımlık test challenge token'ları
  • Çoktan seçmeli, boşluk doldurma, yazarak cevaplama ve 4'lü eşleştirme
  • Akıllı kelime seçimi: due date + hata oranı + mastery ağırlığı
  • SM-2 benzeri ease_factor, interval_days, next_review_at
  • Web Speech API ile kelime telaffuzu
  • XP, 500 XP'de bir seviye, streak ve leaderboard
  • Günlük görevler ve görev ödülü XP
  • Admin dashboard: kullanıcı, aktif kullanıcı, kelime, günlük cevap KPI'ları
  • Chart.js ile 14 günlük aktivite grafiği
  • En çok zorlanılan kelimeler
  • Kullanıcı detayında zayıf kelimeler ve son 30 günlük aktivite
  • Manuel kelime ekleme/düzenleme
  • CSV/XLSX içe aktarma
  • Esnek languages + courses mimarisi
  • Yönetici tarafından kullanıcı dondurma/açma

Klasör yapısı

linguaforge/
├── index.php                 # SPA uygulama kabuğu
├── api.php                   # JSON API front controller
├── manifest.webmanifest      # PWA manifest
├── sw.js                     # Service Worker
├── sample-words.csv          # Örnek import şablonu
├── .htaccess                 # Apache güvenlik/indeks ayarları
├── app/
│   ├── bootstrap.php         # Oturum + servis oluşturma
│   ├── Database.php          # SQLite bağlantısı, migration, seed
│   ├── Auth.php              # Giriş/kayıt/profil/şifre
│   ├── LearningEngine.php    # SRS + test motoru
│   ├── Gamification.php      # XP, level, streak, görev, leaderboard
│   ├── AdminService.php      # Dashboard, kullanıcı, kelime, import
│   ├── XlsxReader.php        # Native XLSX ilk sayfa okuyucu
│   └── Support.php           # JSON/input/normalize yardımcıları
├── assets/
│   ├── app.css               # Native-app görsel katmanı
│   └── app.js                # SPA, Fetch, test UI, admin UI
├── icons/
│   ├── icon-192.png
│   └── icon-512.png
├── data/
│   ├── .htaccess             # SQLite'a web erişimini engeller
│   └── linguaforge.sqlite    # İlk çalıştırmada otomatik oluşur
└── docs/
    └── schema.sql            # Okunabilir veritabanı şeması

CSV / Excel kolonları

İlk satır başlıktır. Zorunlu iki sütun:

  • prompt veya kelime
  • answer, translation veya karşılık

Opsiyonel:

  • example_sentence / örnek cümle
  • hint / ipucu
  • difficulty / zorluk (1-5)
  • tags / etiketler

Sütun sırası önemli değildir. Aynı kurs içinde aynı kelime-karşılık çifti ikinci kez eklenmez.

Akıllı tekrar mantığı

Her kullanıcı + kelime için ayrı user_word_stats satırı tutulur. Sistem yeni soru seçerken:

  1. next_review_at zamanı gelen kelimeleri öne alır.
  2. Kullanıcının hata oranınıırlığa ekler.
  3. Mastery puanı düşük kelimelere öncelik verir.
  4. Hiç görülmemiş kelimelere keşif ağırlığı verir.
  5. Aynı testte yakın zamanda sorulmuş kelimeleri mümkün olduğunca tekrar seçmez.

Doğru cevaplarda interval 1 → 3 gün → ease factor ile artar. Yanlış cevap interval'i 1 güne çeker ve ease factor'ü azaltır.

Güvenlik notları

  • Varsayılan admin şifresini ilk girişte değiştirin.
  • Uzak erişimde HTTPS kullanın.
  • data/ klasörünün web üzerinden servis edilmediğini doğrulayın. Paket Apache için .htaccess içerir; Nginx kullanıyorsanız /data, /app ve SQLite dosyalarına HTTP erişimini ayrıca engelleyin.
  • Veritabanını yedeklemek için uygulama kapalıyken data/linguaforge.sqlite dosyasını kopyalayabilirsiniz. WAL etkin olduğundan canlı yedekte SQLite'ın backup mekanizması tercih edilir.

Sürüm

1.0.0 — çekirdek eğitim motoru, oyunlaştırma, admin analitiği, PWA ve import özelliklerini içerir.