Stretch
Introduction and Learning Goals
You’ve made it through your first front-end JavaScript framework: React! Now that you have the building blocks down, it’s time to take what you’ve learned, build something creative, and dive into some independent learning of new technologies.
Incorporating a new technology into your application that isn’t explicitly taught will give you the opportunity to differentiate yourself from other Turing grads and give you a great story to tell in your job interview - employers love to hear about your experiences being self driven and learning new technologies outside of the standard Turing curriculum.
No one hires a junior dev based on what the junior already knows. Instead, junior developers are successful when they showcase their ability to learn and ask questions. This project will provide tangible, demonstrable anecdotes for you to bring up during interviews to show your ability to struggle with new material and problem solve!
You have a lot of freedom with this project, but there are a few requirements listed next.
Requirements
By the time this project is submitted for evaluation, it must:
- Meet the specs listed below under “MVP”
- Use at least one external API
- Implement one of the “Stretch Technologies” listed below
- Be deployed
- Be a featured project on your resume (Your resume must meet all requirements listed in this document.)
MVP
Your application needs to be summarized with a minimum viable product. What is the smallest set of features to give the user a way to accomplish the goal of the application?
The functionality for Stretch will be MUCH LIGHTER than the functionality in previous projects. Remember: the learning goals of this project are to expand/deepen your understanding of your learning process & dynamics within a team - NOT to build the flashiest thing ever.
The project is very open-ended in that you can make pretty much anything you want. However, we have some requirements to follow:
- Assume one single user - multiple users with log in and authentication is out of the scope of this project.
- The application cannot simply be a display of data - there needs to be some way for the user to work with or manipulate the data (favoriting, searching, filtering, commenting, rating, etc)
- The application should be a multi-page application using React Router
- Be able to answer: What problems are you solving? What features must the solution include to solve this problem?
Create a summary (MVP) of what your application will do and who your application is made for - be specific with your audience because it will give you direction in your work and make your project more interesting.
Data APIs
Here is a list of some data APIs that are open to the public:
Stretch Technologies
In addition to an API, you must choose a new technology (or set of technologies) to work with. Here are the possibilities for technologies you can explore for this project.
Note: For all technologies except for “Another Framework” listed below, the expectation is that you are using React.
Global State Management
Workflow
Testing
Another Framework
User Authentication
TypeScript
Building a Backend
Progressive Web App
Miscellaneous
Deliverables
Note: All of these dates are reflected in the calendar
Most Days
Your instructors will do a stand-up meeting in the mornings to see where the group is at, and give a chance for each group member to talk through what they’re working on or where they have blockers.
Day 1 (3 PM MT)
Day 2 (12 PM MT)
Day 3
Day 5 (during stand ups)
Day 6 (9:30 AM MT)
Demo Comp
One of the Stretch Tech projects will be entered into Demo Comp next inning! Demo Comp is an event that happens on Tuesday of week 1 where the top projects at Turing are presented by students in front of Turing students, staff, and real world devs. It’s an amazing opportunity to get your name out there and network. It’s a big honor and we’re excited to choose one of your groups to go represent your cohort!
Your instructors will choose our Demo Comp project by looking for the following things:
- A polished application that is intuitive and professional
- A bug-free application that meets all of the features from your MVP
- Strong implementation of the stretch technology with best practices implemented in React, Router, and Cypress
Involvement in Demo Comp is totally optional.
Evals
Connecting back to the purpose of this project, Evals will be conducted in a way that gives you an opportunity to practice speaking about your learning experience.
Evals are
- 1:1 sessions with you and an instructor from the Frontend Team
- 15 minutes
- Two interview questions - one technical (about your stretch tech) and one behavioral (you get to choose the “theme”, but not the specific question)
- You will be expected to send your interviewer your resume prior to the interview via slack
Rubric
There will be no written feedback for this project, but each and every one of you is capable of self-assessing whether or not your project is proficient. Mentors and Rocks are also a valuable resource here. A Proficient project would include the following:
Professionalism/Workflow:
- README concisely communicates the team’s individual and joint learning goals, the evolution of the project, and team member reflections while using good formatting to enhance readability
- README links to all user GitHub profiles and any applicable repos/deployed sites
- Setup instructions for any and all repos are thorough and verbose enough that even non-technical people (like recruiters) could follow them
- Git commits are atomic, with concise and precise descriptions of the change made
- PRs have full, consistent descriptions
- Team members conduct consistent code reviews of PRs
- Evolution of the project (decisions made, etc) is documented in the git history and PRs
- When the project is run locally, the terminal shows no errors and no warnings
React Architecture:
- A consistent, modular file structure is used
- A clear understanding of class components vs function components is demonstrated
- Only the data that a child component needs is passed down as props
- Logic is kept out of return statements; return statements are as readable as possible, only communicating what will be displayed
- The data displayed on the frontend is consistent with the data stored on the backend
- Functions follow the single responsibility principle and are written to be reusable when appropriate
- Data fetched from API is cleaned before being set to state
- All components which receive props implement prop typechecking (proptypes or otherwise)
Stretch Technology:
- Project implements the chosen stretch tech throughout the entire application
- Group members can all individually speak about the stretch tech’s best practices and attempts were made to follow those best practices in your application
- Group members have reflected on the process of learning these technologies and can speak clearly about their learning processes
Testing:
- All user flows are tested
- Async functionality is stubbed at least once
- Tests make specific assertions about the content DOM elements contain