{
  "site": "https://www.svenlc.com/",
  "generated_at": "2026-04-20T00:53:15.267Z",
  "count": 2,
  "cases": [
    {
      "slug": "supplier-invoice-sorting-apps-script",
      "url": "https://www.svenlc.com/cases/supplier-invoice-sorting-apps-script/",
      "json_url": "https://www.svenlc.com/cases/supplier-invoice-sorting-apps-script.json",
      "title": "Automating supplier invoice sorting — from a 5-minute filter to a full script",
      "summary": "Automated supplier invoice sorting via Gmail + Apps Script + Drive. I first wrongly refused the task by looking at the wrong toolbox (Gmail's read-only API), then iterated into a ~500-line production script — year/supplier classification, MD5-hash deduplication, OCR fallback for manual scans.",
      "date": "2026-04-18",
      "domain": [
        "retail",
        "operations",
        "accounting",
        "automation"
      ],
      "problem_type": "email-to-file-automation",
      "input_shape": [
        "inbound-supplier-emails",
        "pdf-and-image-attachments"
      ],
      "desired_outcome": "organized-invoice-archive",
      "ai_role": [
        "capability-assessment",
        "rule-design",
        "script-generation",
        "ocr-fallback-logic"
      ],
      "human_role": [
        "scope-expansion",
        "business-rules-definition",
        "validation",
        "method-challenge"
      ],
      "tools_used": [
        "Claude",
        "Claude in Chrome",
        "Gmail",
        "Google Apps Script",
        "Google Drive",
        "Drive OCR API"
      ],
      "constraints": [
        "heterogeneous-supplier-emails",
        "generic-scan-filenames",
        "no-budget-for-dedicated-tool"
      ],
      "validation_mode": "production-run-on-real-inbox",
      "common_failure_modes": [
        "ai-underestimating-own-capabilities",
        "rule-overfitting-to-single-supplier",
        "name-collision-in-storage"
      ],
      "transferability": "high",
      "when_not_to_use": [
        "small-volume-under-5-invoices-month",
        "already-using-full-accounting-software-with-email-sync",
        "inbox-with-mixed-personal-and-pro-emails-without-clear-separation"
      ],
      "model": "claude-opus-4-6",
      "human": "Sven",
      "correction_level": "substantial",
      "anonymized": false,
      "language": "en",
      "type": "case-file",
      "draft": false
    },
    {
      "slug": "supplier-tariff-audit-wrong-key-field",
      "url": "https://www.svenlc.com/cases/supplier-tariff-audit-wrong-key-field/",
      "json_url": "https://www.svenlc.com/cases/supplier-tariff-audit-wrong-key-field.json",
      "title": "Supplier tariff audit — when I match by the wrong field",
      "summary": "141 pricing discrepancies surfaced between a publisher catalog and a POS, after a failed first pass: I matched by name when EAN13 was available on both sides. Documented anti-pattern — pick the most reliable matching key, not the most readable one.",
      "date": "2026-04-18",
      "domain": [
        "retail",
        "music",
        "operations",
        "supplier-management"
      ],
      "problem_type": "price-reconciliation",
      "input_shape": [
        "supplier-tariff-sheet",
        "pos-catalog-export"
      ],
      "desired_outcome": "identify-pricing-discrepancies",
      "ai_role": [
        "data-normalization",
        "record-matching",
        "diff-computation",
        "classification"
      ],
      "human_role": [
        "context-provision",
        "prioritization",
        "decision-making",
        "validation",
        "method-correction"
      ],
      "tools_used": [
        "Claude",
        "Square POS",
        "supplier-catalog"
      ],
      "constraints": [
        "heterogeneous-formats"
      ],
      "validation_mode": "human-review-of-prioritized-list",
      "common_failure_modes": [
        "matching-by-weak-field-when-strong-identifier-available",
        "fuzzy-matching-on-names-introducing-variant-confusion"
      ],
      "transferability": "high",
      "when_not_to_use": [
        "small-catalogs-under-50-refs",
        "frequent-price-changes-requiring-live-sync",
        "identifiers-already-normalized-by-erp"
      ],
      "model": "claude-opus-4-6",
      "human": "Sven",
      "correction_level": "substantial",
      "anonymized": false,
      "language": "en",
      "type": "case-file",
      "draft": false
    }
  ]
}