SurPlace is a mobile app where users review restaurants and plates using live photo/video capture, with location verification support. Managers can manage restaurants, plates, images, and customer feedback.
- Mobile: React Native / Expo
- Backend: Node.js / Express
- Database: MongoDB
- Media: Cloudinary
- Auth: JWT
apps/api= backendapps/mobile= mobile appdocs= documentation
- Node.js
- npm
- MongoDB Community Server
- Expo Go
- Git
From the project root:
npm installIf PowerShell blocks npm, use:
npm.cmd installBackend file:
apps/api/.env
PORT=5000
MONGODB_URI=mongodb://127.0.0.1:27017/verified-food-review
JWT_SECRET=local-demo-secret
JWT_EXPIRES_IN=7d
REVIEW_VERIFICATION_RADIUS_METERS=200
ENFORCE_LOCATION_VERIFICATION=falseMobile file:
apps/mobile/.env
EXPO_PUBLIC_API_URL=http://YOUR_COMPUTER_IP:5000/api
EXPO_PUBLIC_CLOUDINARY_CLOUD_NAME=dqol2c4rp
EXPO_PUBLIC_CLOUDINARY_UPLOAD_PRESET=verified_food_upload
EXPO_PUBLIC_ENFORCE_LOCATION_VERIFICATION=falseTo find your computer IP on Windows:
ipconfigUse your IPv4 address.
Important:
- Your phone and computer must be on the same Wi-Fi network.
- Do not use
localhostor127.0.0.1inapps/mobile/.env.
Windows:
Get-Service MongoDB
Start-Service MongoDBFrom the project root:
npm.cmd --workspace apps/api run seedFrom the project root:
npm.cmd --workspace apps/api run devSwagger API docs are available at:
http://localhost:5000/api-docs
Expected output:
MongoDB connected
API listening on port 5000
Open a second terminal from the project root:
npm.cmd --workspace apps/mobile run start:clearThen scan the QR code with Expo Go.
Manager:
- Email:
manager@verifiedfood.demo - Password:
Password123!
User:
- Email:
alice@verifiedfood.demo - Password:
Password123!
- User reviews require one live photo or video.
- Gallery is blocked for user reviews.
- Managers can use camera or gallery for restaurant and plate images.
- Location verification exists but is disabled for demo.
To enable strict location checking later:
In apps/api/.env:
ENFORCE_LOCATION_VERIFICATION=trueIn apps/mobile/.env:
EXPO_PUBLIC_ENFORCE_LOCATION_VERIFICATION=trueMongoDB connection refused:
- Start the MongoDB service.
Mobile cannot connect:
- Check your IP address.
- Make sure phone and computer are on the same Wi-Fi.
- Make sure the backend is running.
- Check if firewall is blocking port
5000.
Cloudinary upload fails:
- Check
EXPO_PUBLIC_CLOUDINARY_CLOUD_NAME - Check
EXPO_PUBLIC_CLOUDINARY_UPLOAD_PRESET
Expo cache issue:
npm.cmd --workspace apps/mobile run start:clear