A collaborative event scheduling application that helps groups coordinate meetings by finding optimal times and locations.
- Create events with multiple date/time options and location suggestions
- Vote on availability and preferred locations
- Share events via unique links
- Firebase authentication
- Google Maps integration for location selection
- React 19 + TypeScript + Vite
- MobX (state management)
- Material-UI + Styled Components
- Firebase Authentication
- Google Maps API
- Node.js + Express 5
- MongoDB + Mongoose
- TypeScript
Frontend: MVP (Model-View-Presenter) pattern
- Models: MobX stores for reactive state
- Views: Pure presentation components
- Presenters: Business logic and data fetching
Backend: Service layer pattern with Express controllers
- Node.js >= 20.0.0
- MongoDB
- Firebase project
- Google Maps API key
Note: If docker is installed, run this after cloning:
docker compose up- Clone and install dependencies:
git clone https://github.com/joel90688/WhenWhere.git
cd WhenWhere
npm i
npm run install:all- Configure environment variables:
Backend (backend/.env):
MONGO_URI=your_mongodb_connection_string
PORT=5000
FIREBASE_PROJECT_ID=...
FIREBASE_CLIENT_EMAIL=...
FIREBASE_PRIVATE_KEY=...Frontend: (frontend/.env)
VITE_FIREBASE_API_KEY=...
VITE_FIREBASE_AUTH_DOMAIN=...
VITE_FIREBASE_PROJECT_ID=...
VITE_FIREBASE_STORAGE_BUCKET=...
VITE_FIREBASE_MESSAGING_SENDER_ID=...
VITE_FIREBASE_APP_ID=...
VITE_REACT_GOOGLE_PLACES_API_KEY=...
VITE_BACKEND_URL=...
- Run development servers:
npm run dev- Frontend: http://localhost:5173
- Backend: http://localhost:5000
npm run buildnpm run dev- Start frontend and backend dev serversnpm run build- Build both frontend and backendnpm run lint- Run ESLintnpm run format- Format code with Prettier
ISC