Course: COSC 4P02 Group 8
Project: Code Submission Similarity Checker for Academic Integrity
Live Link: https://www.codesimilar.com/
- Project Overview
- Features
- Technologies Used
- Getting Started (Docker)
- Service URLs
- Project Structure
- How to Use GitHub for This Project
- Contributing
- Contact
This project is designed to help instructors in COSC 4P02 check students’ code submissions for academic integrity. The system will support uploads (C, C++, Java), store submissions across semesters, anonymize students for privacy, and generate similarity reports instructors can review in a web interface.
This repository is scaffolded as a Dockerized full-stack monorepo:
- Frontend web UI
- Backend API
- PostgreSQL database
- MinIO object storage (S3-compatible) for uploaded files/blobs
Implemented (current scaffold / plumbing)
- Docker Compose stack that starts the system with one command
- Frontend page that calls the backend and displays a status message
- Backend endpoints:
/and/health+ Swagger/OpenAPI docs - Persistent local volumes for Postgres and MinIO
Planned (core project functionality)
- Submission upload + storage
- Organization by course/assignment/semester
- Similarity analysis engine (no AI)
- Anonymization + instructor dashboard and side-by-side comparisons
- Frontend: React + TypeScript + Vite (built and served by Nginx in Docker)
- Backend: Python FastAPI (Uvicorn)
- Database: PostgreSQL 16
- Object Storage: MinIO (S3-compatible)
- Orchestration: Docker + Docker Compose
- Version Control: Git + GitHub
- Install Docker Desktop (Windows/macOS) or Docker Engine (Linux)
- Install Git (optional if you already have the repo locally)
git clone https://github.com/your-username/your-repo-name.git
cd your-repo-nameFrom the repository root:
docker-compose up --buildIf your Docker supports the newer syntax, this also works:
docker compose up --buildFor production-like deployments, set a separate ENCRYPTION_KEY for stored student data and keep any previous value in ENCRYPTION_LEGACY_KEYS while old ciphertext still exists. SECRET_KEY should remain reserved for authentication/session concerns.
To stop containers:
docker-compose downTo stop and wipe local data volumes (Postgres/MinIO):
docker-compose down -vOnce Docker Compose is running:
- Frontend: http://localhost:3000
- Backend API: http://localhost:8000
- Backend Swagger Docs: http://localhost:8000/docs
- Backend Health Check: http://localhost:8000/health
- MinIO API (S3 endpoint): http://localhost:9000
- MinIO Console: http://localhost:9001
- Default credentials (dev):
- Username:
minioadmin - Password:
minioadmin
- Username:
- Default credentials (dev):
The backend is currently configured with permissive CORS for development so the frontend (port 3000) can call the backend (port 8000). Tighten this before production.
High-level layout:
backend/— FastAPI servicefrontend/— React/Vite app + Nginx configdocker-compose.yml— Orchestrates frontend + backend + Postgres + MinIOdraw.io/— Diagrams (store.drawiofiles here)- Example:
draw.io/Instructor_sequence.drawio
- Example:
documentation/— Documentation (requirements, architecture notes, meetings, reports)
Recommended team workflow:
- Create a branch per feature/task:
git checkout -b feature/<short-name>
- Commit small, meaningful changes.
- Open a Pull Request (PR) into
main. - Use PR reviews to catch issues early and avoid conflicts.
- Keep diagrams in
draw.io/and written docs indocumentation/.
- Keep PRs focused (one feature/fix per PR)
- Update docs when setup/ports/env vars change
- If you change Docker ports or service names, update
docker-compose.ymland this README