A gamified mobile and web application for reading and learning the epic Persian poem Shahnameh (شاهنامه) by Ferdowsi. This app makes reading Shahnameh an engaging and enjoyable experience through gamification, similar to language learning apps like Duolingo.
This app is built with love for Shahnameh and Persian culture. Our goal is to transform reading Shahnameh from a heavy and difficult task into a delightful and entertaining experience. We've been inspired by language learning apps and have tried to make reading and learning Shahnameh stories engaging through gamification—where you progress through stories, earn points, unlock stages, and continue your journey.
- 📖 Read Shahnameh poems with an intuitive interface
- 🎮 Gamified reading experience with points and achievements
- 📱 Cross-platform: iOS, Android, and Web
- 🌙 Dark mode support
- ⭐ Favorites and completed poems tracking
- 🎯 Challenge mode (experimental, currently for Keyumars, Hooshang, and Tahmores sections)
- 🔊 Audio support for poems
- Expo - React Native framework
- React Native - Mobile app framework
- Expo Router - File-based routing
- TypeScript - Type safety
- EAS Build - Build and deployment
- Node.js (>= 16.17.4)
- npm or yarn
- Expo CLI (optional, can use npx)
-
Clone the repository
git clone <repository-url> cd shahname
-
Install dependencies
npm install # or yarn install -
Start the development server
npx expo start
-
Run on your preferred platform
- iOS: Press
ior scan QR code with Expo Go app - Android: Press
aor scan QR code with Expo Go app - Web: Press
wto open in browser
- iOS: Press
Build a signed APK with EAS Build:
eas build --platform android --profile productionAfter the build finishes, download the APK from the Expo dashboard and install it.
| Error | Cause | Fix |
|---|---|---|
| INSTALL_PARSE_FAILED_NO_CERTIFICATES | APK is not signed | Always use EAS Build to produce the APK. Run eas credentials and ensure Android keystore is set. |
| INSTALL_FAILED_INVALID_APK | Corrupt or wrong file | Re-download the APK from Expo. Rebuild with eas build --platform android --profile production --clear-cache. |
| INSTALL_FAILED_INSUFFICIENT_STORAGE | Not enough space | Free storage on the device. |
| INSTALL_FAILED_INTERNAL_ERROR | System/package manager issue | Restart the device, clear "Package installer" app data, or try another device. |
shahname/
├── app/ # App screens (file-based routing)
├── components/ # Reusable React components
├── assets/ # Images, fonts, and data files
├── constants/ # App constants and themes
├── hooks/ # Custom React hooks
├── services/ # Business logic and data services
├── types/ # TypeScript type definitions
└── public/ # Web-specific assets
Screenshots coming soon!
We welcome contributions! Please read our Contributing Guide to get started.
- 🐛 Found a bug? Report it
- 💡 Have an idea? Suggest a feature
- 📝 Want to contribute code? Check out our Contributing Guide
You can also reach us via Instagram (mentioned in the app).
See CHANGELOG.md for a list of changes and version history.
See LICENSE file for details.