← back to qubicfold

// project

qubicgrade

Gradebook with a CSV bridge between teacher platforms.

in development private repo · invite-only

A Next.js gradebook for individual instructors that holds grading periods, classes, students, assignments, and scores in Postgres via Prisma. The headline feature is a CSV import / export bridge between two real-world teacher gradebook formats, including fuzzy student-name matching during import. Self-hosted on a single Ubuntu VM with Nginx, PM2, and Let's Encrypt.

// features

  • CSV import detects two teacher-platform formats automatically
  • Levenshtein fuzzy match for "Last, First" vs "First Last" names
  • Round-trip CSV export back to either source format
  • Grade engine separates earned, projected, and final percentages
  • Top-5 assignment impact ranking per student
  • Admin role can provision additional instructor accounts
  • Single-script deploy to Ubuntu with Nginx and PM2

// interesting details

  • Three distinct grade metrics computed in one pass: earned (past-due only), projected (against class max), and final (includes future scored work) — with excused and missing handled as separate branches.
  • Import name matching generates multiple variants per name (first-last, last-first, normalized) then accepts a fuzzy hit when Levenshtein distance is within 30% of the longer string.
  • CSV writer is explicitly designed to round-trip with the parser — same metadata header layout, same fraction-style multi-cell scores, same en-US timestamp format down to AM/PM.
  • Route groups split the Next.js app into (auth) and (app) shells, with the Prisma client emitted into src/generated/prisma for direct typed imports.

// tech stack

TypeScript Next.js 16 (App Router) React 19 Prisma 7 + PostgreSQL NextAuth + bcrypt + JWT Tailwind CSS v4 + shadcn/ui Recharts fast-csv @react-pdf/renderer Jest + Supertest PM2 + Nginx + Let's Encrypt

Want to collaborate on qubicgrade?

The repo is private — drop a note and tell us what brought you here.

request access