This project is a web-based Venue Finder application that helps users search, filter, and explore event venues across the globe. It is built using HTML, CSS, and JavaScript, integrates external APIs, and is containerized using Docker. It is deployed across multiple servers behind a load balancer, simulating a production-like infrastructure.
- Frontend: HTML, CSS, JavaScript (Vanilla)
- External APIs: Location-based APIs for venue data (mocked for demo)
- Runtime: Runs on a simple static HTTP server (Dockerized)
-
Users can search for venues by:
- 📍 Location
- 🏢 Name
- 🌿 Venue type (e.g., garden, hall, etc.)
- 📅 Event Date
-
Additional filters:
- Guest capacity
- Budget range
- Amenities
- Minimum rating
-
Venue listings include:
- Photos, location, features, availability, and pricing
- Mock venue dataset displayed dynamically
- Modal-based login/registration for users and venue owners
Initially, the plan was to use Google Maps or Places API, but since an API key was unavailable, mock data was used to simulate venue listings.
The system is designed such that API integration can easily be enabled later by replacing the mock dataset (sampleVenues) with real data from a RESTful API.
To run locally, any static file server or browser can be used:
npx serve .
# or simply open index.html in a browserTo simplify deployment and ensure environment consistency, the app is containerized using Docker.
- A basic Nginx server is used to serve the static HTML/CSS/JS files.
- Files are copied into
/usr/share/nginx/html. - The container listens on port 8080.
docker build -t venuefinder-app.
docker run -p 8080:8080 venuefinder-appcurl http://localhost:8080You should see the HTML of the homepage returned, confirming it’s working.
To simulate production, the app is deployed on three containers:
- Web01 – Application instance 1
- Web02 – Application instance 2
- Lb01 – Load balancer using HAProxy
docker tag venuefinder-app loicet/venuefinder-app:v1
docker login
docker push loicet/venuefinder-app:v1SSH into both servers and run:
docker pull loicet/venuefinder-app:v1
docker run -d --name app --restart unless-stopped -p 8080:8080 loicet/venuefinder-app:v1Each instance is now reachable internally via:
http://web01:8080http://web02:8080
Open /etc/haproxy/haproxy.cfg and update the backend section:
backend webapps
balance roundrobin
server web01 172.20.0.11:8080 check
server web02 172.20.0.12:8080 checkThen reload HAProxy to apply changes:
docker exec -it lb-01 sh -c 'haproxy -sf $(pidof haproxy) -f /etc/haproxy/haproxy.cfg'Make several curl requests:
curl http://localhost:8082You should see alternating responses from Web01 and Web02, confirming traffic is being load balanced.
- Docker image build and push
- Running containers on Web01 and Web02
- Load balancer config (
haproxy.cfg) - Terminal showing alternating
curlresponses - Final browser preview of the app
- The project followed good software engineering practices: modular design, mock API data abstraction, Docker-based deployment, and high-availability setup using a load balancer.
- The application is ready to integrate real APIs in the future.
- The static design is clean, responsive, and offers a complete demo experience.