An iOS tourism app that helps visitors discover and learn about Egypt's 5,000 years of history through immersive storytelling, gamification, and location-based features.
- Storytelling Cards: Bite-sized educational content about historical sites with images, facts, and embedded quizzes
- Dual Key System: Earn Knowledge Keys by completing stories and Discovery Keys by visiting sites
- Achievement System: 12 unlockable achievements across Exploration, Knowledge, and Mastery categories
- Rank Progression: Rise from Tourist to Pharaoh based on earned Ankh Points
- Search & Filter: Find sites by name, city, historical period, or type
- Nearby Sites: Location-based discovery of historical sites around you
- Timeline View: Navigate Egypt's history chronologically from Pre-Dynastic to Modern era
- Favorites: Save sites for quick access
- Ankh Points: Earn points through stories (+1), quizzes (+10), verified visits (+50), and achievements
- Ranks: Tourist → Traveler → Explorer → Historian → Archaeologist → Pharaoh
- Achievements: Unlock badges for exploration milestones, knowledge gained, and mastery
- Share Sites: Share site information with friends
- Share Achievements: Celebrate unlocked achievements
- Profile Card: Shareable journey summary with rank and stats
- Content Caching: Download sites and images for offline access
- Bundled Fallback: App works without internet using bundled content
- SwiftUI: Modern declarative UI framework
- iOS 17+: Minimum deployment target
- MVVM Architecture: Clean separation of concerns
- CoreLocation: Location verification for Discovery Keys
- Async/Await: Modern concurrency for network operations
UnlockEgypt/
├── Sources/
│ ├── App/ # App entry point
│ ├── Models/ # Data models (Site, Achievement)
│ ├── ViewModels/ # View models (HomeViewModel)
│ ├── Views/ # SwiftUI views
│ │ ├── Components/ # Reusable UI components
│ │ ├── Explore/ # Site detail and story views
│ │ ├── Home/ # Main tab views
│ │ ├── Nearby/ # Location-based views
│ │ ├── Onboarding/ # First-launch experience
│ │ ├── Profile/ # Shareable profile card
│ │ ├── Settings/ # Settings and achievements
│ │ └── Timeline/ # Historical timeline
│ ├── Services/ # Business logic services
│ ├── Extensions/ # Swift extensions
│ └── Preview/ # SwiftUI preview data
├── Resources/ # Assets and bundled content
├── ContentManagement/ # Google Sheets sync tools
└── content/ # JSON content for GitHub hosting
Site content is managed via Google Sheets and synced to JSON:
- Edit content in Google Sheets
- Run
python ContentManagement/sync_content.py - Content is fetched from GitHub on app launch
See ContentManagement/README.md for detailed setup.
-
Install XcodeGen:
brew install xcodegen
-
Generate Xcode project:
xcodegen generate
-
Open
UnlockEgypt.xcodeprojin Xcode -
Build and run on simulator or device
- Xcode 15+
- iOS 17+
- Swift 5.9+
Private project - All rights reserved.