Navigate by Surah & Para, open any page instantly, and interact with visual highlights that stay aligned while you zoom.
- Deep-space UI with glow gradients and sci‑fi typography.
- Instant navigation: jump by ID, Surah, or Para.
- Gesture-first reader: pinch zoom powered by Reanimated + Gesture Handler.
- Interactive overlays: boxes & highlights are rendered on top of page images.
- Last-page memory: remembers where you left off.
- Home
- Entry hub to Quran Viewer / Surah Index / Para Index.
- Surah Index (114 Surahs)
- Search by English name, Arabic name, or number.
- Tap to open the corresponding page.
- Para Index (30 Paras / Juz)
- Search by number or names.
- Tap to open the corresponding page.
- Quran Viewer (Pages 1–604+)
- Jump search: enter a page ID (numeric).
- Pinch zoom: zoom between 1x and 3x.
- Boxes & highlights overlay
- Boxes represent tappable elements pointing to target pages.
- Highlights can activate to guide reading.
- Back navigation
- Returns to the previous selected page.
- Persistence
- Stores the last viewed page in
AsyncStorage.
- Stores the last viewed page in
- Expo (React Native)
- React Navigation (native stack)
- react-native-gesture-handler
- react-native-reanimated
- expo-linear-gradient for futuristic glow backgrounds
- expo-blur (used in some screens)
- AsyncStorage for last page persistence
-
App.js- Defines the navigation stack:
Home→HomeScreenSurahIndex→SurahIndexParaIndex→ParaIndexQuranViewer→QuranViewer
- Defines the navigation stack:
-
src/screens/HomeScreen.jsSurahIndex.jsParaIndex.jsQuranViewer.js
-
src/assets/pageData.json- Drives overlay rendering (boxes + highlights coordinates per page)
images/img_*.png- Quran page images used by the viewer
src/
screens/
HomeScreen.js
SurahIndex.js
ParaIndex.js
QuranViewer.js
Settings.js (not currently wired in navigation)
styles/
appStyles.js
assets/
pageData.json
bg.png
images/
img_1.png ... img_624.png (page images)
The viewer uses pageData.json to place:
- Boxes (interactive targets to other pages)
- Highlights (guided emphasis)
The overlay coordinates are scaled to match the on-device rendered image size.
npm installnpm startThen use:
afor Androidifor iOSwfor Web (Expo)
-
Viewer performance
FlatListis optimized usinginitialNumToRender,maxToRenderPerBatch, andwindowSize.- Images are rendered as a vertical list for fast page-to-page access.
-
Gesture tuning
- Current pinch zoom clamps scale to keep overlays meaningful.
See TODO.md for next planned improvements (reader zoom & cleanup items).
This project uses the repo’s existing licensing (0BSD as indicated in package.json).