diff --git a/frontend/src/component/common/EventTimeline/EventTimeline.tsx b/frontend/src/component/common/EventTimeline/EventTimeline.tsx
new file mode 100644
index 0000000000..3091f9b5d9
--- /dev/null
+++ b/frontend/src/component/common/EventTimeline/EventTimeline.tsx
@@ -0,0 +1,216 @@
+import { styled, useTheme } from '@mui/material';
+import { useEventSearch } from 'hooks/api/getters/useEventSearch/useEventSearch';
+import type { EventSchema, EventSchemaType } from 'openapi';
+import { ArcherContainer, ArcherElement } from 'react-archer';
+import ToggleOnIcon from '@mui/icons-material/ToggleOn';
+import ToggleOffIcon from '@mui/icons-material/ToggleOff';
+import { HtmlTooltip } from '../HtmlTooltip/HtmlTooltip';
+import { formatDateYMDHMS } from 'utils/formatDate';
+import { useLocationSettings } from 'hooks/useLocationSettings';
+import { ConditionallyRender } from '../ConditionallyRender/ConditionallyRender';
+import { startOfDay } from 'date-fns';
+
+const StyledArcherContainer = styled(ArcherContainer)({
+ width: '100%',
+ height: '100%',
+});
+
+const StyledTimelineContainer = styled('div')(({ theme }) => ({
+ position: 'relative',
+ height: theme.spacing(1),
+ width: '100%',
+ display: 'flex',
+ alignItems: 'center',
+}));
+
+const StyledEventContainer = styled('div')({
+ position: 'absolute',
+ display: 'flex',
+ alignItems: 'center',
+ justifyContent: 'center',
+});
+
+const StyledNonEvent = styled('div')(({ theme }) => ({
+ height: theme.spacing(0.25),
+ width: theme.spacing(0.25),
+ backgroundColor: theme.palette.secondary.border,
+}));
+
+const StyledEvent = styled(StyledEventContainer, {
+ shouldForwardProp: (prop) => prop !== 'position',
+})<{ position: string }>(({ theme, position }) => ({
+ left: position,
+ transform: 'translateX(-100%)',
+ padding: theme.spacing(0, 0.25),
+ zIndex: 1,
+}));
+
+const StyledEventCircle = styled('div')(({ theme }) => ({
+ height: theme.spacing(2.25),
+ width: theme.spacing(2.25),
+ borderRadius: '50%',
+ backgroundColor: theme.palette.primary.main,
+ display: 'flex',
+ alignItems: 'center',
+ justifyContent: 'center',
+ transition: 'transform 0.2s',
+ '& svg': {
+ color: theme.palette.primary.contrastText,
+ height: theme.spacing(2),
+ width: theme.spacing(2),
+ },
+ '&:hover': {
+ transform: 'scale(1.5)',
+ },
+}));
+
+const StyledStart = styled(StyledEventContainer)(({ theme }) => ({
+ height: theme.spacing(0.25),
+ width: theme.spacing(0.25),
+ left: 0,
+}));
+
+const StyledEnd = styled(StyledEventContainer)(({ theme }) => ({
+ height: theme.spacing(0.25),
+ width: theme.spacing(0.25),
+ right: 0,
+}));
+
+const getEventIcon = (type: EventSchemaType) => {
+ switch (type) {
+ case 'feature-environment-enabled':
+ return
+ {event.createdBy} enabled {event.featureName} for the{' '} + {event.environment} environment in project {event.project} +
++ {event.createdBy} disabled {event.featureName} for the{' '} + {event.environment} environment in project {event.project} +
+