In this project which involved using APIs, and discovering features of the web you didn't know before, I made a chat app like WhatsApp and other messaging apps. I build the application with node.js, Javascript, Liquid and css. I used server-sent events to let the receiver get the texts, idle detection to know if the user is active or not and I worked with service workers to be able to install the PWA and to use the push notifications api to send notifications to the user if he is not online. I tried some experimental things during this project and one of them is that I did not set up a database. I stored the messages on the server in the beginning. After a while I used fs
to store them in a json file instead of the server. But render, the service where I have put my webapp online, resets the content of these files when the server restarts. And because I didn't wanted to set up a database, I thought of something different. I made a private github repository, generated an access token, and now I store and get the data from my own github api/database.
- Installation
- Use of features
- API's
- Wishlist
- License
-
Clone the repository:
$ git clone https://github.com/JopMolenaar/API-JopMolenaar.git
-
Navigate to the project directory:
$ cd myApp
-
Install the dependencies:
$ npm install
-
In order to send push notifications you need to make an
.env
file and fill in these variables:- PRIVATE_VAPID_KEY
For the vapid key's that you need for the push notifications, type this command in the terminal
$ npm install -g web-push $ web-push generate-vapid-keys
This will create a public and a private key. Put the private key in the env variable and place the public one here:
const vapidKeys = { publicKey: // HERE, privateKey: process.env.PRIVATE_VAPID_KEY, };
-
For experimental purposes I did not setup a database and writing to local json files with
fs
was getting emptied when restarting the server on render, so I made my own github repo api/database. To set this up for your own you need to:- Make a private github repository.
- Generate a Personal access token (classic) under /settings -> /Developer settings.
- Once you have that token, place this in the ACCESSTOKEN variable, and place the your account name / your repo name in the REPONAME variable in the
.env
. - Adjust the
usersDB
,chatsDB
,subsDB
andmessagesDB
variables in the server.js if needed, to the correct routes you have setup in your repo.
-
Start the application:
$ npm run dev
The application will be accessible at
http://localhost:4000
.
- Be able to chat to people
- making accounts
- adding contacts with chats
- Store data in a json file instead of the server
- Fetch data on the background and update when needed (contact list and contact status)
- The chat works without js, js is only for a better UX and fetching data on the background
- Error messages popups are displayed with a error message when there is an error.
- Automatic scrolling when you send or get a message.
- Remember the user (localstorage)
- Know when the user is online/offline or inactive and update the status of that user
- Send push notifications to people that have a subscription when they are offline
- Remove the subscription when someone logs out of their account.
- Add custom profile picture
- Idle detection
- Notification api (great tutorial and information about it: web-push-book)
- Github api (See installation on how to setup)
- Use a database instead of a github repo to store data
- A bit better styling
- gsap animation when you send or receive a message
- add passwords to accounts
- offline available
- send the offline send message as soon as someone is back online
- Use a builder
- Make chat groups
My website is open-source and released under the MIT License.