Inspiration

Deer-vehicle collisions kill over a million deer a year in the U.S. and cause roughly 200 human deaths and $10 billion in damage — yet the only mitigation most drivers ever see is a static yellow sign that's been bolted to the same post for decades. Research backs up what that feels like intuitively: studies have found passive, general warning signs have no measurable effect on collision rates, because they warn everywhere, all the time, regardless of whether tonight is actually dangerous. We also looked at a real case study of Florida Key deer, where fencing off one stretch of highway didn't reduce collisions — it just pushed them to the next unprotected mile. That was the moment the idea clicked: static infrastructure can't follow a moving problem. So we built something that can.

What it does

Roadkill predicts where and when deer are likely to cross a given road, and alerts drivers in real time — instead of a permanent sign, it's a warning that only fires when risk is actually elevated. It combines factors like time of day, season, and known crossing corridors to flag high-risk stretches of a route before a driver reaches them, so the warning is relevant instead of background noise they've learned to ignore.

How we built it

We pulled real animal-collision crash records from five state DOTs (Iowa, Illinois, Virginia, Massachusetts, Tennessee — ~85k crashes), then built a Python pipeline (pandas + scikit-learn) that clusters those crashes into hotspots and trains a gradient-boosting risk model. That model gets exported through coremltools into a CoreML file that runs entirely on-device, so risk scoring works without a network round-trip. The app itself is Swift + MapKit — turn-by-turn navigation with live risk scoring that's aware of your speed and heading, background region monitoring with local notifications, plus haptics and audio-ducked voice alerts. Firebase/Firestore serves the live hotspot data, XcodeGen generates the project, and XCTest covers the logic.

Challenges we ran into

Finding real, granular deer-strike data was harder than expected — a lot of it is either state-level aggregate stats or locked in academic papers rather than an open, queryable dataset, so we had to piece together patterns from multiple sources (state DOT crash data, insurance industry reports, and published wildlife research) instead of one clean feed. We also had to be careful about the core claim of the project: it would've been easy to assume static signs fail because they're not visible enough, but that's not actually true — they're reflective and visible at night. The real failure mode is relevance, not visibility, and getting that distinction right changed how we framed the whole product.

Accomplishments that we're proud of

We grounded the idea in a real, peer-reviewed finding instead of just intuition — the Big Pine Key fencing case study is direct evidence that fixed mitigation measures don't adapt when the underlying risk moves, which is exactly the gap we're solving. We also managed to build a working prototype that turns scattered, static risk data into a dynamic, personalized warning, in the same weekend.

What we learned

We learned that "the fix is obvious, it's just not implemented well" is a pattern that shows up across a lot of infrastructure problems — the tools to reduce deer collisions have existed for decades, but they're static because building something dynamic requires prediction, and prediction requires pulling together data that nobody had previously bothered to connect. We also learned to be skeptical of our own framing early — assuming signs failed due to visibility would have led us to build the wrong solution entirely.

What's next for Roadkill

Incorporate real-time inputs like weather and local sightings/reports to sharpen predictions beyond seasonal and time-of-day patterns. Partner with a state DOT or insurance company to access richer collision data and validate the model against real outcomes. Expand beyond deer to other high-frequency wildlife-vehicle collision species where the same static-sign problem exists. Explore integration directly into existing navigation apps so drivers don't need a separate app to get the alert

Built With

  • and-xctest-covers-the-logic.-one-detail-worth-calling-out:-the-first-model-looked-great-until-we-found-label-leakage-in-the-evaluation-?-after-fixing-it
  • background-region-monitoring-with-local-notifications
  • coreml
  • data
  • firebase
  • illinois
  • in-short:-we-pulled-real-animal-collision-crash-records-from-five-state-dots-(iowa
  • massachusetts
  • ml
  • plus-haptics-and-audio-ducked-voice-alerts.-firebase/firestore-serves-the-live-hotspot-data
  • predict
  • react
  • simulation
  • so-risk-scoring-works-without-a-network-round-trip.-the-app-itself-is-swift-+-mapkit-?-turn-by-turn-navigation-with-live-risk-scoring-that's-aware-of-your-speed-and-heading
  • swift
  • tennessee-?-~85k-crashes)
  • then-built-a-python-pipeline-(pandas-+-scikit-learn)-that-clusters-those-crashes-into-hotspots-and-trains-a-gradient-boosting-risk-model.-that-model-gets-exported-through-coremltools-into-a-coreml-file-that-runs-entirely-on-device
  • virginia
  • xcodegen-generates-the-project
Share this project:

Updates

Submission history