PathWise is a walk-home companion for the University of Washington. You pick a destination near campus, and the app offers two walks: the fastest way along the pedestrian network, and a safer one that is willing to take a little longer for streets that are better supported by the city around them. A friend can opt in to follow that walk by text. If you stop, leave the path, or arrive, they hear about it. You keep the map. They keep their phone.

Inspiration

The walk home from campus is a route people already know by feel. Some blocks are bright and busy. Some are quiet, poorly lit, or awkward to cross. A conventional map treats those blocks as the same kind of line. It optimizes for distance and time, then draws the direct walk. That answer is useful when the only question is "how do I get there sooner?" It is a thin answer when the question is "how do I get there comfortably after dark?"

We wanted a route that could see the street the way a person does. Streetlights, sidewalks, marked crosswalks, and places that are actually open all change how a block feels. We also wanted the walk to stay a walk. A safer path that wanders across the neighborhood is not a favor. And we wanted someone else to be able to care about the trip without downloading anything. The person walking should be able to choose a friend, and that friend should have already agreed to watch.

How we built it

The phone app is React Native with Expo. The server is FastAPI. Under both of them is a walking graph for campus and the nearby neighborhoods: the University District, Roosevelt, Wallingford, Fremont, Eastlake, Montlake, Ravenna, and U-Village. OpenStreetMap supplies the pedestrian network. Seattle open data supplies streetlights, sidewalks, and marked crosswalks. Places come from the map, with opening hours attached when we can read them.

The fastest route minimizes walking time. We assume a walking speed of 1.35 meters per second. The safer route uses the same streets, then raises the cost of edges that look less supported. For an edge e with walking time t(e) and a safety penalty p(e), the cost is

$$ c(e) = t(e)\,(1 + \lambda\, p(e)) $$

The penalty is a weighted average of four signals. Streetlights use weight lights = 0.40, nearby places that are open use places = 0.30, sidewalks use sidewalks = 0.20, and marked crosswalks use crosswalks = 0.10. If $$s_i(e)$$ is how unsupported edge $$e$$ looks on signal $i$, then

$$ p(e) = \frac{\sum_i w_i\, s_i(e)}{\sum_i w_i} $$

A dark or empty block costs more, so the search prefers lit, active streets when they exist. $\lambda$ is chosen by search, as high as the path can stand, up to $$\lambda_{\max} = 4$$. The safer walk must also satisfy

$$ T_{\text{safer}} \le 1.30\, T_{\text{fastest}} $$

so it may take at most $30\%$ longer than the fastest walk. If no meaningfully different path fits inside that budget, both choices follow the same line and the app says so.

Missing data stays missing. A block with no light-pole record is unknown. A place with no readable hours is unknown. Those edges do not receive an invented penalty, which kept the score from punishing streets just because a dataset had a hole.

On the walk itself, the heading card shows the current street and the straight-line miles still left, to one decimal. If you drift off the path, the app recalculates from where you actually are. Leaving the path, stopping, and arriving are the three moments that matter to someone else.

That someone else opts in before the walk starts. PathWise uses Photon’s shared iMessage lines. Each friend is assigned their own number. They text that number once, and can send their name. That first text is the consent. During the walk you pick them from the people who have already written in. PathWise then replies in their thread if you stay still, if the route changes because you left the path, or if you reach the destination. They never install the app. The alerts go to the phone that opened the thread.

What we learned

A safer route is a tradeoff you can write down. "Safer" felt vague until it became a penalty, a set of weights, and a time budget. The $30\%$ cap was as important as the lights. Without it, the search would happily trade a short walk for a long tour of well-lit blocks.

We also learned that consent has to be a step in the product, not a sentence in a settings screen. A friend should not start receiving location-tied texts because someone typed their number. Making them send the first message, to a number assigned to their own phone, made the watcher list a list of people who had already raised their hand.

The last lesson was about silence in the data. The honest safety score is the one that refuses to invent a dark street where the city simply has no record.

Challenges

The graph was the first long fight. Building a walkable network for this part of Seattle, snapping a GPS point to a sidewalk node, and keeping two routes comparable took more care than drawing a polyline. Points that are really the same corner had to be rejected. Streets outside the ingested area had to fail clearly instead of inventing a path.

The live walk fought us next. A phone often stops sending new locations when the person stops moving, so a stillness timer never starts unless something keeps reporting the last position. We added a short heartbeat. The opposite problem showed up off the path: a successful reroute snaps you onto a new line so quickly that a "you have been off the route for a while" timer never fills. The route-change text now goes out when the path is recalculated, and the longer off-path text remains the backup when a new route cannot be found.

iMessage was the sharpest product constraint. A shared Photon line cannot text someone first, and each person is matched to their own number from the pool. The project page shows one shared number; the assignment list shows the number that actually receives a given friend’s texts. Early on, a friend could text the project number, or our number, and PathWise would never see them. Wiring the watcher list to every assignment, and telling people to text the number on their own row, is what made a second phone show up in the demo.

The result is a walk that knows more than the shortest line, and a friend who only hears about it because they asked to.

Share this project:

Updates

Submission history