A full-stack heritage tourism and digital preservation platform built with React, Node.js, Express, and MongoDB.
The platform enables users to explore cultural heritage sites through immersive 360° virtual tours, location-aware audio guides, interactive maps, digital archives, and event booking capabilities while supporting offline access through Progressive Web App technologies.
- 360° Virtual Tours using Pannellum
- Interactive Heritage Site Discovery
- Mobile-Friendly Experience
- GPS-Based Nearby Site Detection
- Context-Aware Audio Recommendations
- Interactive Maps powered by Leaflet
- Digital Archive Management
- Historical Content Categorization
- Multimedia Asset Support
- JWT Authentication
- Role-Based Access Control (Tourist, Monk, Admin)
- Protected API Routes
- Heritage Event Listings
- Event Booking System
- Booking Persistence with MongoDB
- Offline Caching
- Installable Experience
- Service Worker Support
Frontend ├── React (Vite) ├── Tailwind CSS ├── React Router ├── Leaflet Maps └── Pannellum Viewer
Backend ├── Node.js ├── Express.js ├── JWT Authentication ├── REST APIs └── MongoDB Atlas
Storage ├── MongoDB └── Cloudinary Media Storage
Media:
- Cloudinary-ready URL support
client/src/componentssrc/pagessrc/hookssrc/servicessrc/context
server/controllersmodelsroutesmiddlewareutils
cd server- Copy
.env.example->.env - Fill environment variables:
MONGODB_URIJWT_SECRET- Cloudinary keys (optional for seed/demo URLs)
npm installnpm run seednpm run dev
Backend runs at http://localhost:5000
cd client- Copy
.env.example->.env npm installnpm run dev
Frontend runs at http://localhost:5173
- Initialize git in project root.
- Verify
.gitignoreis present at root. - Commit using clear commit messages.
- Create a GitHub repository named
monastery360. - Push
mainbranch to GitHub.
Detailed command set is provided in this guide response.
- Framework: Vite
- Root directory:
client - Build command:
npm run build - Output directory:
dist - Environment variable:
VITE_API_URL=https://<your-render-service>.onrender.com/api
- Service type: Web Service
- Root directory:
server - Build command:
npm install - Start command:
npm start - Required environment variables:
PORT=10000MONGODB_URI=<your_mongodb_atlas_uri>JWT_SECRET=<strong_random_secret>JWT_EXPIRES_IN=7dCLIENT_ORIGIN=https://<your-vercel-app>.vercel.app- Optional Cloudinary vars
Set Vercel env var VITE_API_URL to Render API URL, then redeploy frontend.
Backend supports CLIENT_ORIGIN as a comma-separated list for multi-domain setups.
After npm run seed:
- Admin:
admin@monastery360.com/password123 - Monk:
monk@monastery360.com/password123 - Tourist:
tourist@monastery360.com/password123
GET /api/monasteriesGET /api/monasteries/:idGET /api/monasteries/nearbyGET /api/audio/:monasteryIdGET /api/archives/:monasteryIdGET /api/eventsPOST /api/events/book/:idPOST /api/auth/registerPOST /api/auth/loginGET /api/moderation/pendingPOST /api/moderation/approve
- Manifest:
client/public/manifest.json - Service worker:
client/public/sw.js - Offline caching for monastery API, audio, and media assets.
- All libraries and services used are free-tier compatible.
- Cloudinary URLs in seed are placeholders and can be replaced with your own uploads.