Warning
This repository is a public archive as of October 2026. AntAlmanac Planner is still in active development, but the codebase has been unified under the AntAlmanac repository. Please feel free to reach out to us on the ICSSC Projects Discord if you have any questions or concerns.
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.
- Next.js Route Handlers - Server routes for Planner auth and API traffic.
- 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 - 2026 | @CadenLee2 |
| 2026 | @anthonyj33 |
| ... |
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 site 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 the Next.js dev server -
Visit the link printed to the console by Next.js!
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.


