Location-Based AR Art Gallery
Experience art in augmented reality, anchored to real-world locations. Admins can place virtual art installations at specific GPS coordinates, and users can discover and view them through their phone cameras.
- 📍 Location-Based Art - Virtual art anchored to real GPS coordinates
- 📱 AR Camera View - View art through your phone camera in augmented reality
- 🎨 Admin Panel - Place and manage art installations
- 🔐 User Authentication - Secure login/signup system
- 🌍 Geospatial Queries - Find art installations near you
- 📊 Dashboard - Track art statistics and nearby installations
- HTML5, CSS3, JavaScript
- Three.js (3D rendering)
- Geolocation API
- Device Orientation API
- Node.js
- Express.js
- MongoDB (with geospatial indexing)
- JWT Authentication
- Multer (file uploads)
- Node.js (v14 or higher)
- MongoDB (local or MongoDB Atlas)
-
Clone or navigate to the project directory:
cd ArtScape -
Install backend dependencies:
cd backend npm install -
Configure environment variables:
cp .env.example .env
Edit
.envand update:MONGODB_URI- Your MongoDB connection stringJWT_SECRET- A secure random string
-
Start MongoDB:
- Local:
mongod - Or use MongoDB Atlas (cloud)
- Local:
-
Start the server:
npm start
Or for development with auto-reload:
npm run dev
-
Access the application: Open your browser to
http://localhost:3000
- Sign Up/Login - Create an account or login
- View Dashboard - See stats and nearby art
- Start AR Experience - Grant camera and location permissions
- Explore - Walk around to discover art installations
- Access Admin Panel - Available on dashboard for admin users
- Capture Location - Go to desired location and capture GPS coordinates
- Upload Art - Add title, artist, description, and upload image/3D model
- Place Art - Submit to anchor art to that location
- Manage - View and delete existing installations
Connect to MongoDB and update a user:
db.users.updateOne({ email: "user@example.com" }, { $set: { isAdmin: true } });ArtScape/
├── index.html # Landing/login page
├── dashboard.html # User dashboard
├── ar-viewer.html # AR camera view
├── admin.html # Admin panel
├── styles.css # Global styles
├── auth.js # Authentication logic
├── dashboard.js # Dashboard logic
├── admin.js # Admin panel logic
├── ar-engine.js # AR rendering engine
├── backend/
│ ├── server.js # Express server
│ ├── package.json # Dependencies
│ ├── models/
│ │ ├── User.js # User model
│ │ └── Art.js # Art installation model
│ ├── routes/
│ │ ├── auth.js # Auth endpoints
│ │ └── art.js # Art endpoints
│ └── middleware/
│ └── auth.js # JWT verification
└── uploads/ # Uploaded art files (created automatically)
POST /api/auth/signup- Register new userPOST /api/auth/login- Login user
POST /api/art/place- Place art (Admin only)GET /api/art/list- Get all art installationsGET /api/art/nearby- Get nearby artDELETE /api/art/:id- Delete art (Admin only)
- Camera access permission
- Location access permission
- Modern browser with WebGL support
- HTTPS (required for camera/location in production)
- Use HTTPS (required for camera and location APIs)
- Change
JWT_SECRETto a strong random string - Set proper CORS origins
- Use MongoDB Atlas for cloud database
- Consider using cloud storage (AWS S3, Cloudinary) for art files
- Add rate limiting for API endpoints
- Frontend + Backend: Heroku, Railway, Render
- Database: MongoDB Atlas
- Storage: Cloudinary, AWS S3
- 3D model support (GLTF/GLB loading)
- AR marker-based tracking
- Social features (likes, comments)
- Art collections/exhibitions
- Push notifications for nearby art
- AR navigation to art locations
- Multi-language support
- Offline caching
- GPS accuracy varies (typically ±5-10 meters)
- Works best outdoors with clear sky
- Indoor positioning is less accurate
- Requires good internet connection
- Battery intensive (camera + GPS)
Camera not working:
- Grant camera permissions
- Use HTTPS (required for production)
- Check if camera is available/not in use
Location not updating:
- Grant location permissions
- Enable GPS on device
- Try outdoors for better signal
Art not appearing:
- Ensure you're within 100m of art
- Check if art exists in database
- Verify geolocation is working
MIT License - Feel free to use for your projects!
For issues or questions, please open an issue on GitHub.
Built with ❤️ for artists and art lovers