diff --git a/web/app/trades/page.tsx b/web/app/trades/page.tsx
index e80d945..b0dd83f 100644
--- a/web/app/trades/page.tsx
+++ b/web/app/trades/page.tsx
@@ -1,8 +1,9 @@
import { getAccount, getDeals, type Deal } from "@/lib/mt5";
import { formatCurrency, formatDate } from "@/lib/format";
import EquityChart from "@/components/EquityChart";
+import TradesRefresher from "@/components/TradesRefresher";
-export const revalidate = 60;
+export const dynamic = "force-dynamic";
const MAGIC = 19730;
export default async function TradesPage() {
@@ -42,6 +43,10 @@ export default async function TradesPage() {
All closed trades from ARES ยท magic {MAGIC}
+
+
+
+
{error ? (
diff --git a/web/components/TradesRefresher.tsx b/web/components/TradesRefresher.tsx
new file mode 100644
index 0000000..a147f39
--- /dev/null
+++ b/web/components/TradesRefresher.tsx
@@ -0,0 +1,22 @@
+"use client";
+import { useEffect, useState } from "react";
+import { useRouter } from "next/navigation";
+
+export default function TradesRefresher() {
+ const router = useRouter();
+ const [lastUpdated, setLastUpdated] = useState(new Date());
+
+ useEffect(() => {
+ const id = setInterval(() => {
+ router.refresh();
+ setLastUpdated(new Date());
+ }, 30_000);
+ return () => clearInterval(id);
+ }, [router]);
+
+ return (
+
+ Updated {lastUpdated.toLocaleTimeString()}
+
+ );
+}