Final Project

The final project is your opportunity to show us all you've learned throughout the course and build something cool in the process. We encourage you to use it as a chance to create something relevant to your interests, such as to support a group or organization you work with or create a tool you would find useful.

Updates

We will update this page with additional information throughout the quarter. Here is a summary of notable changes:

Due dates

All due dates have a 48-hour grace period unless otherwise specified.


Overview and requirements

For the project, you will build a complete web application, using the technologies and skills covered throughout the course. It is very open-ended; we define only a number of high-level requirements that your project needs to hit to receive full credit.

Logistics

Individual: The project must be completed individually; two or more students cannot work jointly to create a single app. However, if you would like to integrate your project with another app or API, including another student's project, this may be possible, as long as the scope of the project is clearly defined and meets the requirements. For example, two students could each create a frontend page and backend API that all connect to each other. In contrast, one student cannot exclusively build the frontend while another exclusively works on the backend.

Third-party code: External libraries may be useful in performing many tasks, such as creating data visualizations or connecting to external services. You are permitted to use third-party libraries or incorporate external code into your project (licensing and copyright permitting), but that code must not fundamentally change the organization and structure of your application. For example, using a library to create a graph, map, etc. on the page is fine, but you may not use jQuery, Bootstrap, React, or another frontend framework that completely changes how you interact with the DOM and events. You must clearly identify the libraries and external code you use. Such code will not be graded and will not count toward the functionality requirements.

Assignment and support code: You are welcome to use and adapt code from your assignments if you wish, including code we provided in the starter projects and any code you wrote. Also, if there are specific things you'd like to do that are a bit beyond the scope of what we covered in class, we can try to help you by providing some support code.

Scope: As you will only have a few weeks to work on the project, it is a good idea to plan for a relatively small project to make sure you will be able to complete something that meets the requirements. You can always set stretch goals to work on if you have time, but in our experience, the end of the quarter tends to creep up on us before we know it.

Collaboration policy: To accommodate the above logistics, we have a section of the collaboration policy specifically for the project. Please review it and reach out to us if you are unsure of how it applies to your situation.

Technical requirements

To receive full credit, your project must meet all of the following requirements:

Functionality

  • Frontend HTML and CSS
    • Overall page structure written in HTML (not dynamically generated)
    • Page layout defined in CSS
    • Uses CSS classes and ids
    • Uses Flexbox, font and text styling, and the box model (margin, border, padding)
  • Frontend JavaScript
    • Add event handlers to support user interaction
    • Create, modify, or remove DOM elements
    • Use classes and modules to organize frontend code (at least two classes)
    • Use fetch to access your backend
  • Backend JavaScript
    • Written in Node and Express
    • Defines multiple routes, including one GET and one non-GET route
    • Uses a route parameter
    • Reads a JSON request body and returns results in JSON
    • Uses a MongoDB database to store persistent data

Your page only needs to work on modern browsers.

Style

These requirements are the same as the criteria we use to grade assignments:

  • Use semantic HTML elements (e.g. rather than making everything a div)
  • Write maintainable CSS that takes advantage of inheritance and combining selectors
  • Write robust JavaScript that is decomposed and uses modern features and best practices while avoiding obsolete ones
  • Use async/await to handle API and database access

Extra features

While not required, you will receive extra credit and kudos for incorporating some of the full-stack topics we cover toward the end of the quarter. Depending on your project, these may be particularly important to make your app most useful and impactful. These topics include

  • Making your app mobile-friendly
  • Making sure your app is accessible to people using assistive technology
  • Integrating your app with an authentication service (e.g. "Sign in with Google"). (You should not try to implement your own password/authentication system.)

Not Graded

We will not grade your project on aesthetics, originality, or "usefulness." We look forward to seeing your many great ideas, but do not worry about having to make a project that has never been done before or "looks interesting."

Example projects

Here are a few projects that have been done in the past. You may rehash one of these if you wish. Note that some of these projects will be more complex than others.

If we hear about opportunities that might make an interesting project, we will post them on the Ed forum.


Proposal

The first step of the project is to submit a short proposal. This allows the teaching staff to give you feedback before you get too deep into writing code, as well as confirm the logistics (e.g. collaboration and libraries) relevant to your project.

Download the template for the proposal and fill it in. You don't need to "pitch" your idea to us; just tell us what you're thinking of doing.

Once you're done, submit it as proposal.txt on Paperless.

Your project needn't be set in stone once you submit the proposal. You may later discover additional libraries or APIs that would be useful, for example. If you are thinking of completely changing your project, though, please notify the teaching staff as soon as possible so we can give you feedback on your new idea.

Getting started

Here is a starter zip file like the ones given with the assignments. It also includes the templates for the milestone (milestone.txt) and final submission (README.txt).

You should update package.json with your name and email in the author line. You can change the package name, version, and description to whatever you'd like (the name doesn't have to start with @cs193x).

Milestone

For the milestone, we aren't looking for anything specific; we just want to see what progress you have made and make sure you're thinking about the project. As a rough guideline, we're hoping that you have at least a sketch of how your frontend and API will be structures (with specific classes/DOM elements/endpoints) and started implementing either the frontend or backend.

Fill in the milestone.txt template in the project starter zip, and submit the entire project directory to Paperless (without node_mdules).


External libraries and tips

Here are a few examples of external libraries, as well as some general tips/useful tools, that you may find helpful.


Final submission

Notes for the final submission:

Fill in the README.txt file from the starter zip to let us know about your final submission. Then submit your full project directory to Paperless. Be sure to delete the node_modules folder before submitting.

Deploying your final product

We hope that you will want to share your work with the world when you're done. See our instructions to deploy your project on Vercel.

To be clear, you are not required to deploy your project to receive credit for it. We will evaluate the work you have submitted on Paperless. If you would like to include a URL to your working project in your README, though, we'd love to see it!