Inspiration

We drew our inspiration for this hackathon project from our own experience with our college’s scheduling system, which often felt outdated, confusing, and inefficient. As students, we regularly encountered confusion in the WebTree system, and often did not get the classes we wanted or needed. These frustrations motivated us to design a smarter, more intuitive scheduling system that prioritizes clarity, flexibility, and real-time updates. Our goal was not only to solve the problems we personally faced, but also to create a solution that could benefit universities everywhere by streamlining administrative work and improving the student experience. Through this project, we hope to inspire others to look at everyday challenges in their own institutions as opportunities for innovation and to build tools that make a meaningful difference in their communities.

What does it do?

Our system streamlines the course registration process by allowing students to log in with their unique ID and submit their course preferences in a simple, organized interface. Once submissions close, administrators can initiate a built-in lottery system that assigns each student a randomized position in the registration order, ensuring fairness and transparency.

After the lottery is finalized, the system automatically generates schedules in a structured sequence based on class year priority—beginning with seniors, then juniors, followed by sophomores, and concluding with freshmen. This mirrors the real-world priority structure many universities use, while making the process more efficient and significantly reducing manual oversight.

For our demo, we used real course data gathered from our own institution, Davidson College, allowing us to test the system in a realistic academic environment and demonstrate how it could function seamlessly in an actual university setting.

How we built it

Frontend: The frontend is a single-page static HTML website that runs in the browser and acts like a lightweight app: students search/browse the course catalog, build ranked picks across rounds, submit those picks, and later check their results—all through API calls to the backend. It also includes the “Admin tools” UI that triggers the global lottery run (but the backend still enforces the admin token). Backend The backend is a FastAPI serverthat serves two things: the static frontend from /static and a JSON API the frontend uses. It loads course data from a tidy CSV, stores student submissions and lottery results in a database (Postgres on DigitalOcean via DATABASE_URL, SQLite locally), and exposes endpoints like GET /api/classes, POST /api/submit_picks, and GET /api/results/{student_id}. An admin-only endpoint runs one global lottery for everyone who submitted picks, protected by ADMIN_TOKEN (sent as X-Admin-Token).

Challenges we ran into

As first-time hackathon participants, one of our biggest hurdles was learning how to effectively use GitHub for collaboration. Managing branches, resolving merge conflicts, and keeping our codebase organized in a fast-paced environment was a new experience for us, and we quickly realized we needed to use constant communication and learn efficiently.

We also had no prior experience deploying applications with DigitalOcean, which meant we had to teach ourselves how to configure servers, manage deployments, and move our project from a local environment to a live, global app. While this was a steep learning curve, it gave us valuable hands-on experience with real-world deployment practices.

On the technical side, we encountered a persistent bug when transitioning our website from local development to the global deployment. This issue prevented the admin from successfully generating student schedules in the live version of the app. Despite our efforts during the hackathon, we were unable to fully resolve it in time. However, working through this challenge helped us better understand environment differences, debugging in production, and the complexities of scaling an application beyond a local machine.

Use of DigitalOcean We leveraged DigitalOcean to deploy our application beyond a local environment and make it accessible on a global scale. Without cloud hosting, our scheduling system would have been limited to running on a single machine, restricting its usability and impact. By deploying through DigitalOcean, we took an important step toward making our platform scalable and accessible to universities anywhere, laying the foundation for real-world adoption.

Accomplishments that we're proud of

One of our biggest accomplishments was successfully learning how to deploy a live application using DigitalOcean in such a short timeframe. In addition, we designed and implemented a working scheduling algorithm capable of processing real course data from a college and generating student schedules based on structured priorities. Seeing our system take authentic academic data and turn it into functional schedules was a major milestone and validated the practicality of our solution.

What we learned

Throughout this project, we gained hands-on experience with both GitHub and DigitalOcean—two platforms we had never used before. We learned how to collaborate using version control, manage code across multiple contributors, and navigate the challenges of deployment. Beyond that, we built a full-stack web application from the ground up, developing both frontend and backend components. This experience gave us a deeper understanding of how user interfaces connect with server-side logic and how complete web systems are architected and launched.

What's next for Web Choice

Moving forward, our primary goal is to resolve the deployment bug affecting the global version of the app so that administrators can reliably generate schedules in the live environment. Once stabilized, we hope to expand Web Choice into a polished, scalable platform that universities can adopt to replace outdated systems with a fair, transparent, and user-friendly scheduling experience. Ultimately, we envision Web Choice becoming a tool that modernizes course registration and sets a new standard for accessibility and equity in academic scheduling.

Built With

Share this project:

Updates