About the Project
Run: python backend\app.py in Visual Studio (pip install flask)
Inspiration
I wanted a simple, portable way to explore beaches worldwide while quickly assessing basic safety factors. The goal was to combine a familiar map UI with a minimal risk metric so users can click a country and immediately see nearby beaches and an at-a-glance safety indication. The project grew from wanting a lightweight tool for trip planning and situational awareness rather than a heavy data-science product.
What I Learned
- How to design a small web app that pushes most logic to a single, easy-to-run backend and a lightweight map client.
- Practical trade-offs when generating and cleaning synthetic geographic data (balancing coverage vs. realism).
- UX issues specific to mapping: bounding behavior, fitBounds snapping, and how map controls affect perceived stability.
- Simple risk heuristics are useful for orientation but require careful communication about limitations.
How I Built It
- I prototyped a map-first interface that lets users select a country by clicking it on the map, then fetches and displays beaches within the visible bounds.
- Implemented a deterministic generator to ensure broad country coverage while clustering synthetic points near real samples so distributions look plausible.
- Added a compact risk calculation derived from wind and wave inputs to show a safety score and short human-readable explanation for each beach.
- Focused UX polish: clear selection controls, hover-enabled popups, and a last-updated indicator for automatic refreshes.
Challenges Faced & How I Solved Them
- Map snapping when applying strict bounds during fit operations: solved by temporarily clearing bounds, performing the fit, then re-applying a relaxed vertical lock after a short delay.
- Generated points outside plausible ranges and duplicated coordinates: added validation and a deduplication pass, and tightened generation jitter to keep synthetic points near real samples.
- Country-name mismatches between geographic layers and dataset entries: used tolerant substring matching and confined supplemental beaches to the same country and visible bbox to avoid cross-border leakage.
- Balancing dataset size and startup performance: used deterministic generation so data can be reproduced, and prepared a path to persist a static dataset if startup becomes slow.
Closing Notes
This project is intentionally simple and extendable: the mapping and safety heuristics are easy to replace with richer data sources or stricter geographic checks later. It’s designed to be practical for quick local hosting and iterative improvements. If you want, I can help tighten the synthetic-data generator, add strict polygon containment checks, or prepare a small README and run instructions.
Log in or sign up for Devpost to join the conversation.