Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/alexjohntomy/you-eye-sea/llms.txt

Use this file to discover all available pages before exploring further.

YouEyeSea displays grade data sourced from UIC’s Office of Institutional Research. To run a local instance with real data, you need to download the official CSVs, place them in the right directory, run the seed script, and then generate the search cache files.

Get the CSV files

UIC publishes semester-by-semester grade distribution data at: https://oir.uic.edu/data/student-data/grade-distribution/ Download the CSV files for whichever semesters you want to include. Each file covers one semester of grade data.

Place the files

Put each CSV in the prisma/grade_distribution_data/ directory:
prisma/
└── grade_distribution_data/
    ├── fall_2023.csv
    ├── spring_2024.csv
    └── fall_2024.csv
The seed script uses the file basename (the filename without the extension) as the semester identifier stored in the database. For example, a file named fall_2024.csv produces records with semester = "fall_2024". Before re-seeding a semester, the script deletes all existing CourseInstance rows for that semester, so re-running it on the same file is safe and idempotent.

CSV column format

The seed script expects the following columns in each file. These match the headers used in UIC’s official exports:
ColumnDescription
DEPT_CDDepartment code (integer)
DEPT_NAMEDepartment name
CRS_NBRCourse number
CRS_SUBJ_CDCourse subject code (e.g. CS, MATH)
CRS_TITLECourse title
Primary_InstructorInstructor full name
Grade_RegsTotal students registered for a grade
ACount of A grades
BCount of B grades
CCount of C grades
DCount of D grades
FCount of F grades
ADVAdvanced standing credit
CRCredit
DFRDeferred
IIncomplete
NGNo grade
NRNot reported
OOther
PRProgress
SSatisfactory
UUnsatisfactory
WWithdrawn
Rows missing a Primary_Instructor, DEPT_CD, CRS_SUBJ_CD, or CRS_NBR are skipped automatically.

How the seed script works

The seed script at prisma/seed.ts uses PapaParse to parse each CSV and then upserts records into four Prisma models:
  1. Professor — upserted by name. Each unique Primary_Instructor value becomes one professor record.
  2. Department — upserted by DEPT_CD. Each unique department code becomes one department record.
  3. Course — upserted by the composite key (CRS_SUBJ_CD, CRS_NBR). Each unique subject+number pair becomes one course record linked to its department.
  4. CourseInstance — bulk-inserted at the end. Each row in the CSV (after deduplication of professors, departments, and courses) becomes one course instance record, carrying all 17 grade counts, the total_students value from Grade_Regs, and the semester identifier derived from the filename.
The script deletes existing CourseInstance rows for the same semester before inserting, which lets you re-run it safely after correcting a CSV.

Run the seed script

npx prisma db seed
Prisma reads the seed command from prisma.config.ts, which runs tsx prisma/seed.ts.
Seeding a large semester CSV (several thousand rows) can take a few minutes. The script logs each completed row to the console so you can track progress.

Generate the search cache

After seeding, run the cache generator to produce the static TypeScript files that power the fuzzy search:
npm run generate-cache
This queries the database and writes three files to the project root:
FileContents
courseList.tsxArray of { subject, number, title, professor } objects for every distinct course+professor combination
professorList.tsxMap of professor ID → name
subjectList.tsxArray of distinct subject codes
Re-run npm run generate-cache any time you seed new semesters so that the search index reflects your latest data.

Next steps

With data loaded, start the development server to see it in the UI:

Development workflow

Run the local dev server and build the app for production.

Build docs developers (and LLMs) love