WhatsThat Application is a clone of a popular messaging application. This is written using Typescript and React Native.
- Clone the repository
- Run
npm install
to install all the dependencies - Run
npx expo start
to start expo. - To run on an android emulator, run
npx expo start --android
, for webnpx expo start --web
.
- Login and Register.
- Add, Remove, Block Contacts.
- Create chat rooms and invite contacts to it.
- Send messages to chat rooms.
- Take pictures and upload as profile picture.
- Search for all, contacts and blocked users.
- Automatically fetch messages when a chat room is opened.
- Automatically fetch chat rooms when the app is opened.
- Axios interceptors to handle errors and authentication.
- Basic notification system to display snackbar.
- Create drafts and queue them to send them later.
- Light and Dark mode.
- React Native
- React Navigation for React Native
- Axios -> requests, responses, interceptors
- Materials UI for React Native
- React Native Paper
- React native logs
- Postman
- Android Studio
- Expo
- React dev tools
- VSC
- Typescript
- Adding contact should allow that contact to accept or decline.
- Blocked user messages in a group chat can be viewed with a click.
- Show badges when a chat has a new message.
- Delete drafts.
- Upload images to chat rooms.
- Prevent creating empty chatrooms -> Invite user along with creating chatroom.
- Add localisation.
- Add a way to track the chat creation date, since the database doesn't store 'chat summary' creation.
- Not entirely sure what the best way to go about it is. Was thinking I could either store it in state or force the user to invite someone to the chat room when creating it and send first message.
- Due to time constraints some components are not completely modularised. Some are at the stage of get it working first, then refactor.
- Add a way to delete chat rooms. I noticed that a user removing themselves can be used as deleting the chatroom but it felt abit odd, so I prevented users doing that. Maybe thats whats usually done?
- Change state/reducer solution to redux. I avoided using this to try and use as little libraries as possible so I can learn more about the underlying concepts.
- Improve notifications. Currently, it only shows a snackbar. I would like to add a way to show notifications when the app is in the background.
- The app is not tested on iOS.
- The app is not tested on a real device.
- I didn't test this much on the web browser, an issue i'm aware of are some of the animations.
- This app is developed & tested on an android emulator,
Pixel 4 API 33, Android 13.0
. - This project is built using typescript. I'm still learning typescript so there might be some inconsistencies.
- Learnt more on creating my own hooks and using them towards the end of the project. I would like to refactor some of the code to use them.
- Expo is used to run the app. The version used for this project is currently
48.0.0.
If you're required to update expo on your system, it could interfere with other students projects. So, please be careful.