Buddy Walk is a web-based safety navigation app that helps pedestrians compare walking routes using more than just distance and travel time.
Instead of only asking “What is the fastest route?”, Buddy Walk also asks:
“Which route gives me the strongest safety support along the way?”
The project combines walking routes with nearby safe places, mapped streetlights, recent crime reports, and a demo connectivity layer to generate a transparent Safety Score out of 100 for each route.
Buddy Walk is designed as a no-login experience. The main features can be used without creating an account or profile.
After the user enters a destination, Buddy Walk requests multiple walking-route options and displays them on the map.
Each route card shows information such as:
Routes are ranked primarily by Safety Score, with travel time used as a secondary comparison.
Data sources
Every route begins with a base score of 50 points.
Buddy Walk then adjusts that score using four factors:
Safety Score =
50
+ Safe Place Points
+ Lighting Points
+ Crime Points
+ Connectivity Points
The final result is rounded and limited to:
0 <= Safety Score <= 100
Community-report scoring is not used in the current version.
| Final Score | Category |
|---|---|
| 85–100 | Excellent |
| 70–84 | Safer |
| 55–69 | Moderate |
| 40–54 | Caution |
| 0–39 | Higher Caution |
The score is a hackathon recommendation heuristic, not a guarantee that a route is safe.
Buddy Walk loads nearby public places when the website launches instead of waiting for the user to choose a destination.
The map can include places such as:
The green Safe Place button expands the search to include more public options, then selects a nearby usable place and can route the user to it.
Safe-place data comes from OpenStreetMap through the Overpass API.
Buddy Walk currently tries more than one public Overpass server so that a failure from one endpoint does not immediately break the Safe Place feature.
| Place Type | Base Points |
|---|---|
| Police station | +5 |
| Fire station | +5 |
| Hospital | +5 |
| Emergency ward | +5 |
| Campus police | +5 |
| Urgent care | +4 |
| Clinic | +4 |
| Library | +3 |
| Government building | +3 |
| Community center | +3 |
| Hotel | +3 |
| Pharmacy | +2 |
| Supermarket | +2 |
| Convenience store | +1 |
| Restaurant | +1 |
| Cafe | +1 |
| Transit station | +1 |
These point values are Buddy Walk’s own trust weighting for the hackathon. They are not an official OpenStreetMap or government safety rating.
Only safe places within approximately 200 meters of the route contribute to the Safety Score.
For each nearby place:
If access is private/restricted:
0 points
If the place is confirmed open:
full base points
If opening hours are unknown:
max(1, round(base points × 0.60))
If the place is confirmed closed:
0 points
Then:
Raw Safe Place Points =
sum of all eligible nearby place points
Safe Place Score =
min(15, Raw Safe Place Points)
So safe places can contribute a maximum of:
+15 points
The route-detail panel can show safe places within 300 meters for context, even though scoring uses the tighter 200-meter distance.
Buddy Walk checks how much of a route passes near mapped streetlights.
Streetlight locations come from the City of Atlanta street-light ArcGIS layer:
City of Atlanta Street Lights — ArcGIS FeatureServer
Buddy Walk samples the route in small sections of roughly 25 meters.
For every sample, it checks whether there is a mapped streetlight within 50 meters.
Lighting Coverage =
route length near mapped lights
--------------------------------
total sampled route length
The coverage is then converted into points:
| Portion of Route Near a Mapped Streetlight | Lighting Rating | Points |
|---|---|---|
| 80% or more | Very well lit | +15 |
| 50%–79% | Good lighting | +10 |
| 20%–49% | Some lighting | +5 |
| Less than 20% / insufficient data | Unknown | 0 |
For example:
Route length sampled = 1,000 m
Length within 50 m of a mapped streetlight = 720 m
Coverage = 720 / 1000 = 72%
Lighting Points = +10
A mapped streetlight does not guarantee that the light is currently working or that the street is bright enough in practice.
Buddy Walk therefore treats this as a streetlight-inventory proximity estimate, not a measurement of actual illumination.
Buddy Walk checks recent public crime records close to each route.
Crime records come from the public Atlanta crime ArcGIS dataset:
Atlanta Crime Open Data — ArcGIS FeatureServer
The dataset includes fields such as report date, NIBRS/UCR code, offense description, and incident identifier.
Crime is converted to a simple 1–5 risk level.
| Crime Type | Risk Level | Penalty per Incident | Counted If Reported Within |
|---|---|---|---|
| Drug offense / possession | 1 | -1 | 7 days |
| Vandalism / property damage | 1 | -1 | 7 days |
| Shoplifting / retail theft | 2 | -2 | 7 days |
| Theft / larceny | 2 | -2 | 7 days |
| Vehicle theft | 3 | -3 | 14 days |
| Burglary | 3 | -3 | 14 days |
| Simple assault | 3 | -3 | 14 days |
| Robbery | 4 | -4 | 30 days |
| Aggravated assault | 4 | -4 | 30 days |
| Weapons offense | 4 | -4 | 30 days |
| Shooting | 5 | -5 | 30 days |
| Sexual offense | 5 | -5 | 30 days |
| Kidnapping | 5 | -5 | 30 days |
| Homicide | 5 | -5 | 30 days |
The 1–5 risk scale is a Buddy Walk hackathon heuristic. It is not an official severity score published by the Atlanta Police Department or the NIBRS program.
Lower-level incidents expire from the route score sooner:
Risk 1–2 -> previous 7 days
Risk 3 -> previous 14 days
Risk 4–5 -> previous 30 days
This keeps a recent serious incident relevant for longer while preventing older low-level incidents from continuing to heavily affect the route.
Only incidents within approximately 150 meters of the route are considered.
For every eligible incident:
Penalty = -Risk Level
Example:
1 theft -> -2
1 simple assault -> -3
1 robbery -> -4
Raw Crime Penalty = -9
If the same incident contains multiple eligible offense records, Buddy Walk counts only the highest-risk offense for that incident.
The final crime deduction is capped:
Crime Points =
max(-25, Raw Crime Penalty)
Therefore:
Maximum crime deduction = -25
This prevents a dense cluster of incidents from completely overwhelming every other route factor.
Records are ignored when they are:
If crime data cannot be evaluated, Buddy Walk does not invent a penalty.
Buddy Walk includes a connectivity layer to demonstrate how access to stronger cellular/internet coverage could become part of safety-aware navigation.
A better-connected route may help a pedestrian:
The current connectivity layer is synthetic hackathon demo data.
It is not official Cox coverage data and should not be presented as real network availability.
The generated map gives stronger values around:
and adds deterministic local variation so that neighboring regions do not all receive the same value.
The internal connectivity cells use integer values from:
-10 to +10
| Score | Label |
|---|---|
| +9 to +10 | Excellent |
| +7 to +8 | Very Strong |
| +5 to +6 | Strong |
| +3 to +4 | Good |
| +1 to +2 | Fair |
| -1 to 0 | Average |
| -3 to -2 | Fair-Poor |
| -5 to -4 | Weak |
| -7 to -6 | Very Weak |
| -9 to -8 | Poor |
| -10 | Very Poor |
Buddy Walk samples up to roughly 35 locations along the route.
For example:
Sample scores:
6, 7, 5, 8, 4
Average =
(6 + 7 + 5 + 8 + 4) / 5
= 6
The average is rounded and limited to:
-10 <= Connectivity Points <= +10
In this example:
Connectivity Points = +6
The connectivity result is added directly to the Safety Score.
Assume Buddy Walk evaluates a route with the following evidence:
Starting Score 50
Safe Places:
Hospital +5
Library +3
Cafe +1
-----------------------------------------
Safe Place Points +9
Lighting:
65% of route near mapped streetlights +10
Crime:
1 theft -2
1 robbery -4
-----------------------------------------
Crime Points -6
Connectivity:
Average route connectivity +5
Final calculation:
50 + 9 + 10 - 6 + 5 = 68
Therefore:
Safety Score = 68 / 100
Category = Moderate
The green Safe Place button is designed for situations where the user wants to quickly move toward a more populated or trusted public location.
When pressed, Buddy Walk:
The button does not wait for the user to manually search for a destination.
Safe places are also loaded automatically when Buddy Walk launches.
The Virtual Call feature creates a simulated incoming-call experience.
It is intended to give the user a quick social-interaction option if they feel uncomfortable walking alone.
The current module includes several caller personas and prerecorded/generated audio clips.
The feature is presented as Virtual Call in the project description even though some internal development files still use the earlier fake-call name.
The red SOS button gives the user quick access to the phone’s emergency calling flow.
Buddy Walk first asks for confirmation before opening:
tel:911
A browser cannot silently place an emergency call by itself. The phone, operating system, or browser controls the final calling step.
After the user actively chooses a route, Buddy Walk can monitor movement using browser geolocation.
No meaningful movement for 5 minutes
↓
"Are you safe?" safety check
↓
30-second response window
↓
No response
↓
Loud alarm + vibration when supported
↓
Open device 911 calling flow
Meaningful movement normally requires approximately 20 meters of displacement to reduce false resets caused by GPS drift.
When the user gets within approximately 35 meters of the destination, movement monitoring stops automatically.
If live location monitoring becomes unavailable, the normal inactivity timer is paused rather than pretending Buddy Walk still knows whether the user is moving.
Waiting five minutes during a presentation is impractical, so Buddy Walk includes a demonstration mode.
Press "Demo 10s"
↓
Wait 10 seconds
↓
"Are you safe?" popup
↓
15-second countdown
↓
Press "I'm Safe"
OR
No response
↓
Loud alarm + emergency calling flow
The demo timer is intentionally independent of GPS updates so it works reliably during a hackathon presentation.
Selecting a route opens a detailed route panel containing:
The score breakdown shows exactly how each factor affected the final result so the recommendation is not a black box.
| Feature / Criterion | Source | Real or Demo? |
|---|---|---|
| Base map | OpenStreetMap | Real |
| Destination search | OpenStreetMap Nominatim | Real |
| Walking routes | openrouteservice / OpenStreetMap public routing | Real external routing |
| Safe places | OpenStreetMap through Overpass API | Real mapped POI data |
| Streetlights | City of Atlanta ArcGIS street-light inventory | Real public inventory data |
| Crime reports | Atlanta public ArcGIS crime dataset | Real public incident data |
| Connectivity | Buddy Walk synthetic model | Demo only |
| Safety Score weights | Buddy Walk scoring model | Custom heuristic |
Buddy Walk is designed around a no-login approach.
The project does not require:
Browser location is used when the user grants permission because features such as navigation, nearby Safe Places, and movement monitoring depend on the device’s current position.
Buddy Walk is a hackathon prototype and should not be treated as an emergency-service replacement.
Important limitations include:
The Safety Score should therefore be interpreted as additional route context, not a guarantee of personal safety.
If you want to make the README more visual later, a simple structure is:
assets/readme/
├── overview.png
├── route-comparison.gif
├── safe-place.gif
├── virtual-call.gif
├── safety-demo.gif
└── demo-video.mp4
Recommended placements:
overview.png — directly below the project introductionroute-comparison.gif — under Multiple Walking Routessafe-place.gif — under Safe Place Buttonvirtual-call.gif — under Virtual Callsafety-demo.gif — under 10-Second Hackathon Demodemo-video.mp4 — near the top or bottom as the full project demo