Inspiration

University life is vibrant but fragmented. Opportunities for networking, free food, and academic growth are buried across official portals like TerpLink, endless Discord servers, and crowded Gmail inboxes. We realized that students often miss the most relevant events simply because they weren't checking the right "channel" at the right time. We wanted to build a single lens—a Forecast—that looks across every digital corner of campus to show you exactly where you should be.

What it does

Forecast aggregates campus events into a unified map and personalized feed.

  • Multi-Source Aggregation: Pulls from TerpLink, the CS Department RSS feed, Discord messages, and Gmail newsletters — all in one place.
  • AI Extraction: Gemini reads a messy Discord message or email and extracts the title, time, and location into a structured event.
  • Personalized Feed: You set keywords in the Intel tab. Our scoring engine ranks events in real-time and surfaces the ones that actually match your interests.
  • Campus Map: Every event is pinned to exact UMD building coordinates so you can see what's happening near you right now.
  • Deadlines Tab: Application and registration deadlines extracted from Discord and Gmail, with live countdowns.
  • Calendar Integration: One tap adds any event to your Google Calendar.

How we built it

  • Backend: FastAPI server with async Python workers polling Discord, Gmail, and TerpLink in the background.
  • AI: Gemini 2.0 Flash parses unstructured text and images via the google-genai SDK.
  • Mobile: React Native + Expo. react-native-maps for the spatial UI, lucide-react-native for icons.
  • Geocoding: Custom fuzzy-matcher that maps building names like "Iribe" or "ESJ" to exact GPS coordinates using a UMD campus dataset — no third-party API needed.
  • Auth: Google OAuth 2.0 with PKCE for secure sign-in and background Gmail access.

Challenges we ran into

  • The "Messy Data" Problem: Extracting dates from text like "Next Tues @ 6" requires context about the current date. We solved this by providing the AI with a strict system prompt and temporal context.
  • Geocoding without an API: We didn't want to rely on expensive, generic Geocoding APIs that might get campus building names wrong. Instead, we scraped official UMD building data and implemented a fuzzy-matching system to ensure high accuracy for campus-specific locations.
  • Token Management: Securely managing refresh tokens for background Gmail sync while keeping the mobile client "public" required a careful implementation of OAuth 2.0 server-side exchange.

Accomplishments that we're proud of

  • Visual AI: It feels like magic to post a screenshot of an event flyer in a Discord channel and see it pop up as a precise marker on the map seconds later.
  • Unified UX: We successfully bridged the gap between official administration emails and organic, student-led Discord chats.
  • Personalization Engine: The scoring system doesn't just look for exact keyword matches; it uses a synonym expansion system so that a user interested in "Coding" will automatically see "Python" and "Hackathon" events higher in their feed.

What we learned

  • Mobile Spatial UI: The complexities of handling map regions, markers, and user location permissions.
  • Async Architecture: Managing multiple background workers in Python to ensure the database stays fresh without blocking the main API thread.

What's next for Forecast

  • Further Integrations: Pulling even MORE sources of information, like UMD portals, school websites, etc.
  • Push Notifications: Proactive alerts when a "100/100" match for your interests.

Built With

Share this project:

Updates