π§πΏβπ» Prep
How will you approach this project?
Planning and organising your project π
TV Show Project
One of the most powerful things a software engineer can do is take some data and make it easy for people to understand.
The aim of this project is to take some data someone else has (and exposes over an API), and display it to users. The data we’re using for this project is about episodes of TV shows.
This project will take you multiple weeks to complete. As always, we will break down the project into levels we can deliver incrementally. You must finish each milestone before you start working on the next one (but it’s ok to know what the future levels are going to be - it may help you design things). Your goal is to complete all of the levels up to and including level 500 during JS3.
Data
The data we’re going to use comes from a website called TVmaze. For the first few levels, you can call a function getAllEpisodes()
and you will get an array of objects, one per episode of a TV show. Later on, you will use fetch
to get the data dynamically from the API. Here is an example object for one episode:
{
id: 4952,
url: "http://www.tvmaze.com/episodes/4952/game-of-thrones-1x01-winter-is-coming",
name: "Winter is Coming",
season: 1,
number: 1,
airdate: "2011-04-17",
airtime: "21:00",
airstamp: "2011-04-18T01:00:00+00:00",
runtime: 60,
image: {
medium: "http://static.tvmaze.com/uploads/images/medium_landscape/1/2668.jpg",
original: "http://static.tvmaze.com/uploads/images/original_untouched/1/2668.jpg"
},
summary:
"<p>Lord Eddard Stark, ruler of the North, is summoned to court by his old friend, King Robert Baratheon, to serve as the King's Hand. Eddard reluctantly agrees after learning of a possible threat to the King's life. Eddard's bastard son Jon Snow must make a painful decision about his own future, while in the distant east Viserys Targaryen plots to reclaim his father's throne, usurped by Robert, by selling his sister in marriage.</p>",
_links: {
self: {
href: "http://api.tvmaze.com/episodes/4952"
}
}
}
Rules
Your website must be accessible and use semantic HTML
As always, your application must score 100 for Accessibility on Lighthouse.
Don’t change getAllEpisodes()
Because we’re just using this getAllEpisodes()
function as a placeholder until we use fetch
, and we can’t change what data will be returned to us from the fetch
, you shouldn’t change the implementation of getAllEpisodes()
.
Use tech that we’ve learnt
You should use the DOM-manipulation functions you’ve been learning about on the course - the point of this project is to practice.
You should not use React, Vue, JQuery, or any other libraries or frameworks for this project. You can rebuild it in React later if you want!
Functionality before style
Your goal of this project is to achieve the levels, all of which are about functionality. When you have completed level 500, you can spend some time making it look beautiful. But focus on the functionality first.
Remember: it’s important that software works and that people can use it.
Get started
Each level has a .md file in the levels
folder. Start with level 0, then complete level 100.
After that, you’re going to swap codebases with someone else. You should complete level 200 in their repository, not your own. Every level, you’ll swap back - so you’ll do level 300 in your own codebase, level 400 in theirs, etc.
You are allowed to change anything in your partner’s code to make it easier to understand or build on, but they must understand and accept your changes.
Remember, finish each level before you move on to the next. Reach out for help when you’re stuck.
Setting up π
Level 0
The goals of level 0 are to:
- Create a GitHub repository with the starter scaffolding in-place.
- Deploy it to Netlify.
- Make sure whenever you push changes your Netlify site will be updated.
[!WARNING]
Unlike other projects at CYF, you are not going to fork this project, you’re going to create a repository from a template repository.
Create your repository
- Go to https://github.com/CodeYourFuture/JS3-Module-Project
- Click on the green button:
Use this template.
- Name your new repo exactly this:
JS3-Module-Project
- Do not enable
Include all branches
- Click the final green button
Create repository from template
Deploy your site
- Follow the guide to deploy your site to Netlify.
- Configure your site for auto-deployments.
- Ensure your Netlify site is named exactly
cyf-USERNAME-tv.netlify.app
whereUSERNAME
is your GitHub username.
Get set up on your laptop
- Clone your repository
- Open your repository in VS Code
- Open the
index.html
page in Chrome - Make sure in Chrome you can see the text “Got 73 episode(s)” in red. If you can’t, something has gone wrong.
- Edit
index.html
to include your name and github username in the page title instead of “(My Name (My GitHub username))”.
Push your changes
- Commit your changes to your
index.html
to your git repository (with a clear commit message). - Push your changes to your GitHub repository. Make sure they show up on GitHub.
- Ensure your updated site has been deployed to Netlify.
Completion criteria
You have completed level 0 when:
- You have a GitHub repository called
JS3-Module-Project
which is not a fork of this repo. - The
index.html
page on your GitHub project contains your name and GitHub username. - Your project is deployed to Netlify at
cyf-USERNAME-tv.netlify.app
. - Your deployed project has your name and GitHub username in its title.
- π― Topic Requirements
- π Priority Mandatory
- π Size Small
- π Week 1