From 87b9d3f4c374b5efa67736d2010acb2527b19510 Mon Sep 17 00:00:00 2001 From: trafficlunar Date: Thu, 29 Jan 2026 16:46:44 +0000 Subject: [PATCH] feat: countdown to sequel --- .prettierrc | 3 +- src/app/page.tsx | 2 ++ src/components/countdown.tsx | 65 ++++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 src/components/countdown.tsx diff --git a/.prettierrc b/.prettierrc index 29a8d4e..ebdecb7 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,4 +1,5 @@ { "tabWidth": 2, - "useTabs": true + "useTabs": true, + "printWidth": 160 } \ No newline at end of file diff --git a/src/app/page.tsx b/src/app/page.tsx index 215e31c..ed195a3 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -5,6 +5,7 @@ import { Suspense } from "react"; import { auth } from "@/lib/auth"; import { prisma } from "@/lib/prisma"; +import Countdown from "@/components/countdown"; import MiiList from "@/components/mii-list"; import Skeleton from "@/components/mii-list/skeleton"; @@ -54,6 +55,7 @@ export default async function Page({ searchParams }: Props) { <>

{tags ? `Miis tagged with '${tags}' - TomodachiShare` : "TomodachiShare - index mii list"}

+ }> diff --git a/src/components/countdown.tsx b/src/components/countdown.tsx new file mode 100644 index 0000000..91c551c --- /dev/null +++ b/src/components/countdown.tsx @@ -0,0 +1,65 @@ +"use client"; + +import { useEffect, useState } from "react"; + +export default function Countdown() { + const [days, setDays] = useState(31); + const [hours, setHours] = useState(59); + const [minutes, setMinutes] = useState(59); + const [seconds, setSeconds] = useState(59); + + const targetDate = new Date("2026-04-16T00:00:00Z").getTime(); + + useEffect(() => { + const interval = setInterval(() => { + const now = new Date().getTime(); + const distance = targetDate - now; + + if (distance < 0) { + clearInterval(interval); + setDays(0); + setHours(0); + setMinutes(0); + setSeconds(0); + return; + } + + setDays(Math.floor(distance / (1000 * 60 * 60 * 24))); + setHours(Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60))); + setMinutes(Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60))); + setSeconds(Math.floor((distance % (1000 * 60)) / 1000)); + }, 100); + + return () => clearInterval(interval); + }, []); + + return ( +
+
+
+

Living the Dream

+

releases in:

+
+ +
+
+ {days} + days +
+
+ {hours} + hours +
+
+ {minutes} + minutes +
+
+ {seconds} + seconds +
+
+
+
+ ); +}