Skip to content

Repository files navigation

Degree Audit Plus logo

Degree Audit Plus

A clearer, more useful way to read and plan a UT Austin degree audit.

Repository · Architecture · MIT License

What is a degree audit?

A degree audit compares your completed, in-progress, and planned coursework with the requirements for your degree, major, minor, or certificate. It answers the practical question: what is done, what is in progress, and what is left?

Degree Audit Plus reads that information from UT Austin's UT Direct audit system and turns the dense results page into an interactive dashboard for understanding progress and building a semester plan.

What you can do

  • See progress at a glance — degree-completion donut, requirement progress bars, GPA totals, credit-hour totals, and major/minor labels.
  • Expand every requirement — inspect completion status, remaining hours or courses, grades, semesters, and the courses counted toward each rule.
  • Manage audit history — view cached audits in the popup, open a selected audit, rename it, and sync uncached results in the background.
  • Plan by semester — switch between Audit and Planner views, drag eligible courses between semesters, and add future semesters.
  • Find courses easily — search a bundled UT course catalog by text, department, and lower/upper division.
  • Get Core recommendations — surface catalog courses that match recognized UT Core Curriculum requirements and add them as planned courses.
  • Keep your preferences — sidebar state, view mode, selected audit, and light/dark mode persist in the browser.
  • Enter from UT Direct — an inline banner on the audit landing page opens the enhanced experience.
  • Stay in the UT workflow — the extension can open UT Direct, run a new audit, detect expired sessions, and refresh audit data without a Degree Audit Plus account.

Stack: React · TypeScript · Tailwind CSS · WXT/Vite · Dexie/IndexedDB · dnd-kit · Bun

Architecture

The extension is organized around feature-owned modules with strict one-way dependencies. We follow a deep module style of software design to "hide" logic. Audit state and persistence are the shared seam; the dashboard, planner, popup, and course search consume that state rather than maintaining competing copies.

<style class="style-fonts"> @font-face { font-family: Excalifont; src: url(data:font/woff2;base64,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); } @font-face { font-family: Nunito; src: url(data:font/woff2;base64,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); }</style>Degree Audit PlusUT Directlogin, history, resultsBundled UT catalogut-courses.jsonSession moduleCatalog IndexedDBAudit acquisitionBrowser storageAudit [provider + helpers]DashboardPlannercontent script parsesbackgrouxnd openshidden result tabshistory, requirements,completed/planned coursesselects an auditcalculates progressgropus coursesCRUD for planner coursescookie watch + authsearch + Core lookup The main folders are:

entrypoints/              WXT background, content, popup, and audit-page entrypoints
features/audit/           Audit state, persistence, calculations, and mutations
features/audit-scraping/  UT Direct parsing, session-aware scraping, and sync
features/dashboard/      Progress dashboard and navigation UI
features/planner/         Semester planning and drag-and-drop behavior
features/course-search/   Catalog search, recommendations, and add-course flow
features/catalog/         Bundled catalog, Dexie schema, and catalog tooling
domain/                   Framework-free application types and semester helpers
components/               Shared UI primitives and application components
tests/                    Parser, catalog, audit, and controller coverage

See docs/architecture.md for the full dependency graph and runtime flows. ESLint enforces the documented feature boundaries.

Local development

Requirements

  • Bun — the version family is declared in mise.toml
  • A Chromium- or Firefox-based browser
  • A UT Direct session for testing real audit data

Run the extension locally

bun install
bun run dev

Then open chrome://extensions, enable Developer mode, choose Load unpacked, and select:

.output/chrome-mv3

For Firefox, use bun run dev:firefox and load the generated Firefox output.

Useful commands

Command Purpose
bun run dev Watch and rebuild the Chrome extension
bun run dev:firefox Watch and rebuild the Firefox extension
bun run build Create a production Chrome build
bun run build:firefox Create a production Firefox build
bun run compile Type-check the project
bun run lint Run ESLint, including architecture boundaries
bun test Run the test suite
bun run format:check Check Prettier formatting
bun run catalog:validate Validate the bundled catalog data

To refresh the catalog during development:

bun run catalog:refresh
bun run catalog:validate

Future directions

Area Direction
Major-aware recommendations Tailor course suggestions to a student’s major, minor, and remaining requirements.
Richer planning tools Improve the semester-planning interface and make long-term plans easier to manage.
Advisor collaboration Support safe audit sharing or export for review with academic advisors.
Multi-audit support Compare and combine audits for multiple programs, minors, or planning scenarios.

Contributing

1. Set up the repository

git clone https://github.com/Longhorn-Developers/Degree-Audit-Plus.git
cd Degree-Audit-Plus
bun install

2. Run the extension

Start the WXT development build:

bun run dev

Load .output/chrome-mv3 as an unpacked extension from chrome://extensions. See Local development for Firefox and browser setup details.

3. Make a focused change

git switch -c feat/short-description

Keep changes within the feature that owns the behavior. Avoid unrelated refactors, new abstractions for one-off logic, and unnecessary dependencies. Update tests and documentation when behavior or setup changes. Do not commit .output/, .wxt/, dependencies, secrets, or personal UT Direct data.

4. Verify before submitting

bun run format:check
bun run compile
bun run lint
bun test

For UI changes, manually verify the affected surface in the unpacked extension and include a screenshot or short recording in the pull request when useful.

5. Commit and open a pull request

Use Conventional Commits:

git add README.md path/to/changed-files
git commit -m "feat: improve audit planner"
git push -u origin feat/short-description

Open a pull request against main. A good PR includes:

  • A short summary of the problem and solution
  • Tests and commands run
  • Screenshots for visual changes
  • Known limitations or follow-up work

Keep pull requests small enough to review. CI checks formatting, types, lint rules, tests, and the production build before merge.

License and Team

Degree Audit Plus is released under the MIT License.

This is an independent, student-led project by Longhorn Developers. It is not affiliated with or endorsed by The University of Texas at Austin. Always confirm your academic plan with your academic advisor.

Releases

Packages

Used by

Contributors

Languages