Mod 4 Project Week — Build an API-Driven User Interface
Overview
It's time for your first paired project week! For this project, you and a partner will build an application that interacts with a third-party API. You will fetch data, render the fetched data to the DOM, and then fetch some more data! In the end, you will have a deployed interactive application that connects with a web API.
The main technical goal of your app is to send two fetches and render the fetched data:
First, fetch a collection of resources (GET a set of users, a set of pictures, a set of authors) and render all of those resources
Fetch more details about a single one of those resources (GET details about a single user, a single picture, a single author, etc…) and then render those details
Check out this deployed example called "Art Viewer". Notice that the application fetches a bunch of pieces of art but you can also click on a single piece of art to see more details. The search feature and the ability to choose how many pieces are shown per page are bonuses. Of course, you can do more than this, but this is the minimum idea!
Learning Objectives
While building your first portfolio-level project is certainly the main focus, there are a few other key learning objectives!
Demonstrate your skills learned from Mods 1-3: Core JavaScript, HTML & CSS, DOM Manipulation, and Asynchronous JavaScript
Develop teamwork skills including communication, problem-solving, compromise, and task management
Strengthen your Git workflow fundamentals, managing branches, navigating merge conflicts, and maintaining a repository
Practice Agile methodologies by managing a scrum board and by performing daily stand-up and stand-down.
Deploy a project!
Practice your technical communication through a presentation.
Tips for Success
Focus on demonstrating your learning, not building something unique.
One of the easiest ways to get off track is by worrying about creating a unique project:
Student projects are not meant to be unique.
You're not creating a new app that addresses a gap in the market.
You aren't deploying this app for the purpose of having real users.
Student projects are meant for learning and demonstrating your learning
Make Decisions Quickly
You may have a great idea that you really want to implement, but remember, you are working as a team and you only have a week. Time is not on your side and the more time you waste disagreeing with your partner about what features to implement or what API to use, the less time you'll have to actually build the thing.
Plan and Delegate!!
Use branches and make PRs
Use your scrum board
Assign tasks
Don't do duplicate work
Meet on your own time
Be in alignment with your teammate outside of the scheduled meetings with your engineering manager
Test your API!
Actually write a fetch to make sure that the API works before choosing it for your proposal
Deliverables
Unlike your solo projects where the project itself was the main deliverable, for a portfolio-level project, you will be required to do a bit more. The deliverables below will help keep you and your partner organized and will help your Engineering Manager (your instructor) informed on your progress. In the end, all of these deliverables will serve as valuable artifacts that document your work.
A Project Spec Sheet — A project spec sheet is a document that provides key details about the project including the API being used, the intended features/user stories, and wireframes.
A Github Organization with your Repository — A GitHub Organization is a shared account on GitHub where you and your teammates can collaborate on repositories.
Note: your organization only needs one repository. This example has a few to show progress after each day, but you shouldn't do that.
A Scrum Board — A scrum board is a tool for creating and assigning tasks ("tickets") within a project. Typically, a scrum board will organize tasks into three columns: Backlog (tasks waiting to be assigned), In Progress (assigned tasks that are being worked on), and Done (completed tasks).
A Deployed Project Link
A Presentation + Walkthrough Demo Video
Milestones
As you work on this project, don't set your sights on the fully completed project from the jump. Give yourself smaller goals that you can reach each day and focus on one goal at a time. As long as your goals build on each other, you will eventually reach your final destination.
For this Art Viewer project, you can see the progress made on each day.
https://art-viewer-mike-example.github.io/art-viewer-day-1 (just the app is deployed. It doesn't do anything yet)
https://art-viewer-mike-example.github.io/art-viewer-day-2 (we can fetch and then render a list of pictures)
https://art-viewer-mike-example.github.io/art-viewer-day-3 (we can click on a picture to fetch more details about that one picture)
Note: no need to create a new repo for each day - this is just done this way for demonstration purposes.
Eventually, you will need to develop the skill of planning out your objectives. However, for this project we've laid out some daily milestones that you can strive for with bare minimum requirements, ideal progress, and stretch goals:
5pm: The proposal document is complete and posted in the group Slack channel.
Bare Minimum: Two examples of API fetch calls. One for many things. One for one thing.
Ideal: Descriptions of user stories. Wireframe shows thoughtful idea about what data is displayed.
Stretch: Link to their created GitHub organization and repo in their group slack channel
Note: If you have not submitted your proposal and are undecided about your API by this deadline, you will be assigned an API by your Engineering Manager.
Project Grading
We care deeply about the quality of the code that is produced at Marcy. Even if your application works as described, was it created following best practices? Did you effectively use all of the skills from the module? Were you able to learn and grow from this project-building process?
To ensure that your project meets Marcy's standards of excellence, your project will be assessed on the following criteria (35 points total):
Fetching Requirements (8 points)
User Interface: Structure and Accessibility (13 points)
There is a
section
for displaying a single fetched itemThe section has an
h2
The section displays information about the single fetched item
section
elements have anaria-label
oraria-labelledby
attribute that describes the sectionThere are no instances of recreating any semantic elements (using a
div
for anav
)The entire application is responsive with mobile and desktop compatibility (we recommend a mobile-first approach)
General (5 points)
The project is created using Vite
The code exists in more than one JS file
The project is deployed via GitHub Pages properly
CSS Flexbox or Grid was used
The code does not render unescaped text directly to the DOM (
createElement
or other escape method used)
Form Requirements (9 points)
There is a
form
for triggering a fetch or for modifying the fetch resultsform
elements have an aria-label or aria-labelledby attribute that describes the formThe form has an
h2
The form has at least one
input
Every
input
element has an associatedlabel
element (it can be invisible but it must be in the HTML)The form has a
button
to submit the form
At least one field is a required field, and the form cannot be submitted without it
Clicking the form submit button does not reload the page because the default behavior is prevented
Clicking the form submit button clears the form
Last updated