Do the Prep
You should have completed the prep listed in Welcome to CodeYourFuture. If you haven’t done that yet, go back and complete it now.
π§ You must always do the prep.
If you have worked through the Welcome prep, begin the prep for the first Onboarding sprint (which starts here!).
π¬ No, the prep will show you HOW to complete the backlog, so do it first
π¬ Nope, you’re being told right now
π¬ Yes, you should always start with the prep
Inspecting a commit
Learning Objectives
Recall that a commit is a snapshot of our project at some point in time.
Therefore, we should be able to check out a previous version of our project and look at the files and folders there. We can use the Github interface to check out the files and folders at a previous commit.
βοΈExercise - Explore a Commit
Go back to this page https://github.com/CodeYourFuture/education-blog/commits/main
Locate the the commit with hash 4e78b32 and then look for the icon that that says “Browse the repository at this point in the history”.
Explore the code at this point in the history. What differences do you notice?
Do the same but for the commit cd981a0.
Inspecting previous versions
Learning Objectives
We can view the different commits of a project on Github. This means we can see what an application looked like before, in previous versions.
βοΈExercise - Comparing Previous Versions
Here are some different versions of the educational blog we introduced in the previous module.
Deployed version A educational blog
Deployed version B educational blog
Deployed version C educational blog
Questions
- What is the difference between Version A and Version B on the index page (the page you first land on after clicking on the link)
- What is the difference between Version C and the main version of the site.
- Which commit from the education-blog repo corresponds to Version C? Remember to check the git history.
- Which commit from the education-blog repo corresponds to Version A?
Forking a repository
Learning Objectives
Often we want to take an existing project and start working on it independently. In other words: we start making our own versions of the project separate from the original project.
We can create a fork. A fork is a copy of a repository that exists on Github.
A GitHub repository’s url looks like this:
https://github.com/CodeYourFuture/cyf-demo-repoLike any url it is made up of different parts.
When the user EagerLearner forks this repo, the path changes from CodeYourFuture to EagerLearner.
βοΈExercise - Fork a Repo
- Go to https://github.com/CodeYourFuture/education-blog.
- Find the Fork button on this page.
- Click on the Fork button to create a new fork of the repository and set yourself as the owner of the fork.
π How can you check you successfully forked the original repository?
Hint: Check the URL of your forked repository
Working locally
Learning Objectives
Before we can work on it we need to get a local copy of the education blog repo. A repository on GitHub is said to be remote and a repository on our own computer is said to be local.
We call a local copy of a GitHub repository a clone. The process of copying a remote repository on to a local machine is called cloning.
Here is a diagram representing how the repositories interact after forking and cloning:
Sketch this diagram in your notebook. If you get confused about where your changes are you can refer back to this diagram to help you understand what’s happening.
How can we get a copy of an existing GitHub repository on our local machine?
βοΈExercise - Cloning a Repository
You’ll need to clone your fork of the education blog repo. Follow through the steps in the video “How to clone a repository from GitHub to Visual Studio Code”.
Reminder:
- Use the URL for your fork of the
education-blogrepo when you are cloning - When selecting the location to clone your files, choose the
CYFfolder you created in the module prep
Viewing files from a git clone
Learning Objectives
Once you’ve got a local copy of a codebase on your local machine you can start to view the files and folders in that codebase using VSCode.
βοΈExercise - Explore a repo using VSCode
Figure out how to open the cloned repository on your local machine in VSCode.
Explore the repository in VSCode and use the code editor to look at the various files and folders.
Try opening the Integrated Terminal in your VSCode window
If you get stuck on any of these exercises, it’s a good idea to search online. For example, you could Google “opening terminal in vscode”
Branching
Learning Objectives
We can check the commits on the remote repository as before:

On the left page of the page, we see additional information:

