diff --git a/ui/src/views/Repo.tsx b/ui/src/views/Repo.tsx
index c46c3224..81cf7687 100644
--- a/ui/src/views/Repo.tsx
+++ b/ui/src/views/Repo.tsx
@@ -9,7 +9,7 @@ import { init, activate, repoSlice as slice } from '../redux/repo'
import ActivateButton from "../components/ActivateButton"
import Main from './main'
-import RepoHome from './RepoHome'
+import RepoHome from './repoHome'
import RepoLock from "./RepoLock";
import RepoDeploy from './RepoDeploy'
import RepoRollabck from './RepoRollback'
diff --git a/ui/src/views/repoHome/ActivityLogs.tsx b/ui/src/views/repoHome/ActivityLogs.tsx
new file mode 100644
index 00000000..4f1f4fb0
--- /dev/null
+++ b/ui/src/views/repoHome/ActivityLogs.tsx
@@ -0,0 +1,64 @@
+import { shallowEqual } from "react-redux";
+import { Timeline, Typography } from 'antd'
+import { SyncOutlined } from '@ant-design/icons'
+import moment from "moment"
+
+import { useAppSelector } from '../../redux/hooks'
+import { DeploymentStatusEnum } from "../../models"
+
+import DeploymentStatusBadge from "../../components/DeploymentStatusBadge"
+import UserAvatar from '../../components/UserAvatar'
+import DeploymentRefCode from '../../components/DeploymentRefCode'
+
+const { Text } = Typography
+
+export default function ActivityLogs(): JSX.Element {
+ const {
+ deployments,
+ } = useAppSelector(state => state.repoHome, shallowEqual)
+
+ return (
+
+ {deployments.map((d, idx) => {
+ const dot = (d.status === DeploymentStatusEnum.Running)?
+
+ :
+ <>>
+ const avatar =
+
+ return (
+
+
+ {d.env} • View detail #{d.number}
+
+
+ Deployed by {avatar} {moment(d.createdAt).fromNow()}
+
+
+ )
+ })}
+
+ )
+}
+
+// https://ant.design/components/timeline/#Timeline.Item
+const getStatusColor = (status: DeploymentStatusEnum) => {
+ switch (status) {
+ case DeploymentStatusEnum.Waiting:
+ return "gray"
+ case DeploymentStatusEnum.Created:
+ return "purple"
+ case DeploymentStatusEnum.Queued:
+ return "purple"
+ case DeploymentStatusEnum.Running:
+ return "purple"
+ case DeploymentStatusEnum.Success:
+ return "green"
+ case DeploymentStatusEnum.Failure:
+ return "red"
+ case DeploymentStatusEnum.Canceled:
+ return "gray"
+ default:
+ return "gray"
+ }
+}
\ No newline at end of file
diff --git a/ui/src/views/RepoHome.tsx b/ui/src/views/repoHome/index.tsx
similarity index 88%
rename from ui/src/views/RepoHome.tsx
rename to ui/src/views/repoHome/index.tsx
index 2e6c5fdd..2ad9a8f7 100644
--- a/ui/src/views/RepoHome.tsx
+++ b/ui/src/views/repoHome/index.tsx
@@ -3,13 +3,13 @@ import { useParams } from "react-router-dom";
import { shallowEqual } from "react-redux";
import { PageHeader, Select } from 'antd'
-import { useAppSelector, useAppDispatch } from '../redux/hooks'
-import { repoHomeSlice as slice, fetchEnvs, fetchDeployments, perPage } from '../redux/repoHome'
-import { subscribeEvents } from "../apis"
+import { useAppSelector, useAppDispatch } from '../../redux/hooks'
+import { repoHomeSlice as slice, fetchEnvs, fetchDeployments, perPage } from '../../redux/repoHome'
+import { subscribeEvents } from "../../apis"
-import ActivityLogs from '../components/ActivityLogs'
-import Spin from '../components/Spin'
-import Pagination from '../components/Pagination'
+import ActivityLogs from './ActivityLogs'
+import Spin from '../../components/Spin'
+import Pagination from '../../components/Pagination'
const { Option } = Select
@@ -78,8 +78,9 @@ export default function RepoHome(): JSX.Element {
{(loading)?
-
:
-
+
+ :
+
}