<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Free AI Tools -- Christien Louviere</title>
<meta name="description" content="Free AI-powered tools for business operators. Statement analysis, spending intelligence, and more. Built by Christien Louviere.">
<script>!function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.async=!0,p.src=s.api_host.replace(".i.posthog.com","-assets.i.posthog.com")+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="init capture register register_once register_for_session unregister unregister_for_session getFeatureFlag getFeatureFlagPayload isFeatureEnabled reloadFeatureFlags updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures on onFeatureFlags onSessionId getSurveys getActiveMatchingSurveys renderSurvey canRenderSurvey getNextSurveyStep identify setPersonProperties group resetGroups setPersonPropertiesForFlags resetPersonPropertiesForFlags setGroupPropertiesForFlags resetGroupPropertiesForFlags reset get_distinct_id getGroups get_session_id get_session_replay_url alias set_config startSessionRecording stopSessionRecording sessionRecordingStarted captureException loadToolbar get_property getSessionProperty createPersonProfile opt_in_capturing opt_out_capturing has_opted_in_capturing has_opted_out_capturing clear_opt_in_out_capturing debug".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);posthog.init('phc_erWgT2I7thmIdtRtwmE3waOfidXmSitiEQU66xXhLy6',{api_host:'https://us.i.posthog.com',person_profiles:'identified_only'})</script>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
<style>
  :root {
    --bg: #fafaf9;
    --ink: #1a1a2e;
    --muted: #6b7280;
    --border: #e5e5e3;
    --accent: #1B6EF3;
    --accent-soft: #eef4ff;
    --purple: #4F1964;
    --gold: #F9A01B;
    --card-bg: #ffffff;
    --card-hover: #f7f7f6;
    --mono: 'JetBrains Mono', monospace;
    --sans: 'DM Sans', sans-serif;
  }

  * { margin: 0; padding: 0; box-sizing: border-box; }
  body { font-family: var(--sans); background: var(--bg); color: var(--ink); -webkit-font-smoothing: antialiased; }

  /* ── Grain overlay ── */
  body::before {
    content: '';
    position: fixed;
    inset: 0;
    pointer-events: none;
    opacity: 0.025;
    background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
    z-index: 9999;
  }

  /* ── Animations ── */
  @keyframes fadeUp { from { opacity: 0; transform: translateY(24px); } to { opacity: 1; transform: translateY(0); } }
  @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
  .fade-up { animation: fadeUp 0.7s ease-out both; }
  .fade-up-d1 { animation-delay: 0.1s; }
  .fade-up-d2 { animation-delay: 0.2s; }
  .fade-up-d3 { animation-delay: 0.35s; }
  .fade-up-d4 { animation-delay: 0.5s; }
  .fade-in { animation: fadeIn 0.6s ease-out both; }

  /* ── Layout ── */
  .container { max-width: 900px; margin: 0 auto; padding: 0 24px; }

  /* ── Header ── */
  .header {
    padding: 20px 0;
    border-bottom: 1px solid var(--border);
  }
  .header-inner {
    display: flex;
    justify-content: space-between;
    align-items: center;
  }
  .header-brand {
    display: flex;
    align-items: center;
    gap: 10px;
    text-decoration: none;
    color: var(--ink);
  }
  .header-logo {
    width: 32px; height: 32px;
    border-radius: 7px;
    background: var(--accent);
    display: flex; align-items: center; justify-content: center;
    font-size: 13px; font-weight: 700; color: white;
    font-family: var(--mono);
  }
  .header-name { font-weight: 700; font-size: 15px; letter-spacing: -0.3px; }
  .header-x {
    font-size: 14px; color: var(--muted);
    text-decoration: none;
    font-weight: 500;
    transition: color 0.15s;
  }
  .header-x:hover { color: var(--ink); }

  /* ── Hero ── */
  .hero {
    padding: 80px 0 60px;
    text-align: center;
  }
  .hero-badge {
    display: inline-block;
    font-size: 12px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    color: var(--accent);
    background: var(--accent-soft);
    padding: 6px 14px;
    border-radius: 6px;
    margin-bottom: 24px;
  }
  .hero h1 {
    font-size: clamp(36px, 5vw, 52px);
    font-weight: 800;
    letter-spacing: -1.5px;
    line-height: 1.1;
    margin-bottom: 20px;
    color: var(--ink);
  }
  .hero p {
    font-size: 18px;
    color: var(--muted);
    max-width: 540px;
    margin: 0 auto;
    line-height: 1.6;
    font-weight: 400;
  }

  /* ── Tool Cards ── */
  .tools-section { padding: 0 0 60px; }
  .tools-label {
    font-size: 11px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 2px;
    color: var(--muted);
    margin-bottom: 20px;
  }

  .tool-card {
    display: flex;
    gap: 28px;
    align-items: flex-start;
    padding: 32px;
    background: var(--card-bg);
    border: 1px solid var(--border);
    border-radius: 14px;
    text-decoration: none;
    color: var(--ink);
    transition: all 0.2s;
    margin-bottom: 16px;
    position: relative;
    overflow: hidden;
  }
  .tool-card:hover {
    border-color: var(--accent);
    box-shadow: 0 4px 24px rgba(27, 110, 243, 0.08);
    transform: translateY(-2px);
  }
  .tool-card:hover .tool-arrow { transform: translateX(4px); }

  .tool-icon {
    width: 56px; height: 56px;
    border-radius: 12px;
    display: flex; align-items: center; justify-content: center;
    font-size: 28px;
    flex-shrink: 0;
  }
  .tool-body { flex: 1; }
  .tool-title {
    font-size: 20px;
    font-weight: 700;
    letter-spacing: -0.4px;
    margin-bottom: 6px;
    display: flex;
    align-items: center;
    gap: 10px;
  }
  .tool-live-badge {
    font-size: 10px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.8px;
    color: #2d8a4e;
    background: #ecfdf5;
    padding: 3px 8px;
    border-radius: 4px;
  }
  .tool-coming-badge {
    font-size: 10px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.8px;
    color: var(--muted);
    background: #f3f4f6;
    padding: 3px 8px;
    border-radius: 4px;
  }
  .tool-desc {
    font-size: 15px;
    color: var(--muted);
    line-height: 1.6;
    margin-bottom: 12px;
  }
  .tool-features {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
  }
  .tool-tag {
    font-size: 12px;
    font-weight: 500;
    color: var(--accent);
    background: var(--accent-soft);
    padding: 4px 10px;
    border-radius: 5px;
  }
  .tool-arrow {
    font-size: 20px;
    color: var(--accent);
    align-self: center;
    transition: transform 0.2s;
    flex-shrink: 0;
  }

  /* Coming soon card */
  .tool-card.coming-soon {
    opacity: 0.65;
    cursor: default;
  }
  .tool-card.coming-soon:hover {
    border-color: var(--border);
    box-shadow: none;
    transform: none;
  }

  /* ── Email Capture ── */
  .email-section {
    padding: 60px 0;
    border-top: 1px solid var(--border);
    text-align: center;
  }
  .email-section h2 {
    font-size: 28px;
    font-weight: 700;
    letter-spacing: -0.8px;
    margin-bottom: 10px;
  }
  .email-section p {
    font-size: 16px;
    color: var(--muted);
    margin-bottom: 28px;
    max-width: 440px;
    margin-left: auto;
    margin-right: auto;
    line-height: 1.5;
  }
  .email-form {
    display: flex;
    gap: 8px;
    max-width: 420px;
    margin: 0 auto;
  }
  .email-input {
    flex: 1;
    padding: 14px 18px;
    border-radius: 10px;
    border: 1px solid var(--border);
    font-size: 15px;
    font-family: var(--sans);
    outline: none;
    background: var(--card-bg);
    transition: border-color 0.15s;
  }
  .email-input:focus { border-color: var(--accent); }
  .email-input::placeholder { color: #bbb; }
  .email-submit {
    padding: 14px 24px;
    border-radius: 10px;
    border: none;
    background: var(--ink);
    color: white;
    font-size: 15px;
    font-weight: 600;
    cursor: pointer;
    font-family: var(--sans);
    white-space: nowrap;
    transition: background 0.15s;
  }
  .email-submit:hover { background: #2a2a4a; }
  .email-success {
    font-size: 15px;
    color: #2d8a4e;
    font-weight: 600;
  }

  /* ── Footer ── */
  .footer {
    padding: 24px 0;
    border-top: 1px solid var(--border);
    text-align: center;
  }
  .footer-inner {
    display: flex;
    justify-content: center;
    align-items: center;
    gap: 20px;
    flex-wrap: wrap;
  }
  .footer-brand {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 13px;
    color: var(--muted);
  }
  .footer-logo {
    width: 22px; height: 22px;
    border-radius: 5px;
    background: var(--accent);
    display: flex; align-items: center; justify-content: center;
    font-size: 10px; font-weight: 700; color: white;
    font-family: var(--mono);
  }
  .footer a {
    color: var(--accent);
    text-decoration: none;
    font-weight: 700;
  }
  .footer-x {
    font-size: 13px;
    color: var(--muted);
    text-decoration: none;
  }
  .footer-dot { color: var(--border); }

  /* ── Mobile ── */
  @media (max-width: 600px) {
    .hero { padding: 50px 0 40px; }
    .tool-card { flex-direction: column; gap: 16px; padding: 24px; }
    .tool-arrow { display: none; }
    .email-form { flex-direction: column; }
  }
</style>
</head>
<body>

<!-- Header -->
<div class="container">
  <div class="header fade-in">
    <div class="header-inner">
      <a href="https://www.linkedin.com/in/christienlouviere/" target="_blank" class="header-brand">
        <span class="header-name">Christien Louviere</span>
      </a>
      <a href="https://x.com/CLouvi" target="_blank" class="header-x">@CLouvi</a>
    </div>
  </div>
</div>

<!-- Hero -->
<div class="container">
  <div class="hero">
    <div class="hero-badge fade-up">Free &amp; Open</div>
    <h1 class="fade-up fade-up-d1">AI tools that<br>actually work.</h1>
    <p class="fade-up fade-up-d2">Built by one person with an AI operations system. No login. No subscription. Drop a file, get intelligence.</p>
  </div>
</div>

<!-- Tools -->
<div class="container">
  <div class="tools-section">
    <div class="tools-label fade-up fade-up-d2">Available Tools</div>

    <!-- Tool 1: Amex Analyzer (LIVE) -->
    <a href="/amex/" class="tool-card fade-up fade-up-d3">
      <div class="tool-icon" style="background: #fff8f0; color: #ff9900;">$</div>
      <div class="tool-body">
        <div class="tool-title">
          Statement Analyzer
          <span class="tool-live-badge">Live</span>
        </div>
        <div class="tool-desc">
          Drop an Amex PDF, get instant categorized spending breakdown. Amazon intelligence groups 15+ merchant variants. Tracks subscriptions, flags anomalies, compares month-over-month. All data stays in your browser.
        </div>
        <div class="tool-features">
          <span class="tool-tag">PDF Upload</span>
          <span class="tool-tag">Amazon Grouping</span>
          <span class="tool-tag">Anomaly Detection</span>
          <span class="tool-tag">Subscription Tracker</span>
        </div>
      </div>
      <div class="tool-arrow">&rarr;</div>
    </a>

    <!-- Tool 2: Amazon Order Analysis (LIVE) -->
    <a href="/amazon/" class="tool-card fade-up fade-up-d4">
      <div class="tool-icon" style="background: #fff8f0; color: #ff9900;">&#128230;</div>
      <div class="tool-body">
        <div class="tool-title">
          Amazon Order Analysis
          <span class="tool-live-badge">Live</span>
        </div>
        <div class="tool-desc">
          Drop screenshots of your Amazon order history. AI extracts items, prices, dates, and categories so you can see where your Amazon spend actually goes. Up to 6 screenshots per batch.
        </div>
        <div class="tool-features">
          <span class="tool-tag">Vision AI</span>
          <span class="tool-tag">Item-Level Extract</span>
          <span class="tool-tag">Auto-Categorize</span>
          <span class="tool-tag">Works Offline</span>
        </div>
      </div>
      <div class="tool-arrow">&rarr;</div>
    </a>
  </div>
</div>

<!-- Email Capture -->
<div class="container">
  <div class="email-section fade-up fade-up-d4" id="notify">
    <h2>Get notified when new tools drop.</h2>
    <p>No spam. Just a quick email when we release something useful.</p>
    <div class="email-form" id="email-form">
      <input type="email" class="email-input" id="email-input" placeholder="your@email.com">
      <button class="email-submit" id="email-submit" onclick="submitEmail()">Notify me</button>
    </div>
    <div id="email-success" style="display: none;" class="email-success">&#10003; You're on the list.</div>
  </div>
</div>

<!-- Footer -->
<div class="container">
  <div class="footer">
    <div class="footer-inner">
      <div class="footer-brand">
        Built by <a href="https://www.linkedin.com/in/christienlouviere/" target="_blank">Christien Louviere</a>
      </div>
      <span class="footer-dot">&middot;</span>
      <a href="https://x.com/CLouvi" target="_blank" class="footer-x">@CLouvi on X</a>
    </div>
  </div>
</div>

<script>
function submitEmail() {
  const input = document.getElementById('email-input');
  const email = input.value.trim();
  if (!email || !email.includes('@')) return;

  // Fire to Worker endpoint
  try {
    fetch('https://api.clouvi.com/subscribe', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ email: email, source: 'tools-landing', tool: null, timestamp: new Date().toISOString() })
    }).catch(() => {});
  } catch {}

  // Also store locally as backup
  try {
    const list = JSON.parse(localStorage.getItem('tools-emails') || '[]');
    list.push({ email, ts: Date.now() });
    localStorage.setItem('tools-emails', JSON.stringify(list));
  } catch {}

  document.getElementById('email-form').style.display = 'none';
  document.getElementById('email-success').style.display = 'block';
}

// Enter key submits
document.getElementById('email-input')?.addEventListener('keypress', function(e) {
  if (e.key === 'Enter') submitEmail();
});
</script>
<script src="/partials/chrome.js"></script>

</body>
</html>
