- PHP 100%
| api.php | ||
| index.php | ||
| README.md | ||
LinguaForge 1.0.0
Taşınabilir PHP + SQLite tabanlı, mobil uygulama hissiyatına sahip kelime öğrenme sistemi.
Hızlı başlangıç
linguaforgeklasörünü PHP çalıştıran web dizinine kopyalayın.- Web sunucusunun
data/klasörüne yazabildiğinden emin olun. - Tarayıcıdan klasörü açın. Veritabanı ve örnek kurs ilk istekte otomatik oluşur.
- İlk yönetici hesabı:
admin/123456. - İ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
mbstringopsiyoneldir; 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+coursesmimarisi - 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:
promptveyakelimeanswer,translationveyakarşılık
Opsiyonel:
example_sentence/örnek cümlehint/ipucudifficulty/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:
next_review_atzamanı gelen kelimeleri öne alır.- Kullanıcının hata oranını ağırlığa ekler.
- Mastery puanı düşük kelimelere öncelik verir.
- Hiç görülmemiş kelimelere keşif ağırlığı verir.
- 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.htaccessiçerir; Nginx kullanıyorsanız/data,/appve SQLite dosyalarına HTTP erişimini ayrıca engelleyin.- Veritabanını yedeklemek için uygulama kapalıyken
data/linguaforge.sqlitedosyası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.