AntAlmanac

About
AntAlmanac is a course-planning platform for courses at UC Irvine. It includes two powerful planning tools: AntAlmanac Scheduler, for quarterly schedules, and AntAlmanac Planner, for multi-year roadmaps and course discovery. Features include:
| AntAlmanac Scheduler | AntAlmanac Planner |
|---|---|
| Search for classes by department, section code, and keywords. | Show requirements for multiple majors and minors |
| Preview class times on the integrated calendar. | View completion of your major, specialization, minor, and GE requirements |
| Quickly access course statistics, reviews, and prerequisites. | Import your unofficial transcript via StudentAccess to populate previous courses. |
| Locate your class locations on the interactive map. | Add credits from any transferred courses, AP exams, and GE/Elective credits |
![]() | ![]() |
Technology
Our website is a Next.js application deployed on AWS using SST (Serverless Stack). A summary of the libraries we use are listed below.
Frontend
- Shared
- React - Library to build dynamic, component-based UIs.
- Next.js - React framework with server-side rendering.
- Material UI (MUI) - React component library that implements Google's Material Design.
- Scheduler
- Zustand - State management.
- Planner
- Redux - State management.
Backend
- tRPC - type-safe API access layer for the AntAlmanac API.
- Anteater API - API maintained by ICSSC for retrieving UCI data.
- Drizzle ORM - high-performance type-safe SQL-like access layer compatible with all major SQL dialects.
- PostgreSQL - Relational database for storing user data and schedules.
Tooling
- Shared
- SST - Infrastructure as code framework for AWS deployment.
- TypeScript - JavaScript with type-checking.
- Scheduler
Repository Structure
This is a pnpm monorepo:
History
AntAlmanac (now AntAlmanac Scheduler) was created in 2018 by a small group of students under the leadership of @the-rango. They formed an AntAlmanac club for ongoing development and, in 2019, @devsdevsdevs directed a massive rewrite of the codebase as project lead.
In 2020, AntAlmanac was adopted by the ICSSC Projects Committee. Meanwhile, PeterPortal (now AntAlmanac Planner) was created by another team on the Projects Committee led by @uci-mars, aiming to unify fragmented course information and long-term planning resources in one application.
In February 2026, AntAlmanac and PeterPortal unified into a single course-planning platform at antalmanac.com. This repository now powers both tools. The legacy PeterPortal repository is available as a public archive. Read more in the merge announcement.
ICSSC continues to provide funding, marketing, and engineering to support the growing number of users and open-source developers that make up our AntAlmanac Community.
Since then, the project has continued to evolve and grow with successive generations of projects committee members!
| Year | Scheduler (AntAlmanac) Lead | Planner (PeterPortal) Lead |
|---|---|---|
| 2018 - 2019 | @the-rango (founder) | |
| 2019 - 2020 | @devsdevsdevs | |
| 2020 - 2021 | @devsdevsdevs | @uci-mars |
| 2021 - 2022 | @ChaseC99 | @chenaaron3 |
| 2022 - 2023 | @EricPedley | @ethanwong16 |
| 2023 - 2024 | @EricPedley, @ap0nia | @js0mmer |
| 2024 - 2025 | @MinhxNguyen7, @adcockdalton | @Awesome-E |
| 2025 - 2026 | @alexespejo | @CadenLee2 |
| 2026 - Present | @sicn4rf | @anthonyj33 |
Deployment
AntAlmanac is deployed to AWS using SST (Serverless Stack). The deployment process is automated and managed through the sst.config.ts file.
Deployment Environments
- Production: Deployed to
antalmanac.com(with awww.antalmanac.comalias) - Staging: Each pull request gets a preview deploy at
staging-{PR_NUMBER}.antalmanac.com - Shared staging:
staging-shared.antalmanac.comis a persistent environment for cross-team (Scheduler ⇄ Planner) integration testing; deployed manually
Environment Variables
The variables below configure a full production/staging deployment and are set in your AWS environment or CI/CD pipeline.
For local development you only need the variables in apps/antalmanac/.env.example and apps/antalmanac-scheduler/db/.env.example;
anything tagged (optional locally) - maps, analytics, and the Planner integration - can be left unset when running locally.
- Shared
OIDC_ISSUER_URL- OAuth issuer URLANTEATER_API_KEY- API key for Anteater APIPLANNER_CLIENT_API_KEY(optional locally) - API key for the AntAlmanac Planner integrationNEXT_PUBLIC_POSTHOG_KEY(optional locally) - PostHog project key for product analyticsNEXT_PUBLIC_POSTHOG_HOST(optional locally) - PostHog host for product analytics
- Scheduler
DB_URL- Database connection stringMAPBOX_ACCESS_TOKEN(optional locally) - Mapbox API token for map featuresNEXT_PUBLIC_TILES_ENDPOINT(optional locally) - Endpoint for map tilesOIDC_CLIENT_ID- OAuth client ID for Google authenticationBETTER_AUTH_URL- URL used for OAuth (automatically set based on stage)BETTER_AUTH_SECRET- OAuth secret key, you can generate one hereNEXT_PUBLIC_BASE_URL- Base URL of the site (automatically set based on stage)
- Planner
PUBLIC_API_URL- Anteater API URLPRODUCTION_DOMAIN- Domain for current deploymentPLANNER_OIDC_CLIENT_ID- OAuth client ID for Google authenticationPLANNER_DATABASE_URL(optional locally) - Database connection stringADMIN_EMAILS(optional locally) - List of emails with access to administrative actionsPLANNER_SESSION_SECRET(optional locally) - Secret key for session management
If you need access to development credentials, please contact a project lead in our Discord.
⚠️ 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.
Where Does the Data Come From?
We consolidate our data directly from official UCI sources such as: UCI Catalogue, UCI Public Records Office, and UCI WebReg (courtesy of Anteater API).
Disclaimer
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.
Terms & Conditions
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.

