From 8e4eef06f5f3cb4d6b5b0afa04b5a7b8872bbbc3 Mon Sep 17 00:00:00 2001 From: JCEEE <0xjceee@proton.me> Date: Sun, 20 Sep 2026 17:58:38 +0100 Subject: [PATCH] add payday anim --- .../src/routes/[fam]/[username]/+page.svelte | 105 ++++++++++++++++++ 1 file changed, 105 insertions(+) diff --git a/frontend/src/routes/[fam]/[username]/+page.svelte b/frontend/src/routes/[fam]/[username]/+page.svelte index 63db48d..3f2b090 100644 --- a/frontend/src/routes/[fam]/[username]/+page.svelte +++ b/frontend/src/routes/[fam]/[username]/+page.svelte @@ -248,6 +248,15 @@ // ─── Payday countdown (child view) ─── let nowMs = $state(Date.now()); let eowFired = $state(false); + // Nyan-style payday party: rainbow banner + confetti when payday unlocks. + let paydayParty = $state(false); + let partyTimer: ReturnType | undefined; + function startPaydayParty() { + paydayParty = true; + fire(); + if (partyTimer) clearTimeout(partyTimer); + partyTimer = setTimeout(() => (paydayParty = false), 15000); + } $effect(() => { const id = setInterval(() => (nowMs = Date.now()), 1000); return () => clearInterval(id); @@ -269,6 +278,7 @@ if (!pbToken || !famId) return; eowFired = true; memberApi.payday(famId).catch(() => {}); + startPaydayParty(); }); function paydayWeekStart(): string { @@ -1273,6 +1283,16 @@ {/if} + {#if paydayParty} +
(paydayParty = false)}> + 🐖 +
+

PAYDAY!!

+

Your cash is ready — go collect it! 🎉

+
+ 🌈⭐🌈 +
+ {/if}