diff --git a/frontend/src/components/TransactionItem.tsx b/frontend/src/components/TransactionItem.tsx
new file mode 100644
index 00000000..e521b235
--- /dev/null
+++ b/frontend/src/components/TransactionItem.tsx
@@ -0,0 +1,212 @@
+import dayjs from "dayjs";
+import {
+ ArrowDownIcon,
+ ArrowUpIcon,
+ ChevronDown,
+ ChevronUp,
+ CopyIcon,
+} from "lucide-react";
+import React from "react";
+import {
+ Credenza,
+ CredenzaBody,
+ CredenzaContent,
+ CredenzaFooter,
+ CredenzaHeader,
+ CredenzaTitle,
+ CredenzaTrigger,
+} from "src/components/ui/credenza";
+import { toast } from "src/components/ui/use-toast";
+import { copyToClipboard } from "src/lib/clipboard";
+import { Transaction } from "src/types";
+
+type Props = {
+ tx: Transaction;
+};
+
+function TransactionItem({ tx }: Props) {
+ const [showDetails, setShowDetails] = React.useState(false);
+ const type = tx.type;
+
+ const copy = (text: string) => {
+ copyToClipboard(text);
+ toast({ title: "Copied to clipboard." });
+ };
+
+ return (
+
+ {type == "incoming" ? "Received" : "Sent"}
+
+ {dayjs(tx.settled_at * 1000).fromNow()}
+
+ {tx.description || "Lightning invoice"}
+
+ {type == "outgoing" ? "-" : "+"} {Math.floor(tx.amount / 1000)}
+ sats
+ ~{tx.totalAmountFiat}
+
+ {Math.floor(tx.amount / 1000)}{" "}
+ {Math.floor(tx.amount / 1000) == 1 ? "sat" : "sats"}
+
+ Fiat Amount
+ Date & Time
+ {dayjs(tx.settled_at).toString()}
+ Fee
+ {Math.floor(tx.fees_paid / 1000)}{" "}
+ {Math.floor(tx.fees_paid / 1000) == 1 ? "sat" : "sats"}
+ Description {tx.description} Preimage
+ {tx.preimage}
+ Hash
+ {tx.payment_hash}
+
- {type == "incoming" ? "Received" : "Sent"} -
-- {dayjs(tx.settled_at * 1000).fromNow()} -
-- {tx.description || "Lightning invoice"} -
-- {type == "outgoing" ? "-" : "+"}{" "} - {Math.floor(tx.amount / 1000)} -
-sats
- - {/* {!!tx.totalAmountFiat && ( -- ~{tx.totalAmountFiat} -
- )} */} -- {Math.floor(tx.amount / 1000)}{" "} - {Math.floor(tx.amount / 1000) == 1 ? "sat" : "sats"} -
- {/*- Fiat Amount -
*/} -Date & Time
-- {dayjs(tx.settled_at).toString()} -
-Fee
-- {Math.floor(tx.fees_paid / 1000)}{" "} - {Math.floor(tx.fees_paid / 1000) == 1 - ? "sat" - : "sats"} -
-Description
-- {tx.description} -
-Preimage
-- {tx.preimage} -
-Hash
-- {tx.payment_hash} -
-