JSFiddle - React, Tailwind, and code Playground

by igos

HTML

<link rel="stylesheet" href="https://rawgit.com/marvelapp/devices.css/master/assets/devices.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<div class="marvel-device iphone6 silver">
    <div class="top-bar"></div>
    <div class="sleep"></div>
    <div class="volume"></div>
    <div class="camera"></div>
    <div class="sensor"></div>
    <div class="speaker"></div>
    <div class="screen">
        
<div class="arrow"></div>
<ul class="messageLog" id="chatMessage">
   </ul>
    </div>
    <div class="home"></div>
    <div class="bottom-bar"></div>
</div>

CSS

.marvel-device .screen {
  color: black;
}

a {
  color: white;
}
a:visited {
  color: white;
}


ul.messageLog {
  list-style: none;
  padding:0px;
  padding-top: 10px;
  -webkit-padding-start: 0px;
}

.messageLog {
  margin-top: 0px;
}
.messageLog .messageLogEntry {
  margin: .5em;
}

.messageLogEntry {
  display: flex;
  flex-direction: row;
  align-items: flex-end;
  max-width: 100%;
}

.messageLogEntry.messageLogMe {
  flex-direction: row-reverse;  
}

.messageLogAvatar {
  flex-shrink: 0;
  flex-grow: 0;
  z-index: 1;
  height: 50px;
  width: 50px;
  border-radius: 25px;
  
}

.messageLogEntry.messageLogMe 
.messageLogAvatar {
  display: none;
}

.messageLogEntry .messageLogMsg {
  position: relative;
  margin: 0 12px;
}

.messageLogEntry .messageLogMsg::before {
  position: absolute;
  right: auto;
  bottom: .6em;
  left: -12px;
  height: 0;
  content: '';
  border: 6px solid transparent;
  border-right-color: #ddd;
  z-index: 2;
}

.messageLogEntry.messageLogMe .messageLogMsg::before {
  right: -12px;
  bottom: .6em;
  left: auto;
  border: 6px solid transparent;
  border-left-color: #08f;
}

.messageLogMsg {
  background-color: #ddd;
  padding: .5em;
  border-radius: 4px;
  font-weight: lighter;
  max-width: 70%;
}

.messageLogEntry.messageLogMe .messageLogMsg {
  border-top: 1px solid #07f;
  border-bottom: 1px solid #07f;
  background-color: #08f;
  color: #fff;
}

.messageLogMsg .messageLogTimestamp {
  display: none;
}
.messagePoints{
    padding-top: 18px;
    padding-bottom: 0px;
}
.point{
    position:relative;
    float:left;
    border-radius:50%;
    width:6px;
    height:6px;
    background:#ccc;
    margin:0px 2px;
}

.point1 {
	animation-name: upd;
	animation-duration: 2s;
	animation-iteration-count: infinite;
	animation-timing-function: linear;
    animation-delay:0s;
}
.point2{
	animation-name: upd1;
	animation-duration: 2s;
	animation-iteration-count: infinite;
	animation-timing-function: linear;
    animation-delay:0.10s;
}
.point3...

JavaScript

var messenger = {
	startPos : 0
};

messenger.userReply = function(text) {
	$('#chatMessage').append('<li class="messageLogEntry"><img class="messageLogAvatar" src="//placekitten.com/g/50/50" /><p class="messageLogMsg messagePoints"><a class="point point1" href="#"></a><a class="point point2" href="#"></a><a class="point point3" href="#"></a>&nbsp;<time class="messageLogTimestamp">6 minutes ago</time></p></li>');
  var t = $('#chatMessage li:last').find(".messageLogMsg");
  setTimeout(function() {  
    t.removeClass('messagePoints');
    t.html(text); 
  },800);
}

messenger.botReply = function(text) {
$('#chatMessage').append('<li class="messageLogEntry messageLogMe"><img class="messageLogAvatar" src="//placekitten.com/56/56" /><p class="messageLogMsg">'+text+'<time class="messageLogTimestamp">4 minutes ago</time></p></li>');
}

messenger.texts = [
	{text: "Cześć Asia", me: false, avatar:"//placekitten.com/56/56"},
  {text: "Dzień dobry jestem botem", me: true, avatar:"//placekitten.com/56/56"},
  {text: "Ale jak to i działasz na stonie?", me: false, avatar:"//placekitten.com/56/56"},
  {text: "tak, to jest czysty html+css+js :P", me: true, avatar:"//placekitten.com/56/56"},
  {text: "ale fajnie i co teraz?", me: false, avatar:"//placekitten.com/56/56"},
  {text: "wejdź na <a href='http://wandlee.com'>wandlee.com</a>", me: true, avatar:"//placekitten.com/56/56"}
];


messenger.doChat = function() {
  var msg = messenger.texts[messenger.startPos];
	var offset = 0;
  
  if(msg.me) {
  	messenger.botReply(msg.text);
  } else {
    offset = 800;
    messenger.userReply(msg.text);
  }
	
	messenger.startPos++;
	if(messenger.startPos < messenger.texts.length) {
		setTimeout(messenger.doChat, offset + 1000 + Math.floor((Math.random() * 300) + 1));
  }
};

setTimeout(messenger.doChat, 1000);