Build a messaging inbox similar to Airbnb by using TalkJS
Imagine you are starting your very own marketplace start-up. Something along the lines of Airbnb. You would need a real-time chat that allows your users to talk to each other. Airbnb has a very simple and easy-to-follow interface for its chat. Why not build a lookalike of the Airbnb chat using the TalkJS Chat API? The Theme Editor has just added some additional functionality which we will use to achieve a near lookalike of the Airbnb chat. Let’s get started!
Things to do
As usual, you will need to follow the Getting Started guide to set up a basic inbox. The guide is self-explanatory and you should be up and running in no time. Once that is set up we can start styling the chat. We need to make the following changes.
- Change header color to white (#FFF)
- Remove avatar from the header
- Add a faint gray border at the bottom of the header
- Remove the desktop notifications toggle from the inbox list panel header and change its color to white
- Add the user’s name near the avatar inside the chat
- Add timestamp next to the user’s name
- Change background to white for the panel footer
- Make the message field more rounded
- Add a couple of system messages
Login to your TalkJS account and create a new theme called ‘Airbnb’. Then select the ‘Roles’ option from the navbar and apply this theme to any of the roles that you have. We have applied it to the default role here.
ChatHeader
The first component that we’ll edit is the ChatHeader. Remove lines 38-40. This will get rid of the avatar on the header. Now scroll down to the .header
class and change the background-color
to #FFF
and add a border-bottom
of 1px solid #F5F5F5
. After that, add a margin-left
of 10px
for the .content
class.
ConversationListHeader
In this component, we first need to delete the available toggle. For that, remove line number 15. Now, in Line 16, change the content to ‘Messages’. Go to the .toggle-label
class and add the following styles to it.
font-weight: bold;
font-size: 16px;
margin-left: 10px;
UserMessage
As usual, most of our changes are about the UserMessage component. Open up the component on the Theme Editor and replace lines 67-71 with the following.
<div t:if="{{ conversation.others.length > 0 }}" class="message-author"
style="color: black; font-size: 14px">
{{ sender.name }} <span class = "time-sent"> {{ timestamp | date: "%H:%m %p"}}</span>
</div>
After that, scroll down below to the .message-row
class and add a margin-left
and a margin-right
of 30px
each. Delete the .message-row.by-me
class to align all messages in the same direction. For the timestamp near the user’s name, add the following lines of code.
.time-sent{
font-weight: 100;
font-size: 10px;
color: #71717A;
}
Now, edit the .message
class so that it looks like this.
.message {
white-space: normal;
overflow: hidden;
word-wrap: break-word;
position: relative;
display: inline-block;
max-width: calc(100% - 6rem - 0.25rem - 0.25rem);
background-color: #FFF;
color: #000;
}
For the .by-me .message
class, change the background-color
to #FFF
and the color
to #000
. You can delete the border-color
property here as well.
SystemMessage
The Airbnb chat displays messages like these when users discuss a potential property with the homeowners. Luckily, TalkJS has a SystemMessage component that lets us do the exact same thing. For this example, we will put an SVG of the Airbnb logo on our system message, but you can replace this with any logo. Add the SVG to Line 52 and move the existing contents of Line 52 to 53.
For the SVG, we add a class called logo. Then, make the following changes to the .logo
class and the .message
class.
.logo{
margin: 10px;
float: left;
}
.message {
white-space: pre-wrap;
margin-left: 1.5rem;
margin-right: 1.5rem;
margin-bottom: 2rem;
border-radius: 20rem;
padding: 5px;
overflow: hidden;
background-color: #F7F7F7;
color: #717171;
font-size: 11px;
font-weight: bold;
}
Once these changes are made, you should have a system message that looks exactly like the one on Airbnb. But wait? How do you display system messages? For that, we need to head over to our script.js
file and add an attribute to the conversation. The welcomeMessages
attribute is used to display system messages in your TalkJS conversations. You can add any message that you would like to display to the user in an array of strings.
conversation.setAttributes({
welcomeMessages: ["To protect your payment, always communicate and pay through the Airbnb website or app", "Hosts can’t see your profile photo until after your booking is confirmed."]
})
Layout
Global
Select the global sub-section and change the font-family to "Helvetica", "Open Sans", sans-serif. Next, change the fontSize
to 15px
.
Inbox conversation list panel
Head over to the Inbox conversation list panel sub-section and change the width to 100%. Change both the maxWidth
and minWidth
properties to 300px
each. After that change the borderColor
to #F5F5F5
.
Inbox chat panel
Set the marginLeft
property to blank and both the width
and maxWidth
to 785px
.
Panel Header
For the Panel header, change the backgroundColor
to #FFF
.
Message field
We are almost at the end now. Select the Message field sub-section and add a border-radius
of 30px
. Change the borderColor
to #71717A
and color
to #000
(black).
Highlights
Lastly, open up the Highlights sub-section and change the backgroundColor
to #F7F7F7
and color
to #000
.
Wrapping Up
With all of those changes made, your inbox should look something like this. If you saw the first screenshot of the Airbnb chat you will notice that our lookalike is almost identical to it. The Theme Editor is continuously growing in capabilities and giving us more and more options to tweak the theme of our TalkJS chat.
Now, if you want the mobile view of the same chat, all you need to do is change the inbox to a chatbox in TalkJS and decrease the width
of the chatbox to 380px
. That would look something like this.
That’s it for this one. Hope you had an amazing time coding up the Airbnb lookalike using the TalkJS Chat API and the Theme Editor. Until the next one, happy coding!