Inspiration : Utilities plan transmission projects years ahead, but neighboring utilities rarely see each other's plans. Georgia Power and Dominion Energy South Carolina both have work planned along the Savannah River, near Savannah and Augusta. FERC Order No. 1920 (2024) exists because this kind of isolated planning wastes money and slows grid construction. I wanted to show what coordination looks like at the project level.
What it does : GridLock loads both utilities' planned projects and compares every cross-utility pair. It measures the closest distance between two projects, not their centers, so a long power line passing near a substation still counts.
How we built it : Python and Streamlit for the full-stack app
Shapely and PyProj for geometry. Coordinates are projected to UTM zone 17N so distances are measured in real meters.
- Folium for the interactive map
- SQLAlchemy with SQLite locally, with Tiger Data (PostgreSQL and TimescaleDB) support for the activity history
- Google Gemini API for coordination briefs
- Unit tests covering tier boundaries, timeline scoring, data validation, and the pipeline
Challenges we ran into : Measuring distance correctly. Latitude and longitude aren't meters, so I projected everything before measuring.
- Getting tier boundaries exact. "Under 1.6 km" means 1.6 km itself falls in the next tier. My tests caught that.
- Turning the Sperry source data into clean map geometry.
- Learning full-stack development while also being a solo
Accomplishments that we're proud of : A working tool that meets every required deliverable plus the cost estimate bonus. Scoring that follows the challenge spec exactly and is tested.
First hackathon, built solo
What we learned : How utilities plan transmission work, what right-of-way sharing means in practice, geospatial distance math, and how to ship a full-stack app under a deadline.
What's next for Gridlock : Add more utilities in SERTP, like Santee Cooper and Georgia Transmission
- Pull project lists directly from public filings as they update
- Use actual line routes instead of straight-line approximations
- Alert both utilities automatically when a new plan creates an overlap
Built With
- folium
- gemini-api
- pandas
- postgresql
- pyproj
- python
- shapely
- sqlalchemy
- sqlite
- streamlit
- tiger-data
- timescaledb
Log in or sign up for Devpost to join the conversation.