Inspiration
This started as a conversation about product placement in movies. We'd both noticed how much product placement exists, whether a soda can turned so the label faces the camera or a laptop lid angled at you in the background. Nobody clicks on any of it and it doesn't interrupt the movie either. Instead, it's just there soaking up attention, and companies pay a lot of money for it. Then we realized the real world is the exact same thing, except nobody's getting paid. People walk by ordinary blank surfaces all the time, giving it attention that clearly isn't being capitalized on. That's product placement in real life. The audience is already there and already looking but none of those surfaces make a cent. Attention is everywhere and almost all of it gets wasted. We wanted to build something that creates advertising opportunities out of completely ordinary spaces, the ones people walk past every single day without anyone ever putting a value on them.
What it does
You give PlainSight a New York address and it tells you what the attention walking past it is worth. Type an address: the app finds the nearest real pedestrian measurement, flips to a 3D bird's eye view of that block, and fills the streets with dots. Every dot is one real person walking at 1.4 metres per second along an actual street, and they get spawned at the rate the city measured. When someone gets close enough to the highlighted building, they light up, which is an impression happening in front of you.
Next to the map it prices the surfaces on that building (the window, the wall, the counter inside, the A-frame) and runs the whole calculation on screen one line at a time. (measured pedestrians × visibility share × day-part weights × 30 days = impressions, impressions ÷ 1,000 × CPM = monthly value)
How we built it
Next.js 15, React 19 and TypeScript, with Tailwind v4 for styling, all deployed on Vercel. The data we use all comes from the New York Department of Transportation, with 114 measured locations for us to access and use to calculate the foot traffic.
The map is built with MapLibre GL and deck.gl on top of OpenFreeMap vector tiles, which needs no API key at all, and the buildings are extruded using real OpenStreetMap footprint heights.
The pricing is calculated using simple typescript and formulas to factor for things like time of day, location, local prices, and foot traffic
Challenges we ran into
The biggest problem by far was that getting live foot traffic turned out to be nearly impossible, and we ended up going with the official NYC DOT counts instead, which are done by people physically standing on the pavement counting, published by the city. Another thing was putting a number onto a qualitative thing like attention. Our first attempt was far too simple, essentially footfall multiplied by a rate, and it fell apart with a little bit of debate. Instead, we'd accounted for everything that genuinely changes the answer, which meant what fraction of the people walking past can realistically see a given surface, which part of the day that surface earns its attention in, how far the address is from where the count was taken, and a margin of error around the one input that really is an estimate. All of that is written down and shown on screen, so nobody has to take the final number on faith.
Accomplishments that we're proud of
The map, because of how well it turned out It's a grey 3D city that flies down into a Brooklyn street corner while real measured pedestrians move along the pavement, and you can watch attention landing on a building as they pass. It took by far the longest of anything we built
What we learned
What we learned is that the most valuable thing you can build isn't always a new capability, and sometimes it's just a number that nobody ever bothered to work out. Pedestrian attention was never worthless, it was simply uncounted. As our first hackathon, we also learned how much of building something is decisions rather than code, because the most useful hours we spent weren't spent typing at all, they were spent arguing with each other about whether a number was honest.
What's next for PlainSight
More cities, since nothing about the model is specific to New York. All it needs is measured pedestrian counts and a street network, both of which plenty of cities already publish, so adding one is a dataset and a build script rather than a rewrite. After that we want live data, wherever cities do run continuous pedestrian sensors, because real-time counts would replace those sampled windows with something that moves hour by hour and make our data so much more accurate.
Built With
- claude
- mapbox
- maplibre
- motion
- next.js
- nycdotdata
- openfreemap
- react
- supabase
- tailwind
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.