Bonjour World
Language-exchange web app with hosting flows, maps, and translation support.
Project overview
Bonjour World is a language exchange platform designed to connect language learners and polyglots through interactive, location-based events. The platform enables users to host and join language exchange events, allowing them to practice new languages in a dynamic and engaging way. With personalized profiles, users can track their progress and build connections with fellow learners.
Engineering challenges
-
Enforcing join-request rules in Express before MongoDB writes—checking
requestedEvents,pendingAttendees, andattendeesso duplicate requests return structured 400s instead of corrupting host approval state. -
Plotting events on the map by geocoding host-entered addresses with
getAddressCoordinates, then creating markers only whenmarkersRefhas no entry for that event_idto avoid duplicate pins on re-render. - Combining Google Maps, Geocoding, and Places on the client for discovery while keeping JWT-protected host and approval flows on separate Express routes—so map browsing stays fast without blocking authenticated mutations.
Features
- Full event hosting system allowing users to create, manage, and edit events, with the ability to accept or decline join requests
- Streamlined join request process for easy participation and host management of attendee approvals
- Personalized user profiles that track language exchange history and connections
- Secure JWT-based authentication, ensuring safe access, profile privacy, and event safety
- Interactive map interfaces powered by Google Maps API, making event discovery seamless and intuitive
- Dynamic language translation across the entire platform powered by Google Translate, enhancing accessibility for all users
Architecture
flowchart TB
subgraph fe [1. Frontend — React + Redux]
react[React UI — events, profiles, host flows]
redux[Redux store]
mapview[Map view — markers and discovery]
react --> redux
react --> mapview
end
subgraph be [2. Backend — Node.js + Express]
jwt[JWT auth — login and protected routes]
api[REST API — events, users, join requests]
mongoose[Mongoose]
jwt --> api --> mongoose
end
subgraph external [3. Database and Google APIs]
mongo[(MongoDB — users, events, join lists)]
gmaps[Google Maps, Geocoding, Places]
gtrans[Google Translate]
end
react -->|Sign in, signup| jwt
redux -->|Host events, approve join requests| api
mapview -->|Geocode addresses, render map| gmaps
react -->|Translate site copy| gtrans
mongoose --> mongo
Technologies used
Frontend
React, Redux, CSS
Backend
Node.js, Express.js, JWT
Data
MongoDB, Mongoose
External APIs
Google Maps, Geocoding, Places, Google Translate
Infra
Render