A mobile-first, full-stack, web application for lovers of metal music that aims to link them with other fans of the genre
Jack Chou, Andrew Song, and Keith Tachibana
Dependency | Version |
---|---|
@Babel/Core | 7.8.0 |
@Babel/Plugin-Transform-React-JSX | 7.8.0 |
Axios | 0.19.2 |
Babel-Loader | 8.0.6 |
Bcrypt | 4.0.1 |
Bootstrap | 4.4.1 |
CORS | 2.8.5 |
Disconnect | 1.2.1 |
Dotenv | 8.2.0 |
Express | 4.17.1 |
Express-Session | 1.17.0 |
FontAwesome | 5.11.2 |
Lodash | 4.17.15 |
Moment | 2.24.0 |
Multer | 1.4.2 |
Node-Fetch | 2.6.0 |
Node-Mailer | 0.1.1 |
PG | 7.17.1 |
PM2 | 4.2.3 |
PostgreSQL | 10.10 |
React | 16.12.0 |
React-DOM | 16.12.0 |
React-Router-DOM | 5.1.2 |
Session-File-Store | 1.3.1 |
Socket.io | 2.3.0 |
Webpack | 4.41.5 |
Webpack-CLI | 3.3.10 |
YouTube-API-Search | 0.0.5 |
Try the application live on my portfolio website
- * Users can register for an account by setting up a password which gets hashed and saved in the database
- * Users can authenticate themselves at the login page using said password
- * Users can reset their password and be sent an e-mail containing a password reset link that expires in 1 hour using a token
- * Users can post comments, album reviews, or other information for others to see when they log into the application, sorted by date from most recent to oldest
- * Users can add a profile to their account, including a profile picture, screen name, e-mail address, real name, location, phone number, and favorite sub-genres of metal
- * Users can view their individual post history (if any) and edit or delete them
- * Users can search for concerts via the TicketMaster API and see the results in tabular format
- * Users can also view the concert search results on Google Maps as clickable, animated markers with the corresponding concert information
- * Users can join a global chat session with other currently logged-in users and message each other in real-time
- * Users can log out and rejoin the chat room and still see all previous chat messages
- * Users can search for band profiles using the Discogs API
- * Users can search for YouTube videos and play them inside the application
- * DB Designer available here
- * Figma available here
- * MeisterTask available here
- * Wireframe available here
Requirement | Version |
---|---|
Nginx | 1.10 or higher |
Node | 10 or higher |
NPM | 6 or higher |
PM2 | 4 or higher |
PostgreSQL | 10 or higher |
Ubuntu Server | 18.04 LTS |
- Clone the repository
git clone https://github.com/Keith-Tachibana/Metalink.git
- Change directory to cloned folder
cd Metalink/
- Install all dependencies with NPM
npm install
- Start PostgreSQL server
sudo service postgresql start
- Create the database
createdb metalink
- Import the schema and dummy data
npm run db:import
- Edit your nginx default site configuration to reverse proxy the Express.js server
cd /etc/nginx/sites-available
sudo nano default
- 7a. In the "server" code block, add this underneath the first location definition:
location /api {
proxy_pass http://127.0.0.1:3001;
}
location /socket.io {
proxy_pass http://127.0.0.1:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
- 7b. Save your changes (
Ctrl + O
) and exit (Ctrl + X
) - 7c. Link your default site to the sites-enabled directory (if not already done):
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default
- Start nginx
sudo service nginx start
- Make a copy of the .env.example file, update it with your PostgreSQL credentials, and add your API keys to it
cp .env.example .env
- 9a. You'll need API keys for the following: Discogs, TicketMaster, and YouTube
- Transpile React components using Webpack
npm run build
- Start the Express.js server using the PM2 module
sudo pm2 --name "Metalink" start "npm run start"
- Open your default web browser and navigate to http://localhost:3000/ to see the result!