Final Project
topic proposal due by 9:00 p.m. on Friday, 4/11/25
checkpoint deliverable due by 9:00 p.m. on Friday, 4/18/25
complete project due by 9:00 p.m. on Thursday, 5/1/25
Late submissions will not be accepted.
Learning Objectives
By completing this project students will:
-
Gain experience define project requirements and explaining those requirements in writing.
-
Develop a full-stack web application of some complexity, using the model-view-controller paradigm and a web framework.
-
Create a video artifact of their project, suitable to show to potential employers.
-
Develop and sharpen their debugging skills across a complex application
Description
You will develop a web application with a database back-end for storage and retrieval of data. Choose your own adventure: select a subject matter related to your major or personal interests.
This is an individual project (i.e., no groups or teams), and counts for 30% of your course grade.
Examples
Some sample CS412 projects ideas include:
- Sports league with teams, schedule, win/loss records & standings
- Car rental and return
- Store/restaurant with ordering system
- Social network (must go well above and beyond class case study)
Detailed Requirements
Your application must be written using the Django web framework for Python, and must satisfy the following minimal requirements:
-
Use at least 4 models, with foreign-key relationships between them (i.e., they must not all be stand-alone or “orphan” models). One model must be able to exist without a foreign key, and other model(s) could refer to it.
-
Include interfaces (forms) for CRUD operations (creating, retrieving, updating and deleting records). It is not required that every data model demonstrates all 4 CRUD operations, but you must demonstrate each operation at least once.
-
Create appropriate views to implement the above operations, using a combination of generic class-based views where possible and function-based views where the use of generic views is not possible (or too complicated).
-
Implement an appropriate URL-mapping scheme to connect URLs to your views.
-
Create and use multiple HTML templates, such that different operations are displayed on different page views. Also, use links or forms to navigate between pages/views.
-
Implement searching or filtering data in some capacity, to produce some kind of meaningful report based on your data (i.e., more than simply linking to records by their foreign key).
-
Create a visually-appealing interface.
You may create the front end using Django templates/HTML/CSS, or any other front end technologies that you choose. Use of additional front-end toolkits (e.g., React, Angular) is permitted but not required. These must be well documented, and you might be asked to explain how these work to verify that you did the work yourself.
More complex projects scoring higher than very simple projects that mimic in-class assignments. The grading breakdown will be approximately as follows:
-
20% for submission of topic proposal and checkpoint deliverable(s) on time.
-
20% for data models: data representation, creation, updates, deletion, data types, relationships between models, use of the Django ORM.
-
20% for the views: logic and functionality, and the general complexity of the project.
-
20% for the user interface, aesthetics and styling.
-
20% for documentation, including header comments, documentation strings, and thorough explanation of how each method/function works.
Planning Your Time
You have approximately 4 weeks to complete this project. Here are some guidelines on what you should be working on at what time:
Week 1 (through 4/11/25):
Select your topic; submit on Gradescope by 9:00 p.m. on Friday, 4/11/25
Your proposal should be brief (about 3-4 sentences) and describe the general subject
matter (e.g., car rental), the specific interaction you will model (e.g., car selection and
checkout), the data you will require for this interaction, and any important assumptions.
For the data, please be as specific as possible able the names of models and what kinds of fields are in each model.
You MUST identify which models relate to other models by a Foreign Key relationship (see example below). Briefly:
-
A model that can stand on its own, without requiring the existing of any other model data does not require a foreign key.
You will need to have at least one model that does not require any foreign keys.
-
A model that requires an existing record of another model type as part of its definition requires a foreign key of that other model type.
-
Your models must be related to each other, i.e., each model must have either a foreign key to another model, or must be the primary key to which another model relates. Perhaps, depending on your application, you will have a model that requires 2 foreign keys, or else 2 models with 1 foreign key each.
Example: Successful Project Proposal (1)
The following is an example of the level of detail that is required in the proposal.
My project will model a car rental application used by the customer to search for and reserve a car rental. The customer will browse a listing of cars, select a car, and book the car for specific rental dates to complete a transaction. I will assume that cars already exist in the rental database. I will provide a way for customers to sign up/create a new customer account.
The required data models for this application are:
-
Customer:
- last name (text)
- first name (text)
- address (text)
- email (text)
- date of birth (date)
- driver’s license number (text)
-
Car:
- vehicle ideification number (text)
- year (number)
- make (text)
- model (text)
- color (text)
- car type (text)
- image (image file)
- price per day (number)
-
Rental:
- car (Foreign Key to Car)
- customer (Foreign Key to Customer)
- date out (date)
- date in (date)
- total price (number)
** notes: one rental requires 2 foreign keys: both a
Car
and aCustomer
This example uses only 3 models, but 4 are expected in the project.
Example: Successful Project Proposal (2)
The following is an example of the level of detail that is required in the proposal.
My project will model an online book store. It will allow users to search for books, add them to an order, and check-out their order. I will assume that books are already in the application, and that payment is handled externally. I will provide a way for customers to sign up/create a new customer account.
The required data models for this application are:
-
Book:
- title (text)
- author (text)
- year_published (number)
- price (number)
- image (image file)
-
Customer:
- last name (text)
- first name (text)
- address (text)
- email (text)
-
Order:
- order_date (date)
- customer (Foreign Key to Customer)
- status (choice of: “cart”, “shipping”, “complete”)
-
OrderItem:
- order (Foreign Key to Order)
- book (Foreign Key to Book)
- quantity
note: an
Order
is a specific transaction for oneCustomer
, but it might contain multipleBooks
, or multiple quantities of oneBook
. EachBook
is anOrderItem
within anOrder
.
The goal of this topic proposal is for you to be prepared to begin building the application. Until you can explain which models you need, the data attributes of those models, and the relationships between them (i.e., the foreign keys), you are not ready to build the application.
Submit this on Gradescope.
Projects on unapproved topics will not be accepted.
Week 2 (through 4/18/25):
-
Begin a new application within your existing Django project, called
project
. Do all of your work under this app, so that your existinggit
repository andHeroku
deployment website will work for this application as well. -
Create your data models in Django. Create some initial data (3-5 records for each model) using the Django admin tool.
checkpoint deliverable 9:00 p.m. on Friday, 4/18/25For your checkpoint deliverable, you will submit:
- your
models.py
file - a PDF containing screenshots of each of a listing of your records, in the Django admin tool.
Submit this on Gradescope.
- your
-
Create a basic web application to view your data, using the generic
ListView
andDetailView
views where appropriate. -
Create templates and test that you can see all of your data as expected, and create navigation links between the different pages.
-
Begin building your interaction(s) via forms.
Week 3 (through 4/25/25):
-
Continue building your interaction(s) via forms, and writing the views to process these form submissions.
-
Debugging, refine data models as needed
-
Add additional interactions to increase the scope/complexity of the project
Week 4 (through Thursday 5/1/25):
-
Debugging, refine data/views as needed
-
Continue adding additional interactions to increase the scope/complexity of the project
-
Work on the look and feel of the project (clean up HTML, CSS, tables, fonts, colors, images)
-
Documenting your code with comments
-
Prepare your short presentation of the project (plan for a 3 minute demo video)
complete by 9:00 p.m. on Thursday 5/1/25
Late submissions will not be accepted.
Project Demonstration Video
You will present your project by making a short (3 minute) video screen capture, with you narrating as you demonstrate the application. Think about this as a demonstration for a potential customer or employer. This will speed the grading, and provide you with a lasting artifact of your work, which you can demonstrate to potential employers. Your demonstration must not show any code or database records, but must demonstrate every major feature of your application.
I recommend that you write a brief outline of what you will show in which order.
Then, use a screen capture tool (I suggest QuickTime player for Mac or Tiny Take for
Windows or any similar program). Record your video, and post it to YouTube
(a private/unlisted URL is fine; do not submit .mp4
or `.mov
files or upload
to a google drive – this makes it hard for us to see).
Save the URL into a text file called video_url.txt
, and put it in your
main project repository (so it will upload to git).
Deployment and Submitting Your Work
Be sure to name your files correctly!
-
Create a text file within your main django directory called
project_url.txt
, containing the URL to your web page, and nothing else.For example:
https://cs-webapps.bu.edu/azs/cs412/mini_fb/
.This file will be used by the autograder to locate your web page, so you must get the URL exactly correct, and you must not include any other text or code in the file.
-
Add teaching staff as collaborators to your GitHub repository (
wderocco8
,Aanuszkiewicz
, andazs-bu
). Read-only access is fine.Create a text file called
github_url.txt
in the root of your project (e.g.,django
directory). Paste your GitHub URL in the file.Add these files to your git repository using
`git add -A`.
Commit this to your git repository, using
`git commit -m "Added project_url.txt"`
Push it to GitHub, using
`git push origin main`
-
Log in to GradeScope to submit your work.
In the Gradescope upload page, upload these two files:
-
project_url.txt
-
github_url.txt
-
Notes:
-
Upload these files to Gradescope before the deadline.
-
When you upload, the autograder script will process your file(s).
-
You may resubmit as many times as you like before the deadline, and only the grade from the last submission will be counted.
Academic Honesty and Collaboration
Cooperation is recommended in understanding programming concepts and system features. But the actual solution of the assignments including all programming must be your individual work. For example, copying without attribution any part of someone else’s program is plagiarism, even if you have modified the code. The University takes acts of cheating and plagiarism very seriously; first time violators are routinely suspended for a semester.
Reminders
In your work on this assignment, make sure to abide by the collaboration policies of the course.
If you have questions while working on this assignment, please post them on Piazza! This is the best way to get a quick response from your classmates and the course staff.
Important Guidelines: Comments and Docstrings
-
Refer to the class Coding Standards for important style guidelines. The grader will be awarding/deducting points for writing code that comforms to these standards.
-
Every program file must begin with a descriptive header comment that includes your name, username/BU email, and a brief description of the work contained in the file.
-
Every function must include a descriptive docstring that explains what the function does and identifies/defines each of the parameters to the function.