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.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.
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 theprisma/grade_distribution_data/ directory:
CSV column format
The seed script expects the following columns in each file. These match the headers used in UIC’s official exports:| Column | Description |
|---|---|
DEPT_CD | Department code (integer) |
DEPT_NAME | Department name |
CRS_NBR | Course number |
CRS_SUBJ_CD | Course subject code (e.g. CS, MATH) |
CRS_TITLE | Course title |
Primary_Instructor | Instructor full name |
Grade_Regs | Total students registered for a grade |
A | Count of A grades |
B | Count of B grades |
C | Count of C grades |
D | Count of D grades |
F | Count of F grades |
ADV | Advanced standing credit |
CR | Credit |
DFR | Deferred |
I | Incomplete |
NG | No grade |
NR | Not reported |
O | Other |
PR | Progress |
S | Satisfactory |
U | Unsatisfactory |
W | Withdrawn |
Primary_Instructor, DEPT_CD, CRS_SUBJ_CD, or CRS_NBR are skipped automatically.
How the seed script works
The seed script atprisma/seed.ts uses PapaParse to parse each CSV and then upserts records into four Prisma models:
Professor— upserted by name. Each uniquePrimary_Instructorvalue becomes one professor record.Department— upserted byDEPT_CD. Each unique department code becomes one department record.Course— upserted by the composite key(CRS_SUBJ_CD, CRS_NBR). Each unique subject+number pair becomes one course record linked to its department.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, thetotal_studentsvalue fromGrade_Regs, and the semester identifier derived from the filename.
CourseInstance rows for the same semester before inserting, which lets you re-run it safely after correcting a CSV.
Run the seed script
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:| File | Contents |
|---|---|
courseList.tsx | Array of { subject, number, title, professor } objects for every distinct course+professor combination |
professorList.tsx | Map of professor ID → name |
subjectList.tsx | Array 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.
