Inspiration

Singapore is famously a "fine" city, but the one thing we can't fine is the sun. For NUS students, crossing Kent Ridge often feels like a tactical mission to avoid heatstroke. We noticed that while Google Maps knows the shortest path, it doesn't know the "coolest" path—the one that ducks through COM2 to get to the bus stop or stays under the shadows of the Deck. We built Excuse Sun to make the campus walkable again, even at high noon.

What it does

Excuse Sunlight is a shadow-aware navigation engine. Users input their start and end points and adjust a "Heat Tolerance" slider. The app then calculates a route that prioritizes:

Real-time Shadows: Dynamically calculated based on the sun's azimuth and elevation.

Sheltered Walkways: Leveraging OpenStreetMap data for covered links.

Indoor Shortcuts: A custom mesh that allows the pathfinder to "walk through" buildings to stay in the AC.

How we built it

Backend: Powered by FastAPI and NetworkX. We built a custom graph of the NUS campus by processing GeoJSON data.

The Physics Engine: We implemented a solar position algorithm that calculates shadow projections based on building heights and the time of day.

Spatial Connectivity: We used scipy's cKDTree to "heal" the map, bridging gaps between roads and creating a proximity mesh that treats building interiors as traversable, shaded nodes.

Frontend: A clean interface featuring a time-slider that allows users to see how the optimal "shaded" path changes from morning to evening.

Challenges we ran into

The "Island" Problem: Initial map data was disconnected. We had to write logic to detect isolated road segments and "bridge" them if they were within 5 meters of the main network.

Pathing Through Walls: Simply connecting a road to a building center isn't enough. We had to create a "hub-and-spoke" model for buildings so users could enter through one door and exit through another.

Vercel Deployment: Moving heavy spatial computations and large GeoJSON files to a serverless environment required significant optimization of our startup routines and data filtering scripts.

Accomplishments that we're proud of Shadow Accuracy: Our shadow polygons accurately reflect the direction of the sun based on the time of day.

Indoor Integration: We successfully turned static building shapes into functional parts of the transit network.

Dynamic Weighting: Our Dijkstra implementation doesn't just look for "shaded or not"—it uses a weighted cost function that balances distance vs. comfort based on user preference.

What we learned

We learned a massive amount about Computational Geometry and Graph Theory. Specifically, we mastered how to use shapely for polygon manipulation and how to optimize spatial queries using STRtree and cKDTree. We also realized that "perfect" data doesn't exist; as a developer, you have to write code that "cleans" and "connects" the world yourself.

What's next for Excuse Sun

Crowdsourced "Coolness": Integrating real-time temperature data or user reports on where the AC is strongest.

Multi-Floor Routing: Expanding the mesh to account for different levels in buildings like NUS Central Library.

Expansion: Mapping out the rest of Singapore's "Green Corridors" and covered walkway networks.

Share this project:

Updates