diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index c17c226..996a499 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -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 diff --git a/components/logos/PeterPortal.tsx b/components/logos/PeterPortal.tsx deleted file mode 100644 index 083d69e..0000000 --- a/components/logos/PeterPortal.tsx +++ /dev/null @@ -1,14 +0,0 @@ -const PeterPortal = () => ( - - PeterPortal Logo - - -); - -export default PeterPortal; diff --git a/components/logos/index.ts b/components/logos/index.ts index 9098291..5e7c459 100644 --- a/components/logos/index.ts +++ b/components/logos/index.ts @@ -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; diff --git a/content/docs/contributor/antalmanac-planner/aap-coursesearch.png b/content/docs/contributor/antalmanac-planner/aap-coursesearch.png new file mode 100644 index 0000000..9415645 Binary files /dev/null and b/content/docs/contributor/antalmanac-planner/aap-coursesearch.png differ diff --git a/content/docs/contributor/antalmanac-planner/aap-instructorsearch.png b/content/docs/contributor/antalmanac-planner/aap-instructorsearch.png new file mode 100644 index 0000000..f9cd1fb Binary files /dev/null and b/content/docs/contributor/antalmanac-planner/aap-instructorsearch.png differ diff --git a/content/docs/contributor/antalmanac-planner/aap-roadmap.png b/content/docs/contributor/antalmanac-planner/aap-roadmap.png new file mode 100644 index 0000000..ff115bb Binary files /dev/null and b/content/docs/contributor/antalmanac-planner/aap-roadmap.png differ diff --git a/content/docs/contributor/peterportal/getting-started.mdx b/content/docs/contributor/antalmanac-planner/getting-started.mdx similarity index 91% rename from content/docs/contributor/peterportal/getting-started.mdx rename to content/docs/contributor/antalmanac-planner/getting-started.mdx index 7846ab7..ddabfc3 100644 --- a/content/docs/contributor/peterportal/getting-started.mdx +++ b/content/docs/contributor/antalmanac-planner/getting-started.mdx @@ -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. diff --git a/content/docs/contributor/antalmanac-planner/index.md b/content/docs/contributor/antalmanac-planner/index.md new file mode 100644 index 0000000..ce5b9f8 --- /dev/null +++ b/content/docs/contributor/antalmanac-planner/index.md @@ -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. diff --git a/content/docs/contributor/antalmanac-planner/meta.json b/content/docs/contributor/antalmanac-planner/meta.json new file mode 100644 index 0000000..b5f0406 --- /dev/null +++ b/content/docs/contributor/antalmanac-planner/meta.json @@ -0,0 +1,5 @@ +{ + "title": "AntAlmanac Planner", + "icon": "AntAlmanac", + "pages": ["getting-started"] +} diff --git a/content/docs/contributor/index.mdx b/content/docs/contributor/index.mdx index fcb9da1..71e6fcc 100644 --- a/content/docs/contributor/index.mdx +++ b/content/docs/contributor/index.mdx @@ -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"; @@ -24,9 +23,9 @@ import { Workflow, UtensilsCrossed, Bird, CalendarRange } from "lucide-react"; Schedule Planner } - href="/docs/contributor/peterportal" - title="PeterPortal" + icon={} + href="/docs/contributor/antalmanac-planner" + title="AntAlmanac Planner" > Course Discovery and Planning diff --git a/content/docs/contributor/meta.json b/content/docs/contributor/meta.json index f06a1f0..fc88cb6 100644 --- a/content/docs/contributor/meta.json +++ b/content/docs/contributor/meta.json @@ -5,7 +5,7 @@ "...common", "---Projects---", "antalmanac", - "peterportal", + "antalmanac-planner", "anteaterapi", "zotistics", "peterplate", diff --git a/content/docs/contributor/peterportal/index.md b/content/docs/contributor/peterportal/index.md deleted file mode 100644 index 5da05d0..0000000 --- a/content/docs/contributor/peterportal/index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: PeterPortal ---- - -A web application aimed to aid UCI students with course discovery and planning. diff --git a/content/docs/contributor/peterportal/meta.json b/content/docs/contributor/peterportal/meta.json deleted file mode 100644 index 33b6b22..0000000 --- a/content/docs/contributor/peterportal/meta.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "title": "PeterPortal", - "icon": "PeterPortal", - "pages": ["getting-started"] -} diff --git a/next.config.mjs b/next.config.mjs index 50894e9..321c5e5 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -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);