Challenge your geography knowledge with stunning Street View locations from around the world
Features • Installation • Usage • Documentation • Contributors
MapDevineur is a modern GeoGuesser-inspired web application that challenges players to identify locations based on Google Street View imagery. Built with cutting-edge technologies, it offers an immersive gaming experience with real-time scoring, global leaderboards, and comprehensive user profiles.
- 🗺️ 5-Round Game Sessions - Test your skills across multiple challenging locations
- ⏱️ 1-Minute Timer - Race against time for bonus points
- 🏆 Global Leaderboard - Compete with players worldwide
- 👤 User Profiles - Track your progress and customize your avatar
- 🎨 Modern UI/UX - Built with Tailwind CSS for a polished experience
- 🔒 Secure Authentication - Laravel Sanctum-powered session management
- Interactive Google Street View integration
- Distance-based scoring algorithm
- Time bonus calculations
- 25+ pre-selected worldwide locations
- Real-time round results
- Secure registration and login
- Profile customization with avatars
- Password reset functionality
- Session persistence
- Global rankings
- Personal best scores
- User profile links
- Real-time updates
- Comprehensive FAQ
- Interactive tutorials
- Game mechanics guide
- Framework: React 19.1.1 + Vite 7.1.7
- Styling: Tailwind CSS 4.1.17
- Routing: React Router DOM 7.9.5
- HTTP Client: Axios 1.13.2
- Maps: Google Maps JavaScript API
- Framework: Laravel 12.0
- Authentication: Laravel Sanctum 4.0
- Database: MySQL/PostgreSQL
- API: RESTful Architecture
Before you begin, ensure you have the following installed:
- Node.js (v18 or higher)
- npm (comes with Node.js)
- PHP (v8.1 or higher)
- Composer (PHP package manager)
- MySQL or PostgreSQL
- Google Maps API Key (Get one here)
git clone https://github.com/dragonsterm/MapDevineur.git
cd MapDevineurcd backendcomposer installCreate a .env file in the backend directory:
cp .env.example .envUpdate the .env file with your configuration:
APP_NAME=MapDevineur
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost:8000
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=mapdevineur
DB_USERNAME=root
DB_PASSWORD=
SESSION_DRIVER=cookie
SESSION_LIFETIME=120
SESSION_DOMAIN=
SESSION_SECURE_COOKIE=false
SESSION_SAME_SITE=lax
FRONTEND_URL=http://localhost:5173
SANCTUM_STATEFUL_DOMAINS=localhost:5173,127.0.0.1:5173
GOOGLE_MAPS_API_KEY=your_google_maps_api_key_herephp artisan key:generatephp artisan migratephp artisan db:seed --class=LocationSeederphp artisan serveThe backend will run at http://localhost:8000
Open a new terminal and navigate to the frontend directory:
cd frontendnpm installCreate a .env file in the frontend directory:
cp .env.example .envUpdate the .env file:
VITE_GOOGLE_MAPS_API_KEY=your_google_maps_api_key_here
VITE_API_BASE_URL=http://localhost:8000npm run devThe frontend will run at http://localhost:5173
- Open your browser and navigate to
http://localhost:5173 - Register a new account or Login if you already have one
- Create your profile with a display name, country, and avatar
- Click "Play Now" to start a new game
- Explore the Street View location and make your guess on the map
- Submit your guess before time runs out
- Complete all 5 rounds to see your final score
- Check the leaderboard to see how you rank globally!
MapDevineur/
├── frontend/ # React + Vite Frontend
│ ├── src/
│ │ ├── components/ # Reusable UI components
│ │ ├── pages/ # Page components
│ │ ├── services/ # API & utility services
│ │ ├── context/ # React Context providers
│ │ ├── hooks/ # Custom React hooks
│ │ └── styles/ # CSS and styling files
│ ├── public/ # Static assets
│ └── package.json
│
└── backend/ # Laravel Backend
├── app/
│ ├── Http/
│ │ ├── Controllers/ # API controllers
│ │ └── Middleware/ # Custom middleware
│ └── Models/ # Eloquent models
├── database/
│ ├── migrations/ # Database migrations
│ └── seeders/ # Database seeders
├── routes/
│ ├── api.php # API routes
│ └── web.php # Web routes
└── composer.json
POST /api/register- Register new userPOST /api/login- User loginPOST /api/logout- User logoutGET /api/user- Get authenticated user
GET /api/locations/random- Get random locationsPOST /api/games- Create new game sessionPOST /api/games/{id}/rounds- Submit round guessPOST /api/games/{id}/complete- Complete game
GET /api/leaderboard- Get top scoresGET /api/leaderboard/user/{id}- Get user scores
GET /api/game-profile- Get current user profilePOST /api/game-profile- Create profilePUT /api/game-profile- Update profileDELETE /api/game-profile- Delete account
id- Primary keyusername- Unique usernamepassword- Hashed passwordtimestamps
id- Primary keyname- Location namelatitude- Decimal(10,8)longitude- Decimal(11,8)country- Country namedifficulty- Enum(easy/medium/hard)timestamps
id- Primary keyuser_id- Foreign key → users.idtotal_score- Integercompleted_at- Timestamptimestamps
id- Primary keygame_id- Foreign key → games.idlocation_id- Foreign key → locations.idround_number- Integer(1-5)guess_latitude- Decimalguess_longitude- Decimaldistance- Decimal (km)time_taken- Integer (seconds)round_score- Integertimestamps
id- Primary keyuser_id- Foreign key → users.idgame_id- Foreign key → games.idscore- Integertimestamps
id- Primary keyuser_id- Foreign key → users.iddisplay_name- Stringcountry- Stringgender- Enum(male/female/not specify)bio- Text (nullable)date_of_birth- Date (nullable)avatar- Stringtimestamps
cd backend
php artisan testcd frontend
npm run testIf port 8000 or 5173 is already in use:
# Backend - use different port
php artisan serve --port=8001
# Frontend - update vite.config.js port- Verify MySQL is running
- Check database credentials in
.env - Ensure database
mapdevineurexists
- Verify your API key is valid
- Enable required APIs in Google Cloud Console:
- Maps JavaScript API
- Street View Static API
- Places API
- Ensure
SANCTUM_STATEFUL_DOMAINSincludeslocalhost:5173 - Check
config/cors.phpsettings
For detailed documentation, visit:
Course: Praktikum Pemrograman Web IF-G Institution: Universitas Pembangunan Nasional "Veteran" Yogyakarta Academic Year: Ganjil 2025/2026
|
Jauza Ilham Mahardika Putra Full-Stack Developer |
Dimas Hafid Fathoni Full-Stack Developer |
This project is licensed under the Custom Non-Commercial License - see the LICENSE file for details.
- Google Maps Platform - For providing Street View and Maps APIs
- Laravel Community - For the excellent PHP framework
- React Team - For the powerful UI library
- Tailwind CSS - For the utility-first CSS framework
- UPN "Veteran" Yogyakarta - For the opportunity to build this project
- GitHub Repository: https://github.com/dragonsterm/MapDevineur
- Live Demo: Coming Soon
- Documentation: IMPORTANTREAD.md
If you encounter any issues or have questions:
- Check the Troubleshooting section
- Review the Documentation
- Open an issue on GitHub
- Contact the development team