About Structy
Inspiration
Civil engineers, planners, and community organizations often need to explore how a street could be improved before committing to a full engineering study. Existing tools tend to fall into two extremes: powerful CAD and GIS software with steep learning curves, or AI image generators that create attractive concepts without using real measurements or explaining their decisions.
We wanted to build something between those extremes.
Structy transforms a real street into an editable 3D workspace using open geospatial data. Users can explore existing conditions, place infrastructure assets, and ask an AI design agent for sustainability recommendations grounded in available site data.
What it does
A user enters an address, and Structy:
- Geocodes the location and retrieves nearby roads, buildings, trees, and land features.
- Builds an interactive 3D representation of the street.
- Incorporates terrain and environmental context from public datasets.
- Lets users select, move, rotate, scale, add, and remove objects.
- Provides reusable assets such as trees, planting beds, bioswales, retention ponds, benches, streetlights, buildings, and geometric primitives.
- Allows users to create custom assets or import external STL and GLB models.
- Displays geospatial layers and the provenance of sourced or assumed values.
- Uses Gemini to research constraints and suggest greener street improvements based on the user’s prompt and the available evidence.
Instead of allowing the model to invent geometry or perform hidden calculations, Structy keeps the scene editable and uses deterministic code for measurements, placement, and engineering checks.
How we built it
Structy uses a React and TypeScript frontend with Three.js and React Three Fiber for the interactive 3D environment.
The editor includes:
- A feature and model tree
- Object selection and transform controls
- Move, rotate, and scale tools
- Ground and grid snapping
- Undo and redo
- Existing-versus-proposed comparisons
- Geospatial layer controls
- An asset library
- A simplified CAD-style Asset Creator
- STL and GLB import and export
The Python backend retrieves and processes open geospatial information. Our data sources include:
- OpenStreetMap Nominatim for address geocoding
- OpenStreetMap Overpass for roads, building footprints, trees, waterways, and other mapped features
- USGS 3DEP for elevation data
- NOAA for rainfall and climate information
- USDA soil data for infiltration and soil conditions
- Additional North Carolina and public geospatial sources where available
Geographic coordinates are converted into a local meter-based coordinate system before being rendered. Buildings are generated from mapped footprints, roads are constructed from their centerlines and cross-sections, and terrain is sampled from elevation data.
Gemini receives structured site information, user goals, and relevant research. It can explain constraints, compare possible improvements, and recommend options such as street trees, bioswales, permeable paving, or curb extensions.
The application, not Gemini, creates the final geometry and runs quantitative checks.
We designed the interface around a Frutiger Aero-inspired visual system: bright daylight colors, water and environmental imagery, translucent glass panels, chrome accents, and an optimistic early-2000s vision of technology working with nature.
Challenges we faced
Turning real map data into usable 3D geometry
OpenStreetMap data is extremely useful, but it is not a ready-made 3D model. Buildings may be missing heights, roads can contain sparse or irregular points, and different features use different tagging conventions.
We had to convert geographic coordinates into local meters, extrude building footprints, construct road surfaces, and clearly distinguish sourced values from assumptions.
Handling elevation
Our first attempts at applying elevation produced distorted roads and floating or buried objects. Roads, sidewalks, terrain, and overlays were being sampled at different resolutions, which caused visual artifacts and flickering.
We addressed this by densifying geometry, sampling surfaces consistently, and keeping placed assets grounded against the same terrain function.
Building reliable editing controls
Implementing game-engine-style object manipulation was more difficult than displaying a static scene. Transform gizmos initially conflicted with camera controls and object selection. Dragging a handle could deselect the object or leave orbit controls disabled.
We had to separate selection from dragging, attach controls directly to object pivots, and carefully manage pointer events and transform state.
Keeping AI recommendations verifiable
We did not want Structy to become another chatbot wrapper. Gemini is used for research and reasoning, but measurements and checks remain in code.
Designing this boundary required us to pass structured evidence to the model, retain citations and provenance, and prevent generated text from silently changing engineering values.
Balancing visual detail and performance
The scene needed to look inviting while remaining responsive on ordinary laptops. We used instanced trees, merged building geometry, low-poly vegetation, procedural offline textures, and lightweight materials instead of expensive photorealistic rendering or remote environment maps.
What we learned
We learned that geospatial data is rarely complete, but incomplete data can still be valuable when uncertainty is made visible. A clearly labeled assumption is more useful than a confident-looking value with no source.
We also learned that combining AI with deterministic systems creates a stronger product than relying on either alone. Gemini is effective at researching requirements and explaining tradeoffs, while traditional code is better for geometry, calculations, validation, and reproducibility.
Finally, we gained a deeper appreciation for the interaction design behind CAD and game-engine tools. Features such as snapping, transform handles, camera controls, selection, and undo history appear simple but require careful coordination.
Accomplishments we are proud of
- Generating an editable 3D street from a real address
- Integrating multiple open geospatial data sources
- Preserving provenance for sourced, estimated, and assumed values
- Creating a functional CAD-style editor in the browser
- Supporting custom asset creation and external 3D model import
- Building an AI workflow that reasons from structured evidence
- Maintaining responsive rendering while adding terrain, buildings, trees, and procedural textures
- Creating a memorable Frutiger Aero-inspired interface that connects sustainability with optimistic technology
What’s next
We would like to expand Structy with:
- Flood-zone, heat, air-quality, and storm-sewer layers
- Higher-resolution North Carolina LiDAR integration
- More detailed infrastructure and vegetation assets
- Improved engineering and regulatory checks
- Collaborative projects and version history
- More export formats for professional CAD and GIS workflows
- Side-by-side environmental and cost comparisons
- Connections to municipal datasets beyond North Carolina
Our long-term goal is not to replace civil engineers. It is to give engineers, planners, students, and communities a faster and more transparent place to begin.
Built With
- cad
- fast-api
- frutigeraero
- gemini-api
- openstreetmap
- python
- react
- typescript

Log in or sign up for Devpost to join the conversation.