Inspiration

University can feel like a survival game. Between overwhelming deadlines, packed schedules, tight budgets, and burnout, getting through a semester sometimes feels like fighting monsters of your own.

We wanted to turn that feeling into something playful and useful. Inspired by Halloween, pixel-art games, and the everyday struggles of UofT students, we created Coven: a survival planner where every monster represents a real student need.

The idea was simple: what if the things that make monsters difficult to live with were actually metaphors for the challenges students face every day?

What it does

Coven is a monster-themed survival planner that helps UofT students navigate campus life based on their needs.

  • Vampire – Sun-safe navigation: Finds routes between campus buildings that minimize direct sunlight using building geometry, real-time sun positions, shadows, and indoor connections. Students can explore sun exposure throughout the day and find the best time to leave.
  • Banshee – Deadline management: Transforms course syllabi into a visual calendar of approaching deadlines, represented by moon phases. It identifies overwhelming weeks and helps distribute study time before things pile up.
  • Hob – Budget-friendly meals: Helps students make meals from ingredients they already have, fitting their available time, effort, and budget. It can also suggest where to find missing ingredients on campus.
  • Zombie – Low-energy planning: Reorganizes a student's day into a more manageable schedule, prioritizing essential commitments, minimizing walking, incorporating breaks, and reducing unnecessary effort.

Each monster offers a different way to make university life a little more manageable.

How we built it

We built Coven using React 19, TypeScript, Vite, and Tailwind CSS, with Zustand for shared application state and React Router for navigation.

Each monster was developed as an independent feature with its own logic and interface, while sharing common data contracts and application state.

Some of the technical highlights include:

  • Campus mapping and routing: We used Leaflet and OpenStreetMap alongside Toronto's 3D Massing dataset to model campus buildings and calculate building shadows. Sun positions are computed locally using SunCalc, allowing us to generate time-dependent shade polygons and find routes that minimize sun exposure.
  • Syllabus intelligence: We used PDF.js to extract course information from uploaded syllabi and LLM-powered serverless functions to identify assessments, deadlines, and grading weights.
  • Meal recommendations: We combined pantry ingredient recognition with meal suggestions that account for preparation time, effort, and missing ingredients.
  • Shared planning: Zustand allows the different monsters to work with shared assessments, calendar events, and pantry data, enabling Zombie to build on information gathered by the other features.
  • Authentication and deployment: We integrated Clerk for authentication, with a demo mode that allows the application to remain usable without authentication configuration.

We also designed a consistent pixel-art visual system, complete with custom sprites, animations, sound effects, and responsive layouts.

Challenges we ran into

One of our biggest challenges was translating real-world student problems into systems that could actually be modeled and solved.

For Vampire, calculating shadows across hundreds of campus buildings at different times of day was computationally expensive. We had to optimize our geometry calculations, move intensive computations into Web Workers, and use canvas rendering instead of rendering hundreds of individual map polygons.

For Banshee, syllabi are notoriously inconsistent. Deadlines can be expressed as calendar dates, relative weeks, or tutorial-specific instructions. Extracting meaningful assessment information while preserving grading weights and confidence levels required careful handling.

Another challenge was integrating four independently developed features into one cohesive application. We established shared TypeScript contracts and centralized state early on to ensure each monster could communicate with the others without tightly coupling their implementations.

Finally, we had to balance the playful Halloween aesthetic with genuine usability. Every feature needed to be intuitive, responsive, and functional rather than simply looking like a themed demo.

Accomplishments that we're proud of

We're proud that Coven goes beyond being a collection of themed interfaces. Each monster represents a real student struggle and provides a concrete tool to address it.

Some highlights include:

  • Building a sun-aware campus routing system using real 3D building geometry and dynamically calculated shadows.
  • Creating an interactive time-lapse that demonstrates how sunlight, shadows, route selection, and exposure change throughout the day.
  • Turning course deadlines into an intuitive lunar visualization that helps students anticipate and prepare for academically demanding weeks.
  • Connecting the different features through shared application state, allowing Zombie to build on information collected by the other monsters.
  • Creating a cohesive pixel-art experience with custom animated characters, sound effects, and responsive interfaces.

Most importantly, we're proud of the concept behind Coven: making accessibility and student well-being approachable through something fun, memorable, and engaging.

What we learned

We learned that building a useful product requires more than implementing individual features. The most interesting part was discovering how seemingly unrelated student struggles could be connected through a shared planning system.

We also learned the importance of establishing clear interfaces between independently developed features, especially under tight time constraints. Shared contracts, mock data, and early integration testing helped us parallelize development without sacrificing cohesion.

On the technical side, we gained experience with geospatial computation, computational geometry, Web Workers, LLM-powered document extraction, and performance optimization in React.

Perhaps most importantly, we learned that accessibility doesn't have to feel clinical or restrictive. It can be creative, expressive, and even a little spooky.

Our ultimate goal is to make navigating university life feel less like surviving a horror game and more like having a team of monsters looking out for you!

Thank you! Website: https://coven-henna.vercel.app/zombie

Built With

Share this project:

Updates

Submission history