So what is main?
main is a branch.
Commits form a sequence that look like this:
A branch represents a particular history of development in a project - the different versions there have been.
πDefinition: Branch
There can be different branches with different names, which may have different versions.
For example, if we were testing out some different visual styles, maybe we would have one branch with some extra changes which make the website more blue, and a different branch with some extra changes which make the website more purple. These branches may share some commits in history, but have some extra different commits separately.
The main branch is often treated as a special branch - it’s where we put commits which people working on the project have agreed on. Other branches (e.g. the try-purple branch) may have extra changes that have not been agreed on. If people working on the project agree the changes from the purple branch are good, we’ll add those changes to the main branch.
When we’re working on something new, we haven’t agreed with other people that our new thing is good yet, so we often don’t add our changes to the main branch straight away. Instead we make our own branch to experiment on.
We can start to create independent branches like this:
In the diagram above, we can continue to commit on the “week-1-coursework” branch without altering the history of the main branch.
βοΈExercise - Creating a local branch
Open the
education-blogrepository in VSCode.Using this clip, create a new branch called
update-blog-1in your local repository.
π How can you check that you’ve successfully created a branch?
Merging
Learning Objectives
TODO:
- Define “merging”
- Show GitHub UI for a branch compared to
main - Show PR UI
- Show merging
Youtube: Fork your Planner
Youtube: Make your Planning Board
π Set up Planner
Welcome to your coursework planner
This is how you will plan and manage your coursework at CYF. You will add all your work as issues to your fork of this repository, and then use a project board to manage your work. This is broadly how all technical projects are managed, so you will need lots of practice. Get started today.
1. How to get set up
Forking the My-Coursework-Planner repo
- Fork this repo to your own GitHub

- You should see your own GitHub username under
Owner
- Turn on
issuesin theSettingsof your forked version of the repo
You must fork to your personal Github account. Forks created in the CYF org will be deleted by a bot.
Creating your project board
- Go to the example project board
- Click the three-dot menu on the
Coursework Planner Boardthen selectMake a copy
- Make sure your own GitHub username is under
Ownerand change the name to “Coursework Planner”. These steps are very important! If either value is incorrect the issues will not be cloned correctly.
- If you make a mistake naming your project you can go back and change it later. Hover your cursor over the board’s name then click the pen icon which appears.

On the next screen you can rename your board to “Coursework Planner” and save your changes.
- Make your project board public so your mentors can see your progress - open the project board settings

- Scroll to the bottom to find the setting to make your board public

