APAKAH ANDA INGIN MENDAPAT ALIRAN PAHALA UNTUK BEKAL DI AKHIRAT?

Ada satu amal yang jika Anda kerjakan di dunia, maka pahalanya mengalir hingga akhirat

Amal Itu adalah Wakaf Mushaf untuk Bantu Santri yang Kekurangan Alquran!

-

Wakaf Mushaf untuk Bantu Santri Kekurangan Quran

Banyak pesantren yang kekurangan mushaf Al-Qur'an yang layak pakai karena sudah rusak dan lusuh. Kebutuhan mushaf Al-Qur'an di Indonesia setiap tahunnya lebih dari 6 juta mushaf. Dari sinilah Yayasan Masjid Ahsqaf Indonesia menginisiasi #projekkebaikan gerakan Wakaf Al Quran,

Mari, bergabung dalam program mulia ini dan ikut berkontribusi dalam mendukung santri penghafal Quran! Setiap mushaf yang Anda wakafkan adalah investasi berharga untuk masa depan mereka.
Keutamaan Wakaf Al Quran :
Wakaf Qur'an adalah investasi yang tidak hanya memberikan manfaat di dunia, tetapi juga di akhirat. Ketika kita sudah tiada, setiap kali seseorang membaca ayat-ayat suci di dalam mushaf yang kita wakafkan.

Setiap kali mereka mengambil hikmah dari Al-Qur'an yang kita sumbangkan, dan setiap kali mereka mengamalkan ajaran-Nya, kita akan mendapatkan pahala yang terus mengalir sebagai sedekah jariyah.
-
Alhamdulillah,Inilah Para Hafidz/dzah Quran lahir dari
#projekkebaikan Wakaf Quran
-
-
-
-
-
-
-
-

Galeri Dokumentasi Penerima Manfaat

-
-
-

Mengapa Wakaf Qur'an di Yayasan Masjid Ashqaf Indonesia?

1. LEGALITAS RESMI, BERBADAN HUKUM DAN TERPERCAYA
Legalitas Akta Nama : Yayasan Masjid Ashqaf Indonesia
Nomor : 1 Tanggal : 21 Januari 2021
Nama Notaris : Nurfitriawati,SH.,M.KN
Pengesahan Menteri Kehakiman & HAM : AHU-0003044.AH.01.04.Tahun 2021
Izin UPZ BAZNAS KALBAR : 04/BAZNAS-KB/SK-UPZ/II/2023 . 2. MUWAKIF AKAN MENDAPAT LAPORAN RUTIN
Bagi para muwakif yang menyisihkan hartanya untuk Program Wakaf Quran akan mendapat laporan penyaluran kemanfaatan harta yang diwakafkan secara berkala. . 3. MUWAKIF MENDAPATKAN PELAYANAN CUSTOMER SERVICE 24 JAM
Para muwakif tidak perlu khawatir akan kesusahan dalam menunaikan wakaf di program Wakaf Wakaf Quran, karena kami memberikan layanan customer service 24 jam yang siap melayani para muwakif. 4. PROSES WAKAF YANG MUDAH DAN TRANSPARAN
Muwakif tidak perlu takut dan khawatir karena wakaf di program Wakaf Quran prosesnya sangat mudah, tidak ribet dan transparan. 5. AKAN MENDAPATKAN PAHALA
dari setiap ayat yang dibaca akan terus mengalirkan pahala jariyah walaupun Qurannya sudah tidak ada. 6. Dikelola oleh tim yang profesional
7. Penerima manfaat tepat sasaran Karena diatur SOP dan ketentuan yang ketat. 8. Dapat mengikuti kajian dan doa anak yatim secara langsung di Masjid Ashqaf 9. Yayasan Masjid Ashqaf memiliki 5 rekening bank atas nama Masjid Ashqaf & 1 rekening e-wallet (qr barcode) untuk memudahkan transaksi dan hemat biaya admin. 10. Donatur dapat menitipkan doanya secara khusus dan didoakan oleh para santri penghafal quran 11. Doa yang telah dititipkan akan diaminkan langsung oleh santri penghafal Quran Setiap Harinya melalui Program One Day Five Juz 12. Dapat mengikuti kajian subuh online,live streaming via zoom 13. Mendapatkan Resume kajian
14. Kami menyediakan paket Wakaf mushaf yang terjangkau Sehingga seluruh masyarakat dapat berwakaf mushaf 15. Muwakif akan mendapatkan laporan update kegiatan dan update progres hafalan santri 16. Muwakif dapat mengakses update jumlah donatur yang sudah bergabung di seluruh program Masjid Ashqaf 17. Berkesempatan untuk mendaftarkan putra-putrinya di program pendidikan Masjid Ashqaf 18. Bergabung dengan 5.000++ orang baik lainnya 19. Mendapatkan kemudahan untuk melakukan rekaman murotal/kajian di Youtube Masjid Ashqaf Indonesia & Gemar(Generasi Menyayangi Al Quran) 20. Nominal yang tercantum sudah termasuk biaya distribusi 21. Mendapatkan reminder amalan kebaikan setiap harinya dari Admin CS 22. Mendapatkan kesempatan untuk request distribusi Quran di daerah masing-masing
23. Insya Allah dari setiap ayat yang dibaca akan terus mengalirkan pahala jariyah kepada muwakifnya, setiap satu ayat bernilai 10 kebaikan.

