- Rubix982, Saif Ul Islam,
- Hassanzhd, Muhammad Hassan Zahid,
- TashikMoin23, Tashik Moin Sheikh,
- HasanBurney, Hasan Burney
A student social media project
Read the SRS/SDS»
Video Demo
·
Report Bug
·
Request Feature
Table of Contents
Finding relations among people is one of the hardest things to do with social media these days, contrary to the word social media in the first place. More and more emphasis is put on driving a great amount of reactions, rather than focusing on helping people find more connections far more easily than others.
What does this mean? It means that there are lower chances or possibilities for artists, small business, startups, to more easily connect with their audience. Social media really should be about socializing and finding it easier to connect and find people similar to your interest, and finding relationships between what people like and what they post content about is the main purpose for this creation. Inspired by the research and idea carried forward by graph databases, the main motivation and idea for this was to enable people to connect to other people far more easily. Focusing on actual quality of content, and not just quantity of content.
Terrabuzz is just this, a social media website that emphasizes on building relations with people, and helping people figure out similar groups of communities.
It will focus on having a homepage - a feed view, a profile page for each user, and the ability to search for other users meant to find other connections.
- Home page when logged out
- Registration page
- Verification email
- Login page
- First login page
- Basic newsfeed
- Profile page
- Modal to change information
- Searching for profiles that have an interest
- Searching for profiles based on user handle
- Settings dropdown with the notification page in the background. No notifications generated, thus, no notifications displayed at the moment for this new account
- Individual post page
- Profile page of another user, who is being followed ( denoted by the red cross symbol )
- Post shown after connecting with user
- Settings page
YT link to video a video showing the project demo will be placed here
YT link to video explaining the workflow of the project will be placed here
This sections explains the file structure for the whole project
The client directory contains the entirety of the frontend application. This means the ReactJS code with different sections designed, for example,
public
directory contains information for the basic React applicationsrc
contains the pages, components, and the assets used for the pagesAPI
contains the API object, which can send GET and POST requests to the backend specified via a .env file located underclient
assets
contains the individual pages as directories to segregate the different mutlimedia filescomponents
also contains a segregation. Each folder insidecomponents
is marked with the page component that uses those component. Each folder must have aMainContent.js
that arranges and organizes all the other components within the folder, if they exist. Errors thrown here render an error page on the web browser tabpages
contain single page views for a specified URLservices
contains the client side logic for dealing and handling the payloads. The error messages that occur here are displayed within the Chrome Dev Tool's console.styles
is also separated into folders, each folder contains individual files for each component used respectively undercomponents
, and each file is suffixed with.module.css
to make sure that styling is only applied to the component it is used inApp.js
contains the routing for the individual pages. Here, there is slight logic on how to deal with logged in and logged out user, and specifies the routes that will be visited when a specific URL is hitindex.js
simply imports theApp
component fromApp.js
withReact.StrictMode
serviceWorker.js
registers a new worker ( to be explained because this code came with ReactJS - I'm still not sure what this does exactly )setupTests.js
, just importing the Jest libary for testing.
.eslintignore
, ignore running lint on some files.eslintrc.js
, exports an object that configures the ES Lint run before each commit is performedDockerfile
, Docker file to build theclient
containerpackage.json
, contains the respective dependenciespackage-lock.json
, lock file for package.jsonREADME.md
, basic documentation generated by ReactJS
This folder is reserved space to allow volume mapping within the containers. Do not alter this or modify this. On forcefully removing this location, please build the containers again to safely allow volume mapping.
Contains the Software Requirement Specification
(SRS) and Software Development Specification
(SDS) written for the project. Also contains some basic images for this README.md
Contains the entirety of the backend code, written in ExpressJS. The explanations for the subdirectory are as follows,
config
, we initially created this ... but really didn't do anything with it. There's an emptyindex.js
for now. Future expansion is most probably expectedcontrollers
, requests after being properly routed, are sent to their respective controller functions here. The functions specified for each route really just cares about thedb
, contains the connector bindings for the databases used. Each folder is separately for each database with it's respective connectormiddleware
, contains some middleware function to check for correct login, and for authenticating the usermodels
, the classes and views created for Mongoose and MySQL2 to provide an easy way of dealing with the connectors and saving informationroutes
, specifies the endpoints to hit for GET and POST requestsservices
, here, queries are sent to the underlying databases in containers to perform CRUD operationstests
, any tests needed should be sent herewww
, making sure the PORT is open
The web server acts as an intermediary between the client side container and the backend container by mounting client at /
, and backend at /api/
.
The file structure is as follows,
nginx.conf
, basic NGINX configurationDockerfile
, sets up the docker container for nginxconf.d/default.conf
, mounting location for/api/
This is dedicated to setting the software up
You need to simply have Docker on your machine! Everything is dockerized, which means to build and run the project, you don't need to install any other software - Docker pulls that for you.
- If you're on Windows, check out "Install Docker Desktop on Windows"
- If you're on Linux, check out "https://docs.docker.com/compose/install/" and "Install Docker Engine on Ubuntu"
If you're on Linux
, simply run make build
. You can interrupt the containers anytime by pressing Ctrl^C
. If you want to remove the containers, run make remove
. If you want to start them again, just run make up
. Check out the Makefile
for more instructions.
If you're on Windows
, simply visit the root of the project via the command line, and run docker-compose -f docker-compose.dev.yaml up --build
, and it should start.
The team developed, built, and tested this project on Linux. If there a issue with the Window's equivalent of commands, let us know in the issues tab! :D
See the open issues for a list of proposed features (and known issues).
Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
Email,
- Saif Ul Islam, [email protected]
- Muhammad Hassan Zahid, [email protected]
- Tashik Moin Sheikh, [email protected]
- Hasan Burney, [email protected]
- GitHub Emoji Cheat Sheet
- Img Shields
- Choose an Open Source License
- GitHub Pages
- Animate.css
- Loaders.css
- Slick Carousel
- Smooth Scroll
- Sticky Kit
- JVectorMap
- Font Awesome
- Improve this README
- Make and upload a live video representation on how to use this template
- Plan out how to structure the documentation
- Make project planning and building as automated as possible