<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover, maximum-scale=1.0, user-scalable=no" />
    <title>Cumulate — Money, logged in seconds</title>
    <meta name="description" content="Cumulate is a chat-first personal finance app. Log expenses by typing, snapping a receipt, or dropping in a bank statement." />
    <meta name="author" content="Cumulate" />
    <meta name="robots" content="index, follow" />

    <meta property="og:title" content="Cumulate — Money, logged in seconds" />
    <meta property="og:description" content="Chat-first personal finance. Type it, snap it, or drop a statement — logged instantly." />
    <!-- Absolute, because a relative og:image is ignored by most scrapers,
         which then fall back to guessing and pick the square app icon. 1200x630
         because previews crop to roughly 1.91:1 — a square image loses its
         headline and wordmark to that crop. -->
    <meta property="og:image" content="https://cumulate.app/og-image.png" />
    <meta property="og:image:secure_url" content="https://cumulate.app/og-image.png" />
    <meta property="og:image:type" content="image/png" />
    <meta property="og:image:width" content="1200" />
    <meta property="og:image:height" content="630" />
    <meta property="og:image:alt" content="Cumulate — money, logged in seconds. A phone showing an expense logged by typing &quot;spent 5 on coffee&quot;." />
    <meta property="og:type" content="website" />
    <meta property="og:url" content="https://cumulate.app/" />
    <meta property="og:site_name" content="Cumulate" />
    <meta property="og:locale" content="en_US" />

    <meta name="twitter:card" content="summary_large_image" />
    <meta name="twitter:title" content="Cumulate — Money, logged in seconds" />
    <meta name="twitter:description" content="Chat-first personal finance. Type it, snap it, or drop a statement — logged instantly." />
    <meta name="twitter:image" content="https://cumulate.app/og-image.png" />
    <meta name="twitter:image:alt" content="Cumulate — money, logged in seconds." />

    <link rel="canonical" href="https://cumulate.app/" />

    <!-- Favicons -->
    <link rel="icon" type="image/png" sizes="32x32" href="/icons/favicon-32.png" />
    <link rel="icon" type="image/png" sizes="16x16" href="/icons/favicon-16.png" />
    <link rel="icon" type="image/png" sizes="48x48" href="/icons/favicon-48.png" />

    <!-- PWA / mobile -->
    <meta name="theme-color" content="#fcf9f8" media="(prefers-color-scheme: light)" />
    <meta name="theme-color" content="#264837" media="(prefers-color-scheme: dark)" />
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <meta name="apple-mobile-web-app-status-bar-style" content="default" />
    <meta name="apple-mobile-web-app-title" content="Cumulate" />
    <link rel="apple-touch-icon" href="/icons/apple-touch-icon.png" />
    <link rel="manifest" href="/manifest.json" />

    <link rel="preconnect" href="https://fonts.googleapis.com" />
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
    <link
      href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,500;9..144,600&family=Schibsted+Grotesk:wght@400;500;600;700&family=Spline+Sans+Mono:wght@400;500;600&display=swap"
      rel="stylesheet"
    />
    <script type="module" crossorigin src="/assets/index--mSJ6f1I.js"></script>
    <link rel="stylesheet" crossorigin href="/assets/index-D45CkUXe.css">
  </head>

  <body>
    <div id="root"></div>
    <script>
      // Unregister the legacy service worker so returning users get the new app
      if ('serviceWorker' in navigator) {
        navigator.serviceWorker.getRegistrations().then((rs) => rs.forEach((r) => r.unregister()));
      }
    </script>
  </body>
</html>
