diff --git a/bun.lockb b/bun.lockb
index d5d7ade2..dda70b11 100755
Binary files a/bun.lockb and b/bun.lockb differ
diff --git a/src/app/harbor/signpost/countdown.tsx b/src/app/harbor/signpost/countdown.tsx
new file mode 100644
index 00000000..1c573816
--- /dev/null
+++ b/src/app/harbor/signpost/countdown.tsx
@@ -0,0 +1,83 @@
+import { useState, useEffect } from 'react'
+import JaggedCardSmall from '@/components/jagged-card-small'
+import { Button } from '@/components/ui/button'
+import Link from 'next/link'
+
+const dateEnd = new Date('2025-02-01T05:00:00Z').getTime()
+const formatTime = (distance: number) => {
+ const hours = Math.floor(distance / (1000 * 60 * 60))
+ const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60))
+ const seconds = Math.floor((distance % (1000 * 60)) / 1000)
+
+ if (hours > 0) {
+ return `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`
+ } else if (minutes > 0) {
+ return `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`
+ } else {
+ return `${String(seconds).padStart(2, '0')}`
+ }
+}
+
+export default function Countdown() {
+ const [timeLeft, setTimeLeft] = useState('00:00:00')
+
+ useEffect(() => {
+ const interval = setInterval(() => {
+ const now = new Date().getTime()
+ const distance = dateEnd - now
+
+ if (distance < 0) {
+ clearInterval(interval)
+ setTimeLeft('00:00:00')
+ return
+ }
+
+ setTimeLeft(formatTime(distance))
+ }, 1000)
+
+ return () => clearInterval(interval)
+ }, [])
+
+ return dateEnd - new Date().getTime() > 100 * 60 * 60 * 1000 ? (
+ <>>
+ ) : (
+
+ {dateEnd - new Date().getTime() > 0 ? (
+ <>Time Remaining>
+ ) : (
+ <>Ended.>
+ )}
+
+
+ {dateEnd - new Date().getTime() > 0 ? (
+ <>{timeLeft}>
+ ) : (
+ <>High Seas is over!>
+ )}
+
+