DEV Community

Cover image for Full Stack Youtube Clone (5 hours free tutorial)
Safak
Safak

Posted on

25 8 1

Full Stack Youtube Clone (5 hours free tutorial)

Hi friends, I'm Safak. I am a full-stack web developer and I'm sharing open source web projects on my dev blog and their tutorials on my YouTube channel. I've shared 3 full-stack projects so far and I want to share my 5 hours "Full Stack Video Sharing App" tutorial for free. You can find the playlist here.


What technologies are used?

Backend:

Node.js Express Framework

Database:

MongoDB, Firebase

Auth:

JWT, Cookies, Firebase Google Auth

Front-End Framework:

React.js with hooks

UI library:

Styled Components

State Management Library:

Redux

File Storage:

Firebase Storage


Design Part of the Video Sharing App


In this part, I've designed a YouTube-like video sharing app using React.js functional components, hooks and Styled Components. For the layout I preferred using Flexbox.

The app includes 4 pages and 7 small components.

  • src
    • pages
      • Home.jsx
      • Search.jsx
      • Video.jsx
      • SignIn.jsx
    • components
      • Card.jsx
      • Comments.jsx
      • Comment.jsx
      • Menu.jsx
      • Navbar.jsx
      • Recommendation.jsx
      • Upload.jsx

Full Stack Part of the Youtube Clone


In this part of the video, I've created an API using Node.js Express server with a MongoDB connection. Then created necessary models, routes and controllers in order to handle CRUD operations.

  • root
    • models
      • User.model.js
      • Video.model.js
      • Comment.model.js
    • routes
      • auth.js
      • users.js
      • videos.js
      • comments.js
    • controllers
      • auth.controller.js
      • user.controller.js
      • video.controller.js
      • comment.controller.js

As you realize, there is an additional route and controller to take care of user authentication. To provide a security I've used bcryptjs and JWT library with cookies in the auth controller.

export const signin = async (req, res, next) => {
  try {
    const user = await User.findOne({ name: req.body.name });
    if (!user) return next(createError(404, "User not found!"));

    const isCorrect = await bcrypt.compare(req.body.password, user.password);

    if (!isCorrect) return next(createError(400, "Wrong Credentials!"));

    const token = jwt.sign({ id: user._id }, process.env.JWT);
    const { password, ...others } = user._doc;

    res
      .cookie("access_token", token, {
        httpOnly: true,
      })
      .status(200)
      .json(others);
  } catch (err) {
    next(err);
  }
};
Enter fullscreen mode Exit fullscreen mode

And finally, I've combined the API with the UI Design in order to make the application dynamic. To fetch data and make other API requests axios was used and to handle state management, I preferred using redux-toolkit.

I hope it was useful. If you want to learn more about web development and practice with real-world projects, you can check out my channel and other posts.

Other Dev.to Posts

๐Ÿ›๏ธ Full Stack E-Commerce App (+8 Hours free tutorial)
๐Ÿ“บ Full Stack Netflix App (+7 Hours free tutorial)
๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘ Full Stack Social Media App (+7 Hours free tutorial)

Lama Dev

๐Ÿ”ฅ Lama Dev YouTube Channel
โšก๏ธ Lama Dev Facebook
๐Ÿ‘พ Source Code

AWS GenAI LIVE image

How is generative AI increasing efficiency?

Join AWS GenAI LIVE! to find out how gen AI is reshaping productivity, streamlining processes, and driving innovation.

Learn more

Top comments (5)

Collapse
 
andrewbaisden profile image
Andrew Baisden โ€ข

Amazing tutorial well done!

Collapse
 
paras231 profile image
paras231 โ€ข

awesome lama dev

Collapse
 
cornblakes profile image
cornblakes โ€ข

Looks great <3

Collapse
 
abhishekrajputweb profile image
abhishekrajput-web โ€ข

That's for sharing very helpful ๐Ÿ™‚

Collapse
 
tsukuyomi808 profile image
Froilan Abellanosa โ€ข

This looks Awesome! ๐Ÿ‘

nextjs tutorial video

Youtube Tutorial Series ๐Ÿ“บ

So you built a Next.js app, but you need a clear view of the entire operation flow to be able to identify performance bottlenecks before you launch. But how do you get started? Get the essentials on tracing for Next.js from @nikolovlazar in this video series ๐Ÿ‘€

Watch the Youtube series

๐Ÿ‘‹ Kindness is contagious

Please leave a โค๏ธ or a friendly comment on this post if you found it helpful!

Okay