diff --git a/app/javascript/dashboard/routes/dashboard/contacts/components/TimelineCard.stories.js b/app/javascript/dashboard/routes/dashboard/contacts/components/TimelineCard.stories.js
new file mode 100644
index 000000000..2aedbcd15
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/contacts/components/TimelineCard.stories.js
@@ -0,0 +1,45 @@
+import { action } from '@storybook/addon-actions';
+import TimelineCard from './TimelineCard';
+
+export default {
+  title: 'Components/Events/Timeline',
+  component: TimelineCard,
+  argTypes: {
+    eventType: {
+      defaultValue: 'Commented',
+      control: {
+        type: 'text',
+      },
+    },
+    eventPath: {
+      defaultValue: 'chatwoot/chatwoot',
+      control: {
+        type: 'text',
+      },
+    },
+    eventBody: {
+      defaultValue:
+        'Commentedmany variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour',
+      control: {
+        type: 'text',
+      },
+    },
+    timeStamp: {
+      defaultValue: '1618046084',
+      control: {
+        type: 'number',
+      },
+    },
+  },
+};
+
+const Template = (args, { argTypes }) => ({
+  props: Object.keys(argTypes),
+  components: { TimelineCard },
+  template: '',
+});
+
+export const Timeline = Template.bind({});
+Timeline.args = {
+  onClick: action('more'),
+};
diff --git a/app/javascript/dashboard/routes/dashboard/contacts/components/TimelineCard.vue b/app/javascript/dashboard/routes/dashboard/contacts/components/TimelineCard.vue
new file mode 100644
index 000000000..a7f74fe58
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/contacts/components/TimelineCard.vue
@@ -0,0 +1,133 @@
+
+  
+
+
+
+
+
+ {{ eventBody }} +
+