16px
V4
☁️ Senkronize ediliyor...

Ana ekrana ekle Uygulamayı yükle, offline çalış

Logo
Hadis ve Sünnet Atlası V4 Nebi Yolu ﷺ
بِسْمِ اللهِ الرَّحْمٰنِ الرَّحِيمِ

Hadis ve Sünnet Atlası

Peygamber Efendimiz ﷺ'in hadisleri ve sünnetleri için sade, güvenilir ve çok dilli rehber.

Canlı API · Firebase Auth · PWA · 15 Dil · 5 Tema · V4
Günün Hadisi

Günün Sünneti

Günün Duası

📊 V4 Durum Kontrol ediliyor
7563+Buhari
7563+Müslim
APICanlı Veri
🔥Firebase
📱PWA

Hadisler

100

⚡ V4 Canlı API • fawazahmed0 toplu yükleme • 7563+ Buhari hadisi • Önbellekli hızlı arama

Sünnetler

20

Sünnetler konu bazlıdır ve ilgili hadis kaynaklarına bağlanır.

Dualar

30

Günlük dualar Arapça metin, transkripsiyon, tercüme ve kaynakla gösterilir.

Esmaül Hüsna

99

Allah'ın (c.c.) 99 güzel ismi, Arapça yazılışı ve anlamıyla.

📝 Notlarım

0

Hadis ve sünnetlere kişisel notlar ekleyin. Notlar bu cihazda saklanır.

📖 Okuma Geçmişi

0

Okuduğunuz hadis ve sünnetler otomatik kaydedilir.

Favoriler

0

🔐 Giriş Yap

Firebase yapılandırıldıysa Google ile giriş yapabilirsiniz. Yapılandırılmamışsa demo mod aktif.

veya email ile
Firebase kurulumu için:
Admin panelinden API anahtarlarınızı girin → Google/Email login aktif olur → Favori ve notlar buluta kaydedilir.

👤 Profilim

Demo mod — Veriler bu cihazda saklanıyor. Bulut sync V3'te aktif olacak.

⚙️ Admin Panel V4

0Bugün
2.145Hafta
9.872Ay
84.152Yıl
156.982Toplam

📊 İçerik İlerlemesi (V2 → V5 Hedefi)

Buhari100 / 1500
Müslim100 / 1200
Tirmizî40 / 900
Ebu Davud30 / 700
Nesâî15 / 700
İbn Mâce15 / 700
Sünnetler50 / 1000
Dualar30 / 300
Esmaül Hüsna99 / 99 ✅

🌐 API Entegrasyon Durumu

fawazahmed0 Hadith API
cdn.jsdelivr.net/gh/fawazahmed0/hadith-api — Açık Kaynak, Toplu Yükleme ✅ V4'te Aktif
Sunnah.com API
https://sunnah.com/developers — API Key gerekli (V3'te entegre)
HadithAPI.com
https://www.hadithapi.com — API Key gerekli (V3'te entegre)
HadeethEnc
https://hadeethenc.com — Çok dilli tercümeler (V3'te entegre)
Supabase / Firebase Auth
V3'te entegre edilecek — Gerçek cloud login + veri sync

🌐 Dil Desteği (15 Dil)

🇹🇷 Türkçe
🇬🇧 English
🇸🇦 العربية
🇩🇪 Deutsch
🇫🇷 Français
🇪🇸 Español
🇮🇹 Italiano
🇷🇺 Русский
🇮🇩 Indonesia
🇵🇰 اردو
🇧🇩 বাংলা
🇮🇷 فارسی
🇲🇾 Melayu
🇳🇱 Nederlands
🌍 Kiswahili

🗺 V1 → V5 Yol Haritası

✅ V1 — Çalışan Demo (50H · 20S · 15D · 99E · 15 Dil)
✅ V2 — 100H · 50S · 30D · Notlar · Geçmiş · Pagination
✅ V3 — Canlı API + Firebase Auth + PWA
🚀 V4 — Toplu API (7563+ hadis) · Hızlı Arama · Önbellekleme (ŞU AN)

