A React Native/Expo mobile Web app providing an interactive virtual tour experience for St. George's Cathedral in Cape Town, featuring an SVG based indoor map, Firebase backend, and POI system.
The St. George's Cathedral Tour Guide Web App is an interactive digital tour guide that allows visitors to explore the historic cathedral through a detailed SVG based floorplan. The app features 26 Points of Interest with historical information, high quality images, audio guides and responsive design that works seamlessly across mobile and desktop devices.
- Interactive Floorplan: SVG-based cathedral floorplan with 26 POI markers
- Responsive Design: Works seamlessly on mobile, tablet, and desktop
- Image Gallery: High quality images with full screen viewing
- Audio Guide: Text to speech audio descriptions
- Privacy Compliant: Cookie consent and analytics tracking
- Mobile Optimized: Portrait orientation lock and touch gestures
- Modern UI: Consistent color scheme and smooth animations
- React Native - Cross platform mobile development
- Expo - Development platform and tools
- TypeScript - Type-safe JavaScript
- React Navigation - Navigation library
- React Native SVG - SVG rendering
- Firebase Firestore - NoSQL database
- Firebase Storage - Image storage
- Firebase Cloud Functions - Serverless functions
- Firebase Analytics - User analytics
- ESLint - Code linting
Before you begin, ensure you have the following installed:
- Node.js (v16 or higher) - Download Node.js
- npm (comes with Node.js) or yarn package manager
- Git - Download Git
- Modern web browser (Chrome, Firefox, Safari, or Edge)
- Internet connection for downloading dependencies and Firebase services
- Firebase CLI (for deployment) - Install with
npm install -g firebase-tools
Clone the repository to your local machine:
git clone https://github.com/2BitDevelopment/TourGuideApp.git
cd TourGuideAppInstall all required dependencies:
npm installThis will install:
- React Native and Expo dependencies
- TypeScript and type definitions
- Firebase SDK
- React Navigation
- All other project dependencies
Expected Output:
Installed all dependencies
Set up your Firebase configuration file:
- Create a Firebase project at Firebase Console
- Enable Firestore Database and Firebase Storage
- Add your Firebase configuration to
services/firebase.config.ts:
const firebaseConfig = {
apiKey: "your-api-key",
authDomain: "your-project.firebaseapp.com",
projectId: "your-project-id",
storageBucket: "your-project.appspot.com",
messagingSenderId: "your-sender-id",
appId: "your-app-id"
};If you plan to deploy Firebase Functions:
cd functions
npm install
cd ..Start the development server for web:
npm startThen:
- Press
wto open in web browser - Or visit
http://localhost:8081in your browser
For production web build:
npm run buildnpm start- Start Expo development servernpm run web- Start web development servernpm run lint- Run ESLint to check code qualitynpm run predeploy- Build production web versionnpm run deploy-hosting- Deploy to Firebase Hosting
Issue: "Module not found" error
# Clear npm cache and reinstall
rm -rf node_modules
npm cache clean --force
npm installIssue: Expo CLI not found
# Install Expo CLI globally
npm install -g expo-cliIssue: Firestore permissions error
- Go to Firebase Console -> Firestore Database -> Rules
- Update rules to allow read/write during development
- For production, use proper authentication rules
Issue: Images not loading
- Verify Firebase Storage is enabled in your Firebase project
- Check that image URLs in Firestore are correct
- Ensure Firebase configuration in
services/firebase.config.tsis correct
Issue: Port already in use
# Kill the process using the port
npx kill-port 8081
# Or specify a different port
expo start --port 8082Create a .env file in the root directory (if needed):
EXPO_PUBLIC_FIREBASE_API_KEY=your-api-key
EXPO_PUBLIC_FIREBASE_AUTH_DOMAIN=your-project.firebaseapp.com
EXPO_PUBLIC_FIREBASE_PROJECT_ID=your-project-idEnsure these Firebase services are enabled in your Firebase Console:
-
Firestore Database (for storing POI data)
- Go to Firestore Database -> Create database
- Choose production or test mode (test mode for development)
- Set location (choose closest to your users)
-
Firebase Storage (for storing images)
- Go to Storage -> Get started
- Accept security rules
-
Firebase Hosting (for deployment)
- Go to Hosting -> Get started
- Follow setup instructions
-
Firebase Analytics (optional)
- Automatically enabled
- Used for tracking user behavior
will add screenshot
- Clone the repository and install dependencies (see Installation section)
- Configure Firebase -> Set up Firebase project and add credentials to
services/firebase.config.ts - Start development server -> Run
npm startornpm run web - Make changes -> Edit files in
app/orcomponents/directories - See changes instantly -> Hot reloading will update the app automatically
- Main files:
app/MapPage.tsx(main interface),app/index.tsx(home page) - Components: Add reusable components in
components/directory - Styling: Use
constants/Colours.tsfor consistent colors across the app - Database: POI data stored in Firestore, structure defined in
types/database.ts - Images: Stored in Firebase Storage, cached locally using
hooks/useImageLoading.ts
- App pages: Located in
app/directory, using file-based routing - Reusable components: Located in
components/directory - Custom hooks: Located in
hooks/directory for shared logic - Services: Located in
services/for external API integration - Utilities: Located in
util/for helper functions - Constants: Located in
constants/for shared values
Deploy the web version to Firebase Hosting:
npm run predeploy # Exports web build
npm run deploy-hosting # Deploys to Firebase HostingDeploy backend functions:
cd functions
npm install
npm run build
firebase deploy --only functionsBuilt by 2Bit Development
-
James Hart - Backend Lead & Project Manager
- Firebase backend architecture and implementation
- Project coordination and technical leadership
- Database design and API development
-
Emil Fabel - Frontend Lead & Design
- React Native app architecture and development
- UI/UX design and user experience
- Interactive map implementation and POI system
-
Weylin Volschenk - Frontend co-lead & Planning
- Frontend development and optimization
- Feature planning and implementation assistance
- Code review and quality assurance
-
Kevin Muller - Security & DevSecOps
- Security implementation and best practices
- DevOps pipeline and deployment automation
- Infrastructure security and monitoring
Built with love by 2Bit Development for St. George's Cathedral
Last updated: October 2025 Version: 1.0.0

