CSCI 338: Spring 2025

Software Engineering

CSCI 338: Spring 2025

Assignments > Project 2: Full Stack Application: Student Academic Management Tool

Due on Tue, 05/06 @ 11:59PM. 20 Points.

new Video Walkthroughs

Part of the Stack Video Length
1 Overview Introduction to the system architecture 12:11
2 Overview Docker development environment 6:27
3 Overview Docker production environment 4:51
4 Python Web Server How the SQLAlchemy setup works 11:54
5 Python Web Server How to make a new SQLAlchemy model and database table 18:46
6 Python Web Server How to make a FastAPI Endpoint 9:18
7 Python Web Server Understanding the Depends module and Pydandic 9:56
8 Deployment Supabase (for the PostgreSQL Database) 6:35
9 Deployment Render (for the Python + React Web App) 10:25
10 Deployment GitHub Actions (CI/CD) 17:11
11 UI / React Walkthrough of existing UI code 13:01
12 UI / React Todo Component Stub 12:58
13 UI / React Display TODOs in UI 7:34
14 UI / React + Server Filter by logged-in user 9:04

Learning Objectives

This project is designed to give you practice working with real-world software engineering tools and practices including:

  1. Version Control Workflows & DevOps
    • Extending and contributing to an existing codebase.
    • Using version control workflows (branches, commits, merges, pull requests).
    • Working within the continous integration pipeline (linting, testing, GitHub Actions).
    • Debugging and troubleshooting deployment issues in a realistic environment.
    • “Everything as code” – managing your dependencies, containers, continuous integration pipelines, and infrastructure configurations in declarative files (e.g., package.json, pyproject.toml, Dockerfile, compose.yml, GitHub workflow .yml files).
    • Deploying a full-stack app to a cloud platform (e.g., Render, Railway, or Fly.io).
  2. Project Management & Communication
    • Creating a shared project plan, assign tasks, and manage progress.
    • Communicating effectively with teammates during development.
    • Identifying meaningful new features that add value to a real-world academic planning tool.
    • Translating ideas into working, testable software components.
  3. Programming
    • Designing and implementing new backend routes using FastAPI.
    • Creating and using new SQLAlchemy models to represent domain concepts.
    • Building corresponding frontend screens with React and TypeScript.
    • Connecting frontend and backend using RESTful API conventions.
    • Writing tests

Project Overview

The goal of this project is to extend a partially completed Academic Planning web application built with React (frontend), FastAPI (backend), and PostgreSQL (database) using SQLAlchemy (ORM).

This tool currently supports basic features like viewing available courses and adding them to a schedule. Your job is to enhance it by designing and implementing two new API routes, two new models, and two corresponding screens in the frontend. Your additions should provide real value to users—think creatively about what students, advisors, or faculty might need in a planning tool.

In addition to coding, this project emphasizes collaboration, version control workflow, and deployment. You’ll be expected to use Git to manage your work, open Pull Requests for review, and deploy your final project to a cloud platform.

You’ll work in small teams, planning features together, dividing work, resolving conflicts, and managing deadlines. Use your project management skills to create a plan and iterate toward a polished final product.

Roles and Responsibilities

There are many different roles that are necessary to make your project successful. Talk with your team around dividing up these roles. Multiple people can share a role; people can also rotate in and out of roles. You get to decide.

Role & Focus Responsibilities
1 Project Manager: Communication, planning, coordination
  • Facilitate planning meetings and daily check-ins
  • Coordinate task breakdown and assignments
  • Maintain a task board (Trello, GitHub Projects, etc.)
  • Keep team on schedule and within scope
  • Communicate with the instructor if blockers arise
  • Reviewing and signing off on pull requests
2. Backend: FastAPI routes and application logic
  • Design and implement new API endpoints
  • Coordinate with frontend and database on interfaces
  • Write request/response schemas (Pydantic models)
  • Implement business logic and validation
  • Write unit tests for backend functions
3. Database: SQLAlchemy models and PostgreSQL schema
  • Design and implement SQLAlchemy models and relationships
  • Plan and apply database migrations
  • Seed database with sample data
  • Optimize queries
  • Collaborate with backend on data models
4. Frontend/UI: React components and user experience
  • Build new screens for added features
  • Connect frontend to new API routes
  • Ensure responsive, accessible UI
  • Manage state effectively
  • Reuse components where possible
5. DevOps & Deployment: Infrastructure, deployment, CI/CD
  • Set up or maintain deployment (Render, Railway, Fly.io)
  • Manage environment variables and secrets
  • Write deployment documentation
  • Troubleshoot cloud issues
  • Optionally add CI/CD pipelines
6. QA / Testing: Testing, bug tracking, polish
  • Write and run unit/integration/manual tests
  • Track and report bugs
  • Coordinate end-to-end testing
  • Ensure a clean, professional user experience
7. Documentation & Demo: Docs, polish, final presentation
  • Write setup and usage documentation (README.md)
  • Create screenshots, gifs, or a demo video
  • Help prepare final presentation
  • Ensure codebase is organized for review/demo

