diff --git a/src/snek/templates/web.html b/src/snek/templates/web.html
index 2c48cb4..cdf7672 100644
--- a/src/snek/templates/web.html
+++ b/src/snek/templates/web.html
@@ -22,6 +22,10 @@
 <script>
     const channelUid = "{{ channel.uid.value }}";
 
+    function getInputField(){
+        return document.querySelector("textarea")
+    }
+        
     function initInputField(textBox) {
         textBox.addEventListener('change', (e) => {
             e.preventDefault();
@@ -41,9 +45,28 @@
         textBox.focus();
     }
 
+    function replyMessage(message) {
+        const field = getInputField() 
+        field.value = "```\n" + (message || '') + "\n```\n";
+        field.focus();
+    }
+
     function updateTimes() {
-        document.querySelectorAll(".time").forEach((time) => {
+        document.querySelectorAll(".time").forEach((container) => {
+            const messageDiv = container.closest('.message');
+            const userNick = messageDiv.dataset.user_nick;
+            const text = messageDiv.querySelector(".text").innerText;
+            const time = document.createElement("span");
             time.innerText = app.timeDescription(time.dataset.created_at);
+            container.replaceChildren(time);
+            const reply = document.createElement("a");
+            reply.innerText = " reply";
+            reply.href = "#reply";
+            container.appendChild(reply);
+            reply.addEventListener('click', (e) => {
+                e.preventDefault();
+                replyMessage(text);
+            })
         });
     }
 
@@ -159,7 +182,7 @@
         }, 1000);
     });
 
-    initInputField(document.querySelector("textarea"));
+    initInputField(getInputField());
     updateLayout(true);
 </script>
 {% endblock %}