Discover, explore, and plan your spiritual journey to the world's most magnificent mosques.
MosqueList is a free web app for Muslims and travelers who want to discover significant mosques worldwide, learn their history, and build a personal mosque bucket list. Explore 199+ mosques in 50+ countries—from the three holiest sites (Masjid al-Haram, Al-Masjid an-Nabawi, Al-Aqsa) to architectural landmarks—with an interactive map, fact-checked Blog, Islamic History timeline, Glossary, and visitor guides. Plan visits and track your journey in one place.
- Curated catalog — 199+ significant mosques with names (English and Arabic), locations, capacity, establishment dates, and descriptions; sources and coordinates where available.
- Curated lists — Holy Sites, Biggest Mosques, by country, by era, by architectural style, UNESCO sites, and more.
- Filters — All Mosques, Holy Sites only, Tourist Friendly; filter by country and region.
- Grid and list views — Switch between card grid and list layout.
- Mosque cards — Image, name, location, capacity, establishment date, significance, facilities (women’s prayer area, tourist-friendly), “Holy Site“ badge; link to detail page.
- Interactive map — OpenStreetMap-based map showing mosque locations; click markers for name and link to mosque page.
- Country/region filters — Same filters as Explore; map updates to show matching mosques.
- Timeline — Key dates from 622 CE to present: when major mosques were built or expanded (1,400+ years of context).
- Alternating layout — Events alternate left/right on desktop for easy reading.
- Blog — 35+ fact-checked articles: holiest sites, visitor etiquette, Islamic architecture (Ottoman, Mughal, Persian, etc.), funding, wudu and prayer guides, fun facts, oldest mosques, and more.
- Travel guide — Plan your mosque journey; popular heritage routes.
- Visitor tips — Dress code, photography, best times to visit, what to pack.
- Glossary — Terms (e.g. minaret, iwan, qibla) for readers and students.
- Track visits — Mark mosques as visited; progress bar and “Places to Pray“ checklist (persisted in localStorage).
- Favorites — Save mosques to your list from Explore or mosque detail pages.
- Contribute — Page explaining how to suggest new mosques, correct data, or contribute to the project.
- Sticky header — Explore, Map, Timeline, Blog, Islamic History, Glossary, Contributing, My List, About.
- Mobile menu — Full nav and “Start Your Journey“ CTA.
- Footer — Quick links (Browse, Map, Timeline, Blog, Prayer Times), resources, credit to ummah.build.
- Islamic-inspired theme — Warm paper/cream backgrounds, gold accents, serif and handwriting fonts (e.g. Playfair Display, Caveat).
- Responsive layout — Tailwind breakpoints (sm, md, lg, xl) for mobile-first responsiveness.
- Accessibility — Semantic HTML, aria-labels on icon buttons, keyboard-friendly navigation.
- React 18 + TypeScript
- Vite — Build and dev server
- React Router — Client-side routing (Index + NotFound)
- Tailwind CSS — Styling and responsive design
- shadcn/ui (Radix) — Buttons, badges, cards, accordions, etc.
- TanStack Query — Data fetching (ready for API integration)
- Lucide React — Icons
-
docs/skills.md — Skills and tools for checking accuracy of mosque data, Quran, and hadith references.
-
docs/improvements.md — Improvement skills and roadmap: data, UX, accessibility, performance, testing, and process.
-
docs/content-strategy.md — Strategy for blogs and pages (sacred mosques, biggest by area/capacity, history, architecture, cost, etc.) and SEO.
-
docs/personas.md — Audience personas (Muslims, tourists, non-Muslims, students, architecture enthusiasts) and how to appeal to each.
-
docs/wikipedia-api-mosque-data-guide.md — How to pull mosque data from Wikipedia APIs (oldest, largest, by-country lists, Islamic architecture) and map it to MosqueList’s
Mosquetype. -
Brand guide (in-app): /brand — Colors (HEX/RGB), fonts, voice, personas, logo & favicon, component showcase, downloadable brand ZIP. SEO-optimized; in sitemap.
| Path | Purpose |
|---|---|
src/App.tsx |
Root app: QueryClient, Router, TooltipProvider, Toaster, routes |
src/main.tsx |
React entry point, mounts App into #root |
src/pages/Index.tsx |
Home: Hero, Explore, Timeline, Bucket List, Footer |
src/pages/Explore.tsx |
Explore mosques (grid/list, filters, curated lists) |
src/pages/Map.tsx |
Interactive map of mosque locations (OpenStreetMap) |
src/pages/IslamicHistory.tsx |
Islamic History timeline page |
src/pages/Blog.tsx |
Blog index and post pages |
src/pages/Glossary.tsx |
Glossary of terms |
src/pages/Contributing.tsx |
How to contribute |
src/pages/MosqueDetail.tsx |
Single mosque detail page (SEO, facilities, map) |
src/pages/BrandPage.tsx |
Brand guide: colors, fonts, voice, personas, logo, components, download ZIP |
src/pages/NotFound.tsx |
404 page |
src/components/Navigation.tsx |
Header with logo, nav links, mobile menu |
src/components/HeroSection.tsx |
Hero with headline, CTAs, stats |
src/components/MosqueCard.tsx |
Mosque card (image, badges, like, details) |
src/components/BucketList.tsx |
Bucket list checklist and progress (persisted) |
src/components/Footer.tsx |
Footer with links and credit |
src/data/mosques.ts |
Mosque data (single source of truth) |
src/data/blog.ts |
Blog posts (fact-checked articles) |
src/components/ui/* |
shadcn/ui components |
public/ |
Favicons, manifest, robots.txt, sitemap, ai.txt, static assets |
- Persistence — Save bucket list and “liked” mosques (
localStorage). - Detail pages — Dedicated page per mosque at
/mosque/:id(description, facilities, SEO). - Search — Search mosques by name, country, city, description; URL-synced; advanced filters.
- Real images — Inline mosque photos from Wikimedia Commons (CC-licensed).
- Prayer times — Footer link to IslamicFinder prayer times.
- Map view — Interactive map (OpenStreetMap/Leaflet) for mosque locations.
- More mosques — 199+ mosques in 50+ countries in
src/data/mosques.ts. - i18n — Optional Arabic (or other language) for UI and content.
- Analytics — Privacy-respecting analytics for understanding usage (optional).
Ideas for future versions of MosqueList—data, visitor info, reconstruction, and tooling.
- Links to official tourist pages — Per-mosque links to official visitor/tourism pages (e.g. government heritage sites, mosque-run visitor info) so users can check hours, tours, and rules.
- Ticket / entry info — Where relevant: free entry vs paid, non-tourist (worshipper) vs tourist ticket pricing, and booking links for timed slots where required (e.g. Sheikh Zayed, some historic sites).
- Guided tours & experiences — Surface whether guided tours exist, languages offered, and links to book (official or trusted partners).
- Seasonal & event info — Ramadan hours, Eid access, special open days or closures, so visitors can plan.
- Richer facilities data — Expand beyond basic flags: wudu facilities (count, accessibility), parking, wheelchair access, women’s prayer area details, library, café, bookshop, ablution notes, and kid-friendly areas.
- Accessibility — Structured accessibility info (step-free access, ramps, accessible toilets, quiet room) for worshippers and tourists with mobility or sensory needs.
- Prayer times integration — Optional link or embed to live prayer times for the mosque (e.g. API or partner) so users see local times on the mosque page.
- “Build / rebuild” and blueprints — Support for mosques that are under reconstruction, destroyed, or planned: add blueprints, plans, or reference images where available (e.g. Al-Nuri Mosul, historic rebuilds). Allow listing “mosques to rebuild” or “under reconstruction” with status and links to campaigns or official rebuild efforts.
- Historic plans & archives — Link or attach historic floor plans, sections, or archival docs (with rights cleared) for education and reconstruction reference.
- Updated scraping pipeline — Scripts or jobs to refresh mosque data from trusted sources (Wikipedia, official sites, UNESCO, tourism boards) for capacity, opening hours, and descriptions; keep a clear audit trail and human review for fact-checking.
- Source freshness — Track “last verified” or “last scraped” per field or per mosque so editors know what needs a refresh.
- Structured opening hours — Store and display opening hours (including “closed to tourists during prayer”) where available from scraping or manual entry.
- Offline / PWA — Improve offline support (e.g. cache key mosque pages and map tiles) so the bucket list and explore work in low-connectivity travel.
- User-submitted photos & tips — Optional, moderated: visitors can submit photos or short tips (best time to visit, what to expect) tied to a mosque.
- Routes & itineraries — Pre-built or user-created “day in Istanbul” or “Gulf highlights” routes that link several mosques with order and transport hints.
- Nearby mosques — “Mosques near me” or “near this mosque” using coordinates for local discovery and travel planning.
- Add mosque detail view (full description, facilities, visiting info, map).
- Implement “Add to bucket list” from mosque cards and sync with Bucket List section.
- Add search and filters by country/region.
- Consider user accounts (optional) for syncing bucket list across devices.
- Lazy-load images and consider
loading="lazy"for below-the-fold cards. - Code-split routes if more pages are added (e.g.
/mosque/:id). - Ensure hero image is optimized (e.g. WebP, responsive
srcset).
- JSON-LD is implemented (WebSite, Place with geo, ItemList, BlogPosting) for mosque and blog pages.
- Sitemap includes homepage, mosque pages, blog posts, guides, glossary, and contributing; ai.txt is available for AI crawlers.
- Keep meta description and title unique per page; og-image and og:image:alt are set where applicable.
src/data/mosques.ts— Consider splitting intomosques.tsandtimeline.ts, or loading from JSON/CMS later.- Types — Move shared types (e.g.
Mosque) tosrc/types/if reused across features. - Env — Use
import.meta.envfor public URL and any API base URLs (e.g. for future API). - Tests — Add tests for filters, bucket list toggle, and key user flows (e.g. Vitest + React Testing Library).
- E2E — Optional Playwright/Cypress for critical paths (navigation, filter, bucket list).
- Fork the repository and clone your fork.
- Create a branch — e.g.
git checkout -b feature/your-featureorfix/your-fix. - Install and run locally —
npm installthennpm run dev. - Make changes — Follow existing code style (TypeScript, Tailwind, functional components).
- Test — Run
npm run lintandnpm run test; manually test on mobile and desktop. - Commit — Use clear messages (e.g. “Add search to mosque grid”, “Fix mobile menu close”).
- Push to your fork and open a Pull Request against the main branch.
- Describe your PR — What changed, why, and how to test.
- Use TypeScript for all new code; avoid
anywhere possible. - Prefer functional components and hooks (no class components).
- Use Tailwind for layout and styling; keep custom CSS in
index.cssor component-level only when needed. - Use semantic HTML and aria- attributes for interactive elements (e.g. icon-only buttons).
- Keep components focused; extract reusable pieces into shared components or hooks.
- Edit
src/data/mosques.ts. - Use the existing
Mosqueinterface:id,name,arabicName?,location,country,capacity,established,area,annualVisitors,facilities,significance,description,imageUrl,isHolySite,architecturalStyle?,womenPrayerArea,touristFriendly. - Use a kebab-case
id(e.g.blue-mosque). Add a placeholder or real image URL forimageUrl.
- Open an issue with a clear title and description.
- Include steps to reproduce, expected vs actual behavior, and (if relevant) device/browser.
- Contributions are welcome under the same terms as the project license (see repository license file if present).
- Node.js 18+ and npm (or Bun; the project uses
package.jsonscripts).
git clone <YOUR_GIT_URL>
cd mosquelist
npm install
npm run devThen open http://localhost:8080 (or the port shown in the terminal).
| Command | Description |
|---|---|
npm run dev |
Start Vite dev server with HMR |
npm run build |
Production build (output in dist/) |
npm run preview |
Serve the production build locally |
npm run lint |
Run ESLint |
npm run test |
Run Vitest tests |
- Build with
npm run buildand deploy thedist/folder to any static host (e.g. Vercel, Netlify, GitHub Pages). - The project includes a
vercel.jsonfor Vercel (SPA redirects).
- Local: Run
npm run dev, open http://localhost:8080 in Chrome or Safari. - Automated mobile viewport tests:
npm run test -- src/test/mobile-responsive.test.tsx(375px; see docs/mobile-testing-guide.md). - Mobile responsiveness (manual): Use DevTools (F12 → Toggle device toolbar or Cmd+Shift+M), select a device (e.g. iPhone 12, Pixel 5) and check:
- Header: logo and hamburger menu visible; tapping menu opens nav links and “Start Your Journey”.
- Hero: headline and CTAs readable; “Explore Mosques” / “Start My List” stack on small screens; stats row (199+, 50M+, 50+) readable.
- Explore/Map: filters and curated lists work; map shows mosque markers; grid/list toggle works.
- Timeline: events stack vertically; cards readable.
- Bucket list: progress bar and checklist readable; toggling visited state works.
- Footer: links and credit readable and tappable.
- Functionality: Test anchor links (Explore → #mosques, Timeline → #timeline, My List → #bucket-list), filter buttons, grid/list toggle, heart “like” on a mosque card, and bucket list checkboxes.
This project is structured for search and AI discoverability:
- Semantic HTML — Sections, headings, and landmarks for crawlers and assistive tech.
- Meta tags — Title, description, and keywords in
index.html; Open Graph and Twitter Card tags use project-owned URLs (no third-party branding in meta). - Canonical URL — Set to the production origin to avoid duplicate content.
- Web manifest —
public/site.webmanifestwith app name and icons for PWA and rich results. - robots.txt — Allows crawlers; extend with
Sitemap:when you add a sitemap.
Sitemap — Generated at build time: homepage, all /mosque/:id URLs, blog posts, guides, glossary, and contributing. Referenced in robots.txt. Run npm run build to regenerate.
ai.txt — public/ai.txt provides a short summary of the project for AI crawlers. JSON-LD (WebSite, Place, ItemList, BlogPosting) is used on relevant pages for rich results.
Made with care for the Ummah. A project by ummah.build.