Linking the My-Coursework-Planner repo to your project board
- Go back to your forked version of the My-Coursework-Planner repo
- Under
Projects, clickLink a projectand select your project board
- That’s it! You’re ready to start adding issues to your board!
2. In every module, you will add your work as issues
Each sprint in each module has a Backlog page which lists the work you’re expected to do for that module. Every item in the list is actually a GitHub issue.
There is a “Clone” button next to each issue. When you’re starting a sprint, clone each of its issues into your coursework planner.
Copy issues for each week or at most for each module. The coursework content is updated frequently, you will not have the most up to date tasks on your board if you copy all modules at once.
If the Clone button isn’t working you can send a message in Slack asking for help, or speak to a volunteer in class on Saturday.
3. Manage and adapt your project board as you learn
There are example project boards attached to each module, showing you ways you can use boards to manage your time, prioritise, scope, and track your work. You should use the same project board all the way through the course, and add to it as you go. Learn as you go, and adapt your board as you learn.
You can, and should, also add your own tickets to the board. Just remember it’s a public board, so don’t add anything you don’t want to share with your mentors.
You can watch this video about how to create your coursework-planner board.
Youtube: Forms in 25 minutes
What are forms?
Learning Objectives
These questions and answers are compiled from recorded sessions on HTML forms, and are the collective contribution of several mentors and students. This time we’ve included a trainee answer and a mentor answer, per question.
10 Things About Forms
So let's go deep on forms. What is a form? What does form mean?
π§πΏβπ»π¬ Trainee: What does form mean? It’s like a set of options for a user to choose from on a website.
π©π»βπ»π¬ Mentor: Yes, that is true, that is a correct answer. A deeper answer might be form means shape. It’s how we define the shape of data. So, imagine a shape sorter. You put a square thing in the square hole; you put a round thing in the round hole. Each form field is a different shape in the shape sorter lid. That’s what we’re doing when we write forms. We are forming data with fields.
Why do we do that? Why do we bother grouping and shaping data in that way?
π§πΏβπ»π¬ Trainee: Of course because it makes it easier to sort it out.
π©π»βπ»π¬ Mentor: Yeah, absolutely! Because you know we’re going to post that data to a database. Our database doesn’t know what all these strings mean. We have to define the data. We have to label the data. We have to group it, and we have to do something with it: to post it to a database or in some cases, get it from a database.
So that’s the point of all this.
What does field mean?
π©βπ»π¬ Trainee: Field? It means like the window is completed with some information. A piece of data.
π©π»βπ»π¬ Mentor: Right! You put a piece into a form field; you just put one thing in there. A form has many fields, and a field is a single piece of data. It is the smallest piece.
So we structure data with forms. And we do that by defining form fields with semantic HTML.
πNow practise with
What else do we structure, when we write an HTML form?
π§π»βπ»π¬ Trainee: Gathering data you mean? I’d be doing a search…
π§πΏβπ»π¬ Trainee: Can I say? We can structure… an action, a connection.
π©π»βπ»π¬ Mentor: Ooh, that’s a great answer. We can structure interaction. We tell the user, what to put in the form field, and how to put that data in. We structure a really specific kind of interaction. We guide them and tell them what to do. And the way that we structure those interactions is, again, using form fields. Using HTML form elements, attributes, and values.
That’s really important to think about, because when you’re deciding what to write in a form, you need to start with ‘what data do I need.’ It’s better to do that than to try and memorise all the different types of form fields. If you think:
Then look up that last part. That’s more effective than trying to memorise all the different types of form fields.
But saying that, let's name some form fields now -- some elements in HTML that we can use to structure data. I'm going to say, input of type text. Name a bunch more.
π§πΏβπ»π¬ Trainee: Yeah, maybe checkbox?
π©πΌβπ»π¬ Trainee: radio button.
π¨πΏβπ»π¬ Trainee: submit input type, could be submit or button itself.
π©π½βπ»π¬ Trainee: autocomplete?
π¨π»βπ»π¬ Trainee: I think autocomplete is an attribute, but it’s not itself an element or element type? How about textarea ?
π§πΏβπ»π¬ Trainee: select and option
π¨βπ»π¬ Trainee: The input of type password…
π©π»βπ»π¬ Mentor: The point being that there are absolutely loads of different form elements!
What you need to focus on is what you’re actually doing. We’re structuring data: you are defining, naming and then grouping data. Keep that goal front and center, then your forms will work well.
πNow practise with
Oh and... what does input mean?
π§πΏβπ»π¬ Trainee: Input means to put something in. In this case the data we put in the form.
π©π»βπ»π¬ Mentor: Bang on.
What happens when things don't work well. What happens when the user puts the wrong thing in a field?
π§πΏβπ»π¬ Trainee: Do you mean validation? Don’t we need JavaScript for that?
π§πΎβπ»π¬ Mentor: We’ll learn about validation with JavaScript later on, but there’s actually a lot of validation built in to HTML. For example, if you put a required attribute on a field, the browser will not let you submit the form until you fill in that field. That’s validation: it checks against rules and rejects the data if it doesn’t meet the rules.
π§πΏβπ»π¬ Trainee: But then aren't all form elements validation?
π§π½βπ»π¬ Mentor: You could say that all the rules you make about what the user can put in a field are also validation. Every type we just named - input type checkbox, input type email, number, date… are rules about data.
I think the difference is that there’s no way to type into a checkbox: there’s no error message, you just can’t do it. If you type your birthday into an email field, the browser will tell you that’s not a valid email address. So one is just impossible to do and the other gives you an error message, and that’s normally what we mean by validation.
Why is it important to validate data?
π¨π»βπ»π¬ Trainee: Because if you don’t validate it, you might not be able to use it?
π§πΎβπ»π¬ Mentor: Right. Forms go wrong when you are vague. You must enforce input with validation, because if users can get it wrong, they will.
What will happen if you put a type of text on an input you label with email?
π¨πΎβπ»π¬ Trainee: Oh well then people will write in things that aren’t email addresses?
π§πΏβπ»π¬ Trainee: And you won’t know until you try to send them an email…
π©π»βπ»π¬ Mentor: Yeah they will. You can be absolutely guaranteed that users will do that. You have to save them from themselves, and save your database from your users!

πNow practise with
Backlog
Learning Objectives
In software development, we break down complex projects into smaller, manageable parts, which we work on for a week or two. These periods are called “sprints.”
A sprint backlog is like a to-do list. It lists what the team has decided to work on this sprint. It’s chosen from a larger list, usually called the “product backlog,” which holds the entire project to-do list.
In this course, the backlog is a set of work designed to build understanding beyond the concepts introduced in the course prep. For your course, we have prepared a backlog of mandatory work for each sprint. You will copy these tasks into your own backlog. You can also add any other tickets you want to work on to your backlog, and schedule all of the tasks according to your own goals and capacity. Use your planning board to do this.
You will find the backlog in the Backlog view on every sprint.
Copy the tickets you are working on to your own backlog. Organise your tickets on your board and move them to the right column as you work through them. Here’s a flowchart showing the stages a ticket goes through:
πΉοΈBacklog (30 minutes)
- Find the sprint backlog
- Copy your tickets to your own backlog
- Organise your tickets on your board