Starter Code

The starter code provided to you includes the following:

Backend Starter Code

Frontend Starter Code

Declarative System Files

Team Assignments

Your teams are listed below. Each member of your team has been assigned a task from the GitHub Issue Tracker. Some of you will be working on the same Python class, so make sure you only work on the tasks to which you were assigned:

Team 1

Please see your team’s repo and issue tracker for more information. Members of your team are:

1. Anis agolriz714 Implement the Course class
2. Simon sstout660 Implement the Courses class
3. Ethan EPC233 Implement the UserPreferences class
4. Tristan DaemonTokisaki Implement the CourseFilter class
5. Ben blynch87 Implement the UI functions (ui.py)
6. Dawson Dawsonmaz13 Implement the Schedule class (except for send_email)
7. Vlad vlkrvc Implement the send_email method of the Schedule class

Team 2

Please see your team’s repo and issue tracker for more information. Members of your team are:

1. Ellie KailaBtw Implement the Course class
2. Nathan nhouston125 Implement the Courses class
3. Robin RobinPhillips98 Implement the UserPreferences class
4. Darby dsims2888 Implement the CourseFilter class
5. Matias MHWunca Implement the UI functions (ui.py)
6. Ryan reneuherz064 Implement the Schedule class (except for send_email)

Team 3

Please see your team’s repo and issue tracker for more information. Members of your team are:

1. Connor PhoenixUltra Implement the Course class  
2. Olle OlleSL Implement the Courses class
3. Nikko NikkoCC Implement the UserPreferences class  
4. Henry wshaw1 Implement the CourseFilter class  
5. Lucas lucas-simmons Implement the UI functions (ui.py)  
6. Max GiggleMonster Implement the Schedule class (except for send_email)  

Team 4

Please see your team’s repo and issue tracker for more information. Members of your team are:

1. Given givensuman Implement the Course class
2. Tyler Swissssst Implement the Courses class
3. Caleb TerminalCalamitas Implement the UserPreferences class
4. Bryan bmartin19 Implement the CourseFilter class
5. Chris ChrisB220 Implement the UI functions (ui.py)

Potential Project Ideas

Your team will extend a partially completed Academic Planning web application, but feel free to interpret this assignment broadly. Possible ideas include:

  1. Course Planner. Enhancing the schedule UI by displaying a weekly calendar of their courses; allowing students to map out the remaining courses they’re thinking of taking.
  2. Study Group Manager. Matches students with peers based on shared courses and availability; could include a chat or note-taking feature; each course could have an area for taking notes, uploading screenshots, etc.
  3. Internship / REU Tracker. Assists students in tracking job applications and networking contacts; helps plan how to incorporate course assignments/projects into a resume, LinkedIn, GitHub, or portfolio.
  4. Task / Assignment Tracker. Users log assignments, deadlines, and progress for each course; could include email/text notifications.
  5. Work/Life Balance Support. Helps students consider how coursework supports other life priorities.
  6. Some other idea of your choice… Feel free to propose your own interpretation of this assignment. Creativity is encouraged.

Deliverables

Week Milestone Due Link
Week 1 Set up repo, install Docker dependencies, run the app locally, familiarize with code, submit project description (1-page plan, basic wireframe, API endpoint descriptions). 4/14 Project 2a
Week 3 Midpoint Deliverable: Working modifications to backend and frontend + Cloud deployment. 4/25 Project 2b
Week 5 Final presentations. 5/6 In class
  Final Submission – Complete project, presentation, and final GitHub push. 5/6 Project 2c

Grading Criteria (100 Points)

Category Points Description
Project Proposal 5 1-page plan, basic wireframe, API endpoint descriptions.
Midpoint Deliverable 10 At least 1 meanful feature is implemented per teammate.
Backend Functionality 20 API and database work correctly (CRUD operations) + Tests.
Frontend Functionality 20 React app interacts successfully with the API.
Cloud Deployment 15 The app was successfully deployed.
UI/UX Design 10 Simple but intuitive frontend.
Code Quality 15 Clean, modular, readable code with meaningful commits and tests.
Final Presentation 5 5-minute demo with a clear feature explanation.

Minimum Required Features

All teams must:

Optional Stretch Goals (Extra Credit)

Each feature below is worth 5 points (maximum of 10 extra points):

  • Calendar API integration (sync with Google Calendar).
  • Collaboration/chat features – Share schedules, chat with other logged-in users.
  • Email or text notifications for schedule updates or reminders.
  • Automated course data updates – Periodically refresh course listings from the Meteor site.
  • Waitlist feature – Display real-time seat availability and send notifications when a course opens.
  • Admin dashboard:
    • Allow instructors/admins to modify course offerings.
    • Provide analytics on course popularity.
  • UI Enhancements:
    • Add dark mode.
    • Improve keyboard navigation and screen reader compatibility.
    • Ensure full responsiveness and mobile-friendliness.
  • Propose your own stretch goal!