Inspiration

The power grid connects everything, but the utilities planning its future don't have an easy way to see what their neighbors are building. The Sperry Tech challenge put that problem in front of us, and the internship attached to it made it feel real: this is a problem engineers in the industry actually deal with. In 2024, FERC issued Order No. 1920 because utilities have historically planned transmission in isolation, which leads to duplicated work and delays. We wanted to build a tool that takes public planning documents from different utilities and turns them into something people can see, compare, and act on.

What it does

Grid-Talk puts planned transmission projects from multiple utilities on one interactive map and flags the pairs that are worth coordinating on.

  • Finds overlaps. It compares every project from one utility against every project from the other. A pair is flagged when the two projects come within 40 km (25 mi) of each other, and it's ranked by how much the two utilities could share:
    • Touching (lines meet or cross): outage timing and crossing structures
    • Right-of-way (under 1.6 km): land, access roads and permits
    • Site logistics (under 8 km): laydown yards and deliveries
    • Crews (under 40 km): crews, cranes and contractors
  • Checks timing. It marks pairs whose construction windows overlap, and a timeline slider lets you play through the years and watch overlapping projects light up when they're being built at the same time.
  • Estimates the money at stake. For our two utilities, coordinating could save about $410K with today's schedules and up to $3.7M if overlapping schedules are aligned.
  • Shows its evidence. Every project links to the exact page of the utility's original filing, and every substation shows what it was matched to and how confident the match is.
  • Drafts the next step. One click writes a coordination memo from one utility's planner to the other's. Gemini writes it, and every number in it is checked against our data before it's shown.
  • Works for any utility. You can upload a new utility's plan, or have Grid-Talk find it online from regional planning portals and state filings.

How we built it

Reading the documents. Utility plans are long PDFs with completely different layouts. We wrote a page detector that scores every page for signals like dates, voltages, and field labels, so it finds project pages in any filing without hardcoded page numbers. Known layouts are parsed with regular expressions, which gave us 44 Dominion Energy South Carolina projects and 207 Georgia Power projects. Unknown layouts go to Gemini, which pulled 89 transmission projects out of Florida Power & Light's 441-page plan.

Finding locations. Filings list substation names, not coordinates. We downloaded the named substations in Georgia and South Carolina from OpenStreetMap and fuzzy-matched project endpoints to them with RapidFuzz. When a name repeats (there's a "Jasper" in both states), we pick the pair of candidates that sits closest together, since one transmission line rarely spans more than 80 km.

Measuring distance correctly. The challenge measures the closest points between two projects, not their centers. We treat each project as a line segment between its two substations, A and B, and compute the smallest distance between any point on one and any point on the other. The distance is 0 if the lines cross:

$$ d(A, B) = \min_{p \in A,\; q \in B} \lVert p - q \rVert $$

That distance sets the tier:

$$ \text{tier}(d) = \begin{cases} \text{touching} & d < 0.1\ \text{km} \ \text{right-of-way} & 0.1 \le d < 1.6\ \text{km} \ \text{site logistics} & 1.6 \le d < 8\ \text{km} \ \text{crews} & 8 \le d < 40\ \text{km} \end{cases} $$

Our tests reproduce all 6 overlaps in Sperry's answer key.

Checking timing. Each project's build window runs from its construction start to its in-service date. When both filings list a start date, we check whether the two windows intersect. When a start date is missing, we treat in-service dates within a year of each other as the same window:

$$ \text{same window} = \begin{cases} W_A \cap W_B \neq \varnothing & \text{both start dates listed} \ \lvert t_A - t_B \rvert \le 365\ \text{days} & \text{otherwise} \end{cases} $$

Estimating savings. Costs come from the utility's own filing when it lists one, and otherwise from MISO's transmission cost guide by voltage, work type, and length. We only count savings the tier justifies. One crew mobilization instead of two, and one environmental study instead of two, are a share of the smaller project's cost:

$$ S_{\text{mobilization}} = 0.05 \cdot \min(C_A, C_B) \qquad S_{\text{study}} = 0.03 \cdot \min(C_A, C_B) $$

Right-of-way land bought once is the shared corridor length in miles, times the right-of-way width in feet, converted to acres and priced at the USDA land value per acre:

$$ S_{\text{land}} = L_{\text{shared}} \cdot w \cdot \frac{5280}{43{,}560} \cdot P_{\text{acre}} $$

Each project's savings are counted only once in the totals, even if it appears in several overlaps.

The stack. A Python and FastAPI backend, PostgreSQL on Tiger Data, the Gemini API, and a React and Leaflet frontend, all running in Docker.

Challenges we ran into

Accuracy was the hardest part. Substation locations aren't published in the filings, and many names repeat. Early on, "Scout" matched a substation called "South" in another state, and a line near Charleston matched one in Jacksonville, Florida. We added rules so a weak match or a match in the wrong state only keeps its coordinates if the other end of the same line confirms it. Anything we can't confirm is marked unconfirmed and left off the map instead of guessed.

Every PDF is different. Georgia Power writes dates as 06/01/2025, FPL writes June/2026, and one filing we downloaded was scanned images with no text at all. Each one meant teaching the parser something new without breaking the others.

Centers versus closest points. Sperry's example data measures between project centers. Two of their projects both end at the Thurmond substation, and the center method puts them 4.09 miles apart. Measured by closest points, they touch, so our list ranks them #1.

Working within limits. We ran out of Gemini's free daily quota mid-build, so we added model fallback and cached every answer so the same question never costs quota twice.

Accomplishments that we're proud of

We went beyond displaying projects. Grid-Talk explains why a pair was flagged, shows the evidence behind it, estimates what coordination is worth, and drafts the first message to the other utility. We're also proud that we never traded accuracy for a flashier result: unconfirmed locations stay off the map, every savings number traces back to a published source, and the AI-written memos are fact-checked against our data before anyone sees them.

What we learned

Personally, I learned how to put real-world points on a map: turning a name in a PDF into coordinates, and then into lines and distances you can trust. As a team, we learned how to build a full web app, from a backend API and database to an interactive frontend. We also learned that the code is only part of the work. Finding, verifying, and structuring real infrastructure data took as much effort as the analysis, and a result is only useful when someone can see where it came from. A question that sounds simple, "are these projects close to each other?", turns into a real data and engineering problem once you're working with actual infrastructure.

What's next for Grid-Talk

We want to add more utilities and regions, use real transmission-line routes instead of straight lines, and pull in more public planning sources. We also want to support the full process after an overlap is flagged, from the first memo to the joint planning meeting. The goal is simple: before utilities build it twice, let's have a Grid-Talk about it once.

Built With

Share this project:

Updates

Submission history