HEADS UP: This app will host porn, so please if you would like access to it, please send me an email, trying to keep it hidden from ‘normies’ xD. Gracias y adios.
I started this project about two years ago with the purpose of learning ReactJS and MongoDB. This took me into a learning journey of several technologies which vary from visual effects to handling data in back-end.
Overall the stack I endup working with is MERN.
The current version of beFree comes with the following features:
- System Authentication
- Login
- Register
- Recover Password
- Reset Password
- Confirm Email
- 2FA Authentication
- Profiles
- Posts by you
- Photos by you
- Following and Followers Pages
- Favorite videos
- Edit Profile
- Basics
- Avatar
- About
- Notification and Emails preferences
- Password
- Danger Zone (delete account by typing your email)
- Everything related to loggedIn user gets deleted, even files stored in remote server
- Posts
- Timeline (posts by users you follow and you)
- Posts (posts by every user)
- Multiple file uploads on each post
- Videos (Need Producer account to publish videos)
- Videos
- Single video
- Favorite/Unfavorite system
- Likes/Dislike system
- Views
- Share to Facebook, Twitter, Pinterest and Reddit
- Need account to be able to watch content
- Time fixed for video when string
?time=0
is found on URL - Cast per video
- Producers
- Single producer
- Videos by producer
- Subscribers by producer
- Producer team members
- Jobs
- And so on!
Changelog
1/13/21
Resumes are now accesible to the public and do not require authentication.
Secondly, when clicking on any of the ‘skills’ or ‘languages spoken’ tags, the app should redirect the visitor to a page in which resumes matching said keyword could be fetched; that or simply a page that matches the said keyword with users intead of the resumes…with that being said, the current state of the page will only display a 404 page.
Here is an example of a draft that I made using my personal data.
Each user can have more than 1 resume. I based myself after creating accounts on LinkedIn, ZipRecruiter, Indeed.com, etc; all of them use the same functionality, the only difference is that I’m forcing the user to fill the data by him/her-self since uploading PDF file don’t always manages the sections as it is supposed to.
Third, I would like to create function to only print the data inside the specific html element that contains the resume information but since they are all accesibles….I’m like nuh…still thinking about it.
While creating this feature, I messed up the state when deleting rows from X table in the front-end. The majority of my components are dynamic and can be used in multiple applications without having to create them again. With that being said I have a modal that gets displayed every time a Delete
button is triggered, said button also contains state objects which are not being manipulated by the response received from the backend resulting in not updating data(visually). The only solution as of now is to refresh the page to see changes made. Hopefully this just messes up the resume state, otherwise, some bug hunting will need to occur and this might take all of my evening(lie!; I know whats triggering the error but will double check the other functions to make sure the only one currently affected is the resume); it sucks!.
1/09/21.1
.env
variables were causing the previous error. This has been fixed by removing the config.js
file and had to add them to Heroku instead. A Procfile
file was made to let Heroku know that it can read the variables from itself instead of the ones given by the app.
1/09/21
App is currently in a blank state
due to the upgrading of React which has thrown an error of undefined
in several endpoints. This will need fixing on the proxy and will require more checks in some components for the loadUser()
function to work properly.
What I could do for now is adding some clusters to handle errors; this will not only improve the performance of the processes but will enable the app to continue working after any uncaughtException
error is found.
12/31/20
- Sending email via the Contact page has been enabled and no longer requires authentication.
- Improved the actions functions to return proper error messages. The type of messages to be returned will depend on the
ErrorResponse
created by me or they will be generated by the runValidators
property when doing some CRUD operations.
The code in the front-end in charge of doing this, looks like this:
const error = err.response.data.error.errors
const errors = err?.response?.data?.errors
if (error) {
error &&
Object.entries(error).map(([, value]) =>
dispatch(setAlert(value.message, 'danger'))
)
}
if (errors) {
errors.forEach((error) => dispatch(setAlert(error.msg, 'danger')))
}
- Just noticed that some error messages will not trigger because the usage of the method
Model.save()
when publishing somethin new does not runs runValidators
; not wanting to add ErrorResponses
error messages and will probably leave it as it is as long as it does not disrupts the working operation of the application. - I decided to stop using
combineReducers
method by Redux due to some issues created in chat feature.
12/28/20
- The chat page is now working. It is still a WIP but its a good starting point for it to be released on a live server.
- Hotmail/Outlook are no longer blocking emails as far as the latest
git push
. - CSP has been disabled also. It was causing some issues when downloading images, fonts and scripts necessaries for the app to work.
12/27/20
- 2FA has been enabled for users to activate if desired.
- This feature will enable you to use the Google Authenticator app or any other similar to read a QRCode and receive a token back in order to be able to log in into the application.
- A recovery token is also created when the 2FA is verified for cases in which X user forgets his/her password and no a single token seems to work.
- Reason of this is that changing a password is not possible when the 2FA is activated.
12/3/2020
- UI for posting has been re-designed. Instead of using a regular file input, it now uses the Dropzone component used when uploading new videos to AWS S3. This has resulted in a much better and dynamic Dropzone component. It now let’s me have more control over it…..styling, classes, files allowed, some boolean features to show/hide some sub-components, etc.
10/15/2020
- Videos are now public. Users are not required to register.
Like this:
Like Loading...
Related
View Demo