Hive webdev project: dating site made in collaboration with @josiz. There is a slightly temperamental version of the app running here. Among other issues with this deployment, the remote database doesn't allow for triggers, meaning the notifications system don't work.
Full-stack JavaScript: Node.JS Express back-end, React front-end. MySQL database (relational DB mandated by the exercise). The product is a (mostly) single-page app that communicates through the back-end through a JSON API with JSON Web Token authentication, Socket.io chat and long-polling notifications.
- You can skip this step if you don't require full functionality. Edit the files
mailConfig.README
(provide a valid Gmail SMTP account or similar, as well as Ecole 42 API app details) andapiKey.README
(provide a valid Google API key with the Maps API enabled) and move the files to the folders specified in the files, removing the comments therein. - Configure the database connection (
api/config.json
) - Run
run.sh
or alternatively:
cd api
npm i # Install server-side dependencies
cd ../client
npm i # Install dependencies for building the front-end
npm run build # Builds the production version of the front-end and moves it to the public folder of the server
cd ../api
npm run start # Runs the server
- Browse to
http://localhost:3001
with a relatively modern browser with JavaScript enabled.
- Any language
- 'Micro-frameworks' (no built-in ORM or account manager) allowed (Express)
- Decent layout
- Header, main section, footer
- Mobile-friendly
- User input must be validated
- Site must be secure
- No plaintext password storage
- No XSS
- No uploading unwanted content
- No SQL injection
- Registration must ask for email, username, last name, first name, password (complex)
- Registration must be confirmed via an emailed unique link
- Login with username and password
- 'Forgot password'
- Ability to log out with 1 click from any page
- After logging in, user can provide:
-
- Gender
-
- Sexual preferences (if none provided: bisexual)
-
- Biography
-
- Interests with hashtags ('#cycling')
-
- Max 5 pictures
- All information above must be modifiable (as well as first and last name and email)
- User must be able to see who has checked their profile and who 'liked' them
- Users must have a public 'fame rating'
- User's location must be established either through GPS/similar or IP
- Location must be modifiable
- History of visited profiles
- User must be suggested other relevant profiles
- Only show profiles the user is interested in (sexual preference)
- Clever matching (location, tags, fame rating)
- People must be prioritised based on location
- List must be sortable by age, location, fame rating, common tags
- List must be filterable by age, location, fame rating, common tags
- Other profiles must be searchable by features like age gap, fame rating gap, location, tags
- List must be sortable and filterable as above
- Must contain all information except for email and password
- If you have at least 1 photo, you must be able to like another profile
- Able to unlike or 'disconnect'
- See if user is currently online (if offline, date and time of last connection)
- Ability to report fake account
- Block user (won't show up in search results, won't generate notifications)
- See if profile is connected or has liked your profile
- 10 second delay is accepted for all of the following
- If both users like each other, the users are able to chat to each other
- Notification reasons:
-
- Someone liked your profile
-
- Visit to your profile
-
- New chat message
-
- New 'connection'
-
- 'Disconnection'
- Notifications must be viewable from any page