Wakaf Mushaf
-

Seribu Waqaf Al Qur'an di Baitullah

Wakaf mushaf menjadi amal mulia untuk merealisasikannya. Alirkan pahala meski sedang tertidur dengan memberikan akses Al-Qur’an pada saudara muslim di seluruh daerah di Indonesia.
Wahai orang-orang yang beriman! Rukuklah, sujudlah, dan sembahlah Tuhanmu, dan berbuatlah kebaikan, agar kamu beruntung.”(Q.S. Al Hajj ayat 77)

Tak Banyak Yang Tahu Bahwa Memberi Akses Membaca Mushaf Quran Bisa Mengalirkan Pahala Abadi

Minimnya jumlah mushaf di negara yang separuh rakyatnya Muslim membuat menteri agama kewalahan. Menurutnya, Indonesia membutuhkan 5 juta mushaf setiap tahun untuk didistribusikan kepada rakyat muslim


-
-

Karena Terlalu Sedikit, Maka Perlunya Kesadaran Masyarakat Terkait Hal Ini

-
-

Tak Banyak Yang Tahu Bahwa Memberi Akses Membaca Mushaf Quran Bisa Mengalirkan Pahala Abadi

Minimnya jumlah mushaf di negara yang separuh rakyatnya Muslim membuat menteri agama kewalahan. Menurutnya, Indonesia membutuhkan 5 juta mushaf setiap tahun untuk didistribusikan kepada rakyat muslim


-
-

Karena Terlalu Sedikit, Maka Perlunya Kesadaran Masyarakat Terkait Hal Ini

-
-

Dengan Sejuta Mushaf Terangi Indonesia

-
Tebar Sejuta Mushaf ialah program yang bertujuan untuk menghimpun jutaan Mushaf untuk diwakafkan ke pelosok Indonesia. Amal kebaikan ini menjadi langkah efektif untuk membantu saudara sesama muslim yang kesulitan mengakses kitab suci. Lewat program Tebar Sejuta Mushaf, kita bisa mendapat jutaan pahala meski disaat yang sama sedang tertidur lelap. Pahala tersebut kita dapatkan dari orang yang membaca, menghafal dan mengambil manfaat dari Mushaf yang kita wakafkan.



Dengan Sejuta Mushaf Terangi Indonesia

-
Tebar Sejuta Mushaf ialah program yang bertujuan untuk menghimpun jutaan Mushaf untuk diwakafkan ke pelosok Indonesia. Amal kebaikan ini menjadi langkah efektif untuk membantu saudara sesama muslim yang kesulitan mengakses kitab suci. Lewat program Tebar Sejuta Mushaf, kita bisa mendapat jutaan pahala meski disaat yang sama sedang tertidur lelap. Pahala tersebut kita dapatkan dari orang yang membaca, menghafal dan mengambil manfaat dari Mushaf yang kita wakafkan.



Keutamaan Wakaf Al-Qur'an

-
-
-
-
-
-
-
-
-
-
Wakaf Quran merupakan investasi akhirat, dimana manfaat dan pahalanya akan senantiasa mengalir meski kita telah tiada. Aliran pahala akan datang dari pembaca, penghafal Al-Qur’an, hingga dari rasa syukur orang yang mendapatkan Mushaf. Manfaat tersebut akan terus tersebar sebagai investasi jariyah yang tak berujung.

Mengapa Harus Berwakaf di Yayasan Alfatihah?

LEGALITAS RESMI, BERBADAN HUKUM DAN TERPERCAYA
Legal Formal: Keputusan Kemenkumham RI NO. AHU-0009981.AH.01.07 Tahun 2017. Legal Formal: SK NAZHIR BADAN WAKAF RI NO. 88911 2939 0 0001596 2022. NPWP Yayasan: 82.204.833.6-503.000
NAMAMU TERTULIS DI DALAM MUSHAF
Bagi muwakif dan donatur yang wakaf di Yayasan Alfatihah. Namanya akan ditulis di dalam mushaf dan mendapatkan foto serta video unboxing Quran baru saat penulisan nama muwakif.
PENGELOLAAN DAN PENYALURAN TRANSPARAN DAN TERJAMIN
Kami memiliki tim pengelolaan ZISWAF yang berpengalaman, SDM dan kendaraan operasional. Selain itu muwakif/donatur juga dapat melihat laporan melalui spreadsheet maupun video pendek yang dibagikan.
BERKONTRIBUSI MENGEMBANGKAN PENDIDIKAN ISLAM
Mushaf yang disalurkan merupakan Mushaf Quran khusus hafalan yang akan didistribusikan kepada lembaga pendidikan islam, seperti Rumah Tahfidz, TPQ dan TPA.
DIDOAKAN OLEH ANAK YATIM DAN SANTRI PENGHAFAL QURAN
Didoakan para santri penghafal Quran setiap subuh dan didoakan setiap minggunya oleh anak yatim asuh Yayasan Alfatihah yang sudah diverifikasi kematian ayahnya.
DAPAT BERSILATURAHMI DENGAN PENGURUS DAN PENGELOLA ZISWAF
Muwakif atau donatur dapat bersilaturahmi langsung dengan pengurus Yayasan Alfatihah maupun pengelola ziswaf Alfatihah.
-
Dengan menyebarkan sejuta mushaf, kita turut membantu jutaan umat muslim yang kesulitan mengakses Al-Qur’an. Jutaan manfaat yang kita tebar akan menjelma pahala abadi bagi kita yang menyisihkan harta.

Puluhan Ribu Orang Sudah Ambil Bagian, Anda Kapan?

-
-
-
-
-
-
-
Mari sebarkan sejuta mushaf dan raihlah jutaan pahala baik di dunia dan akhirat
Kontak Kami
Jl. Ngablak Indah II No. 24 A, Genuk, Semarang
0821-3726-4990
Support
-
-
-
-
-
-
-
-
-
-
-
-
@2026 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 */}
); }