Warning
This project is a current work in progress.
ScoreSight is a full-stack web app that aims to provide similar functionality to Gradescope. It allows instructors to easily manage and grade assignments, and students to submit their work and view their grades. This project is designed primarily as a way to practice skills relating to full-stack web development, rather than a tool to be used in the real world.
Subject to change, just trying to get something down so that I don't have to worry about it while doing the project.
- name derived from a synonym for "grade" and a synonym for "scope"
- capitalizing both words for legibility, but not adding a space in between
- display font: Madimi One, with Fugaz One as a backup for a different vibe
- paragraph font: something simple like the system font or Inter
- pretty much just stick to default shadcn/ui theming and monochrome colors
- can change things around later, but want to keep it simple
- language around user roles
- "instructor" to refer to teachers, professors, TAs, etc that have the ability to manage classes
- "owner" to refer to an instructor that manages the class
- "student" to refer to a person in a class
- these roles aren't exclusive to one account, but on a class basis
- i.e. a TA can be an instructor for one class and student for another
I'd like to stay focused on implementing the MVP features before trying to attempt anything else. I'm really just trying to make sure I don't drift to working on things that aren't essential to the core of the app.
- create homework assignments (instructor)
- upload pdf to a homework assignment (student)
- assign pages to assignment questions (student)
- view and grade student homeworks (instructor)
- receive feedback on graded assignment (student)
- add and set roles for extra instructors on a class (instructor)
- upload images to an assignment (student)
- create non-homework assignments, like quizzes and exams (instructor)
- students don't need to upload documents themselves
- upload bulk pdfs to an assignment (instructor)
- implement features from other education sites, like Kahoot or Quizlet
- next.js as the full-stack framework
- (probably) vercel for hosting
- pocketbase as the database and file store
- (probably) run on one of my machines, behind cloudflare tunnel
- two competing patterns for data fetching and mutations:
- login with user account from client, basically client side render everything
- might be more "direct" and almost seems intended by the pocketbase client api
- login with admin account from next.js, basically server side render everything
- would be neat to take full advantage of the new next.js 13 patterns
- (probably) going to do this, plus a mix of the other pattern if I need to do real time update stuff
- login with user account from client, basically client side render everything
scoresight.app
for main app,db.scoresight.app
(probably) for proxy to pocketbase- some other redirects to main url, such as (possibly)
scoresight.zsrobinson.com
orscoresight.vercel.app
- some other redirects to main url, such as (possibly)
- other libraries:
- shadcn/ui (as mentioned) for ui components
- wojtekmaj/react-pdf (probably) to display documents
- pocketbase/js-sdk for accessing the database
- patmood/pocketbase-typegen for typescript things
Mock Database Schema (via MonoSketch)
┏━━━━━━━━━━━━━━━━━━━┓ ┏━━━━━━━━━━━━━━━━━━━┓ ┏━━━━━━━━━━━━━━━━━━━┓
┃ Assignments ┃ ┃ Classes ┃ ┃ Users ┃
┗━━━━━━━━━━━━━━━━━━━┛ ┗━━━━━━━━━━━━━━━━━━━┛ ┗━━━━━━━━━━━━━━━━━━━┛
─ ▶│ id │ ─ ▶│ id │ ─ ▶│ id │
│ ├───────────────────┤ │ ├───────────────────┤ │ ├───────────────────┤
│ name (text) │ │ name (text) │ │ name (text) │
│ ├───────────────────┤ │ ├───────────────────┤ │ ├───────────────────┤
│ type (enum) │ │ owner (key) │─ ─ │ settings (json) │
│ ├───────────────────┤ │ ├───────────────────┤ │ └───────────────────┘
│ class (key) │─ ─ │ instructors (key) │─ ─
│ └───────────────────┘ ├───────────────────┤ │
│ students (key) │─ ─
└ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐ └───────────────────┘ │
┏━━━━━━━━━━━━━━━━━━━┓ │ │
┃ Submissions ┃
┗━━━━━━━━━━━━━━━━━━━┛ │ │
│ id │
├───────────────────┤ │ │
│ user (key) │─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
├───────────────────┤ │
│ assignment (key) │─ ─
├───────────────────┤
│ file (blob) │
├───────────────────┤
│ feedback (json) │
└───────────────────┘