A Frontend Mentor Guru-level challenge — personal finance dashboard built with SvelteKit 5, Tailwind v4, and Layerchart.
UX-serving animations that communicate state — not decoration. All respect prefers-reduced-motion: reduce.
| Animation | Where | What it communicates |
|---|---|---|
| Progress bar fill | Pots, Budgets | "This is a fraction filling up" |
| Number counter | Overview balance cards, pots total, donut center | "This figure is computed, not static" |
| Donut hover | Overview, Budgets | "Explore the breakdown by category" |
| Page transitions | All routes | "You navigated, but you're in the same app" |
| Pagination scroll | Transactions | "You moved forward/backward through the data" |
See docs/superpowers/specs/2026-04-08-animation-enhancements.md for the full animation spec.
@tailwindcss/viteChart + Pie + Arc + Tooltip primitivesTween class + built-in prefersReducedMotion reactivepnpm install
pnpm dev
The app runs on Vite at http://localhost:5173/ (or next available port).
apps/sveltekit/
src/
routes/
+layout.svelte # Sidebar + bottom nav shell, view transitions
+page.svelte # Overview dashboard
transactions/+page.svelte
budgets/+page.svelte
pots/+page.svelte
recurring-bills/+page.svelte
lib/
components/
app-sidebar.svelte # Nav sidebar with collapsible icon mode
bottom-nav.svelte # Mobile bottom navigation
budget-donut.svelte # Shared donut chart (hover, tooltip, center text)
ui/ # shadcn-svelte components
motion/
index.ts # setAnimated() helper — reduced-motion gate over Tween
data.ts # Static data from FM starter JSON
nav.ts # Navigation items
app.css # Tailwind v4 + FM design tokens + page transitions
data.json, no API layer yetTween class (not deprecated tweened store) + built-in prefersReducedMotionBudgetDonut bakes its own dimensions, ring thickness, padding. Callers only supply data + text.This is a Frontend Mentor challenge. The design assets are proprietary. Code is MIT.