Architecture Diagram with AWS services

image

React ts Chakra DjangoREST AWS


Full Stack Video

A full stack video service that lets users upload and consume their own custom video content

image

Table of Contents
  1. About The Project
  2. Roadmap
  3. Getting Started
  4. Usage

About The Project

I was trying to learn more about scalable backend development, specifically about how to make a video application since I love watching youtube videos, and I wanted to see if I could recreate the video application on my own using my Django Rest Framework knowledge to recreate it, instead of FastAPI like how they did in the video. I also wanted to learn more about Typescript on the frontend. I'm aiming to use this project as a starting point for diving deeper into backend development and systems design.

  • I used django-storages to use AWS S3 as the storage provider
  • Created a Video, and Box model in the django ORM to store mp4 videos, and generic files respectively
  • Used ModelSerializers to serialize the data in our models, an ModelViewsets to provide CRUD operations
  • Used Docker to containerize the frontend and the backend
  • Used Typescript on the frontend

(back to top)

Built With

React ts Chakra DjangoREST AWS

(back to top)

Roadmap

  • Implement a robust social featureset such as users, users' liked and shared videos, authentication
  • Use Redis to store the urls of the most popular videos, so that they get served to the users extremely quickly
  • Use ElasticSearch and make a 'video search feature'
  • Transcode Video (ffmpeg?) , then publish the message to Kafka
  • Use Kafka as a central bus for moving data
  • Load Balancer
  • Switch from SQLLite to a different database, to store our metadata
  • Follow openAPI specifications

(back to top)

Getting Started

If you would like to reuse this project, you can add your own AWS credentials to the SETTINGS.PY file, hopefully with an .env file, and create a S3 bucket on AWS.

Usage

Using docker and docker-compose, we can easily run the project on different environments.

To run the backend, cd into the fullstackvideo directory and do

docker-compose up --build

To run the frontend, cd into the frontend directory and do

docker-compose up --build

(back to top)