Cincinnati Public Stairs Explorer

Cincinnati Public Stairs Explorer

Tech Stack

Next.js 15TypeScriptSupabaseReact LeafletTailwind CSSFramer Motion

The City of Seven Hills

In June 1853, a writer for the West American Review named Cincinnati's defining feature: the seven hills that arc above the Ohio River. The comparison to ancient Rome was explicit: both cities rose from river valleys on seven hills, their streets forced to negotiate terrain that no grid could tame. The name stuck. Cincinnati's seven hills (Mount Adams, Walnut Hills, Mount Auburn, Vine Street Hill, College Hill, Fairmount, and Price Hill) form a crescent above the Ohio basin, each neighborhood perched fifty to a hundred feet above the valley floor.

Charles Dickens, visiting in 1842, described the city as "lying in an amphitheatre of hills," forming a "picture of remarkable beauty." He had few kind words for American cities on that tour. Cincinnati earned an exception.

Where there's hills, there's stairs.

Life on the Hills

Cincinnati's a city built on hills. Unlike most flat Midwestern cities, its neighborhoods climb steep valley walls carved by the Ohio River and its tributaries. For over a century, the city maintained a network of public stairways to help residents navigate those hills on foot: concrete and stone steps tucked between houses, cutting through green hillsides, and dropping down bluffs from neighborhoods like Price Hill, Mount Adams, and Fairmount.

At their peak, Cincinnati had more than 400 of these public rights-of-way. They were how people got to streetcar stops, to work, to school.

Before the stairs, there were inclines. Between 1872 and the turn of the century, Cincinnati built five inclined-plane railways to haul passengers straight up the bluffs from the congested Basin below. The inclines closed one by one — replaced first by electric streetcars and eventually by the automobile. But their hillside corridors didn't disappear. In the 1940s, WPA crews poured concrete steps into some of the same rights-of-way the inclines had occupied, trading one hillside technology for a simpler, more enduring one.

Tourists discover them and can't believe we take them for granted.
— Mary Anna DuSablon, Walking the Steps of Cincinnati (1998)

Most Cincinnatians outside the hillside neighborhoods don't know they exist, and those who use them daily mostly take them for granted. They're just the way you get down the hill. Some are pristine. Some are buried in bramble. Most are somewhere in between.

Spring in our Steps

Spring in our Steps is a Cincinnati-based advocacy organization dedicated to the preservation, repair, and celebration of these public stairways. They've spent years surveying every public staircase in the city, cataloging each one's location, step count, condition, and neighborhood, and compiled it all into a publicly available dataset: a comprehensive record of Cincinnati's stair network.

Spring in our Steps organizes walks, advocates for repairs with the city, and publishes their data openly so others can build on it. Their work is the foundation this project is built on.

Open Civic Data

The Spring in our Steps dataset is free and publicly available. This project is one example of what becomes possible when civic organizations treat their survey data as a public good rather than an internal spreadsheet.

Cincinnati's Stairway Network

These numbers come directly from the Spring in our Steps public survey dataset.

381
public staircases cataloged
Across Cincinnati's hills and valleys, from Clifton to Delhi, Westwood to Columbia Tusculum
43
neighborhoods represented
Nearly every hillside neighborhood in the city has at least one public right-of-way staircase
6
curated walking routes
Multi-stair routes ranging from quick neighborhood loops to longer ridge-line traversals

The map below is the live application — filter by neighborhood or condition, click any staircase for its detail panel, or switch to the Routes tab to browse curated urban hikes.

The full application — explore all 381 staircases directly in the map

Technical Approach

The app is built on Next.js 15 with the App Router and Supabase as the backend — handling the Postgres database, row-level security, auth, and object storage in one place.

Data Layer

The stair and route catalog lives in Supabase Postgres and is fetched server-side at render time. A client-side cache layer (useDataCache) backed by localStorage avoids redundant round-trips during a browsing session. Each staircase record includes a full coordinatePath array of lat/lng points so the Leaflet map can draw the actual path geometry rather than just a pin.

The Map

The interactive map uses React Leaflet 5 with OpenStreetMap tiles. Each staircase is rendered as a polyline overlay using its coordinate path data, with a click handler opening a detail panel. A virtualized list sidebar (react-window + react-window-infinite-loader) keeps scrolling smooth across 380+ entries without layout thrashing.

Community Photo Contributions

Signed-in users can submit photos of individual staircases. Every upload hits a Next.js API route that:

  1. Validates file type and size
  2. Processes the image through sharp — strips EXIF metadata, resizes to 1920px max, converts to WebP at quality 82
  3. Writes to Supabase Storage under a pending/ path
  4. Queues for admin review before becoming visible

Auth & Security

Auth is handled via Supabase's SSR client. A Next.js middleware function refreshes the session token on every request, so protected routes and upload endpoints stay secure without a separate auth service. Upload endpoints validate authentication before accepting any file.

Additional Features

  • Favorites & saved routes — persisted to Supabase per user, synced across devices
  • Per-staircase comments — threaded discussion for local knowledge and trip reports
  • Curator badges — Hidden Treasure, Steepest Climb, Most Scenic, Historic Landmark, and more — filterable in the catalog
  • Deployed on Vercel with Turbopack for local development

References