AntAlmanac Planner is a web application designed to aid UCI students with course discovery and planning. We consolidate public data available on multiple UCI sources via Anteater API to improve the user experience when planning course schedules. Features include:
- A drag-and-drop multi-year course planner:
- Select multiple majors and minors
- Import your unofficial transcript via StudentAccess to automatically fill in your roadmap to date
- View how your planned roadmap fulfills your major, specialization, minor, and GE requirements
- Import any transferred courses, AP exams, and GE/Elective credits
- Course Search:
- Recent offerings
- Grade distribution visualizations
- Visual prerequisite tree
- Historic Schedule of Classes data
- Reviews from UCI students
- Instructor Search:
- Grade distribution visualizations
- Historic Schedule of Classes data
- Reviews from UCI students
- React - Library to build dynamic, component-based UIs.
- Next.js - React framework with server-side rendering.
- Material UI - React component library that implements Google's Material Design.
- Anteater API - API maintained by ICSSC for retrieving UCI data.
- Express - Minimalist backend framework for Node.js.
- tRPC - Library for type-safe APIs.
- PostgreSQL - Relational database for storing user data and planners.
- Drizzle ORM - High-performance type-safe SQL-like access layer.
- SST - Infrastructure as code framework for AWS deployment.
- TypeScript - JavaScript with type-checking.
AntAlmanac Planner was originally created in 2020 under the name PeterPortal by a team of ICSSC Projects Committee members led by @uci-mars, aiming to unify fragmented course information and long-term planning resources in one application.
In February 2026, PeterPortal merged with AntAlmanac into one ultimate course planning platform. Following the merger, PeterPortal was rebranded as AntAlmanac Planner, while the original AntAlmanac became AntAlmanac Scheduler.
| Year | Project Lead |
|---|---|
| 2020 - 2021 | @uci-mars |
| 2021 - 2022 | @chenaaron3 |
| 2022 - 2023 | @ethanwong16 |
| 2023 - 2024 | @js0mmer |
| 2024 - 2025 | @Awesome-E |
| 2025 - Present | @CadenLee2 |
We welcome all open-source contributions! Here is a rough guide on how to contribute:
-
Check your Node version with
node -v. Make sure you have version 18, 20, or 22 LTS. If you don't, we recommend nvm to manage node versions (or nvm-windows). -
We use pnpm as our package manager. If you don't have pnpm, install it with
npm i -g pnpm
-
Clone the repository to your local machine:
git clone https://github.com/icssc/peterportal-client -
cdinto the cloned repo. -
Run
pnpm installto install all node dependencies for the site and API. This may take a few minutes. -
Set up the appropriate environment variables provided by the project lead.
-
Switch to a branch you will be working on for your current task (pick a name that's relevant to the issue).
git checkout -b [branch name]
-
Fork the project by clicking the fork button in the top right, above the about section.
-
Clone your forked repository to your local machine
git clone https://github.com/<your username>/peterportal-client
-
cdinto the cloned repo. -
Run
pnpm installto install all node dependencies for the site and API. This may take a few minutes. -
Make a copy of the
.env.examplefile in the api directory and name it.env. This includes the minimum environment variables needed for running the backend. -
(Optional) Set up your own PostgreSQL database and Google OAuth to be able to test features that require signing in such as leaving reviews or saving roadmaps to your account. Add additional variables/secrets to the .env file from the previous step.
Have any questions or need some help? Feel free to join the ICSSC Projects Discord and ask around in the #peterportal channel!
⚠️ Note: Anteater API requires a special API key in order for search functionality to work. If you'd like to work on a feature relating to this, please send a message in our Discord.
-
Choose an issue you would like to work on under the issues tab. Leave a comment requesting to work on this issue and wait for confirmation that it is not already assigned.
-
Switch to a branch you will be working on for each issue (pick a name that's relevant).
git checkout -b [branch name]
- Once your feature is ready, open a pull request and a member from our team will review it. Follow the pull request template.
-
Open a terminal in the root directory of the repo.
-
Run
pnpm run devto start both the backend Express server and frontend Next.js dev server -
Visit the link printed to the console by Next.js!
Optionally, you can run the site/api separately by changing into their respective directories in two different terminal windows and running pnpm run dev
We consolidate our data directly from official UCI sources such as: UCI Catalogue, UCI Public Records Office, and UCI WebReg (courtesy of Anteater API).
Although we consolidate our data directly from official UCI sources, this application is by no means an official UCI tool. We strive to keep our data as accurate as possible with the limited support we receive from UCI. Please take this into consideration while using the website.
There are no hard policies at the moment for utilizing this tool. However, please refrain from abusing the website by methods such as: sending excessive amount of requests in a small period of time or purposely looking to exploit the system.


