Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
content/docs/contributor/antalmanac @icssc/antalmanac

content/docs/contributor/peterportal @icssc/peterportal
content/docs/contributor/antalmanac-planner @icssc/peterportal

content/docs/contributor/anteaterapi @icssc/api
content/docs/contributor/developer @icssc/api
Expand Down
14 changes: 0 additions & 14 deletions components/logos/PeterPortal.tsx

This file was deleted.

3 changes: 1 addition & 2 deletions components/logos/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { default as AntAlmanac } from "./AntAlmanac";
import { default as PeterPortal } from "./PeterPortal";
import { default as Zotistics } from "./Zotistics";

const logos = { AntAlmanac, PeterPortal, Zotistics };
const logos = { AntAlmanac, Zotistics };

export default logos;
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ This document will guide you through setting up the project on your local machin
1. Inside the `api` directory, make a copy of the `.env.example` file and name it `.env`
2. Add additional variables as needed for features requiring authentication or database access.
- You may want an Anteater API key to avoid rate limit issues; see [the Anteater API docs](https://docs.icssc.club/docs/developer/anteaterapi/keys-limits) for more information.
- To test PeterPortal's search features locally, you'll need an Anteater API key with special search permissions. If you're working on a search-related issue, feel free to contact a project lead in the [Discord server](https://discord.gg/Zu8KZHERtJ) to get a search-enabled key.
- To test AntAlmanac Planner's search features locally, you'll need an Anteater API key with special search permissions. If you're working on a search-related issue, feel free to contact a project lead in the [Discord server](https://discord.gg/Zu8KZHERtJ) to get a search-enabled key.

</Step>
<Step>
Expand Down
66 changes: 66 additions & 0 deletions content/docs/contributor/antalmanac-planner/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
---
title: AntAlmanac Planner
---

## About

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](https://docs.icssc.club/docs/about/anteaterapi) 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](https://www.reg.uci.edu/access/student/transcript/?seg=U) 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**

![Roadmap](./aap-roadmap.png)

- **Course Search**:
- Recent offerings
- Grade distribution visualizations
- Visual prerequisite tree
- Historic Schedule of Classes data
- Reviews from UCI students

![Course Search](./aap-coursesearch.png)

- **Instructor Search**:
- Grade distribution visualizations
- Historic Schedule of Classes data
- Reviews from UCI students

![Instructor Search](./aap-instructorsearch.png)

## Technology

### Frontend
- [React](https://react.dev/) - Library to build dynamic, component-based UIs.
- [Next.js](https://nextjs.org/) - React framework with server-side rendering.
- [Material UI](https://mui.com/material-ui/) - React component library that implements Google's Material Design.

### Backend
- [Anteater API](https://github.com/icssc/anteater-api) - API maintained by ICSSC for retrieving UCI data.
- [Express](https://expressjs.com/) - Minimalist backend framework for Node.js.
- [tRPC](https://trpc.io/) - Library for type-safe APIs.
- [PostgreSQL](https://www.postgresql.org/) - Relational database for storing user data and planners.
- [Drizzle ORM](https://orm.drizzle.team/) - High-performance type-safe SQL-like access layer.

### Tooling
- [SST](https://sst.dev/) - Infrastructure as code framework for AWS deployment.
- [TypeScript](https://www.typescriptlang.org/) - JavaScript with type-checking.

## History
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](https://docs.icssc.club/docs/about/antalmanac/merge) with [AntAlmanac](https://github.com/icssc/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](https://github.com/uci-mars) |
| 2021 - 2022 | [@chenaaron3](https://github.com/chenaaron3) |
| 2022 - 2023 | [@ethanwong16](https://github.com/ethanwong16) |
| 2023 - 2024 | [@js0mmer](https://github.com/js0mmer) |
| 2024 - 2025 | [@Awesome-E](https://github.com/Awesome-E) |
| 2025 - Present | [@CadenLee2](https://github.com/CadenLee2) |

## Contributing
We welcome all open-source contributions! A guide on how to contribute can be found on the Getting Started tab.
5 changes: 5 additions & 0 deletions content/docs/contributor/antalmanac-planner/meta.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"title": "AntAlmanac Planner",
"icon": "AntAlmanac",
"pages": ["getting-started"]
}
7 changes: 3 additions & 4 deletions content/docs/contributor/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ Want to get started? Look no further than [here](/docs/contributor/common/gettin
## Projects

import AntAlmanac from "@/components/logos/AntAlmanac";
import PeterPortal from "@/components/logos/PeterPortal";
import Zotistics from "@/components/logos/Zotistics";
import {Card, Cards} from "fumadocs-ui/components/card";
import { Workflow, UtensilsCrossed, Bird, CalendarRange } from "lucide-react";
Expand All @@ -24,9 +23,9 @@ import { Workflow, UtensilsCrossed, Bird, CalendarRange } from "lucide-react";
Schedule Planner
</Card>
<Card
icon={<PeterPortal />}
href="/docs/contributor/peterportal"
title="PeterPortal"
icon={<AntAlmanac />}
href="/docs/contributor/antalmanac-planner"
title="AntAlmanac Planner"
>
Course Discovery and Planning
</Card>
Expand Down
2 changes: 1 addition & 1 deletion content/docs/contributor/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"...common",
"---Projects---",
"antalmanac",
"peterportal",
"antalmanac-planner",
"anteaterapi",
"zotistics",
"peterplate",
Expand Down
5 changes: 0 additions & 5 deletions content/docs/contributor/peterportal/index.md

This file was deleted.

5 changes: 0 additions & 5 deletions content/docs/contributor/peterportal/meta.json

This file was deleted.

9 changes: 9 additions & 0 deletions next.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,15 @@ const withMDX = createMDX();
/** @type {import('next').NextConfig} */
const config = {
reactStrictMode: true,
async redirects() {
return [
{
source: "/docs/contributor/peterportal/:path*",
destination: "/docs/contributor/antalmanac-planner/:path*",
permanent: true,
},
];
},
};

export default withMDX(config);