Project: Complete Web App
- Due Monday by 10pm
- Points 10
- Submitting a text entry box
For your project you will design and implement an interactive web application. Your app will be a website that allows users to modify and interact with some data or information on a topic of your choosing. You can build a sophisticated web application of your own design, or create a new web platform for a real client such as a student organization, an artist, a non-profit, or a local business. See the Project Proposal for details about what kinds of apps you might create.
The exact topic and structure of the app is up to you; this project is a chance for you to show off your web development skills. But no matter its form or content, you will need to meet the requirements detailed below.
Objectives
By completing this project you will practice and master the following skills:
- Creating new web pages from scratch
- Applying iterative development and modifying existing web projects
- Writing semantically rich and accessible HTML
- Using CSS to gives pages complex formatting and layouts
- Harnessing media queries and CSS frameworks to produce responsive web pages
- Working with fundamental JavaScript functions and data types
- Structuring a web page using React Components
- Using React props and state to make a web page interactive
- Integrating the Firebase web service for storage
- Designing and implementing a full-featured web application
- Synthesizing skills, tools, and concepts from across the course
Getting Setup
For your final project deliverable you will be working in the same repo you created for the Project Proposal. You will set you that repo to hold a React App as part of the second draft. See that assignment for details.
Project Requirements
This page lists the requirements for the final version project. Note however that many of these requirements you will already have completed as part of earlier drafts, so don't panic if they seem overwhelming here!
App Content and HTML Structure
Your project will need to use well-structured and appropriate HTML to define its content, but implemented using the React framework.
React Components and Structure
Your app will need to be developed using the React framework, following the best practices introduced in this course. This requirement category focuses on your effective use of React Components.
React Interactivity
Your app will need to use React to provide multiple well-designed interactive features. The user must be able to provide input to the page (via e.g., button clicks, form submissions, mouse movements, etc) and see the content of the page change over time in order to achieve some purpose. Your app will need to support at least "two and a half" significant interactive features (the "half" can be a smaller feature). See "Details" below for what we mean by a "feature".
This requirement category also covers the interactive React code needed to enable these features.
Client-Side Routing and Navigation
Your application must be structured as a single-page application using client-side routing (specifically, using the react-router
Links to an external site. library). Your application needs to have at least three (3) different routes. While it's a good idea to make each route/url correspond to a different feature or use case to keep the app organized, this is not required.
Integrates Another React Library
One of the main skills needed to write impressive web apps being able to harness the hard work done by others, such as by using existing libraries that provide functionality for you. React's architecture facilitates implementing re-usable Components that allow you to easily add additional features and design elements to a web app.
For this project, your web app must include and use at least one third-party React Component or library (other than react-router
or firebaseui
), rendering its provided components in the DOM.
Data Persistence (Firebase)
As part of (or in addition to) responding to user input and displaying dynamic content, your app will need to persist some data to database through the Firebase web service.
Site Style and CSS Structure
This is mostly the same requirement as from the draft version of the project
Your project will need to use CSS to specify a custom design and layout for your app's content. This includes colors, typography (fonts), layout, spacing (margin/padding), etc. The design of the app is up to you: I encourage you to get creative with how information might be presented. You might study examples from related pages (e.g., for related apps, systems, or organizations), or look at design examples such as from CSS Zen Garden Links to an external site., the Bootstrap Expo Links to an external site., or the Materialize Showcase Links to an external site..
Reminder: it is not acceptable to build your page using an pre-defined template (e.g., in which you just fill in the content) or similar "pre-built" work. The site you submit should be entirely implemented by you. You are welcome to get design ideas from other sources or look up how to achieve specific effects, but the entire page needs to be coded by you, not by someone else. If you include more than 1 line of code from another source, you need to include an appropriate citation. You will not receive credit for code you did not write yourself.
Accessibility
This is the same requirement as from the draft version of the project
As with everything, your web app should be accessible to all users, including those utilizing screen readers. You can ensure your content is accessible by semantically using HTML, applying appropriate headings and sections to make it navigable, and including text equivalents for the visual content (images) to make it perceivable.
Responsive Design
This is the same requirement as from the draft version of the project
Your web app must be responsive and usable on both large desktop displays and small mobile devices. This means using adaptive layouts and multiple media sizes (e.g., different resolution images for different devices).
Clean Coding Style
A requirement when writing any code is to make sure it is written well. Your code needs to be valid, clean, and readable. You should follow the best practices discussed in class, as well as the style guidelines described in the course text style guide Links to an external site..
A note on grading: Assessment of code style will be used as a "limiter" in grading your project—the project as a whole cannot receive a higher score than this individual aspect. This is to help ensure that work you submit has been crafted by you to match the requirements of the course beyond any external support or tools used.
Working as a Group
You will need to work as a group to complete this project. Each person will need to contribute to its development—that means contributing code.
All group members need to contribute to all aspects of the code to demonstrate that they understand the material. DO NOT divide up the work by language (e.g., have one person do the HTML/CSS and one do the React work)—this will in fact make it harder to implement the project. A better approach is to divide up the work by feature. That will ensure that everyone is able to contribute to all aspects of the material.
As with the previous draft, you are expected to use git
to share and collaborate on code. Each person will need to make some changes, commit their work, pull/merge the changes from other people, and then push the compiled code to GitHub.
We will grade the final compiled work that exists on the main
branch, as well as checking the commit history to confirm that all group members have demonstrated mastery of all of the material. We will be looking to see that each person has contributed substantively all aspects of the project: defining CSS, implementing React Components, and defining interactions (including event handling and state manipulation).
In addition, you will be required to fill out a peer evaluation Links to an external site. to help us evaluate group collaboration.
Submitting the Project
In order to submit the project, you will need to perform a couple of steps:
1. Confirm that the project is complete
Make sure your project works and meets all requirements. Check for bugs (look at the developer console), have someone else try to use the app, etc.
Also make sure the app works correctly when deployed! Make sure features still work, images load correctly, you don't have dead links, everything looks correct, etc.
(Although not required, it's a good idea to also update the
README.md
file to describe your project).
2. Tag Final Commit
For each deliverable, you will need to tag your commit so we know what version to grade. For this deliverable, you should tag it final
Make sure you tag the last commit on the main
branch, and push
the tag to GitHub!
For example:
git tag final
git push --tags
(If necessary, you can tag small fixes as final.1
, final.2
, etc.) -->
3. Deploy Web Page
At the end of the project, you will need to "publish" your styled webpage to Firebase Hosting (not Github Pages!). See the instructions in the second draft description for details. You should be able to access your app at e.g.,
https://firebase-project-id.web.app/
(or replacing firebase-project-id
with the name of your project)
4. Submit Peer Evaluation
Make sure that each group member has filled out the peer evaluation
Links to an external site.. All team members must complete this!
5. Submit to Canvas
Be sure to add
and commit
the final version of your work and push
your code to your GitHub repository (we will be grading the code on the main
branch).
Then submit both (1) a link to your code repo and (2) a link to your published web site to Canvas using the button at the top of the page.
Only one person in the group needs to submit the links to Canvas!
Grading Rubric
In assessing your project, our goal is to determine whether you've learned the course material at a sufficient level, as demonstrated by your project work. This project will be graded on a scale from 0 to 10 based on the below rubric:
Score | Description |
---|---|
10/10 | [Satisfactory] Project meets all requirements, and demonstrates a high level of mastery of the course material. The project is well designed and implemented, functioning without errors or problems and with a high level of polish and refinement. |
8/10 | [Satisfactory] Project meets most requirements, and demonstrates sufficient mastery of the course material. The project may display minor errors or problems with design, implementation, or functionality, or lack some polish or refinement. |
6/10 | [Unsatisfactory] Project meets many—but not all—requirements, and demonstrates partial mastery of the course material. The project may have major issues in design, implementation, or functionality ("works some of the time"). |
4/10 | [Unsatisfactory] Project meets only a few requirements, and demonstrates understanding (but not mastery) of course material. The project may be mostly non-functional, with significant issues in design and implementation. Project may be started but incomplete ("half done"). |
0/10 | [Unsatisfactory] Project is missing or meets no requirements. Project demonstrates no understanding of the course material. |
The categories of requirements listed above should not be considered equal in weight; the "React Components" and "React Interactivity" requirements are almost half of the project! Additionally, note that some requirements, if missing, will be enough for a project to be considered unsatisfactory. For example, you can't have a satisfactory project if it doesn't meet accessibility requirements (no matter how impressive the interaction!). Egregious programming errors can also cause a project to be unsatisfactory. Basically you need to make sure to handle things we think are really important to have a satisfactory project!
The below rubric has approximate weights for each category. These aren't mathematically exact, but should give you a sense for where to devote your attention.
Additionally, if a team member does not contribute to all aspects of the project (including interactive React features), that individual will not earn a satisfactory grade on the project.
Rubric
Criteria | Ratings | ||
---|---|---|---|
App Content and HTML Structure (~10%)
|
|||
React Components and Structure (~15%)
|
|||
React Interactivity (~30%)
|
|||
Client-Side Routing and Navigation (~5%)
|
|||
Integrates Another React Library (~5%)
|
|||
Data Persistence (Firebase) (~10%)
|
|||
Site Style and CSS Structure (~10%)
|
|||
Accessibility (~5%)
|
|||
Responsive Design (~5%)
|
|||
Clean Coding Style (~5%)
|
|||
|