🔥 Firebase Yapılandırması V3

Firebase Console'dan aldığınız API bilgilerini girin. Kaydedildiğinde Google login + Cloud sync aktif olur.

✅ Firebase yapılandırması kaydedildi! Sayfayı yenileyin.
Nereden alınır?
1. console.firebase.google.com → Proje oluştur
2. Authentication → Google ve Email/Password aktif et
3. Firestore Database → Oluştur (test mode)
4. Proje Ayarları → Web uygulaması ekle → Config kopyala

Quiz

🧠

Hadislerden otomatik sorular — bilgini test et!

🧠

Quiz

Hadis bilgini test et! Her soruda 4 seçenek var.
Doğru hadisi bul!

Ezber Kartları

🃏

Spaced Repetition ile hadis ezberle — bildiğin kartlar seyrekleşir, bilmediklerin sıklaşır!

🃏

Ezber Kartları

Kartı gör, düşün, çevir ve bilip bilmediğine karar ver. Spaced Repetition sistemi ile en verimli ezber!

Kategori Seç:
/* ════════════════════════════════════════════════════════ V5a — QUIZ SİSTEMİ (Spaced multiple choice) ════════════════════════════════════════════════════════ */ let quizQuestions=[], quizCurrent=0, quizScore=0, quizCorrectCount=0, quizWrongCount=0; const QUIZ_LS = 'v4_quiz_stats'; function getQuizStats(){ try{ return JSON.parse(localStorage.getItem(QUIZ_LS)||'{"played":0,"totalScore":0,"bestScore":0}'); } catch(e){ return {played:0,totalScore:0,bestScore:0}; } } function saveQuizStats(score,total){ const s=getQuizStats(); s.played++;s.totalScore+=score; if(score>s.bestScore)s.bestScore=score; localStorage.setItem(QUIZ_LS,JSON.stringify(s)); } function generateQuizQuestions(count, difficulty){ const pool=[...HADITHS]; const shuffled=pool.sort(()=>Math.random()-.5).slice(0,Math.min(count*3,pool.length)); const questions=[]; const selected=shuffled.slice(0,count); selected.forEach(h=>{ const qType=Math.random()<.5?'source':'translation'; let question, correct, label; if(qType==='source'){ // Which source is this hadith from? question={ar:h.ar,tr:val(h.text),type:'source'}; correct=h.book+' '+h.no; label='KAYNAK'; // Wrong options from other hadiths const others=pool.filter(x=>x.id!==h.id).sort(()=>Math.random()-.5).slice(0,3); const opts=[correct,...others.map(x=>x.book+' '+x.no)].sort(()=>Math.random()-.5); questions.push({question,correct,opts,label,h}); } else { // Which translation matches this Arabic? question={ar:h.ar,type:'translation'}; correct=val(h.text); label='TERCÜME'; const others=pool.filter(x=>x.id!==h.id).sort(()=>Math.random()-.5).slice(0,3); const opts=[correct,...others.map(x=>val(x.text))].sort(()=>Math.random()-.5); questions.push({question,correct,opts,label,h}); } }); return questions; } function startQuiz(){ const count=parseInt(document.getElementById('quizCount')?.value||10); const diff=document.getElementById('quizDiff')?.value||'medium'; quizQuestions=generateQuizQuestions(count,diff); quizCurrent=0;quizScore=0;quizCorrectCount=0;quizWrongCount=0; document.getElementById('quizStart').style.display='none'; document.getElementById('quizResult').style.display='none'; document.getElementById('quizGame').style.display='block'; showQuestion(); } function showQuestion(){ if(quizCurrent>=quizQuestions.length){showQuizResult();return;} const q=quizQuestions[quizCurrent]; const total=quizQuestions.length; document.getElementById('quizProgress').textContent=`${t('quizTitle')}: ${quizCurrent+1}/${total}`; document.getElementById('quizScoreDisplay').textContent=`${quizScore} ${t('quizScore')}`; document.getElementById('quizProgressBar').style.width=((quizCurrent/total)*100)+'%'; document.getElementById('quizQLabel').textContent=q.label||'HADİS'; document.getElementById('quizQuestion').textContent=q.question.ar||''; document.getElementById('quizQuestionTr').textContent=q.question.type==='source'?(q.question.tr||''):''; document.getElementById('quizFeedback').style.display='none'; document.getElementById('quizNextBtn').style.display='none'; const optDiv=document.getElementById('quizOptions'); const letters=['A','B','C','D']; optDiv.innerHTML=q.opts.map((o,i)=>` `).join(''); } function answerQuiz(btn, answer){ const q=quizQuestions[quizCurrent]; const allBtns=document.querySelectorAll('.quiz-option'); allBtns.forEach(b=>b.classList.add('disabled')); allBtns.forEach(b=>{b.onclick=null;}); const isCorrect=(answer===q.correct); const feedback=document.getElementById('quizFeedback'); if(isCorrect){ btn.classList.add('correct'); quizScore+=10;quizCorrectCount++; feedback.style.cssText='display:block;padding:14px 18px;border-radius:14px;font-size:15px;font-weight:600;background:#e8f5e9;border:1px solid #a5d6a7;color:#1b5e20;margin-top:16px'; feedback.textContent=t('quizCorrect')+' '+q.h.book+' '+q.h.no; } else { btn.classList.add('wrong'); quizWrongCount++; // Show correct answer allBtns.forEach(b=>{ if(b.querySelector('span:last-child')?.textContent===q.correct) b.classList.add('correct'); }); feedback.style.cssText='display:block;padding:14px 18px;border-radius:14px;font-size:15px;font-weight:600;background:#ffebee;border:1px solid #ef9a9a;color:#b71c1c;margin-top:16px'; feedback.textContent=t('quizWrong')+' Doğrusu: '+q.correct; } document.getElementById('quizNextBtn').style.display='inline-block'; quizCurrent++; } function nextQuestion(){showQuestion();} function endQuiz(){ document.getElementById('quizGame').style.display='none'; document.getElementById('quizStart').style.display='block'; } function showQuizResult(){ document.getElementById('quizGame').style.display='none'; document.getElementById('quizResult').style.display='block'; const total=quizQuestions.length; const pct=Math.round((quizCorrectCount/total)*100); const emoji=pct>=90?'🏆':pct>=70?'⭐':pct>=50?'👍':'💪'; document.getElementById('quizResultEmoji').textContent=emoji; document.getElementById('quizFinalScore').textContent=quizScore+' '+t('quizScore'); document.getElementById('quizFinalDetail').textContent=`${quizCorrectCount}/${total} doğru — %${pct}`; document.getElementById('quizStats').innerHTML=`
${quizCorrectCount}Doğru
${quizWrongCount}Yanlış
${quizScore}Puan
%${pct}Başarı
`; saveQuizStats(quizScore,total); } /* ════════════════════════════════════════════════════════ V5a — EZBER MODU (Spaced Repetition) ════════════════════════════════════════════════════════ */ const MEM_LS='v4_memory_data'; let memDeck=[], memCurrent=0, memFlipped=false, memCat='', memSession={know:0,dontKnow:0}; function getMemoryData(){ try{ return JSON.parse(localStorage.getItem(MEM_LS)||'{}'); } catch(e){ return {}; } } function saveMemoryData(data){ localStorage.setItem(MEM_LS,JSON.stringify(data)); } function setMemCat(cat){ memCat=cat; document.querySelectorAll('#memCatFilter .chip').forEach(c=>{ c.classList.toggle('on',c.dataset.cat===cat); }); renderMemStats(); } function getMemDeck(){ let cards=[...HADITHS]; if(memCat) cards=cards.filter(h=>{ const c=h.cat; return (c&&typeof c==='object')?(c.tr||c.en||'').includes(memCat):(c||'').includes(memCat); }); // Sort by spaced repetition score (least known first) const data=getMemoryData(); cards.sort((a,b)=>{ const sa=(data[a.id]||{score:0}).score; const sb=(data[b.id]||{score:0}).score; return sa-sb; }); return cards; } function renderMemStats(){ const data=getMemoryData(); const deck=getMemDeck(); const known=deck.filter(h=>(data[h.id]||{score:0}).score>=3).length; const learning=deck.filter(h=>{const s=(data[h.id]||{score:0}).score;return s>0&&s<3;}).length; const newCards=deck.filter(h=>!(data[h.id])).length; const statsEl=document.getElementById('memStats'); if(statsEl) statsEl.innerHTML=`
${known}Biliniyor
${learning}Öğreniliyor
${newCards}Yeni
`; } function startMemory(){ memDeck=getMemDeck(); if(!memDeck.length){toast('Bu kategoride hadis yok.');return;} memCurrent=0;memFlipped=false;memSession={know:0,dontKnow:0}; document.getElementById('memStart').style.display='none'; document.getElementById('memDone').style.display='none'; document.getElementById('memGame').style.display='block'; document.getElementById('memButtons').style.display='none'; showMemCard(); } function showMemCard(){ if(memCurrent>=memDeck.length){showMemDone();return;} const h=memDeck[memCurrent]; const total=memDeck.length; document.getElementById('memProgress').textContent=`${t('memTitle')}: ${memCurrent+1}/${total}`; document.getElementById('memProgressBar').style.width=((memCurrent/total)*100)+'%'; document.getElementById('memArabic').textContent=h.ar||''; document.getElementById('memHint').textContent=val(h.cat)+' · '+h.book; document.getElementById('memTranslation').textContent=val(h.text)||''; document.getElementById('memSource').textContent=h.book+' '+h.no+' · '+h.grade; document.getElementById('memExplanation').textContent=val(h.ex)||''; // Reset flip memFlipped=false; const inner=document.getElementById('memCardInner'); inner.classList.remove('flipped'); document.getElementById('memButtons').style.display='none'; } function flipCard(){ if(memFlipped)return; memFlipped=true; document.getElementById('memCardInner').classList.add('flipped'); setTimeout(()=>{ document.getElementById('memButtons').style.display='grid'; },300); } function memAnswer(know){ if(!memFlipped)return; const h=memDeck[memCurrent]; const data=getMemoryData(); const card=data[h.id]||{score:0,seen:0}; card.seen=(card.seen||0)+1; if(know){ card.score=(card.score||0)+1; memSession.know++; } else { card.score=Math.max(0,(card.score||0)-1); memSession.dontKnow++; } data[h.id]=card; saveMemoryData(data); memCurrent++; setTimeout(showMemCard,200); } function showMemDone(){ document.getElementById('memGame').style.display='none'; document.getElementById('memDone').style.display='block'; const total=memSession.know+memSession.dontKnow; const pct=total?Math.round((memSession.know/total)*100):0; document.getElementById('memDoneStats').textContent= `${memSession.know} biliniyor · ${memSession.dontKnow} bilinmiyor · %${pct} başarı`; renderMemStats(); } function endMemory(){ document.getElementById('memGame').style.display='none'; document.getElementById('memStart').style.display='block'; renderMemStats(); } function resetMemory(){ if(!confirm('Tüm ezber verisi silinecek. Emin misiniz?'))return; localStorage.removeItem(MEM_LS); renderMemStats(); toast('Ezber verisi sıfırlandı'); } // Init memory stats on page load document.addEventListener('DOMContentLoaded',()=>renderMemStats());