diff --git a/src/app/StatsList.tsx b/src/app/StatsList.tsx
new file mode 100644
index 0000000..f806f03
--- /dev/null
+++ b/src/app/StatsList.tsx
@@ -0,0 +1,62 @@
+import { Fragment, JSX } from "react";
+import { Heading, Flex } from "@chakra-ui/react";
+import { CombinedError } from "urql";
+import SingleStatComponent from "@/components/stats/SingleStat";
+
+interface StatsListProps {
+ title: string;
+ loading: boolean;
+ error: CombinedError | undefined;
+ groups?: number;
+ links: number;
+ commands: number;
+ triggers: number;
+}
+
+const StatsList = ({
+ title,
+ loading,
+ error,
+ groups,
+ commands,
+ links,
+ triggers
+}: StatsListProps): JSX.Element => {
+ return (
+
+
+ {title}
+
+
+ {groups ? (
+
+ ) : null}
+
+
+
+
+
+ );
+};
+
+export default StatsList;
diff --git a/src/components/stats/SingleStat.tsx b/src/components/stats/SingleStat.tsx
new file mode 100644
index 0000000..2655e7b
--- /dev/null
+++ b/src/components/stats/SingleStat.tsx
@@ -0,0 +1,44 @@
+import { JSX } from "react";
+import { Skeleton, Stat, FormatNumber } from "@chakra-ui/react";
+import { Icon } from "@iconify/react";
+import { CombinedError } from "urql";
+
+interface SingleStatComponentProps {
+ stat: number;
+ title: string;
+ loading: boolean;
+ error: CombinedError | undefined;
+}
+
+const SingleStatComponent = ({
+ stat,
+ title,
+ loading,
+ error
+}: SingleStatComponentProps): JSX.Element => {
+ return (
+
+ {title}
+
+
+ {(error || stat === undefined) && !loading ? (
+
+ ) : (
+
+ )}
+
+
+
+ );
+};
+
+export default SingleStatComponent;