Skip to content

ShisuiMadara/SeaPod

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

93 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SeaPod

A sea of podcasts. Dive into a world of podcasts from different genres like Education, Devotional or Adventure. The application is hosted on Microsoft Azure and is based on a Node.js backend. The frontend is made in React.js and styled using MaterialUI and Tailwind CSS with the data being stored in MongoDB. There is secured login and signup using JWT authentication.

Technologies Used

  • Reactjs
  • Nodejs
  • MaterialUI
  • Tailwind CSS
  • Microsoft Azure
  • Axios
  • JWT authentication
  • MongoDB

  • Salient Features


    The signup and login are secured using JWT authorization, for additional security strong passwords are created using regular expression matching. The email authentication is done to prevent spammers and hackers from making bogus accounts.

    The user interface is friendly and interactive, based on React JS and MaterialUI. This makes the navigation easier and the response fast, providing a seamless user experience.

    The media is played using video tag implentation in HTML. This allows a simple implmentation to a complex task, importing a library for a media player would increase the overload of the application and thus could produce a lagging experience.

    There are podcasts recommendations are based on the selected genres of the user, of all the selected genres, the application provides them with the ones with highest like.

    To promote other artists and content, podacsts which might not be in the genre of the user or may have less likes, are displayed in form of crousel to the user.

    The recent listens and incomplete listens are displyed to the user so that they can begin from where they left.

    The podcast content is displayed in form of flip cards. These on the frontside have the title of the podcast and the description. On click, the video is played on the backside.

    The account section provides the current account details to the user and allows them to update their password and genre choices. The user is required to login again due to security protocols.

    The podcasts can only be uploaded by the user with admin previlages. This maintains the autencticity of content and prevent spammers from uploading copied or stolen content. The user based access is implemented using JWT token itself.


    Implementation features

  • A strong backend based on Node using REST api based implementation. This ensure that the application provide a great deal of flexibility. The data is not tied to resources or methods, so REST can handle multiple types of calls, return different data formats and even change structurally with the correct implementation of hypermedia.
  • The security is ensure with JWT token. The token is checked each time before any API call is made. This ensures that all the access are made by the user in session. Then token are regenerated when the account details are modified, thus ensuring privacy and security of the user.
  • The database is a NoSQL MongoDB. This provides for flexible storing and access. The database is hosted on cloud and thus allows to make calls from different hosting environment without compromising performance. This makes the code more readble and accessible.
  • The code is modular and follows a guide for coding style. This makes the codebase easy to read and manage.

  • Database features

    The database maintains a cluster for each:

  • Registered users
  • Podcasts
  • Podcasts viewed by users
  • The registered user collection has the following keys:

  • user ID (string)
  • user email (string)
  • Hashed password (string)
  • isAdmin (boolean)
  • Genres (array)

  • The user ID identifies each of the user along with the email. The hashed password is stored to match while the account details are updated. The isAdmin variable allows the role based access and the Genres is the array of genres which the user is interested in. These can be updated from the Account section.


    The Podcast collection contains the following keys:

  • Name (string)
  • Creator ID (string)
  • Genre (string)
  • Likes (integer)
  • File Name (string)
  • File extension (string)
  • Description (string)

  • The name is the name of the podcast. The creator ID is the unique ID of the creator, the genre is the type of genre the podcast caters to. The number of likes and the file name is also stored. The description is the brief detail about the podcast and thus can attract the viewers to listen to it.


    The user view collection has:

  • User ID (string)
  • Podcast ID (string)
  • Active Listen (boolean)
  • Likes (Integer)
  • Position (Integer)
  • Completed (Boolean)

  • The user Id is the unique identification for the user along with the podcast ID it was listening to. This, is stored if he/she left in the middle of the listen, in which case the active listen boolean would be true. This would be used to store the podcasts that the user is listening to so that they can start from where they left. The likes is the number of likes the podcast has and the position is the position of the video time which has passed till now. When the video has completed, we can change the boolean to true and we can remove it from the active listen database.

    WhatsApp Image 2023-04-24 at 15 40 47

    About

    A sea of podcasts.

    Resources

    License

    Stars

    Watchers

    Forks

    Releases

    No releases published

    Packages

    No packages published

    Contributors 4

    •  
    •  
    •  
    •