Français | English
Real-time Quebec gas price tracker. Fetches station data from the Régie de l'énergie du Québec and serves it through a fast, interactive map interface.
- Interactive map of ~2,400 gas stations with clustered, color-coded price markers
- Filter by fuel type, brand, region, city, and borough
- Station details with all prices, Google Maps directions, and favorites
- List view with drill-down navigation (region → city → borough → station)
- Price comparison by brand
- Dark mode and French/English toggle
Backend: Java 25, Spring Boot 4, PostgreSQL, Flyway, Hibernate, Caffeine cache
Frontend: React 19, TypeScript, Vite, Tailwind CSS v4, shadcn/ui, MapLibre GL JS
- Java 25
- Docker (for PostgreSQL)
- Bun (for frontend)
docker run -d --name quebec-gas-pg \
-e POSTGRES_PASSWORD=postgres \
-e POSTGRES_DB=quebec_gas_prices \
-p 5432:5432 postgres:17cd server
./gradlew bootRunThe API starts on http://localhost:8080. On first run, Flyway creates the schema and the app fetches all station data.
cd client
bun install
bun run devOpen http://localhost:5173. The Vite dev server proxies API requests to the backend.
Backend: 111 JUnit tests (services, controllers, models)
cd server && ./gradlew testFrontend: 42 Vitest tests (favorites, translations, routing, API client)
cd client && bun run testStation and price data is provided by the Régie de l'énergie du Québec via their public endpoint at https://regieessencequebec.ca/stations.geojson.gz. The backend fetches this every 15 minutes and only records a new price snapshot when a station's price actually changes.