A specialized search application designed to help Muslims find Islamic rulings (fatwas) and content from the Mashāyukh. This web application provides a curated search experience restricting the search to known websites and channels.
- YouTube Search Integration: Search through verified Islamic scholar channels
- Verified Channels:
- فضيلة الشيخ محمد بن صالح العثيمين
- العلامة الدكتور صالح الفوزان
- قناة ميراث الأنبياء المرئية
- Think Reflect Ponder
- قناة الشيخ أ.د عبد الله بن عبد الرحيم البخاري
- قناة الشيخ محمد ابن عثيمين الرسمية
- موقع الشـ/ خالد الظفيري
- د. محمد بن غالب العُمري
- شبكة بينونة للعلوم الشرعية
- بوابة تراث الإمام الألباني
- درر الشيخ الألباني
- موقع الشيخ صالح الفوزان
- الشيخ عبد الرزاق البدر
- القناة الرسمية لموقع سماحة الشيخ عبدالعزيز بن باز
- سماحة الشيخ عبدالعزيز بن عبدالله آل الشيخ
- فضيلة الشيخ محمد أمان الجامي
- فضيلة الشيخ صالح آل الشيخ - SalihAlalsheikh
- فضيلة الشيخ ابن باز Alsheikh Binbaz
- قناة مؤسسة عبد العزيز بن باز الخيرية الرسمية
- قناة مؤسسة عبد العزيز بن باز الخيرية الرسمية
- قناة مؤسسة عبد العزيز بن باز الخيرية الرسمية
- Channel Filtering: Filter results by specific scholars or channels
- Verified Sites: Search through verified Islamic sites
- Scholar Request System: Request new scholars to be added to the searching list
- Channel Submission: Submit YouTube channels for consideration
- Sharing Capabilities: Easily share search results with others
- Mobile Responsive: Works seamlessly on all devices
- Modern UI: Built with Tailwind CSS and shadcn/ui components
- Clone the repository
- Install dependencies:
npm install- Start the development server:
npm start- Open http://localhost:3000 to view it in your browser.
- Go to Programmable Search Engine
- Enter the following sites in "Sites to search":
binothaimeen.net/*
alfawzan.af.org.sa/*
lohaidan.af.org.sa/*
binbaz.org.sa/*
al-badr.net/*
obied-aljabri.com/*
aletioupi.com/*
miraath.net/*
al-albany.com/*
rabee.net/*
- Click "Create"
- Copy your Search Engine ID (cx) from the "Setup" tab
- Go to Google Cloud Console
- Create a new project or select an existing one
- Enable these APIs:
- Custom Search API
- YouTube Data API v3
- Go to "Credentials"
- Click "Create Credentials" > "API Key"
- Copy your API key
- (Optional) Restrict the API key to only these APIs for security
Create a .env.local file in the root directory (or configure these in Netlify's UI):
# Google API Keys (Server-side only - NOT prefixed with NEXT_PUBLIC_)
GOOGLE_API_KEY=your_api_key_here
SEARCH_ENGINE_ID=your_search_engine_id_here
YOUTUBE_API_KEY=your_api_key_here # can reuse same Google API key
# Analytics (Client-side - prefixed with NEXT_PUBLIC_)
NEXT_PUBLIC_CLARITY_ID=optional_ms_clarity_project_id
NEXT_PUBLIC_GA_ID=G-XXXXXXXXXXImportant Security Notes:
- API keys are now server-side only and protected from client exposure
- The app supports legacy
REACT_APP_*prefixed variables for backward compatibility - Never commit
.env.localto version control - For production, set these variables in your hosting platform's environment settings
Netlify Setup:
- Build command:
npm run build - Publish directory:
.next - Ensure the Netlify Next.js Runtime plugin (
@netlify/plugin-nextjs) is installed (already configured innetlify.toml). - Set environment variables in Netlify under Site Settings > Build & Deploy > Environment.
- Use the search bar to look for Islamic topics or questions
- Filter results by specific scholars using the filter button
- Watch videos directly in the app or open them on YouTube
- Share interesting search results with others
- Request new scholars or channels to be added to the platform
To add a new scholar website to the search functionality:
-
Update the Google Custom Search Engine:
- Go to Programmable Search Engine
- Select your search engine
- Navigate to "Setup" → "Sites to search"
- Add the new site domain (e.g.,
newscholar.com/*) - Save changes
-
Update the Application Code:
- Open
components/Search.js - Locate the
DEFAULT_SITESarray (around line 40) - Add the new site domain to the array:
export const DEFAULT_SITES = [ "binothaimeen.net", "alfawzan.af.org.sa", // ... existing sites "newscholar.com", // Add your new site here ];
- Open
-
Update the README (Optional):
- Add the new site to the "Verified Sites" list in the Features section
-
Test the Changes:
- Run the development server:
npm run dev - Perform a search and verify the new site appears in results
- Test with multi-site selection to ensure proper filtering
- Run the development server:
To add a new Islamic scholar's YouTube channel:
-
Get the Channel ID:
- Visit the YouTube channel
- Click "About" tab
- Click "Share channel" → "Copy channel ID"
- The ID looks like:
UCFjzJYgxHjk44AFoEwwgPjg
-
Update the Application Code:
- Open
components/Youtube-Search.js - Locate the
CHANNELSarray (around line 16) - Add the new channel ID to the array:
const CHANNELS = [ "UCFjzJYgxHjk44AFoEwwgPjg", "UCi7vzSJrU3beV_6Sdgpowng", // ... existing channels "UCNewChannelIDHere", // Add your new channel ID here ];
- Open
-
Update the README (Optional):
- Add the new channel to the "Verified Channels" list in the Features section
- Include the channel name and link
-
Test the Changes:
- Run the development server:
npm run dev - Navigate to the YouTube search tab
- Perform a search and verify videos from the new channel appear in results
- Run the development server:
The application supports multiple languages (English, Arabic, Urdu). To add or modify translations:
-
Translation File Location:
- All translations are in
translations.js
- All translations are in
-
Add a New Translation:
export const translations = { en: { searchPlaceholder: "Search...", // ... other English translations }, ar: { searchPlaceholder: "بحث...", // ... other Arabic translations }, ur: { searchPlaceholder: "تلاش کریں...", // ... other Urdu translations }, };
-
Add a New Language:
- Add a new language object to the
translationsexport - Translate all keys from the English version
- Update the language switcher in
app/[lang]/layout.jsto include the new language option - Add the new language to the routing configuration
- Add a new language object to the
-
Using Translations in Components:
import { translations } from "../translations"; const MyComponent = ({ language = "en" }) => { const t = translations[language]; return <p>{t.searchPlaceholder}</p>; };
-
RTL (Right-to-Left) Support:
- The app automatically handles RTL for Arabic and Urdu
- RTL is configured in
app/[lang]/layout.js - Use logical CSS properties (e.g.,
margin-inline-startinstead ofmargin-left) for new styles
-
Testing Translations:
- Switch languages using the language selector in the UI
- Verify all UI elements display correctly
- Check RTL layout for Arabic and Urdu
- Ensure no text is hardcoded (all should use translation keys)
- Next.js 15 (App Router)
- Tailwind CSS
- shadcn/ui components
- Framer Motion for animations
- YouTube Data API
- Lucide React icons
Contributions are welcome! Please read our contributing guidelines before submitting pull requests.
This application respects user privacy and only collects necessary data for search functionality. No personal information is stored or shared with third parties.
For questions, suggestions, or support:
- GitHub Issues: Create an issue
- Email: [email protected]
Please check existing issues before creating a new one and follow our contribution guidelines when submitting questions or suggestions.
This project is licensed under the MIT License - see the LICENSE file for details.