Home › Case Studies › Questporter
GitHub

Questporter

2025

Questporter

Timeline

July 2025

Overview

Questporter is a lightweight scheduling utility that exports class schedules from Quest to any calendar app in seconds, using a simple copy-and-paste workflow while ensuring privacy through fully client-side generation.

Technologies

TypeScriptNext.jsTailwind CSSShadcn UIVercel

Overview

Questporter is a utility built for University of Waterloo students to export Quest class schedules into any major calendar application. By focusing on simplicity and approachability, it eliminates the need for complex extensions or technical know-how: students can simply copy, paste, and generate a calendar file that works anywhere. Designed with newer and non-technical students in mind, Questporter makes managing schedules fast, intuitive, and stress-free.

Try Questporter out for yourself, or view the source code.

Software Architecture

Questporter builds on the open-source project Trinovantes/Quest-Schedule-Exporter, which originally handled schedule-to-iCalendar conversion in JavaScript. The backend logic was ported to TypeScript for stronger type safety and easier maintainability. All generation happens fully client-side in the browser, ensuring that student data never leaves their machine.

Technology Stack

  • Frontend: TypeScript, Next.js, Tailwind CSS, Shadcn UI
  • Infrastructure: Vercel (static hosting + deployment)
  • Data Handling: iCalendar file generation (client-side only)

Data Flow

Questporter Data Flow DiagramData flow from raw input text (pasted from Quest) to generated iCalendar file.

Key Enhancements

Questporter improves on the tool by Trinovantes by adding timezone support, ensuring that classes always appear at their correct local time no matter where the calendar is viewed. Moreover, the calendar generation logic was migrated to TypeScript, making the codebase safer, more reliable, and easier to maintain compared to the original JavaScript version.

Design Case Study

User Experience Goals

The main priority was to design a tool that any student could use within seconds, without needing to understand technical details. Questporter’s design had three key goals:

  1. Approachability: Simple instructions and step-by-step icons to reduces intimidation.
  2. Clarity: A obvious copy–paste workflow with placeholders and examples.
  3. Simplicity: No clutter or unnecessary features, making it lightweight for once-a-term use.

To meet these goals, a straightforward flow was used: the user copies schedule from Quest, pastes it into the input box, and generates a downloadable iCalendar file. For added clarity and personalization, users can optionally use placeholders like @code, @location, or @prof to adjust how events appear.

Finally, with just a single click, the tool automatically downloads an .ics file to the user's device that works seamlessly with Google Calendar, Apple Calendar, Outlook, and other apps, making the entire process quick, intuitive, and non-technical.

UI Features

Dark, Modern Theme

Chosen to reduce eye strain and align with user preferences for professional, yet friendly apps

Instructional Icons

Large, visual step-by-step icons that eliminate the need to read lengthy instructions

Placeholders System

Clear placeholders let students personalize descriptions without touching raw data

Minimalist Layout

Distractions are removed to make it clear that only three simple steps are needed

Key Screens

Questporter Key ScreensQuestporter design in dark and light mode.

Future Considerations

In the future, Questporter could allow students to save presets for their preferred placeholder configurations each term, making re-exports faster and more consistent. It could also support direct syncing with calendar providers such as Google Calendar or Outlook, removing the extra step of downloading and importing .ics files manually.

Moreover, a calendar preview mode would give students a general idea of how their schedule will appear once imported, while an instant preview system could update the display in real time as placeholders or descriptions are adjusted, creating a responsive, fast, and confidence-building experience for users.