-

Program ini merupakan jembatan bagi #AnakBaik seperti Anda yang ingin memberikan persembahan terbaik bagi orang tua, baik yang masih ada maupun yang sudah tiada.

Tidak Ada Yang Terlambat,
Buktikan BAKTImu dan CINTAmu Untuk Bapak & Ibu Sekarang!!!
NAMUN BAGAIMANA CARANYA?

Jangan bingung lagi, Ayah Bunda yang dirahmati Allah,Tahukah Anda bahwa di Indonesia, lebih dari 4 juta jiwa tinggal di wilayah pedalaman dengan akses terbatas terhadap Al-Qur'an, air bersih, dan kebutuhan dasar lainnya? Bahkan, menurut data Kementerian Agama, sekitar 65% mualaf di pedalaman menghadapi tantangan besar dalam memperkuat keimanan mereka akibat minimnya fasilitas ibadah dan pembinaan agama.

Lalu, apa yang bisa kita lakukan untuk mereka?

-
Melalui program Gemar Pedalaman, kami hadir dengan misi membawa perubahan nyata ke pelosok negeri. Program ini dirancang berdasarkan riset lapangan dan studi kasus nyata, seperti:

Di sebuah desa pedalaman di Nusa Tenggara, hanya 1 dari 20 rumah yang memiliki mushaf Al-Qur'an dalam kondisi layak.

Di Kalimantan Barat, para mualaf terpaksa menggunakan air sungai yang tercemar untuk kebutuhan sehari-hari karena ketiadaan sumber air bersih.

Di Aceh Singkil, seorang santri mualaf harus berjalan 10 km setiap minggu hanya untuk mendapatkan sembako dari masjid terdekat.

"Barang siapa yang memberi minum seorang Muslim, Allah akan memberinya minum dari telaga-Nya yang suci di hari kiamat." (HR. Tirmidzi)

Donasi yang terkumpul akan disalurkan dalam bentuk berikut :
Wakaf Al-Qur'an
Memberikan mushaf baru kepada saudara Muslim di pedalaman agar mereka dapat membaca dan memahami kalam Allah dengan layak.
-
Program Air Bersih
Membangun sumur dan fasilitas air bersih untuk masyarakat pedalaman agar dapat hidup lebih sehat dan nyaman.
-
Pakaian Layak untuk Muallaf
Membantu para mualaf yang baru saja memeluk Islam dengan pakaian yang layak untuk beribadah dan menjalani kehidupan sehari-hari.
-
Sembako untuk Muallaf
Memastikan kebutuhan pangan santri mualaf terpenuhi sehingga mereka dapat fokus mendalami Islam tanpa kekhawatiran
-
Khitan Massal Gratis Untuk Muallaf
Mendukung muallaf dalam perjalanan spiritual mereka dengan memberikan layanan penuh kasih
-
Pelayanan Kesehatan Gratis untuk Muallaf
Program ini bertujuan untuk memastikan kesehatan fisik dan kesejahteraan muallaf terjaga.
-

Keutamaan Membantu Mereka?

-
-
-
-
-
-
-
-
-
Dengan berpartisipasi dalam program ini, Anda tidak hanya membantu memenuhi kebutuhan saudara-saudara kita di pedalaman, tetapi juga menjadi bagian dari perjalanan dakwah yang menghidupkan cahaya Islam di penjuru negeri
Sumber aliran pahala, sebab membuka akses air bersih untuk para Muallaf Dan Anak Yatim Pedalaman
Wakaf air merupakan sedekah yang paling dicintai Rasulullah
Dengan membantu saudara Muslim di pedalaman, Anda sedang menanam kebaikan yang akan kembali kepada Anda dalam bentuk kemudahan hidup di dunia dan keselamatan di akhirat.
Mendapat berkah dalam hidup, sebab membantu para penghafal Qur'an
Membantu umat Islam dalam beribadah dengan air yang bersih
Amal jangka panjang yang bisa dipanen pahalanya bahkan ketika sudah meninggal
Mendapat pahala dari Allah

Mengapa Harus Berkontribusi dalam Program Gemar Pedalaman?

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
MUWAKIF AKAN MENDAPAT LAPORAN RUTIN Bagi para muwakif yang menyisihkan hartanya untuk Pedalaman dalam program Wisata Quran Pedalama akan mendapat laporan penyaluran kemanfaatan harta yang diwakafkan secara berkala.
MUWAKIF MENDAPATKAN PELAYANAN CUSTOMER SERVICE 24 JAM Para muwakif tidak perlu khawatir akan kesusahan dalam menunaikan wakaf di program Wakaf Sumur Santri, karena kami memberikan layanan customer service 24 jam yang siap melayani para muwakif.
PROSES WAKAF YANG MUDAH DAN TRANSPARAN Muwakif tidak perlu takut dan khawatir karena wakaf di program Wakaf Sumur Santri prosesnya sangat mudah, tidak ribet dan transparan.
-

1000+ #Orangbaik sudah membuktikan langsung dahsyatnya keajaiban Bersedekah Untuk saudara & santri Muallaf kita di pelosok negeri

-
-
-
Jangan biarkan mereka menunggu lebih lama. Mari bersama kita wujudkan harapan mereka! Setiap kontribusi Anda adalah ladang pahala tak terputus.

Nama
No Whatsapp
Sedekah Atas Nama / Do'a
`Kirim
Kontak Kami
Jl. Sultan Agung, Kuala Dua, Kec. Sungai Raya, Kabupaten Kubu Raya, Kalimantan Barat 78391
+62 812-5683-2199
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 :
Partners
-
@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 */}
); }