إِذَا مَاتَ ابْنُ آدَمَ انْقَطَعَ عَمَلُهُ إِلَّا مِنْ ثَلَاثٍ: صَدَقَةٍ جَارِيَةٍ، أَوْ عِلْمٍ يُنْتَفَعُ بِهِ، أَوْ وَلَدٍ صَالِحٍ يَدْعُو لَهُ. رَوَاهُ مُسْلِمٌ

Artinya: "Apabila anak adam (manusia) telah meninggal dunia, maka terputuslah amalnya darinya, kecuali tiga perkara, yaitu sedekah jariyah (sedekah yang pahalanya terus mengalir), ilmu yang bermanfaat, atau anak saleh yang selalu mendoakannya." (HR Muslim No. 1631).

Mari Bergandengan Tangan dan Saksikanlah Langkah-Langkah

Kecil Kita Menjadi Pahala Jariyah yang Terus Mengalir


Yuk, Tunjukkan Cintamu Pada Santri Penghafal Quran Melalui Wakaf Mushaf yang Anda Berikan
Nama Pewakif
No Whatsapp
Pilih Nominal Wakaf Anda
1 Quran Hafalan Ukuran A5 I Rp.100.000
2 Quran Hafalan Ukuran A5 I Rp.200.000
3 Quran Hafalan Ukuran A5 I Rp.300.000
4 Quran Hafalan Ukuran A5 I Rp.400.000
5 Quran Hafalan Ukuran A5 I Rp.500.000
10 Quran Hafalan Ukuran A5 I Rp.1.000.000
20 Quran Hafalan Ukuran A5 I Rp.2.000.000
Nominal Lainnya
Wakaf Quran atas Nama/Doa Anda (jika nama yang dicantumkan sudah alm/almh, silahkan tulis keterangan di depan nama. Contoh: (Alm Fulan bin Fulan)
`Saya mau wakaf sekarang
-
Tentang Kami
Masjid Ashqaf Indonesia merupakan lembaga professional terpercaya, yang bergerak di bidang pendidikan, sosial, dan keagamaan. Berdiri semenjak tahun 2021.
Alamat
Jl. Sultan Agung, Kuala Dua, Kec. Sungai Raya, Kabupaten Kubu Raya, Kalimantan Barat 78391
0811-5621-415
masjidashqaf@gmail.com
Legalitas
Legalitas Akta Nama : Yayasan Masjid Ashqaf Indonesia Nomor : 1 Tanggal : 21 Januari 2021 Nama Notaris : Nurfitriawati,SH.,M.KN Pengesahan Menteri Kehakiman & HAM : AHU-0003044.AH.01.04.Tahun 2021 Izin UPZ BAZNAS KALBAR : 04/BAZNAS-KB/SK-UPZ/II/2023
-
@2024 GEMAR Inc.
import React, { useState, useEffect, useMemo } from 'react'; import { initializeApp } from 'firebase/app'; import { getAuth, signInWithCustomToken, signInAnonymously, onAuthStateChanged } from 'firebase/auth'; import { getFirestore, collection, query, onSnapshot, doc, addDoc, updateDoc, deleteDoc } from 'firebase/firestore'; import { Moon, Sun, BookOpen, HeartPulse, Zap, Plus, Home, BarChart2, CheckCircle2, Circle, Trash2, CalendarDays, ChevronLeft, ChevronRight } from 'lucide-react'; // --- FIREBASE INITIALIZATION --- // Initialize Firebase outside the component to prevent re-initialization const firebaseConfig = typeof __firebase_config !== 'undefined' ? JSON.parse(__firebase_config) : {}; const app = initializeApp(firebaseConfig); const auth = getAuth(app); const db = getFirestore(app); const appId = typeof __app_id !== 'undefined' ? __app_id : 'default-app-id'; // --- KATEGORI HABIT --- const CATEGORIES = { Ibadah: { icon: Moon, color: 'text-[#109ef0]', bg: 'bg-[#9fedfb]/30', border: 'border-[#109ef0]' }, Ilmu: { icon: BookOpen, color: 'text-[#03d6fa]', bg: 'bg-[#9fedfb]/20', border: 'border-[#03d6fa]' }, Kesehatan: { icon: HeartPulse, color: 'text-[#109ef0]', bg: 'bg-[#109ef0]/10', border: 'border-[#109ef0]' }, Produktivitas: { icon: Zap, color: 'text-[#03d6fa]', bg: 'bg-[#03d6fa]/10', border: 'border-[#03d6fa]' }, }; // --- DATA HABIT BAWAAN (DEFAULT) --- const DEFAULT_HABITS = [ { name: '🧎 Shalat Tahajud', category: 'Ibadah', order: 1 }, { name: '📿 Dzikir Pagi', category: 'Ibadah', order: 2 }, { name: '📖 Tilawah Quran', category: 'Ibadah', order: 3 }, { name: '📿 Dzikir Petang', category: 'Ibadah', order: 4 }, { name: '💡 Hafalan Quran', category: 'Ilmu', order: 5 }, { name: '📚 Membaca Buku', category: 'Ilmu', order: 6 }, { name: '🤲 Sedekah', category: 'Produktivitas', order: 7 }, { name: '🏋️ Olahraga', category: 'Kesehatan', order: 8 } ]; export default function IslamicHabitTracker() { // --- STATE --- const [user, setUser] = useState(null); const [habits, setHabits] = useState([]); const [loading, setLoading] = useState(true); const [activeTab, setActiveTab] = useState('dashboard'); // 'dashboard', 'add', 'stats' const [selectedDate, setSelectedDate] = useState(new Date()); const [statsDate, setStatsDate] = useState(new Date()); const [isDarkMode, setIsDarkMode] = useState(() => { const saved = localStorage.getItem('habbitqu_theme'); return saved === 'dark'; }); useEffect(() => { localStorage.setItem('habbitqu_theme', isDarkMode ? 'dark' : 'light'); }, [isDarkMode]); // Form State const [newHabitName, setNewHabitName] = useState(''); const [newHabitCategory, setNewHabitCategory] = useState('Ibadah'); // --- 1. FIREBASE AUTHENTICATION --- useEffect(() => { const initAuth = async () => { try { if (typeof __initial_auth_token !== 'undefined' && __initial_auth_token) { await signInWithCustomToken(auth, __initial_auth_token); } else { await signInAnonymously(auth); } } catch (error) { console.error("Auth error:", error); } }; initAuth(); const unsubscribe = onAuthStateChanged(auth, (currentUser) => { setUser(currentUser); if (!currentUser) setLoading(false); }); return () => unsubscribe(); }, []); // --- 2. FIREBASE DATA FETCHING --- useEffect(() => { if (!user) return; // RULE 1: Strict path for private user data const habitsRef = collection(db, 'artifacts', appId, 'users', user.uid, 'habits'); // RULE 2: No complex queries. Fetch all, sort in memory. const q = query(habitsRef); const unsubscribe = onSnapshot(q, async (snapshot) => { // --- AUTO-POPULATE HABIT DEFAULT --- if (snapshot.empty) { const hasSeeded = localStorage.getItem(`seeded_habbitqu_${user.uid}`); if (!hasSeeded) { localStorage.setItem(`seeded_habbitqu_${user.uid}`, 'true'); try { for (const habit of DEFAULT_HABITS) { await addDoc(habitsRef, { name: habit.name, category: habit.category, order: habit.order, completedDates: [], createdAt: Date.now() }); } } catch (error) { console.error("Gagal menambahkan habit default:", error); } return; } } const fetchedHabits = snapshot.docs.map(doc => ({ id: doc.id, ...doc.data() })); fetchedHabits.sort((a, b) => { if (a.order && b.order) return a.order - b.order; if (a.order) return -1; if (b.order) return 1; return b.createdAt - a.createdAt; }); setHabits(fetchedHabits); setLoading(false); }, (error) => { console.error("Firestore error:", error); setLoading(false); }); return () => unsubscribe(); }, [user]); // --- HELPER FUNCTIONS --- const getFormattedDate = (date) => { const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); return `${year}-${month}-${day}`; }; const selectedDateStr = getFormattedDate(selectedDate); const calendarDays = useMemo(() => { const days = []; for (let i = -3; i <= 3; i++) { const d = new Date(selectedDate); d.setDate(d.getDate() + i); days.push(d); } return days; }, [selectedDate]); // --- CRUD OPERATIONS --- const handleAddHabit = async (e) => { e.preventDefault(); if (!user || !newHabitName.trim()) return; try { const habitsRef = collection(db, 'artifacts', appId, 'users', user.uid, 'habits'); await addDoc(habitsRef, { name: newHabitName.trim(), category: newHabitCategory, completedDates: [], createdAt: Date.now() }); setNewHabitName(''); setActiveTab('dashboard'); } catch (error) { console.error("Error adding habit:", error); } }; const toggleHabitCompletion = async (habit) => { if (!user) return; const habitRef = doc(db, 'artifacts', appId, 'users', user.uid, 'habits', habit.id); const isCompleted = habit.completedDates?.includes(selectedDateStr); let updatedDates = [...(habit.completedDates || [])]; if (isCompleted) { updatedDates = updatedDates.filter(d => d !== selectedDateStr); } else { updatedDates.push(selectedDateStr); } try { await updateDoc(habitRef, { completedDates: updatedDates }); } catch (error) { console.error("Error updating habit:", error); } }; const deleteHabit = async (habitId) => { if (!user) return; try { const habitRef = doc(db, 'artifacts', appId, 'users', user.uid, 'habits', habitId); await deleteDoc(habitRef); } catch (error) { console.error("Error deleting habit:", error); } }; // --- RENDER COMPONENTS --- const renderDashboard = () => (
{/* Calendar Strip */}

{selectedDate.toLocaleDateString('id-ID', { month: 'long', year: 'numeric' })}

{calendarDays.map((date, i) => { const isSelected = getFormattedDate(date) === selectedDateStr; const isToday = getFormattedDate(date) === getFormattedDate(new Date()); return ( ); })}
{/* Habit List */}
{habits.length === 0 ? (

Belum ada Habit

Mulai bangun rutinitas positif Anda hari ini.

) : ( habits.map(habit => { const isCompleted = habit.completedDates?.includes(selectedDateStr); const cat = CATEGORIES[habit.category] || CATEGORIES['Ibadah']; const Icon = cat.icon; return (

{habit.name}

{habit.category}

); }) )}
); const renderAddHabit = () => (

Tambah Habit

setNewHabitName(e.target.value)} placeholder="Contoh: Tilawah 1 Juz..." className="w-full px-5 py-4 rounded-2xl border border-gray-200 dark:border-gray-700 focus:outline-none focus:ring-2 focus:ring-[#109ef0] focus:border-transparent bg-white dark:bg-gray-800 shadow-sm font-medium text-gray-800 dark:text-gray-100 placeholder-gray-400 dark:placeholder-gray-500 transition-colors" required />
{Object.entries(CATEGORIES).map(([catName, catData]) => { const Icon = catData.icon; const isSelected = newHabitCategory === catName; return ( ); })}
); const renderStats = () => { const targetMonth = String(statsDate.getMonth() + 1).padStart(2, '0'); const targetYear = statsDate.getFullYear(); const daysInMonth = new Date(targetYear, statsDate.getMonth() + 1, 0).getDate(); let totalPossible = habits.length * daysInMonth; let totalCompleted = 0; const habitStats = habits.map(habit => { const completedThisMonth = (habit.completedDates || []).filter(d => d.startsWith(`${targetYear}-${targetMonth}`)).length; totalCompleted += completedThisMonth; return { ...habit, completedThisMonth, percentage: Math.round((completedThisMonth / daysInMonth) * 100) }; }); const globalAverage = totalPossible > 0 ? Math.round((totalCompleted / totalPossible) * 100) : 0; return (

Pencapaian

{/* Month Navigator */}

{statsDate.toLocaleDateString('id-ID', { month: 'long', year: 'numeric' })}

{statsDate.getMonth() === new Date().getMonth() && statsDate.getFullYear() === new Date().getFullYear() ? 'Bulan Ini' : statsDate.getMonth() === new Date().getMonth() + 1 && statsDate.getFullYear() === new Date().getFullYear() ? 'Bulan Depan' : statsDate.getMonth() === new Date().getMonth() - 1 && statsDate.getFullYear() === new Date().getFullYear() ? 'Bulan Lalu' : 'Periode'}

{/* Global Summary Card */}

Rata-rata Pencapaian

{globalAverage}% dari {habits.length} kebiasaan

Detail per Habit

{habitStats.length === 0 ? (

Belum ada data untuk dianalisis.

) : ( habitStats.map(habit => { return (

{habit.name}

{habit.completedThisMonth} dari {daysInMonth} hari {habit.percentage}%
{/* Progress Bar */}
); }) )}
); }; if (loading) { return (
Memuat Data...
); } return (
{/* Mobile App Container */}
{/* App Header */}

HabbitQu

Assalamu'alaikum

{/* Main Content Area */} {activeTab === 'dashboard' && renderDashboard()} {activeTab === 'add' && renderAddHabit()} {activeTab === 'stats' && renderStats()} {/* Bottom Navigation */}
); }