Social Event Mapper is the CMPE 354 Group 11 final milestone project for discovering, creating, joining, moderating, and checking in to social events on a map.
The project ships three surfaces backed by one API:
- Web app: event discovery, event creation/management, profile flows, and admin backoffice.
- Mobile app: map-first discovery, event participation, invitations, tickets, QR check-in, and profile flows.
- Backend API: auth, event lifecycle, participation, private invitations, protected join requests, QR tickets, notifications, reports, badges, and admin moderation.
| Item | Link |
|---|---|
| Live web app | https://socialeventmapper.com/ |
| Live Swagger / OpenAPI docs | https://socialeventmapper.com/api/docs/ |
| Final release | 1.0.0 / final-milestone |
| Android APK | social-event-mapper-final-milestone.apk |
| Final milestone wiki | Final Milestone Deliverables |
| Layer | Technology |
|---|---|
| Backend | Go 1.26, Fiber, PostgreSQL 16 + PostGIS, golang-migrate, OpenAPI 3.1 |
| Web | React 19, TypeScript, Vite, React Router, Google Maps |
| Mobile | React Native, Expo SDK 55, Expo Router, React Native Maps |
| Runtime | Docker Compose, NGINX reverse proxy, Swagger UI |
| CI/CD | GitHub Actions, Docker Hub images, release APK workflow |
| Path | Role |
|---|---|
backend/ |
Go API, domain/application layers, adapters, migrations, backend tests |
frontend/ |
React web app and admin backoffice |
mobile/ |
Expo React Native app |
deploy/ |
Local/dev Docker Compose files and environment template |
nginx/ |
Local and deployed NGINX reverse proxy configs |
docs/openapi/ |
OpenAPI specs served by Swagger UI |
docs/backend/ |
Backend architecture and business-flow documentation |
docs/db/ |
Database schema and persistence documentation |
Use this path if you want to run the whole web stack locally. It builds the backend and frontend from source, starts PostgreSQL/PostGIS, and serves everything through local NGINX.
- Docker Desktop or Docker Engine with Compose
- Git
- A Google Maps Web API key if you want the web map to render normally
cp deploy/.env.example deploy/.envFor the minimum local boot, fill:
DB_PASSWORD=<local-postgres-password>
JWT_SECRET=<local-jwt-secret>
VITE_GOOGLE_MAPS_WEB_API_KEY=<google-maps-web-key>Optional feature credentials:
RESEND_CLIENT_API_KEY: only needed if email delivery is changed from mock mode to Resend.SPACES_*: needed for real direct image uploads.FIREBASE_SERVICE_ACCOUNT_JSON_BASE64andNEW_RELIC_LICENSE_KEY: not needed for local compose; local push notifications use the mock provider.
Do not commit deploy/.env.
docker compose -f deploy/docker-compose.local.yml up --buildOpen:
- Web app: http://localhost
- Backend health: http://localhost/api/health
- Swagger UI: http://localhost/api/docs/
Useful local details:
- The API base URL is
http://localhost/api. - PostgreSQL is exposed to the host at
127.0.0.1:5433. - Database name is
sem, user ispostgres, password isDB_PASSWORD. - Local backend config uses mock email and mock push providers.
- Migrations seed the canonical event categories and badges. A fresh database does not need a separate category seed script.
Stop the stack with:
docker compose -f deploy/docker-compose.local.yml downRemove local database state with:
docker compose -f deploy/docker-compose.local.yml down -vDefault review credentials are distributed separately in the submitted credentials PDF. They are intentionally not stored in this repository.
For a fresh local database, users can also be created through the registration flow. To test admin-only screens locally, create a user first, then promote it in the local database:
docker compose -f deploy/docker-compose.local.yml exec postgres \
psql -U postgres -d sem \
-c "UPDATE app_user SET role = 'ADMIN' WHERE email = '<admin-email@example.com>';"Then log in again so the access token includes the updated ADMIN role.
The mobile app is developed from the mobile/ directory.
cd mobile
npm install
cp .env.example .env
npx expo startAPI base URL behavior:
| Runtime | API base |
|---|---|
| iOS Simulator | http://localhost/api |
| Android Emulator | http://10.0.2.2/api |
| Physical phone with Expo Go | Set EXPO_PUBLIC_API_BASE_URL=http://<your-computer-LAN-IP>/api in mobile/.env |
For Android map rendering, set:
EXPO_PUBLIC_GOOGLE_MAPS_ANDROID_API_KEY=<google-maps-android-key>Restart Metro after editing mobile/.env.
The recommended local path is Docker Compose. If you need to run only the web app during development:
cd frontend
npm install
cp .env.example .env.local
npm run devSet VITE_GOOGLE_MAPS_WEB_API_KEY in frontend/.env.local. The dev server expects a reachable backend API; the easiest option is to keep the Docker backend/nginx stack running.
The recommended local path is Docker Compose. If you need to run only the backend:
- Start or provide a PostgreSQL/PostGIS database.
- Copy
deploy/.env.exampleto.envat the repository root and fill local values. - Run the server:
cd backend
go run ./cmd/serverBy default, the backend listens on http://localhost:8080. For full-stack review, prefer NGINX through Docker Compose so the public local API path remains http://localhost/api.
Swagger UI is served from the OpenAPI specs in docs/openapi/.
- Local Swagger UI: http://localhost/api/docs/
- Live Swagger UI: https://socialeventmapper.com/api/docs/
- Raw specs in the deployed environment:
https://socialeventmapper.com/api/docs/openapi/<spec>.yaml
The final release API includes domain specs for auth, events, tickets, profiles, notifications, badges, categories, favorite locations, and admin moderation.
Backend:
cd backend
./shipcheck.shSet SKIP_INTEGRATION=1 only when Docker is unavailable:
SKIP_INTEGRATION=1 ./shipcheck.shFrontend:
cd frontend
npm install
npm run build
npm testMobile:
cd mobile
npm install
npm testMobile E2E scenarios use Maestro:
cd mobile
npm run test:e2eThe shared server is updated by GitHub Actions workflow deploy-dev.yml. The workflow builds Docker images, pushes them to Docker Hub, deploys the selected image tag to the droplet, and runs smoke checks.
Local development should use deploy/docker-compose.local.yml. The remote server uses deploy/docker-compose.dev.yml, which expects pre-built images, TLS certificates, Firebase push credentials, New Relic credentials, and deployment secrets. See docs/deploy.md for details.
The final milestone release is 1.0.0 with tag final-milestone.
The Android release APK is built by mobile-apk.yml. Release runs attach the APK to the GitHub Release page:
For local APK build details, see mobile/README.md.