Skip to content

zsrobinson/scoresight

Repository files navigation

ScoreSight

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.

Design Document

Brand

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

Scope

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.

MVP Features

  • 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)

Reach Features

  • 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

Tech

  • 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:
    1. login with user account from client, basically client side render everything
      • might be more "direct" and almost seems intended by the pocketbase client api
    2. 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
  • 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 or scoresight.vercel.app
  • other libraries:

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)   │                                                        
    └───────────────────┘

About

The simple way to submit, manage, and grade assignments.

Resources

Stars

Watchers

Forks