Lexiverse
Lexiverse - AI contextual reading engine for English learners. Your next article is your next review.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗İşletme fakültesi öğrencileri için AI destekli çalışma platformu. Doküman yükle → özet, bilgi kartı, sınav, sunum, podcast üret; yüklediğin kaynakla sohbet et.
| Katman | Ne kullanılıyor |
|---|---|
| Frontend | Vanilla HTML/CSS/JS — framework yok, build adımı yok |
| Backend | Supabase Edge Functions (Deno/TypeScript), 26 fonksiyon |
| Veritabanı | Supabase Postgres + RLS |
| Hosting | Vercel (statik) |
| Dil | TR/EN (js/i18n.js) |
Build adımı olmadığı için js/ ve css/ dosyaları doğrudan servis edilir.
vercel.json bu iki klasöre no-cache başlığı koyar, böylece deploy sonrası
tarayıcı eski JS'i tutmaz.
*.html sayfalar (index, dashboard, admin, login, ...)
js/ 33 modül; dashboard.js tek başına 18.347 satır
css/style.css tek stil dosyası
supabase/functions/<ad>/ her edge function kendi klasöründe (index.ts)
supabase/migrations/*.sql şema değişiklikleri — OTOMATIK UYGULANMAZ (aşağıya bak)
tests/ Node ile çalışan testler (tarayıcı gerekmez)
assets/ logo, promo video, örnek veri setleri
Supabase otomatik sağlar, elle girmene gerek yok:
SUPABASE_URLSUPABASE_ANON_KEYSUPABASE_SERVICE_ROLE_KEYElle girmen gerekenler (Supabase Dashboard → Edge Functions → Secrets):
| Değişken | Kullanan fonksiyonlar | Ne için |
|---|---|---|
GROQ_API_KEY | 17 fonksiyon (özet, sınav, sohbet, sunum, podcast script…) | Tüm metin üretimi |
PDFCO_API_KEY | summarize-document | PDF sayfalarını PNG'ye çevirip görsel analiz (diyagram/şema sayfaları) |
OCR_SPACE_API_KEY | summarize-document, chat-with-document, merge-summarize | Taranmış (metinsiz) PDF'lerde OCR |
OPENAI_API_KEY | generate-study-image | Görsel üretimi (gpt-image-1) |
ELEVENLABS_API_KEY | generate-podcast-audio | Podcast sesi (TTS) |
RESEND_API_KEY | send-contact-notification | E-posta bildirimi |
ADMIN_NOTIFICATION_EMAIL | send-contact-notification | İletişim formunun gideceği adres |
GMAIL_ADDRESS, GMAIL_APP_PASSWORD | send-study-reminders | Çalışma hatırlatma e-postaları |
GROQ_PRESENTATION_MODEL | acadia-presentation-director | Sunum motoru için model adı (opsiyonel override) |
Frontend'in Supabase bağlantısı js/supabase-config.js içinde açıkça
duruyor (URL + publishable anon key). Bu normaldir — güvenlik RLS
politikalarıyla sağlanır, anon key gizli değildir. SUPABASE_SERVICE_ROLE_KEY
ise asla frontend'e girmemeli, sadece edge function'larda kullanılır.
api.groq.com · api.pdf.co · api.ocr.space · api.openai.com ·
api.elevenlabs.io · api.resend.com
| Bucket | İçerik | Tanımlandığı yer |
|---|---|---|
documents | öğrencilerin yüklediği ders dosyaları | Dashboard'dan elle oluşturulmuş |
avatars | profil fotoğrafı ve kapak görseli | 20260830d_avatars_storage_bucket.sql |
presentation-images | sunum görselleri | 20260807_add_academic_presentations.sql |
podcast-audio | üretilen podcast sesleri | 20260826b_create_podcast_audio_bucket.sql |
course-knowledge-pdfs | admin kitap tarama PDF'leri (admin-only) | 20260829_add_course_knowledge_base.sql |
Migration'lar otomatik uygulanmaz. Her
.sqldosyasını kendin çalıştırmalısın: Supabase Studio → SQL Editor → içeriği yapıştır → Run. (CLI kullanıyorsansupabase db push.)
Dosyalar isim sırasına göre uygulanır — tarih öneki bunun içindir. Harf
sonekli olanlar (20261003b) aynı günün ikinci migration'ıdır ve genellikle
bir öncekine bağımlıdır.
Bağımlılık zinciri olan önemli yerler:
20261003_add_document_chunks.sql → documents tablosunu gerektirir20261003b_document_chunks_fulltext.sql → 20261003'ü gerektirir, yoksa
anlaşılır bir hata verip durur20260810_presentation_intelligence_v10.sql → 20260807'yi gerektirir20260829_add_course_knowledge_base.sql → courses tablosunu gerektirir
(20260721)Migration'ı çalıştırmadan fonksiyonu deploy edersen iş patlamaz ama logda uyarı görürsün (ilgili kod en iyi gayret mantığıyla yazılmıştır).
Dashboard'dan: Supabase Dashboard → Edge Functions → fonksiyonu seç → kodu yapıştır → Deploy.
CLI ile:
supabase functions deploy <fonksiyon-adi>
Repo supabase/.temp/linked-project.json içinde proje referansını taşıyor
(ACADEX portal). CLI kullanacaksan önce supabase link gerekebilir.
Testler Node ile çalışır, tarayıcı veya Supabase bağlantısı gerektirmez. Edge function'lardaki saf fonksiyonları kaynaktan çalışma anında çıkarıp test ederler — bu dosyalara kopyalanmazlar, yani kaynak değişirse test ya yeni davranışı ölçer ya açık hata verir.
Tek seferlik kurulum (repoda package.json yok):
printf 'node_modules/\n' > .gitignore # npm'den ÖNCE
npm init -y
npm install --save-dev typescript
Çalıştırma:
node tests/citation-anchoring.js # atıf motoru (38 test)
node tests/chat-retrieval.js # chat retrieval (19 test)
node tests/summary-quality.js # kalite kapıları (32 test)
Edge function'ları tip kontrolünden geçirmek:
npx tsc --noEmit --skipLibCheck --target es2022 --module esnext \
--moduleResolution bundler supabase/functions/summarize-document/index.ts
Beklenen çıktı: 19 hata, hepsi Deno kaynaklı (Cannot find module 'https://deno.land/...', Cannot find name 'Deno'). Bunlar normaldir —
tsc Deno'ya özgü şeyleri bilmez. Sayı 19'dan fazlaysa gerçek bir sorun var.
Groq'a çıkan tek test (API anahtarı ve ücret gerektirir, isteğe bağlı):
export GROQ_API_KEY=gsk_...
node tests/map-model-compare.js --input ders-notu.pdf --windows 3 --runs 2
node tests/map-model-compare.js --input x.txt --dry-run # anahtarsız kuru çalıştırma
tests/presentation-*.js dosyaları repoda bulunmayan
js/presentation/core/* ve js/presentation/quality/* dosyalarını arıyor, bu
yüzden çalışmıyorlar. Bilinen ve eski bir durum.
| Sınır | Değer | Nerede |
|---|---|---|
| Yükleme boyutu | 20 MB | js/dashboard.js |
| Edge function süresi | ~150 sn (hat kendine 110 sn bütçe ayırır) | PIPELINE_BUDGET_MS |
| Groq TPM | bu hesapta 8.000 gözlendi | kaynak yorumları (draftTiers) |
| Özet kapsama | uzun belgede ~42.000 karakter | MAX_CHUNKS, pencere döngüsü |
Son satır açık bir sorundur: 150.000 karakterlik bir belgenin yalnızca ~%28'i modele ulaşır. Düzeltmesi pencere işlemenin birden fazla çağrıya yayılmasını gerektirir (bu desen admin "Kitap Tarama" sisteminde zaten mevcut).
summarize-document belge boyutuna göre iki yoldan birini seçer
(CHUNK_THRESHOLD = 6000 karakter, ~3 sayfa):
Kısa belge (fast path): tek Groq çağrısı, isteğe bağlı görsel analiz.
Uzun belge (long-doc path): metin 7.000 karakterlik pencerelere bölünür, her pencere bağımsız analiz edilir, sonuçlar birleştirilir, ardından bir sentez çağrısı özetleri tek anlatıya dönüştürür.
Her iki yol, kart kaydedilmeden önce aynı kalite adımlarında buluşur:
Formül doğrulama — render edilemeyecek LaTeX atılır, fazla sarılmış olan onarılır
Temellendirme kapısı — kaynağın desteklemediği terim/nokta atılır (doğruluk skoru loglanır)
Yakın-kopya birleştirme — iki pencerenin aynı fikri farklı kelimelerle yazması temizlenir
Atıf bağlama — her iddia --- SAYFA N --- indeksinden hesaplanan sayfaya ve o sayfadaki birebir cümleye bağlanır
adım modele sorulmaz, hesaplanır: ek token maliyeti yoktur ve uydurma sayfa numarası üretilemez.
chat-with-document ise belge boyutuna göre ya tüm metni ya da soruyla
alakalı pasajları gönderir (PostgreSQL tam metin arama, Türkçe tsvector).
summarize-document/index.tsiçindebuildChunkSystemPromptvebuildSynthesisSystemPromptbağlı değildir — eski bir tasarımdan kalmışlardır vetests/map-model-compare.jsonları kıyas kolu olarak kullandığı için saklanıyorlar. Hangi kodun gerçekten çalıştığını dosyanın başındaki "WHICH LONG-DOC CODE ACTUALLY RUNS" yorumu anlatır.