Introducing Play.Join(), the go-to app for gamers looking to connect and team up with fellow players. With Play.Join(), you can easily discover gaming friends who share your passion for your favorite titles. Simply create your profile, list your preferred games, and instantly find other gamers with similar interests. Connect with other gamers by adding their gamer tags and take your multiplayer adventures to the next level. Play.Join is your ticket to expanding your gaming circle and making memorable gaming experiences with like-minded players.
You can visit the website here: play.join
Tech | Docs |
---|---|
Javascript | docs |
CSS | docs |
Materialize framework | docs |
Express JS | docs |
Express Handlebars | docs |
Handlebars | docs |
Express Session | docs |
Sequelize v6 | docs |
Bcrypt | docs |
Heroku | docs |
IGDB | docs |
IGDB node package | docs |
We used Materialize CSS for our CSS framework. It was easy to use and made our website look simple and add colors. It was able to quickly make text white, style our backgrounds, and even make simple card layouts.
- I want to login/signup to have full access to the website
- I want to search for games to play with others
- I want to favorite a game
- I want to see other users who play the same games I do
- I want to add friends
Column | Requirements |
---|---|
id | Integer, not null, auto increment, primary key |
token | String, not null |
Column | Requirements |
---|---|
id | Integer, not null, auto increment, primary key |
user_id | Integer, references User |
game_id | Integer, references Game |
isFriend | Boolean, not null |
Column | Requirements |
---|---|
id | Integer, not null, primary key |
name | String, not null |
Column | Requirements |
---|---|
id | Integer, not null, auto increment, primary key |
name | String, not null |
platform_id | Integer, references Platform |
user_id | Integer |
NOTE: Unused but maybe for future implementation
Column | Requirements |
---|---|
id | Integer, not null, auto increment, primary key |
name | String, not null |
Column | Requirements |
---|---|
id | Integer, not null, auto increment, primary key |
userName | String, not null, validate: len(4) |
String, not null | |
password | String, not null, validate: len(8) |
Column | Requirements |
---|---|
id | Integer, not null, auto increment, primary key |
game_id | Integer, references Game |
user_id | Integer, references User |
gametag_id | Integer, references GamerTag |
Model | Relationship | Model |
---|---|---|
User | has many | GamerTag |
User | belongs to many | User as "friender" |
User | belongs to many | User as "friended" |
User | belongs to many | Game |
Game | belongs to many | User |
Platform | has man | GamerTag |
GamerTag | belongs to | Platform |
GamerTag | belongs to | User |
We used the IGDB RESTful API and its companion node package, the IGDB Node Package. It was extremely useful when getting a list of games given a search query. Our front-end would call our back-end server, which was then calls the IGDB api.
Here's code of how we used the node package
const response = await client
.fields('name, cover.*')
.limit(parseInt(process.env.IGDB_LIMIT))
.search(keyword.length > 1 ? keyword.split("%20").join(" ") : keyword) // search for a specific name (search implementations can vary)
.where(`category = (0, 4)`) // filter the results
.request('/games'); // execute the query and return a response object
Homepage with a game search
Profile page with the user's gamertags, favorite games, and friends
Showing the screen responsiveness
Fix: require models directory to make tables
Fix: .bulkCreate() not running hooks
Sequelize eager loading with nested columns
Express custom middleware with parameters
MIT License
Copyright (c) 2023 Christina Larsen
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.