- Request and response
- DNS Server and IP address (DNS and IP stand for Domain Name System and Internet Protocol respectively)
- Client and Server (Front-end and Back-end)
- What is URL (Uniform Resource Locator)
- How to create a website
- What is HTML (HyperText Markup Languague)
- What is CSS (Cascading Style Sheets)
- Understanding HTML Elements
- HTML attributes
- Working with CSS colors
- Formatting the code
- Introducing Developer Tools
- Style and Link tags
- CSS Rules
- The anatomy of a valid HTML document (head -> metadata, body -> content)
- Pseudo selector: hover
- Multiple CSS rules
- Void elements
- The link element and how the browser works with it
- CSS Size Units
- First contact with img tag
- New CSS properties
- Adding new HTML files
- More styling on the page
- First summary
- Lists:
<ul>
,<ol>
- Inheritance: container/parent element rules apply to descendants
- Cascading: Multiple rules can be applied to the same element
- Specificity: More specific selector's rule wins over less specific rule
- Box Model: content, padding, border and margin
- First contact with semantic HTML elements
<header>
,<main>
,<footer>
- CSS Selectors & Combinators
- Block Elements vs Inline Elements
- Common inline elements
<a>
,<button>
,<img>
,<span>
- Inline elements and how they behave with margin and padding
- Display inline-block
- Margin collapse
- First look at box-shadow
- Replaced and Non-replaced inline elements
- First project with all the content learned so far
- Box Model
- Displays
- Semantic HTML
- New HTML attributes for anchor tags
- Introduced new HTML semantic elements
- Ended first challenge
- Difference between deployment and hosting
- First deployment! Click here to see the website
- Favicons 👽
- Relative vs Absolute paths
- Git and Github
- Version control
- Working directory
- Repos (All tracked files and folders)
- Commits, branches
- Renaming branches
- Removing files with git rm
- Merge conflicts
- Undoing changes
- Remote repo
- Onwards to Github: What and Why?
- Git clone
- Collaboration and Organizations
- Contributing
- Forks
- Pull requests
- Introducing more semantic elements
nav
- Start new project "Travel Goals" 🚧
- Flexbox
- Using images as backgrounds
- Position: static and relative (Normal Flow)
- Position: absolute and fixed (Removed from the Normal Flow)
- Position: sticky (hybrid of relative and fixed positioning)
- Working with
%
unit - Box-sizing: content-box & border-box
- New inline element:
<strong>
- Resizing replaced elements with
object-fit
- Margin collapsing in parent-child relationship
- Colors with
linear-gradient();
- Travels Goals second page layout
- New CSS property:
overflow
- First Flexbox challenge 👾
- CSS Grid basics:
grid-template-columns
,grid-column
- Tree-structural pseudo-classes:
:first-of-type
,:nth-of-type()
- Grid challenge 👾
- Using unicode into HTML
- Travels Goals deployment 🚀 Click here to see the website
- Introducing Responsive Design 📱
- New HTML Semantic Element:
<article>
- What is Responsive Design?
- Comparing Units (Specifically for font-size)
- Absolute and Relative Units
- Difference between "%", "em" and "rem"
- Desktop First 💻
- Mobile First 📱
- What is a Media Query?
- Media types:
all
,screen
,print
& Media features:width
,orientation
... - Media Query Syntax
- First Media Queries challenge 👾
- Creating the Hamburger Icon & Side Drawer with new HTML Semantic Element
<aside>
- Target pseudo-class 🎯
- Responsive Design module summary
- Third deployment 🚀 click here to see the website
- Starting new module: Tips & Tricks to create a good website 🎉
- How to create custom properties
- Difference between
html
,:root
and*
- Adding transitions on the website 💫
- SVG (Scalable Vector Graphics)
- What are web forms?
- Key form elements:
<input type="...">
,<select>
,<textarea>
,<button>
- Form element
- Action & Method attributes
- Label element and for attribute
- Input type: text, number, email, password, etc.
- Styling inputs 💄
- How data is sent to the server with inputs
- Checkbox, dropdown and textarea
- Different button types 🖱️
- Default validation
- Form challenge 👾
- Form challenge deployment! click here to see the website 🚀
- What is Javascript?
- What are variables?
- Variables
- Arrays:
['this', 'is', 'an', 'array']
- Objects:
{ this: 'is', an: 'object' }
- Using the
alert()
function
- Accessing obejcts properties
- Introducing functions 🎉
- Returning values in functions
- Shadowing
- Objects & Methods
- Basic math operations
- String operations & methods
- Data representation of the parsed HTML Code
- Nodes
- Defer attribute
- The DOM Tree of Nested Objects 🌲
- Querying elements
- First DOM challenge 👾
- Creating elements via JS
- Working with innerHTML
- Introducing events
- First 'click' event 🖱️
- More events
- What is a constant variable?
- Changing elements style with JavaScript
- Managing CSS classes with JavaScript
- If statements
- Boolean values
- Comparison & Logical operators
- Flag variables 🚩
- Traditional For loop
- For-of
- For-in
- While
- Traditional For loop
- For-of
- For-in
- While
- Base game structure
- Finish general element styles 🎨
- Finish all game styling
- Start working on player settings with JavaScript
- Continue working on player settings
- Create new CSS rule for error messages
- Add more CSS custom properties
- Store players' data
- Start game
- Store players' selected fields
- Create game logic
- End game with a winner or draw
- Reset all game status
- Game deployment, click here to see the game! 🚀
- What are third-party packages?
- Using Bootstrap
- Third-Party x Custom Code
- Static vs Dynamic websites
- Frontend, Backend and Fullstack
- How do we write server-side code?
- What is Node.js?
- Creating a custom server with Node 🖥️
- Handling Requests & Creating custom Responses
- NPM
- Handling requests and responses
- Parsing user data and storing data in files with FS
- First exercise with express 👾
- Serving HTML files with Express
- Serving static files
- Adding EJS Template Engine
<%= hello %>
- Rendering dynamic content with templates
- EJS include
- Dynamic Routes
/something/:uid
- Managing data with uid
- Page Not Found (404)
- Server-Side errors (500)
- Working with status codes
- Code refactoring
- Importing and Exporting with Node.js
- Splitting routes in different files
- Query params
- Introduction
- Functions & Default parameters
- Rest parameter
- Default parameters & Rest parameters
- Primitive vs Reference Data Types
- Scoping
- Constructor Functions & Classes
- Callbacks
- Promises
- Async-await
- What are databases?
- Difference between the two databases systems
- What is SQL?
- MySQL
- Creating database with MySQL
- Inserting data into a table
- Reading data
- Updating data
- Deleting data
- One-To-Many
- One-To-One
- Many-To-Many
- Joining tables
- Start new project with node and mysql 🎉
- Creating database structure
- Creating first routes
- Connecting to database
- Inserting data with placeholders
- Fetching & displaying a list of blog posts
- Formatting Data
- Updating posts
- Deleting posts
- The Idea Behind NoSQL Databases
- Introducing MondoDB
- Inserting data with MongoDB
- Reading & Filtering documents
- Updating documents
- Deleting documents
- Practicing
- Planning database structure
- Connecting to MongoDB
- Fetching & Displaying authors' data
- Inserting new documents
- Fetching and Displaying projected data
- Transforming the createdAt field
- Updating documents
- Deleting documents
- Two Sides of Uploading files
- Parsing incoming file with multer package
- How to store files on a backend
- Configuring Multer In-Depth
- Adding an image preview feature
- Why would we need AJAX?
- What is AJAX?
- Sending a GET request with ajax
- Updating the DOM based on the response
- Sending a POST request with ajax
- Handling errors with ajax requests
- More HTTP methods: PUT, PATCH and DELETE
- What is user authentication?
- Basic Signup Functionality
- Hashing Passwords
- Login functionality
- Validating Signup Information
- Introducing Sessions & Cookies 🍪
- Storing authentication data in sessions
- Using sessions and cookies for controlling access
- Closer look at cookies
- Sessions beyond authentication (e.g. flash messages)
- Authentication vs Authorization
- Practicing with sessions
- Custom middlewares +
res.locals
- Authentication vs Website Security
- Attacker pov 🥷
- Understanding CSRF Attacks
- Understanding XSS Attacks
- Understanding SQL Injection Attacks
- Protecting against SQL Injection
- Introducing MVC (Model-View-Controller)
- Creating Middlewares
- Creating Models
- Spliting code into different files
- Add crud functionalities to Model
- Adding a first controller
- Refactoring sessions & input validations
- Adding double csrf token protection
- Protecting routes with custom middlewares
- Planning the project
- Course project setup
- Adding EJS and First Views
- Structuring First View & Creating general includes
- Creating base CSS files
- Adding CSS Custom Properties
- End general styles
- Style sign up form
- Connect to mongodb with mongoose
- Adding user signup
- Protecting signup and login routes with csrf token
- Using the default express error handler
- Introducing sessions
- Checking the user authentication status with a middleware
- Adding logout functionality
- Handling errors in async code
- Validating user inputs
- Displaying error messages and saving user input
- Admin authorization and protected navigation
- Setting up base navigation styles
- Building a responsive website
- Frontend JavaScript for toggling the sidebar
- Adding a Product Admin page & Forms
- Adding the image upload functionality
- Adding a Product Model & Storing products in the database
- Fetching & Outputting Product Items
- Styling product items
- Adding product details view
- Updating product (as admin)
- Adding a File Upload preview
- Making Products Deletable
- Using AJAX & Updating the DOM
- Protecting admin routes
- Outputting products for customers
- Outputting product details
- Adding a Cart Model
- Working on the shopping cart logic
- Adding cart items via AJAX requests
- Adding a cart page
- Styling the cart page
- Updating cart quantities via AJAX requests
- Updating the DOM after Cart Item updates
- Adding the Order Controller & Model
- Saving Orders in the database
- Displaying Orders (for Customers & Admins)
- Managing Orders as an Admin
- Keeping cart items information always updated
- End project. Repo link here
- What are Services and APIs
- Introducing Stripe (Payments Service)
- Configuring the Stripe request & Handling Payments
- Static vs Dynamic Websites
- Hosting databases
- Testing & Env Variables
- Cross Browser Support & SEO
- Improving performance and shrinking assets
- API & Services: What & Why
- JS Packages VS URL-based APIs
- API vs Traditional Websites
- Introducing REST APIs
- Building a first basic REST API
- Enhacing the API & Making it more realistic
- Starting another API example
- Finishing endpoints
- Testing with insomnia
- Using a decoupled frontend website (SPA)
- Fixing CORS errors
- Why use web frameworks?
- Getting started with Vue.js
- Listening to events & Updating data
- Outputting lists of data
- Displaying content condtionally
- Sending HTTP requests
- Now it's time to focus on creating projects!