A simple Svelte application that helps track daily water consumption, demonstrating the use of Svelte's reactive state management features.
This app demonstrates key Svelte state management concepts:
$stateThe app uses Svelte's $state for reactive variables:
let waterConsumed = $state(0);
let dailyGoal = $state(2000);
let lastDrink: Date | null = $state(null);
$derivedDerived state automatically updates when dependencies change:
const blocksToFill = $derived(Math.min(Math.floor(waterConsumed / 100), 20));
const waterBlocks = $derived(
  Array(20)
    .fill(false)
    .map((_, index) => index < blocksToFill)
);
$effectEffects run when dependencies change, perfect for side effects like saving to localStorage:
$effect(() => {
  // Persist data to localStorage whenever values change
  if (!firstRun) {
    localStorage.setItem(
      'waterData',
      JSON.stringify({
        waterConsumedSaved: waterConsumed,
        lastDrinkSaved: lastDrink,
        dailyGoalSaved: dailyGoal
      })
    );
  } else {
    // Load saved data on first run
    // ...
  }
});
# Install dependencies
pnpm install
# Start development server
pnpm run dev
# Build for production
pnpm run build