{
  "name": "Exit Cost",
  "description": "What it really costs to leave a subscription.",
  "licence": "CC BY 4.0 — free to use, including commercially, with attribution",
  "licence_url": "https://creativecommons.org/licenses/by/4.0/",
  "method": "https://nimbussage.github.io/exit-cost/method/",
  "corrections": "https://github.com/NimbusSage/exit-cost/issues",
  "generated_at": "2026-10-19T10:54:24.901Z",
  "assumptions": {
    "horizon_months": 36,
    "hourly_rate_usd": 50,
    "note": "Hours are our estimates, not measurements, and are stated per comparison. Hosting prices come from live provider catalogues; subscription prices are human-verified and stored with the sentence from the vendor page that justifies them. Anything past its freshness window is withheld rather than published stale."
  },
  "count": 36,
  "escapes": [
    {
      "slug": "1password-to-passbolt",
      "title": "1Password Business to self-hosted Passbolt",
      "summary": "Passbolt is built for teams rather than families, with real access control. It is also considerably more work than Vaultwarden.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "1Password",
        "vendor_id": "1password",
        "plan": "Business",
        "plan_id": "business",
        "amount": 8.99,
        "period": "month",
        "per_seat": true,
        "billed": "annual",
        "seats": 12,
        "quote": "1Password Business costs $8.99 per user per month when billed annually, or $107.88 per user per year",
        "caveat": null,
        "source_url": "https://1password.com/business-pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "Passbolt (self-hosted)",
        "repo": "passbolt/passbolt_api",
        "project": {
          "full_name": "passbolt/passbolt_api",
          "url": "https://github.com/passbolt/passbolt_api",
          "homepage": "https://passbolt.com",
          "description": "Passbolt Community Edition (CE) API. The JSON API for the open source password manager for teams!",
          "stars": 6177,
          "forks": 406,
          "open_issues": 26,
          "license": "AGPL-3.0",
          "archived": false,
          "pushed_at": "2026-10-19T10:22:56Z",
          "days_since_push": 0,
          "latest_release": {
            "tag": "v5.16.0",
            "published_at": "2026-09-17T10:01:50Z",
            "url": "https://github.com/passbolt/passbolt_api/releases/tag/v5.16.0"
          },
          "days_since_release": 32,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:43.438Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-1c-2gb",
          "id": "vultr:vc2-1c-2gb",
          "vcpu": 1,
          "ram_gb": 2,
          "disk_gb": 55,
          "bandwidth_tb": 2,
          "monthly_usd": 10,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 15,
          "monthly_usd": 0.1
        },
        "requirements": {
          "ram_gb": 2,
          "vcpu": 1,
          "disk_gb": 25
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-1c-2gb",
            "monthly_usd": 10,
            "vcpu": 1,
            "ram_gb": 2,
            "disk_gb": 55,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 2GB",
            "monthly_usd": 12,
            "vcpu": 1,
            "ram_gb": 2,
            "disk_gb": 50,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "1 vCPU · 2 GB",
            "monthly_usd": 12,
            "vcpu": 1,
            "ram_gb": 2,
            "disk_gb": 50,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 10,
        "maintenance_hours_per_month": 1
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 12,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 107.88,
          "time_monthly": 0,
          "monthly": 107.88,
          "one_time": 0,
          "annual": 1294.56
        },
        "alternative": {
          "cash_monthly": 10.1,
          "time_monthly": 50,
          "monthly": 60.1,
          "one_time": 500,
          "cash_one_time": 0,
          "time_one_time": 500,
          "annual": 721.25
        },
        "delta": {
          "monthly": 47.78,
          "upfront_to_switch": 500,
          "annual": 573.31
        },
        "break_even_month": 11,
        "break_even_hourly_rate": 76.52,
        "totals": {
          "at_12_months": {
            "incumbent": 1294.56,
            "alternative": 1221.25
          },
          "at_36_months": {
            "incumbent": 3883.68,
            "alternative": 2663.75
          },
          "at_horizon": {
            "incumbent": 3883.68,
            "alternative": 2663.75
          }
        },
        "savings": {
          "year_1": 73.31,
          "year_3": 1219.93,
          "at_horizon": 1219.93
        },
        "verdict": "switch"
      },
      "managed": null,
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 500
        },
        {
          "month": 1,
          "incumbent": 107.88,
          "alternative": 560.1
        },
        {
          "month": 2,
          "incumbent": 215.76,
          "alternative": 620.2
        },
        {
          "month": 3,
          "incumbent": 323.64,
          "alternative": 680.3
        },
        {
          "month": 4,
          "incumbent": 431.52,
          "alternative": 740.4
        },
        {
          "month": 5,
          "incumbent": 539.4,
          "alternative": 800.5
        },
        {
          "month": 6,
          "incumbent": 647.28,
          "alternative": 860.6
        },
        {
          "month": 7,
          "incumbent": 755.16,
          "alternative": 920.7
        },
        {
          "month": 8,
          "incumbent": 863.04,
          "alternative": 980.8
        },
        {
          "month": 9,
          "incumbent": 970.92,
          "alternative": 1040.9
        },
        {
          "month": 10,
          "incumbent": 1078.8,
          "alternative": 1101
        },
        {
          "month": 11,
          "incumbent": 1186.68,
          "alternative": 1161.1
        },
        {
          "month": 12,
          "incumbent": 1294.56,
          "alternative": 1221.2
        },
        {
          "month": 13,
          "incumbent": 1402.44,
          "alternative": 1281.3
        },
        {
          "month": 14,
          "incumbent": 1510.32,
          "alternative": 1341.4
        },
        {
          "month": 15,
          "incumbent": 1618.2,
          "alternative": 1401.5
        },
        {
          "month": 16,
          "incumbent": 1726.08,
          "alternative": 1461.6
        },
        {
          "month": 17,
          "incumbent": 1833.96,
          "alternative": 1521.7
        },
        {
          "month": 18,
          "incumbent": 1941.84,
          "alternative": 1581.8
        },
        {
          "month": 19,
          "incumbent": 2049.72,
          "alternative": 1641.9
        },
        {
          "month": 20,
          "incumbent": 2157.6,
          "alternative": 1702
        },
        {
          "month": 21,
          "incumbent": 2265.48,
          "alternative": 1762.1
        },
        {
          "month": 22,
          "incumbent": 2373.36,
          "alternative": 1822.2
        },
        {
          "month": 23,
          "incumbent": 2481.24,
          "alternative": 1882.3
        },
        {
          "month": 24,
          "incumbent": 2589.12,
          "alternative": 1942.4
        },
        {
          "month": 25,
          "incumbent": 2697,
          "alternative": 2002.5
        },
        {
          "month": 26,
          "incumbent": 2804.88,
          "alternative": 2062.6
        },
        {
          "month": 27,
          "incumbent": 2912.76,
          "alternative": 2122.7
        },
        {
          "month": 28,
          "incumbent": 3020.64,
          "alternative": 2182.8
        },
        {
          "month": 29,
          "incumbent": 3128.52,
          "alternative": 2242.9
        },
        {
          "month": 30,
          "incumbent": 3236.4,
          "alternative": 2303
        },
        {
          "month": 31,
          "incumbent": 3344.28,
          "alternative": 2363.1
        },
        {
          "month": 32,
          "incumbent": 3452.16,
          "alternative": 2423.2
        },
        {
          "month": 33,
          "incumbent": 3560.04,
          "alternative": 2483.3
        },
        {
          "month": 34,
          "incumbent": 3667.92,
          "alternative": 2543.4
        },
        {
          "month": 35,
          "incumbent": 3775.8,
          "alternative": 2603.5
        },
        {
          "month": 36,
          "incumbent": 3883.68,
          "alternative": 2663.6
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 3519.93
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 4,
          "savings_at_horizon": 2369.93
        },
        {
          "hourly_rate": 50,
          "verdict": "switch",
          "break_even_month": 11,
          "savings_at_horizon": 1219.93
        },
        {
          "hourly_rate": 75,
          "verdict": "marginal",
          "break_even_month": 33,
          "savings_at_horizon": 69.93
        },
        {
          "hourly_rate": 100,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -1080.07
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -3380.07
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -5680.07
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "1Password's security team, audits and bug bounty",
          "Polished mobile apps; Passbolt's are functional rather than pleasant",
          "Watchtower breach monitoring and account recovery"
        ],
        "you_gain": [
          "OpenPGP end-to-end encryption with per-user keys, which is a genuinely different security model",
          "Sharing and access control designed for organisations rather than households",
          "AGPL-3.0, free seats, and no per-user charge at any size"
        ]
      },
      "caveats": [
        "A password vault is the worst thing to lose. If you will not keep backups tested and the host patched, stay on 1Password whatever this page says.",
        "Passbolt's key model means a lost private key is unrecoverable by design. That is a security feature and an operational hazard; plan recovery before you migrate.",
        "It needs GPG, a mail server for invitations, and TLS. The 10-hour estimate assumes all three go smoothly, which they often do not."
      ],
      "category": "password-manager",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "1password-to-vaultwarden",
      "title": "1Password Business to self-hosted Vaultwarden",
      "summary": "Vaultwarden is the cheapest thing on this site to run — and the one where we most strongly urge you to weigh the risk, not just the price.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "1Password",
        "vendor_id": "1password",
        "plan": "Business",
        "plan_id": "business",
        "amount": 8.99,
        "period": "month",
        "per_seat": true,
        "billed": "annual",
        "seats": 8,
        "quote": "1Password Business costs $8.99 per user per month when billed annually, or $107.88 per user per year",
        "caveat": null,
        "source_url": "https://1password.com/business-pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "Vaultwarden (self-hosted)",
        "repo": "dani-garcia/vaultwarden",
        "project": {
          "full_name": "dani-garcia/vaultwarden",
          "url": "https://github.com/dani-garcia/vaultwarden",
          "homepage": null,
          "description": "Unofficial Bitwarden compatible server written in Rust, formerly known as bitwarden_rs",
          "stars": 69285,
          "forks": 3348,
          "open_issues": 102,
          "license": "AGPL-3.0",
          "archived": false,
          "pushed_at": "2026-10-16T09:51:32Z",
          "days_since_push": 3,
          "latest_release": {
            "tag": "1.37.4",
            "published_at": "2026-10-05T23:40:54Z",
            "url": "https://github.com/dani-garcia/vaultwarden/releases/tag/1.37.4"
          },
          "days_since_release": 13,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:44.028Z"
        },
        "box": {
          "provider": "Linode",
          "name": "Nanode 1GB",
          "id": "linode:g6-nanode-1",
          "vcpu": 1,
          "ram_gb": 1,
          "disk_gb": 25,
          "bandwidth_tb": 0.98,
          "monthly_usd": 5,
          "url": "https://www.linode.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 10,
          "monthly_usd": 0.07
        },
        "requirements": {
          "ram_gb": 1,
          "vcpu": 1,
          "disk_gb": 10
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-1c-1gb",
            "monthly_usd": 5,
            "vcpu": 1,
            "ram_gb": 1,
            "disk_gb": 25,
            "url": "https://www.vultr.com/pricing/",
            "chosen": false
          },
          {
            "provider": "Linode",
            "name": "Nanode 1GB",
            "monthly_usd": 5,
            "vcpu": 1,
            "ram_gb": 1,
            "disk_gb": 25,
            "url": "https://www.linode.com/pricing/",
            "chosen": true
          },
          {
            "provider": "DigitalOcean",
            "name": "1 vCPU · 1 GB",
            "monthly_usd": 6,
            "vcpu": 1,
            "ram_gb": 1,
            "disk_gb": 25,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 6,
        "maintenance_hours_per_month": 0.75
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 8,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 71.92,
          "time_monthly": 0,
          "monthly": 71.92,
          "one_time": 0,
          "annual": 863.04
        },
        "alternative": {
          "cash_monthly": 5.07,
          "time_monthly": 37.5,
          "monthly": 42.57,
          "one_time": 300,
          "cash_one_time": 0,
          "time_one_time": 300,
          "annual": 510.83
        },
        "delta": {
          "monthly": 29.35,
          "upfront_to_switch": 300,
          "annual": 352.21
        },
        "break_even_month": 11,
        "break_even_hourly_rate": 72.93,
        "totals": {
          "at_12_months": {
            "incumbent": 863.04,
            "alternative": 810.83
          },
          "at_36_months": {
            "incumbent": 2589.12,
            "alternative": 1832.5
          },
          "at_horizon": {
            "incumbent": 2589.12,
            "alternative": 1832.5
          }
        },
        "savings": {
          "year_1": 52.21,
          "year_3": 756.62,
          "at_horizon": 756.62
        },
        "verdict": "switch"
      },
      "managed": {
        "provider": "PikaPods",
        "app": "Vaultwarden",
        "url": "https://www.pikapods.com/",
        "note": "Runs the same open-source software, applies updates, and takes daily encrypted backups to storage you own.",
        "source_url": "https://www.pikapods.com/apps",
        "quote": "Vaultwarden Alternative implementation of … Run Your Own From $1.8/month",
        "monthly_usd": 1.8,
        "verified_at": "2026-10-19T10:54:00.624Z",
        "migration_hours": 3,
        "result": {
          "computable": true,
          "inputs": {
            "seats": 8,
            "horizon_months": 36,
            "hourly_rate": 50
          },
          "incumbent": {
            "cash_monthly": 71.92,
            "time_monthly": 0,
            "monthly": 71.92,
            "one_time": 0,
            "annual": 863.04
          },
          "alternative": {
            "cash_monthly": 1.8,
            "time_monthly": 0,
            "monthly": 1.8,
            "one_time": 150,
            "cash_one_time": 0,
            "time_one_time": 150,
            "annual": 21.6
          },
          "delta": {
            "monthly": 70.12,
            "upfront_to_switch": 150,
            "annual": 841.44
          },
          "break_even_month": 3,
          "break_even_hourly_rate": 841.44,
          "totals": {
            "at_12_months": {
              "incumbent": 863.04,
              "alternative": 171.6
            },
            "at_36_months": {
              "incumbent": 2589.12,
              "alternative": 214.8
            },
            "at_horizon": {
              "incumbent": 2589.12,
              "alternative": 214.8
            }
          },
          "savings": {
            "year_1": 691.44,
            "year_3": 2374.32,
            "at_horizon": 2374.32
          },
          "verdict": "switch"
        },
        "crossover": 841.44
      },
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 300
        },
        {
          "month": 1,
          "incumbent": 71.92,
          "alternative": 342.57
        },
        {
          "month": 2,
          "incumbent": 143.84,
          "alternative": 385.14
        },
        {
          "month": 3,
          "incumbent": 215.76,
          "alternative": 427.71
        },
        {
          "month": 4,
          "incumbent": 287.68,
          "alternative": 470.28
        },
        {
          "month": 5,
          "incumbent": 359.6,
          "alternative": 512.85
        },
        {
          "month": 6,
          "incumbent": 431.52,
          "alternative": 555.42
        },
        {
          "month": 7,
          "incumbent": 503.44,
          "alternative": 597.99
        },
        {
          "month": 8,
          "incumbent": 575.36,
          "alternative": 640.56
        },
        {
          "month": 9,
          "incumbent": 647.28,
          "alternative": 683.13
        },
        {
          "month": 10,
          "incumbent": 719.2,
          "alternative": 725.7
        },
        {
          "month": 11,
          "incumbent": 791.12,
          "alternative": 768.27
        },
        {
          "month": 12,
          "incumbent": 863.04,
          "alternative": 810.84
        },
        {
          "month": 13,
          "incumbent": 934.96,
          "alternative": 853.41
        },
        {
          "month": 14,
          "incumbent": 1006.88,
          "alternative": 895.98
        },
        {
          "month": 15,
          "incumbent": 1078.8,
          "alternative": 938.55
        },
        {
          "month": 16,
          "incumbent": 1150.72,
          "alternative": 981.12
        },
        {
          "month": 17,
          "incumbent": 1222.64,
          "alternative": 1023.69
        },
        {
          "month": 18,
          "incumbent": 1294.56,
          "alternative": 1066.26
        },
        {
          "month": 19,
          "incumbent": 1366.48,
          "alternative": 1108.83
        },
        {
          "month": 20,
          "incumbent": 1438.4,
          "alternative": 1151.4
        },
        {
          "month": 21,
          "incumbent": 1510.32,
          "alternative": 1193.97
        },
        {
          "month": 22,
          "incumbent": 1582.24,
          "alternative": 1236.54
        },
        {
          "month": 23,
          "incumbent": 1654.16,
          "alternative": 1279.11
        },
        {
          "month": 24,
          "incumbent": 1726.08,
          "alternative": 1321.68
        },
        {
          "month": 25,
          "incumbent": 1798,
          "alternative": 1364.25
        },
        {
          "month": 26,
          "incumbent": 1869.92,
          "alternative": 1406.82
        },
        {
          "month": 27,
          "incumbent": 1941.84,
          "alternative": 1449.39
        },
        {
          "month": 28,
          "incumbent": 2013.76,
          "alternative": 1491.96
        },
        {
          "month": 29,
          "incumbent": 2085.68,
          "alternative": 1534.53
        },
        {
          "month": 30,
          "incumbent": 2157.6,
          "alternative": 1577.1
        },
        {
          "month": 31,
          "incumbent": 2229.52,
          "alternative": 1619.67
        },
        {
          "month": 32,
          "incumbent": 2301.44,
          "alternative": 1662.24
        },
        {
          "month": 33,
          "incumbent": 2373.36,
          "alternative": 1704.81
        },
        {
          "month": 34,
          "incumbent": 2445.28,
          "alternative": 1747.38
        },
        {
          "month": 35,
          "incumbent": 2517.2,
          "alternative": 1789.95
        },
        {
          "month": 36,
          "incumbent": 2589.12,
          "alternative": 1832.52
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 2406.62
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 4,
          "savings_at_horizon": 1581.62
        },
        {
          "hourly_rate": 50,
          "verdict": "switch",
          "break_even_month": 11,
          "savings_at_horizon": 756.62
        },
        {
          "hourly_rate": 75,
          "verdict": "stay",
          "break_even_month": 43,
          "savings_at_horizon": -68.38
        },
        {
          "hourly_rate": 100,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -893.38
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -2543.38
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -4193.38
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "1Password's security team, audits and bug-bounty programme",
          "Travel Mode, Watchtower breach monitoring and account recovery",
          "Someone else being responsible when the vault server goes down"
        ],
        "you_gain": [
          "A Rust implementation light enough to run on the smallest box any provider sells",
          "Bitwarden-compatible clients on every platform, so the apps are not the compromise",
          "Free seats and free family sharing"
        ]
      },
      "caveats": [
        "A password vault is the single worst thing to lose. If you are not confident you will keep backups tested and the host patched, the honest answer is to stay on 1Password however the arithmetic reads.",
        "Vaultwarden is an unofficial reimplementation of the Bitwarden server. It is well regarded and widely used, but it is not the vendor's own code.",
        "Exposing it to the public internet needs a reverse proxy with TLS and, ideally, fail2ban. That is in the maintenance estimate, and it is not optional.",
        "The maintenance estimate here is deliberately higher than the software needs, because security patching on this box is not something you get to defer."
      ],
      "category": "password-manager",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "airtable-to-baserow",
      "title": "Airtable Business to self-hosted Baserow",
      "summary": "At ten seats Airtable Business is $5,400 a year. That is enough that the arithmetic stops being interesting and starts being obvious.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Airtable",
        "vendor_id": "airtable",
        "plan": "Business",
        "plan_id": "business",
        "amount": 45,
        "period": "month",
        "per_seat": true,
        "billed": "annual",
        "seats": 10,
        "quote": "Business is available at $45/user/month when billed annually",
        "caveat": null,
        "source_url": "https://airtable.com/pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "Baserow (self-hosted)",
        "repo": "baserow/baserow",
        "project": {
          "full_name": "baserow/baserow",
          "url": "https://github.com/baserow/baserow",
          "homepage": "https://baserow.io",
          "description": "Build databases, automations, apps & agents with AI — no code.  Open source platform available on cloud and self-hosted. GDPR, HIPAA, SOC 2 compliant. Best Airtable alternative.",
          "stars": 6175,
          "forks": 767,
          "open_issues": 1176,
          "license": null,
          "archived": false,
          "pushed_at": "2026-10-19T10:46:10Z",
          "days_since_push": 0,
          "latest_release": {
            "tag": "2.4.1",
            "published_at": "2026-10-13T15:39:27Z",
            "url": "https://github.com/baserow/baserow/releases/tag/2.4.1"
          },
          "days_since_release": 6,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:44.419Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-2c-4gb",
          "id": "vultr:vc2-2c-4gb",
          "vcpu": 2,
          "ram_gb": 4,
          "disk_gb": 80,
          "bandwidth_tb": 3,
          "monthly_usd": 20,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 50,
          "monthly_usd": 0.35
        },
        "requirements": {
          "ram_gb": 4,
          "vcpu": 2,
          "disk_gb": 40
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-2c-4gb",
            "monthly_usd": 20,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 4GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "2 vCPU · 4 GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 12,
        "maintenance_hours_per_month": 0.75
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 10,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 450,
          "time_monthly": 0,
          "monthly": 450,
          "one_time": 0,
          "annual": 5400
        },
        "alternative": {
          "cash_monthly": 20.35,
          "time_monthly": 37.5,
          "monthly": 57.85,
          "one_time": 600,
          "cash_one_time": 0,
          "time_one_time": 600,
          "annual": 694.17
        },
        "delta": {
          "monthly": 392.15,
          "upfront_to_switch": 600,
          "annual": 4705.83
        },
        "break_even_month": 2,
        "break_even_hourly_rate": 396.6,
        "totals": {
          "at_12_months": {
            "incumbent": 5400,
            "alternative": 1294.17
          },
          "at_36_months": {
            "incumbent": 16200,
            "alternative": 2682.51
          },
          "at_horizon": {
            "incumbent": 16200,
            "alternative": 2682.51
          }
        },
        "savings": {
          "year_1": 4105.83,
          "year_3": 13517.49,
          "at_horizon": 13517.49
        },
        "verdict": "switch"
      },
      "managed": {
        "provider": "PikaPods",
        "app": "Baserow",
        "url": "https://www.pikapods.com/",
        "note": "Runs the same open-source software, applies updates, and takes daily encrypted backups to storage you own.",
        "source_url": "https://www.pikapods.com/apps",
        "quote": "Baserow Create your own … Run Your Own From $6.7/month",
        "monthly_usd": 6.7,
        "verified_at": "2026-10-19T10:54:00.624Z",
        "migration_hours": 6,
        "result": {
          "computable": true,
          "inputs": {
            "seats": 10,
            "horizon_months": 36,
            "hourly_rate": 50
          },
          "incumbent": {
            "cash_monthly": 450,
            "time_monthly": 0,
            "monthly": 450,
            "one_time": 0,
            "annual": 5400
          },
          "alternative": {
            "cash_monthly": 6.7,
            "time_monthly": 0,
            "monthly": 6.7,
            "one_time": 300,
            "cash_one_time": 0,
            "time_one_time": 300,
            "annual": 80.4
          },
          "delta": {
            "monthly": 443.3,
            "upfront_to_switch": 300,
            "annual": 5319.6
          },
          "break_even_month": 1,
          "break_even_hourly_rate": 2659.8,
          "totals": {
            "at_12_months": {
              "incumbent": 5400,
              "alternative": 380.4
            },
            "at_36_months": {
              "incumbent": 16200,
              "alternative": 541.2
            },
            "at_horizon": {
              "incumbent": 16200,
              "alternative": 541.2
            }
          },
          "savings": {
            "year_1": 5019.6,
            "year_3": 15658.8,
            "at_horizon": 15658.8
          },
          "verdict": "switch"
        },
        "crossover": 2659.8
      },
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 600
        },
        {
          "month": 1,
          "incumbent": 450,
          "alternative": 657.85
        },
        {
          "month": 2,
          "incumbent": 900,
          "alternative": 715.7
        },
        {
          "month": 3,
          "incumbent": 1350,
          "alternative": 773.55
        },
        {
          "month": 4,
          "incumbent": 1800,
          "alternative": 831.4
        },
        {
          "month": 5,
          "incumbent": 2250,
          "alternative": 889.25
        },
        {
          "month": 6,
          "incumbent": 2700,
          "alternative": 947.1
        },
        {
          "month": 7,
          "incumbent": 3150,
          "alternative": 1004.95
        },
        {
          "month": 8,
          "incumbent": 3600,
          "alternative": 1062.8
        },
        {
          "month": 9,
          "incumbent": 4050,
          "alternative": 1120.65
        },
        {
          "month": 10,
          "incumbent": 4500,
          "alternative": 1178.5
        },
        {
          "month": 11,
          "incumbent": 4950,
          "alternative": 1236.35
        },
        {
          "month": 12,
          "incumbent": 5400,
          "alternative": 1294.2
        },
        {
          "month": 13,
          "incumbent": 5850,
          "alternative": 1352.05
        },
        {
          "month": 14,
          "incumbent": 6300,
          "alternative": 1409.9
        },
        {
          "month": 15,
          "incumbent": 6750,
          "alternative": 1467.75
        },
        {
          "month": 16,
          "incumbent": 7200,
          "alternative": 1525.6
        },
        {
          "month": 17,
          "incumbent": 7650,
          "alternative": 1583.45
        },
        {
          "month": 18,
          "incumbent": 8100,
          "alternative": 1641.3
        },
        {
          "month": 19,
          "incumbent": 8550,
          "alternative": 1699.15
        },
        {
          "month": 20,
          "incumbent": 9000,
          "alternative": 1757
        },
        {
          "month": 21,
          "incumbent": 9450,
          "alternative": 1814.85
        },
        {
          "month": 22,
          "incumbent": 9900,
          "alternative": 1872.7
        },
        {
          "month": 23,
          "incumbent": 10350,
          "alternative": 1930.55
        },
        {
          "month": 24,
          "incumbent": 10800,
          "alternative": 1988.4
        },
        {
          "month": 25,
          "incumbent": 11250,
          "alternative": 2046.25
        },
        {
          "month": 26,
          "incumbent": 11700,
          "alternative": 2104.1
        },
        {
          "month": 27,
          "incumbent": 12150,
          "alternative": 2161.95
        },
        {
          "month": 28,
          "incumbent": 12600,
          "alternative": 2219.8
        },
        {
          "month": 29,
          "incumbent": 13050,
          "alternative": 2277.65
        },
        {
          "month": 30,
          "incumbent": 13500,
          "alternative": 2335.5
        },
        {
          "month": 31,
          "incumbent": 13950,
          "alternative": 2393.35
        },
        {
          "month": 32,
          "incumbent": 14400,
          "alternative": 2451.2
        },
        {
          "month": 33,
          "incumbent": 14850,
          "alternative": 2509.05
        },
        {
          "month": 34,
          "incumbent": 15300,
          "alternative": 2566.9
        },
        {
          "month": 35,
          "incumbent": 15750,
          "alternative": 2624.75
        },
        {
          "month": 36,
          "incumbent": 16200,
          "alternative": 2682.6
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 15467.49
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 1,
          "savings_at_horizon": 14492.49
        },
        {
          "hourly_rate": 50,
          "verdict": "switch",
          "break_even_month": 2,
          "savings_at_horizon": 13517.49
        },
        {
          "hourly_rate": 75,
          "verdict": "switch",
          "break_even_month": 3,
          "savings_at_horizon": 12542.49
        },
        {
          "hourly_rate": 100,
          "verdict": "switch",
          "break_even_month": 4,
          "savings_at_horizon": 11567.49
        },
        {
          "hourly_rate": 150,
          "verdict": "switch",
          "break_even_month": 6,
          "savings_at_horizon": 9617.49
        },
        {
          "hourly_rate": 200,
          "verdict": "switch",
          "break_even_month": 9,
          "savings_at_horizon": 7667.49
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Airtable's automations, scripting and the extension marketplace",
          "Interface Designer and published interfaces",
          "Enterprise controls that Baserow gates behind its own paid tier"
        ],
        "you_gain": [
          "Postgres underneath, queryable by anything you own",
          "Free seats at a tier where Airtable charges $45 each",
          "A documented Airtable importer"
        ]
      },
      "caveats": [
        "Baserow's advanced and enterprise features are separately licensed. The comparison here is against the free core; check the feature matrix if you need row colouring, audit logs or SSO.",
        "Twelve hours assumes a handful of bases. A decade of accumulated Airtable across a company is a much bigger job."
      ],
      "category": "database-spreadsheet",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "airtable-to-nocodb",
      "title": "Airtable Team to self-hosted NocoDB",
      "summary": "NocoDB puts an Airtable-shaped interface on a Postgres database you own. Per-seat pricing is what makes this one work.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Airtable",
        "vendor_id": "airtable",
        "plan": "Team",
        "plan_id": "team",
        "amount": 20,
        "period": "month",
        "per_seat": true,
        "billed": "annual",
        "seats": 5,
        "quote": "our Team plan is available for $20/user/month when billed annually",
        "caveat": null,
        "source_url": "https://airtable.com/pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "NocoDB (self-hosted)",
        "repo": "nocodb/nocodb",
        "project": {
          "full_name": "nocodb/nocodb",
          "url": "https://github.com/nocodb/nocodb",
          "homepage": "https://nocodb.com",
          "description": "🔥 🔥 🔥 A Free & Self-hostable Airtable Alternative",
          "stars": 65293,
          "forks": 5094,
          "open_issues": 714,
          "license": null,
          "archived": false,
          "pushed_at": "2026-10-19T10:46:33Z",
          "days_since_push": 0,
          "latest_release": {
            "tag": "2026.09.1",
            "published_at": "2026-09-29T14:39:07Z",
            "url": "https://github.com/nocodb/nocodb/releases/tag/2026.09.1"
          },
          "days_since_release": 20,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:44.853Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-1c-2gb",
          "id": "vultr:vc2-1c-2gb",
          "vcpu": 1,
          "ram_gb": 2,
          "disk_gb": 55,
          "bandwidth_tb": 2,
          "monthly_usd": 10,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 25,
          "monthly_usd": 0.17
        },
        "requirements": {
          "ram_gb": 2,
          "vcpu": 1,
          "disk_gb": 25
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-1c-2gb",
            "monthly_usd": 10,
            "vcpu": 1,
            "ram_gb": 2,
            "disk_gb": 55,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 2GB",
            "monthly_usd": 12,
            "vcpu": 1,
            "ram_gb": 2,
            "disk_gb": 50,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "1 vCPU · 2 GB",
            "monthly_usd": 12,
            "vcpu": 1,
            "ram_gb": 2,
            "disk_gb": 50,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 6,
        "maintenance_hours_per_month": 0.5
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 5,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 100,
          "time_monthly": 0,
          "monthly": 100,
          "one_time": 0,
          "annual": 1200
        },
        "alternative": {
          "cash_monthly": 10.17,
          "time_monthly": 25,
          "monthly": 35.17,
          "one_time": 300,
          "cash_one_time": 0,
          "time_one_time": 300,
          "annual": 422.09
        },
        "delta": {
          "monthly": 64.83,
          "upfront_to_switch": 300,
          "annual": 777.92
        },
        "break_even_month": 5,
        "break_even_hourly_rate": 134.74,
        "totals": {
          "at_12_months": {
            "incumbent": 1200,
            "alternative": 722.09
          },
          "at_36_months": {
            "incumbent": 3600,
            "alternative": 1566.26
          },
          "at_horizon": {
            "incumbent": 3600,
            "alternative": 1566.26
          }
        },
        "savings": {
          "year_1": 477.91,
          "year_3": 2033.74,
          "at_horizon": 2033.74
        },
        "verdict": "switch"
      },
      "managed": {
        "provider": "PikaPods",
        "app": "NocoDB",
        "url": "https://www.pikapods.com/",
        "note": "Runs the same open-source software, applies updates, and takes daily encrypted backups to storage you own.",
        "source_url": "https://www.pikapods.com/apps",
        "quote": "NocoDB An open source … Run Your Own From $3.1/month",
        "monthly_usd": 3.1,
        "verified_at": "2026-10-19T10:54:00.624Z",
        "migration_hours": 3,
        "result": {
          "computable": true,
          "inputs": {
            "seats": 5,
            "horizon_months": 36,
            "hourly_rate": 50
          },
          "incumbent": {
            "cash_monthly": 100,
            "time_monthly": 0,
            "monthly": 100,
            "one_time": 0,
            "annual": 1200
          },
          "alternative": {
            "cash_monthly": 3.1,
            "time_monthly": 0,
            "monthly": 3.1,
            "one_time": 150,
            "cash_one_time": 0,
            "time_one_time": 150,
            "annual": 37.2
          },
          "delta": {
            "monthly": 96.9,
            "upfront_to_switch": 150,
            "annual": 1162.8
          },
          "break_even_month": 2,
          "break_even_hourly_rate": 1162.8,
          "totals": {
            "at_12_months": {
              "incumbent": 1200,
              "alternative": 187.2
            },
            "at_36_months": {
              "incumbent": 3600,
              "alternative": 261.6
            },
            "at_horizon": {
              "incumbent": 3600,
              "alternative": 261.6
            }
          },
          "savings": {
            "year_1": 1012.8,
            "year_3": 3338.4,
            "at_horizon": 3338.4
          },
          "verdict": "switch"
        },
        "crossover": 1162.8
      },
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 300
        },
        {
          "month": 1,
          "incumbent": 100,
          "alternative": 335.17
        },
        {
          "month": 2,
          "incumbent": 200,
          "alternative": 370.34
        },
        {
          "month": 3,
          "incumbent": 300,
          "alternative": 405.51
        },
        {
          "month": 4,
          "incumbent": 400,
          "alternative": 440.68
        },
        {
          "month": 5,
          "incumbent": 500,
          "alternative": 475.85
        },
        {
          "month": 6,
          "incumbent": 600,
          "alternative": 511.02
        },
        {
          "month": 7,
          "incumbent": 700,
          "alternative": 546.19
        },
        {
          "month": 8,
          "incumbent": 800,
          "alternative": 581.36
        },
        {
          "month": 9,
          "incumbent": 900,
          "alternative": 616.53
        },
        {
          "month": 10,
          "incumbent": 1000,
          "alternative": 651.7
        },
        {
          "month": 11,
          "incumbent": 1100,
          "alternative": 686.87
        },
        {
          "month": 12,
          "incumbent": 1200,
          "alternative": 722.04
        },
        {
          "month": 13,
          "incumbent": 1300,
          "alternative": 757.21
        },
        {
          "month": 14,
          "incumbent": 1400,
          "alternative": 792.38
        },
        {
          "month": 15,
          "incumbent": 1500,
          "alternative": 827.55
        },
        {
          "month": 16,
          "incumbent": 1600,
          "alternative": 862.72
        },
        {
          "month": 17,
          "incumbent": 1700,
          "alternative": 897.89
        },
        {
          "month": 18,
          "incumbent": 1800,
          "alternative": 933.06
        },
        {
          "month": 19,
          "incumbent": 1900,
          "alternative": 968.23
        },
        {
          "month": 20,
          "incumbent": 2000,
          "alternative": 1003.4
        },
        {
          "month": 21,
          "incumbent": 2100,
          "alternative": 1038.57
        },
        {
          "month": 22,
          "incumbent": 2200,
          "alternative": 1073.74
        },
        {
          "month": 23,
          "incumbent": 2300,
          "alternative": 1108.91
        },
        {
          "month": 24,
          "incumbent": 2400,
          "alternative": 1144.08
        },
        {
          "month": 25,
          "incumbent": 2500,
          "alternative": 1179.25
        },
        {
          "month": 26,
          "incumbent": 2600,
          "alternative": 1214.42
        },
        {
          "month": 27,
          "incumbent": 2700,
          "alternative": 1249.59
        },
        {
          "month": 28,
          "incumbent": 2800,
          "alternative": 1284.76
        },
        {
          "month": 29,
          "incumbent": 2900,
          "alternative": 1319.93
        },
        {
          "month": 30,
          "incumbent": 3000,
          "alternative": 1355.1
        },
        {
          "month": 31,
          "incumbent": 3100,
          "alternative": 1390.27
        },
        {
          "month": 32,
          "incumbent": 3200,
          "alternative": 1425.44
        },
        {
          "month": 33,
          "incumbent": 3300,
          "alternative": 1460.61
        },
        {
          "month": 34,
          "incumbent": 3400,
          "alternative": 1495.78
        },
        {
          "month": 35,
          "incumbent": 3500,
          "alternative": 1530.95
        },
        {
          "month": 36,
          "incumbent": 3600,
          "alternative": 1566.12
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 3233.74
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 2,
          "savings_at_horizon": 2633.75
        },
        {
          "hourly_rate": 50,
          "verdict": "switch",
          "break_even_month": 5,
          "savings_at_horizon": 2033.74
        },
        {
          "hourly_rate": 75,
          "verdict": "switch",
          "break_even_month": 9,
          "savings_at_horizon": 1433.74
        },
        {
          "hourly_rate": 100,
          "verdict": "switch",
          "break_even_month": 16,
          "savings_at_horizon": 833.74
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": 61,
          "savings_at_horizon": -366.26
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -1566.26
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Airtable's automations and scripting block — NocoDB's equivalents are thinner",
          "The interface designer and published interfaces",
          "A large marketplace of extensions and templates"
        ],
        "you_gain": [
          "A real Postgres database underneath, queryable with SQL by anything you own",
          "No record limits per base",
          "Free seats, which is the entire argument for teams above about four people"
        ]
      },
      "caveats": [
        "NocoDB has a direct Airtable import, which is why the migration estimate is low. Verify formula fields after import — they are the part that most often does not survive.",
        "Attachment-heavy bases need more disk and more backup volume than the defaults here."
      ],
      "category": "database-spreadsheet",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "airtable-to-teable",
      "title": "Airtable Team to self-hosted Teable",
      "summary": "Teable is the closest thing to Airtable anyone has built. It is also the youngest, and that cuts both ways.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Airtable",
        "vendor_id": "airtable",
        "plan": "Team",
        "plan_id": "team",
        "amount": 20,
        "period": "month",
        "per_seat": true,
        "billed": "annual",
        "seats": 6,
        "quote": "our Team plan is available for $20/user/month when billed annually",
        "caveat": null,
        "source_url": "https://airtable.com/pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "Teable (self-hosted)",
        "repo": "teableio/teable",
        "project": {
          "full_name": "teableio/teable",
          "url": "https://github.com/teableio/teable",
          "homepage": "https://teable.ai",
          "description": "✨ AI Spreadsheet for Business",
          "stars": 21903,
          "forks": 1357,
          "open_issues": 146,
          "license": null,
          "archived": false,
          "pushed_at": "2026-10-19T09:57:40Z",
          "days_since_push": 0,
          "latest_release": {
            "tag": "release.2026-10-16T07-06-34Z.3445",
            "published_at": "2026-10-16T07:57:29Z",
            "url": "https://github.com/teableio/teable/releases/tag/release.2026-10-16T07-06-34Z.3445"
          },
          "days_since_release": 3,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:45.315Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-2c-4gb",
          "id": "vultr:vc2-2c-4gb",
          "vcpu": 2,
          "ram_gb": 4,
          "disk_gb": 80,
          "bandwidth_tb": 3,
          "monthly_usd": 20,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 40,
          "monthly_usd": 0.28
        },
        "requirements": {
          "ram_gb": 4,
          "vcpu": 2,
          "disk_gb": 40
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-2c-4gb",
            "monthly_usd": 20,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 4GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "2 vCPU · 4 GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 8,
        "maintenance_hours_per_month": 0.75
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 6,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 120,
          "time_monthly": 0,
          "monthly": 120,
          "one_time": 0,
          "annual": 1440
        },
        "alternative": {
          "cash_monthly": 20.28,
          "time_monthly": 37.5,
          "monthly": 57.78,
          "one_time": 400,
          "cash_one_time": 0,
          "time_one_time": 400,
          "annual": 693.34
        },
        "delta": {
          "monthly": 62.22,
          "upfront_to_switch": 400,
          "annual": 746.66
        },
        "break_even_month": 7,
        "break_even_hourly_rate": 102.57,
        "totals": {
          "at_12_months": {
            "incumbent": 1440,
            "alternative": 1093.34
          },
          "at_36_months": {
            "incumbent": 4320,
            "alternative": 2480.01
          },
          "at_horizon": {
            "incumbent": 4320,
            "alternative": 2480.01
          }
        },
        "savings": {
          "year_1": 346.66,
          "year_3": 1839.99,
          "at_horizon": 1839.99
        },
        "verdict": "switch"
      },
      "managed": null,
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 400
        },
        {
          "month": 1,
          "incumbent": 120,
          "alternative": 457.78
        },
        {
          "month": 2,
          "incumbent": 240,
          "alternative": 515.56
        },
        {
          "month": 3,
          "incumbent": 360,
          "alternative": 573.34
        },
        {
          "month": 4,
          "incumbent": 480,
          "alternative": 631.12
        },
        {
          "month": 5,
          "incumbent": 600,
          "alternative": 688.9
        },
        {
          "month": 6,
          "incumbent": 720,
          "alternative": 746.68
        },
        {
          "month": 7,
          "incumbent": 840,
          "alternative": 804.46
        },
        {
          "month": 8,
          "incumbent": 960,
          "alternative": 862.24
        },
        {
          "month": 9,
          "incumbent": 1080,
          "alternative": 920.02
        },
        {
          "month": 10,
          "incumbent": 1200,
          "alternative": 977.8
        },
        {
          "month": 11,
          "incumbent": 1320,
          "alternative": 1035.58
        },
        {
          "month": 12,
          "incumbent": 1440,
          "alternative": 1093.36
        },
        {
          "month": 13,
          "incumbent": 1560,
          "alternative": 1151.14
        },
        {
          "month": 14,
          "incumbent": 1680,
          "alternative": 1208.92
        },
        {
          "month": 15,
          "incumbent": 1800,
          "alternative": 1266.7
        },
        {
          "month": 16,
          "incumbent": 1920,
          "alternative": 1324.48
        },
        {
          "month": 17,
          "incumbent": 2040,
          "alternative": 1382.26
        },
        {
          "month": 18,
          "incumbent": 2160,
          "alternative": 1440.04
        },
        {
          "month": 19,
          "incumbent": 2280,
          "alternative": 1497.82
        },
        {
          "month": 20,
          "incumbent": 2400,
          "alternative": 1555.6
        },
        {
          "month": 21,
          "incumbent": 2520,
          "alternative": 1613.38
        },
        {
          "month": 22,
          "incumbent": 2640,
          "alternative": 1671.16
        },
        {
          "month": 23,
          "incumbent": 2760,
          "alternative": 1728.94
        },
        {
          "month": 24,
          "incumbent": 2880,
          "alternative": 1786.72
        },
        {
          "month": 25,
          "incumbent": 3000,
          "alternative": 1844.5
        },
        {
          "month": 26,
          "incumbent": 3120,
          "alternative": 1902.28
        },
        {
          "month": 27,
          "incumbent": 3240,
          "alternative": 1960.06
        },
        {
          "month": 28,
          "incumbent": 3360,
          "alternative": 2017.84
        },
        {
          "month": 29,
          "incumbent": 3480,
          "alternative": 2075.62
        },
        {
          "month": 30,
          "incumbent": 3600,
          "alternative": 2133.4
        },
        {
          "month": 31,
          "incumbent": 3720,
          "alternative": 2191.18
        },
        {
          "month": 32,
          "incumbent": 3840,
          "alternative": 2248.96
        },
        {
          "month": 33,
          "incumbent": 3960,
          "alternative": 2306.74
        },
        {
          "month": 34,
          "incumbent": 4080,
          "alternative": 2364.52
        },
        {
          "month": 35,
          "incumbent": 4200,
          "alternative": 2422.3
        },
        {
          "month": 36,
          "incumbent": 4320,
          "alternative": 2480.08
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 3589.99
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 3,
          "savings_at_horizon": 2714.99
        },
        {
          "hourly_rate": 50,
          "verdict": "switch",
          "break_even_month": 7,
          "savings_at_horizon": 1839.99
        },
        {
          "hourly_rate": 75,
          "verdict": "switch",
          "break_even_month": 14,
          "savings_at_horizon": 964.99
        },
        {
          "hourly_rate": 100,
          "verdict": "marginal",
          "break_even_month": 33,
          "savings_at_horizon": 89.99
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -1660.01
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -3410.01
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Airtable's automations, scripting block and extension marketplace",
          "A decade of stability; Teable is moving fast and breaking things is part of that",
          "Interface Designer"
        ],
        "you_gain": [
          "A grid that genuinely feels like Airtable rather than a spreadsheet pretending",
          "Real Postgres underneath, with the tables queryable directly",
          "Free seats at a tier where Airtable charges $20 each"
        ]
      },
      "caveats": [
        "Teable is the youngest project on this site. Pin a version, read the release notes, and do not upgrade on a Friday.",
        "Its licence is not one GitHub recognises automatically. Check the repository before building anything commercial on it.",
        "If you want the mature option in this category, read the NocoDB and Baserow comparisons instead — both are older and calmer."
      ],
      "category": "database-spreadsheet",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "asana-to-openproject",
      "title": "Asana Starter to self-hosted OpenProject",
      "summary": "OpenProject covers Asana's core — projects, tasks, boards, timelines — and prices per user in EUR instead of per seat per month forever.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Asana",
        "vendor_id": "asana",
        "plan": "Starter",
        "plan_id": "starter",
        "amount": 10.99,
        "period": "month",
        "per_seat": true,
        "billed": "annual",
        "seats": 15,
        "quote": "Starter $10.99 per user/month, billed annually",
        "caveat": null,
        "source_url": "https://asana.com/pricing",
        "verified_at": "2026-10-11",
        "needs_reverification": false
      },
      "alternative": {
        "name": "OpenProject (self-hosted)",
        "repo": "opf/openproject",
        "project": {
          "full_name": "opf/openproject",
          "url": "https://github.com/opf/openproject",
          "homepage": "https://www.openproject.org",
          "description": "OpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub",
          "stars": 16464,
          "forks": 3570,
          "open_issues": 311,
          "license": "GPL-3.0",
          "archived": false,
          "pushed_at": "2026-10-19T10:53:38Z",
          "days_since_push": 0,
          "latest_release": {
            "tag": "v17.9.2",
            "published_at": "2026-10-15T11:56:10Z",
            "url": "https://github.com/opf/openproject/releases/tag/v17.9.2"
          },
          "days_since_release": 4,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:45.801Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-2c-4gb",
          "id": "vultr:vc2-2c-4gb",
          "vcpu": 2,
          "ram_gb": 4,
          "disk_gb": 80,
          "bandwidth_tb": 3,
          "monthly_usd": 20,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 30,
          "monthly_usd": 0.21
        },
        "requirements": {
          "ram_gb": 4,
          "vcpu": 2,
          "disk_gb": 50
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-2c-4gb",
            "monthly_usd": 20,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 4GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "2 vCPU · 4 GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 12,
        "maintenance_hours_per_month": 1
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 15,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 164.85,
          "time_monthly": 0,
          "monthly": 164.85,
          "one_time": 0,
          "annual": 1978.2
        },
        "alternative": {
          "cash_monthly": 20.21,
          "time_monthly": 50,
          "monthly": 70.21,
          "one_time": 600,
          "cash_one_time": 0,
          "time_one_time": 600,
          "annual": 842.5
        },
        "delta": {
          "monthly": 94.64,
          "upfront_to_switch": 600,
          "annual": 1135.7
        },
        "break_even_month": 7,
        "break_even_hourly_rate": 108.48,
        "totals": {
          "at_12_months": {
            "incumbent": 1978.2,
            "alternative": 1442.5
          },
          "at_36_months": {
            "incumbent": 5934.6,
            "alternative": 3127.51
          },
          "at_horizon": {
            "incumbent": 5934.6,
            "alternative": 3127.51
          }
        },
        "savings": {
          "year_1": 535.7,
          "year_3": 2807.09,
          "at_horizon": 2807.09
        },
        "verdict": "switch"
      },
      "managed": null,
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 600
        },
        {
          "month": 1,
          "incumbent": 164.85,
          "alternative": 670.21
        },
        {
          "month": 2,
          "incumbent": 329.7,
          "alternative": 740.42
        },
        {
          "month": 3,
          "incumbent": 494.55,
          "alternative": 810.63
        },
        {
          "month": 4,
          "incumbent": 659.4,
          "alternative": 880.84
        },
        {
          "month": 5,
          "incumbent": 824.25,
          "alternative": 951.05
        },
        {
          "month": 6,
          "incumbent": 989.1,
          "alternative": 1021.26
        },
        {
          "month": 7,
          "incumbent": 1153.95,
          "alternative": 1091.47
        },
        {
          "month": 8,
          "incumbent": 1318.8,
          "alternative": 1161.68
        },
        {
          "month": 9,
          "incumbent": 1483.65,
          "alternative": 1231.89
        },
        {
          "month": 10,
          "incumbent": 1648.5,
          "alternative": 1302.1
        },
        {
          "month": 11,
          "incumbent": 1813.35,
          "alternative": 1372.31
        },
        {
          "month": 12,
          "incumbent": 1978.2,
          "alternative": 1442.52
        },
        {
          "month": 13,
          "incumbent": 2143.05,
          "alternative": 1512.73
        },
        {
          "month": 14,
          "incumbent": 2307.9,
          "alternative": 1582.94
        },
        {
          "month": 15,
          "incumbent": 2472.75,
          "alternative": 1653.15
        },
        {
          "month": 16,
          "incumbent": 2637.6,
          "alternative": 1723.36
        },
        {
          "month": 17,
          "incumbent": 2802.45,
          "alternative": 1793.57
        },
        {
          "month": 18,
          "incumbent": 2967.3,
          "alternative": 1863.78
        },
        {
          "month": 19,
          "incumbent": 3132.15,
          "alternative": 1933.99
        },
        {
          "month": 20,
          "incumbent": 3297,
          "alternative": 2004.2
        },
        {
          "month": 21,
          "incumbent": 3461.85,
          "alternative": 2074.41
        },
        {
          "month": 22,
          "incumbent": 3626.7,
          "alternative": 2144.62
        },
        {
          "month": 23,
          "incumbent": 3791.55,
          "alternative": 2214.83
        },
        {
          "month": 24,
          "incumbent": 3956.4,
          "alternative": 2285.04
        },
        {
          "month": 25,
          "incumbent": 4121.25,
          "alternative": 2355.25
        },
        {
          "month": 26,
          "incumbent": 4286.1,
          "alternative": 2425.46
        },
        {
          "month": 27,
          "incumbent": 4450.95,
          "alternative": 2495.67
        },
        {
          "month": 28,
          "incumbent": 4615.8,
          "alternative": 2565.88
        },
        {
          "month": 29,
          "incumbent": 4780.65,
          "alternative": 2636.09
        },
        {
          "month": 30,
          "incumbent": 4945.5,
          "alternative": 2706.3
        },
        {
          "month": 31,
          "incumbent": 5110.35,
          "alternative": 2776.51
        },
        {
          "month": 32,
          "incumbent": 5275.2,
          "alternative": 2846.72
        },
        {
          "month": 33,
          "incumbent": 5440.05,
          "alternative": 2916.93
        },
        {
          "month": 34,
          "incumbent": 5604.9,
          "alternative": 2987.14
        },
        {
          "month": 35,
          "incumbent": 5769.75,
          "alternative": 3057.35
        },
        {
          "month": 36,
          "incumbent": 5934.6,
          "alternative": 3127.56
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 5207.09
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 3,
          "savings_at_horizon": 4007.09
        },
        {
          "hourly_rate": 50,
          "verdict": "switch",
          "break_even_month": 7,
          "savings_at_horizon": 2807.09
        },
        {
          "hourly_rate": 75,
          "verdict": "switch",
          "break_even_month": 13,
          "savings_at_horizon": 1607.09
        },
        {
          "hourly_rate": 100,
          "verdict": "marginal",
          "break_even_month": 27,
          "savings_at_horizon": 407.09
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -1992.91
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -4392.91
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Asana's polish and mobile apps — OpenProject is functional, not delightful",
          "Asana AI (teammates, dash assistants)",
          "Forms and approval flows as one-click templates"
        ],
        "you_gain": [
          "Gantt charts and baselines that Asana charges Advanced-tier money for",
          "GPL-3.0 with unlimited users and no seat count anywhere in the arithmetic",
          "One place for tasks, wiki, and time tracking instead of three integrations"
        ]
      },
      "caveats": [
        "OpenProject is heavier to run than the SaaS it replaces — 4 GB RAM is the floor, and updates are frequent and real work.",
        "CSV import moves tasks but not automation rules, forms, or portfolio hierarchy. Budget the 12 hours for a 15-seat team with a few years of history."
      ],
      "category": "project-management",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "asana-to-plane",
      "title": "Asana Starter to self-hosted Plane",
      "summary": "Plane is the modern-looking one — cycles, modules, and an issue UI your team already knows how to use.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Asana",
        "vendor_id": "asana",
        "plan": "Starter",
        "plan_id": "starter",
        "amount": 10.99,
        "period": "month",
        "per_seat": true,
        "billed": "annual",
        "seats": 15,
        "quote": "Starter $10.99 per user/month, billed annually",
        "caveat": null,
        "source_url": "https://asana.com/pricing",
        "verified_at": "2026-10-11",
        "needs_reverification": false
      },
      "alternative": {
        "name": "Plane (self-hosted)",
        "repo": "makeplane/plane",
        "project": {
          "full_name": "makeplane/plane",
          "url": "https://github.com/makeplane/plane",
          "homepage": "http://plane.so",
          "description": "🔥🔥🔥 Open-source Jira, Linear, Monday, and ClickUp alternative. Plane is a modern project management platform to manage tasks, sprints, docs, and triage.",
          "stars": 61120,
          "forks": 6129,
          "open_issues": 1140,
          "license": "AGPL-3.0",
          "archived": false,
          "pushed_at": "2026-10-19T09:15:32Z",
          "days_since_push": 0,
          "latest_release": {
            "tag": "v1.4.2",
            "published_at": "2026-08-23T14:39:21Z",
            "url": "https://github.com/makeplane/plane/releases/tag/v1.4.2"
          },
          "days_since_release": 57,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:46.229Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-2c-4gb",
          "id": "vultr:vc2-2c-4gb",
          "vcpu": 2,
          "ram_gb": 4,
          "disk_gb": 80,
          "bandwidth_tb": 3,
          "monthly_usd": 20,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 20,
          "monthly_usd": 0.14
        },
        "requirements": {
          "ram_gb": 4,
          "vcpu": 2,
          "disk_gb": 50
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-2c-4gb",
            "monthly_usd": 20,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 4GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "2 vCPU · 4 GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 10,
        "maintenance_hours_per_month": 1
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 15,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 164.85,
          "time_monthly": 0,
          "monthly": 164.85,
          "one_time": 0,
          "annual": 1978.2
        },
        "alternative": {
          "cash_monthly": 20.14,
          "time_monthly": 50,
          "monthly": 70.14,
          "one_time": 500,
          "cash_one_time": 0,
          "time_one_time": 500,
          "annual": 841.67
        },
        "delta": {
          "monthly": 94.71,
          "upfront_to_switch": 500,
          "annual": 1136.53
        },
        "break_even_month": 6,
        "break_even_hourly_rate": 113.25,
        "totals": {
          "at_12_months": {
            "incumbent": 1978.2,
            "alternative": 1341.67
          },
          "at_36_months": {
            "incumbent": 5934.6,
            "alternative": 3025
          },
          "at_horizon": {
            "incumbent": 5934.6,
            "alternative": 3025
          }
        },
        "savings": {
          "year_1": 636.53,
          "year_3": 2909.6,
          "at_horizon": 2909.6
        },
        "verdict": "switch"
      },
      "managed": null,
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 500
        },
        {
          "month": 1,
          "incumbent": 164.85,
          "alternative": 570.14
        },
        {
          "month": 2,
          "incumbent": 329.7,
          "alternative": 640.28
        },
        {
          "month": 3,
          "incumbent": 494.55,
          "alternative": 710.42
        },
        {
          "month": 4,
          "incumbent": 659.4,
          "alternative": 780.56
        },
        {
          "month": 5,
          "incumbent": 824.25,
          "alternative": 850.7
        },
        {
          "month": 6,
          "incumbent": 989.1,
          "alternative": 920.84
        },
        {
          "month": 7,
          "incumbent": 1153.95,
          "alternative": 990.98
        },
        {
          "month": 8,
          "incumbent": 1318.8,
          "alternative": 1061.12
        },
        {
          "month": 9,
          "incumbent": 1483.65,
          "alternative": 1131.26
        },
        {
          "month": 10,
          "incumbent": 1648.5,
          "alternative": 1201.4
        },
        {
          "month": 11,
          "incumbent": 1813.35,
          "alternative": 1271.54
        },
        {
          "month": 12,
          "incumbent": 1978.2,
          "alternative": 1341.68
        },
        {
          "month": 13,
          "incumbent": 2143.05,
          "alternative": 1411.82
        },
        {
          "month": 14,
          "incumbent": 2307.9,
          "alternative": 1481.96
        },
        {
          "month": 15,
          "incumbent": 2472.75,
          "alternative": 1552.1
        },
        {
          "month": 16,
          "incumbent": 2637.6,
          "alternative": 1622.24
        },
        {
          "month": 17,
          "incumbent": 2802.45,
          "alternative": 1692.38
        },
        {
          "month": 18,
          "incumbent": 2967.3,
          "alternative": 1762.52
        },
        {
          "month": 19,
          "incumbent": 3132.15,
          "alternative": 1832.66
        },
        {
          "month": 20,
          "incumbent": 3297,
          "alternative": 1902.8
        },
        {
          "month": 21,
          "incumbent": 3461.85,
          "alternative": 1972.94
        },
        {
          "month": 22,
          "incumbent": 3626.7,
          "alternative": 2043.08
        },
        {
          "month": 23,
          "incumbent": 3791.55,
          "alternative": 2113.22
        },
        {
          "month": 24,
          "incumbent": 3956.4,
          "alternative": 2183.36
        },
        {
          "month": 25,
          "incumbent": 4121.25,
          "alternative": 2253.5
        },
        {
          "month": 26,
          "incumbent": 4286.1,
          "alternative": 2323.64
        },
        {
          "month": 27,
          "incumbent": 4450.95,
          "alternative": 2393.78
        },
        {
          "month": 28,
          "incumbent": 4615.8,
          "alternative": 2463.92
        },
        {
          "month": 29,
          "incumbent": 4780.65,
          "alternative": 2534.06
        },
        {
          "month": 30,
          "incumbent": 4945.5,
          "alternative": 2604.2
        },
        {
          "month": 31,
          "incumbent": 5110.35,
          "alternative": 2674.34
        },
        {
          "month": 32,
          "incumbent": 5275.2,
          "alternative": 2744.48
        },
        {
          "month": 33,
          "incumbent": 5440.05,
          "alternative": 2814.62
        },
        {
          "month": 34,
          "incumbent": 5604.9,
          "alternative": 2884.76
        },
        {
          "month": 35,
          "incumbent": 5769.75,
          "alternative": 2954.9
        },
        {
          "month": 36,
          "incumbent": 5934.6,
          "alternative": 3025.04
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 5209.6
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 3,
          "savings_at_horizon": 4059.6
        },
        {
          "hourly_rate": 50,
          "verdict": "switch",
          "break_even_month": 6,
          "savings_at_horizon": 2909.6
        },
        {
          "hourly_rate": 75,
          "verdict": "switch",
          "break_even_month": 11,
          "savings_at_horizon": 1759.6
        },
        {
          "hourly_rate": 100,
          "verdict": "marginal",
          "break_even_month": 23,
          "savings_at_horizon": 609.6
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -1690.4
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -3990.4
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Asana's maturity — Plane is three years old and its API still moves",
          "Workload view and time tracking at Asana's depth",
          "The mobile apps"
        ],
        "you_gain": [
          "A UI so close to Linear/Asana that the training cost is an afternoon",
          "AGPL-3.0, unlimited members, no seat pricing",
          "Cycles and modules that map cleanly onto sprint-style work"
        ]
      },
      "caveats": [
        "Plane moves fast, which cuts both ways — pin your Docker image tags and read the changelog before updating.",
        "There is no Asana importer. The 10-hour estimate covers CSV export from Asana and hand-rebuilding projects and panels."
      ],
      "category": "project-management",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "auth0-to-keycloak",
      "title": "Auth0 Essentials to self-hosted Keycloak",
      "summary": "Auth0 prices by monthly active users; Keycloak does not care how many you have. This is the escape with the steepest operational cost.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Auth0",
        "vendor_id": "auth0",
        "plan": "Essentials",
        "plan_id": "essentials",
        "amount": 35,
        "period": "month",
        "per_seat": false,
        "billed": "monthly",
        "seats": 1,
        "quote": "Essentials $ 35 / month ... Up to 500 monthly active users",
        "caveat": "Priced at up to 500 monthly active users. Cost scales with MAU, so this is the entry price for a small user base.",
        "source_url": "https://auth0.com/pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "Keycloak (self-hosted)",
        "repo": "keycloak/keycloak",
        "project": {
          "full_name": "keycloak/keycloak",
          "url": "https://github.com/keycloak/keycloak",
          "homepage": "https://www.keycloak.org",
          "description": "Open Source Identity and Access Management For Modern Applications and Services",
          "stars": 37431,
          "forks": 9076,
          "open_issues": 3259,
          "license": "Apache-2.0",
          "archived": false,
          "pushed_at": "2026-10-19T00:57:16Z",
          "days_since_push": 0,
          "latest_release": {
            "tag": "26.8.1",
            "published_at": "2026-10-13T08:58:15Z",
            "url": "https://github.com/keycloak/keycloak/releases/tag/26.8.1"
          },
          "days_since_release": 6,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:46.648Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-2c-4gb",
          "id": "vultr:vc2-2c-4gb",
          "vcpu": 2,
          "ram_gb": 4,
          "disk_gb": 80,
          "bandwidth_tb": 3,
          "monthly_usd": 20,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 20,
          "monthly_usd": 0.14
        },
        "requirements": {
          "ram_gb": 4,
          "vcpu": 2,
          "disk_gb": 25
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-2c-4gb",
            "monthly_usd": 20,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 4GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "2 vCPU · 4 GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 24,
        "maintenance_hours_per_month": 1.5
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 1,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 35,
          "time_monthly": 0,
          "monthly": 35,
          "one_time": 0,
          "annual": 420
        },
        "alternative": {
          "cash_monthly": 20.14,
          "time_monthly": 75,
          "monthly": 95.14,
          "one_time": 1200,
          "cash_one_time": 0,
          "time_one_time": 1200,
          "annual": 1141.67
        },
        "delta": {
          "monthly": -60.14,
          "upfront_to_switch": 1200,
          "annual": -721.67
        },
        "break_even_month": null,
        "break_even_hourly_rate": 6.86,
        "totals": {
          "at_12_months": {
            "incumbent": 420,
            "alternative": 2341.67
          },
          "at_36_months": {
            "incumbent": 1260,
            "alternative": 4625
          },
          "at_horizon": {
            "incumbent": 1260,
            "alternative": 4625
          }
        },
        "savings": {
          "year_1": -1921.67,
          "year_3": -3365,
          "at_horizon": -3365
        },
        "verdict": "stay"
      },
      "managed": {
        "provider": "PikaPods",
        "app": "Keycloak",
        "url": "https://www.pikapods.com/",
        "note": "Runs the same open-source software, applies updates, and takes daily encrypted backups to storage you own.",
        "source_url": "https://www.pikapods.com/apps",
        "quote": "Keycloak Identity and Access … Run Your Own From $6.5/month",
        "monthly_usd": 6.5,
        "verified_at": "2026-10-19T10:54:00.624Z",
        "migration_hours": 12,
        "result": {
          "computable": true,
          "inputs": {
            "seats": 1,
            "horizon_months": 36,
            "hourly_rate": 50
          },
          "incumbent": {
            "cash_monthly": 35,
            "time_monthly": 0,
            "monthly": 35,
            "one_time": 0,
            "annual": 420
          },
          "alternative": {
            "cash_monthly": 6.5,
            "time_monthly": 0,
            "monthly": 6.5,
            "one_time": 600,
            "cash_one_time": 0,
            "time_one_time": 600,
            "annual": 78
          },
          "delta": {
            "monthly": 28.5,
            "upfront_to_switch": 600,
            "annual": 342
          },
          "break_even_month": 22,
          "break_even_hourly_rate": 85.5,
          "totals": {
            "at_12_months": {
              "incumbent": 420,
              "alternative": 678
            },
            "at_36_months": {
              "incumbent": 1260,
              "alternative": 834
            },
            "at_horizon": {
              "incumbent": 1260,
              "alternative": 834
            }
          },
          "savings": {
            "year_1": -258,
            "year_3": 426,
            "at_horizon": 426
          },
          "verdict": "marginal"
        },
        "crossover": 85.5
      },
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 1200
        },
        {
          "month": 1,
          "incumbent": 35,
          "alternative": 1295.14
        },
        {
          "month": 2,
          "incumbent": 70,
          "alternative": 1390.28
        },
        {
          "month": 3,
          "incumbent": 105,
          "alternative": 1485.42
        },
        {
          "month": 4,
          "incumbent": 140,
          "alternative": 1580.56
        },
        {
          "month": 5,
          "incumbent": 175,
          "alternative": 1675.7
        },
        {
          "month": 6,
          "incumbent": 210,
          "alternative": 1770.84
        },
        {
          "month": 7,
          "incumbent": 245,
          "alternative": 1865.98
        },
        {
          "month": 8,
          "incumbent": 280,
          "alternative": 1961.12
        },
        {
          "month": 9,
          "incumbent": 315,
          "alternative": 2056.26
        },
        {
          "month": 10,
          "incumbent": 350,
          "alternative": 2151.4
        },
        {
          "month": 11,
          "incumbent": 385,
          "alternative": 2246.54
        },
        {
          "month": 12,
          "incumbent": 420,
          "alternative": 2341.68
        },
        {
          "month": 13,
          "incumbent": 455,
          "alternative": 2436.82
        },
        {
          "month": 14,
          "incumbent": 490,
          "alternative": 2531.96
        },
        {
          "month": 15,
          "incumbent": 525,
          "alternative": 2627.1
        },
        {
          "month": 16,
          "incumbent": 560,
          "alternative": 2722.24
        },
        {
          "month": 17,
          "incumbent": 595,
          "alternative": 2817.38
        },
        {
          "month": 18,
          "incumbent": 630,
          "alternative": 2912.52
        },
        {
          "month": 19,
          "incumbent": 665,
          "alternative": 3007.66
        },
        {
          "month": 20,
          "incumbent": 700,
          "alternative": 3102.8
        },
        {
          "month": 21,
          "incumbent": 735,
          "alternative": 3197.94
        },
        {
          "month": 22,
          "incumbent": 770,
          "alternative": 3293.08
        },
        {
          "month": 23,
          "incumbent": 805,
          "alternative": 3388.22
        },
        {
          "month": 24,
          "incumbent": 840,
          "alternative": 3483.36
        },
        {
          "month": 25,
          "incumbent": 875,
          "alternative": 3578.5
        },
        {
          "month": 26,
          "incumbent": 910,
          "alternative": 3673.64
        },
        {
          "month": 27,
          "incumbent": 945,
          "alternative": 3768.78
        },
        {
          "month": 28,
          "incumbent": 980,
          "alternative": 3863.92
        },
        {
          "month": 29,
          "incumbent": 1015,
          "alternative": 3959.06
        },
        {
          "month": 30,
          "incumbent": 1050,
          "alternative": 4054.2
        },
        {
          "month": 31,
          "incumbent": 1085,
          "alternative": 4149.34
        },
        {
          "month": 32,
          "incumbent": 1120,
          "alternative": 4244.48
        },
        {
          "month": 33,
          "incumbent": 1155,
          "alternative": 4339.62
        },
        {
          "month": 34,
          "incumbent": 1190,
          "alternative": 4434.76
        },
        {
          "month": 35,
          "incumbent": 1225,
          "alternative": 4529.9
        },
        {
          "month": 36,
          "incumbent": 1260,
          "alternative": 4625.04
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 535
        },
        {
          "hourly_rate": 25,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -1415
        },
        {
          "hourly_rate": 50,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -3365
        },
        {
          "hourly_rate": 75,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -5315
        },
        {
          "hourly_rate": 100,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -7265
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -11165
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -15065
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Auth0's uptime record, on the one service where downtime locks every user out of everything",
          "Anomaly detection, breached-password checks and bot protection out of the box",
          "Rules, Actions and the extension marketplace"
        ],
        "you_gain": [
          "MAU-independent pricing — the reason anyone considers this at 10,000+ users",
          "Full OIDC and SAML with no feature gating behind an enterprise tier",
          "Apache-2.0 licensing and a CNCF-adjacent governance model"
        ]
      },
      "caveats": [
        "This is the one on this site we are most cautious about. Identity is the worst thing to run badly: a botched Keycloak upgrade locks every user out of every application at once.",
        "The 24-hour migration estimate is realistic only if you already understand OIDC. Double it if you do not.",
        "Auth0 Essentials at $35/month is priced for up to 500 monthly active users. Below that ceiling Auth0 is very hard to beat, and this page will usually tell you to stay.",
        "Budget for a staging Keycloak as well. The arithmetic here assumes one box; a serious deployment wants two."
      ],
      "category": "auth",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "auth0-to-zitadel",
      "title": "Auth0 Professional to self-hosted Zitadel",
      "summary": "Zitadel is a lighter thing to run than Keycloak, and Auth0 Professional is four times the price of Essentials. Both facts move this one.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Auth0",
        "vendor_id": "auth0",
        "plan": "Professional",
        "plan_id": "professional",
        "amount": 240,
        "period": "month",
        "per_seat": false,
        "billed": "monthly",
        "seats": 1,
        "quote": "Professional $ 240 / month ... Up to 500 monthly active users",
        "caveat": "Priced at up to 500 monthly active users.",
        "source_url": "https://auth0.com/pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "Zitadel (self-hosted)",
        "repo": "zitadel/zitadel",
        "project": {
          "full_name": "zitadel/zitadel",
          "url": "https://github.com/zitadel/zitadel",
          "homepage": "https://zitadel.com",
          "description": "ZITADEL - Identity infrastructure, simplified for you.",
          "stars": 15345,
          "forks": 1388,
          "open_issues": 1296,
          "license": "AGPL-3.0",
          "archived": false,
          "pushed_at": "2026-10-16T09:29:48Z",
          "days_since_push": 3,
          "latest_release": {
            "tag": "v4.19.5",
            "published_at": "2026-10-15T09:40:41Z",
            "url": "https://github.com/zitadel/zitadel/releases/tag/v4.19.5"
          },
          "days_since_release": 4,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:47.135Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-2c-4gb",
          "id": "vultr:vc2-2c-4gb",
          "vcpu": 2,
          "ram_gb": 4,
          "disk_gb": 80,
          "bandwidth_tb": 3,
          "monthly_usd": 20,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 25,
          "monthly_usd": 0.17
        },
        "requirements": {
          "ram_gb": 4,
          "vcpu": 2,
          "disk_gb": 30
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-2c-4gb",
            "monthly_usd": 20,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 4GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "2 vCPU · 4 GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 20,
        "maintenance_hours_per_month": 1.25
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 1,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 240,
          "time_monthly": 0,
          "monthly": 240,
          "one_time": 0,
          "annual": 2880
        },
        "alternative": {
          "cash_monthly": 20.17,
          "time_monthly": 62.5,
          "monthly": 82.67,
          "one_time": 1000,
          "cash_one_time": 0,
          "time_one_time": 1000,
          "annual": 992.09
        },
        "delta": {
          "monthly": 157.33,
          "upfront_to_switch": 1000,
          "annual": 1887.92
        },
        "break_even_month": 7,
        "break_even_hourly_rate": 121.75,
        "totals": {
          "at_12_months": {
            "incumbent": 2880,
            "alternative": 1992.09
          },
          "at_36_months": {
            "incumbent": 8640,
            "alternative": 3976.26
          },
          "at_horizon": {
            "incumbent": 8640,
            "alternative": 3976.26
          }
        },
        "savings": {
          "year_1": 887.91,
          "year_3": 4663.74,
          "at_horizon": 4663.74
        },
        "verdict": "switch"
      },
      "managed": null,
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 1000
        },
        {
          "month": 1,
          "incumbent": 240,
          "alternative": 1082.67
        },
        {
          "month": 2,
          "incumbent": 480,
          "alternative": 1165.34
        },
        {
          "month": 3,
          "incumbent": 720,
          "alternative": 1248.01
        },
        {
          "month": 4,
          "incumbent": 960,
          "alternative": 1330.68
        },
        {
          "month": 5,
          "incumbent": 1200,
          "alternative": 1413.35
        },
        {
          "month": 6,
          "incumbent": 1440,
          "alternative": 1496.02
        },
        {
          "month": 7,
          "incumbent": 1680,
          "alternative": 1578.69
        },
        {
          "month": 8,
          "incumbent": 1920,
          "alternative": 1661.36
        },
        {
          "month": 9,
          "incumbent": 2160,
          "alternative": 1744.03
        },
        {
          "month": 10,
          "incumbent": 2400,
          "alternative": 1826.7
        },
        {
          "month": 11,
          "incumbent": 2640,
          "alternative": 1909.37
        },
        {
          "month": 12,
          "incumbent": 2880,
          "alternative": 1992.04
        },
        {
          "month": 13,
          "incumbent": 3120,
          "alternative": 2074.71
        },
        {
          "month": 14,
          "incumbent": 3360,
          "alternative": 2157.38
        },
        {
          "month": 15,
          "incumbent": 3600,
          "alternative": 2240.05
        },
        {
          "month": 16,
          "incumbent": 3840,
          "alternative": 2322.72
        },
        {
          "month": 17,
          "incumbent": 4080,
          "alternative": 2405.39
        },
        {
          "month": 18,
          "incumbent": 4320,
          "alternative": 2488.06
        },
        {
          "month": 19,
          "incumbent": 4560,
          "alternative": 2570.73
        },
        {
          "month": 20,
          "incumbent": 4800,
          "alternative": 2653.4
        },
        {
          "month": 21,
          "incumbent": 5040,
          "alternative": 2736.07
        },
        {
          "month": 22,
          "incumbent": 5280,
          "alternative": 2818.74
        },
        {
          "month": 23,
          "incumbent": 5520,
          "alternative": 2901.41
        },
        {
          "month": 24,
          "incumbent": 5760,
          "alternative": 2984.08
        },
        {
          "month": 25,
          "incumbent": 6000,
          "alternative": 3066.75
        },
        {
          "month": 26,
          "incumbent": 6240,
          "alternative": 3149.42
        },
        {
          "month": 27,
          "incumbent": 6480,
          "alternative": 3232.09
        },
        {
          "month": 28,
          "incumbent": 6720,
          "alternative": 3314.76
        },
        {
          "month": 29,
          "incumbent": 6960,
          "alternative": 3397.43
        },
        {
          "month": 30,
          "incumbent": 7200,
          "alternative": 3480.1
        },
        {
          "month": 31,
          "incumbent": 7440,
          "alternative": 3562.77
        },
        {
          "month": 32,
          "incumbent": 7680,
          "alternative": 3645.44
        },
        {
          "month": 33,
          "incumbent": 7920,
          "alternative": 3728.11
        },
        {
          "month": 34,
          "incumbent": 8160,
          "alternative": 3810.78
        },
        {
          "month": 35,
          "incumbent": 8400,
          "alternative": 3893.45
        },
        {
          "month": 36,
          "incumbent": 8640,
          "alternative": 3976.12
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 7913.75
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 3,
          "savings_at_horizon": 6288.74
        },
        {
          "hourly_rate": 50,
          "verdict": "switch",
          "break_even_month": 7,
          "savings_at_horizon": 4663.74
        },
        {
          "hourly_rate": 75,
          "verdict": "switch",
          "break_even_month": 12,
          "savings_at_horizon": 3038.74
        },
        {
          "hourly_rate": 100,
          "verdict": "marginal",
          "break_even_month": 22,
          "savings_at_horizon": 1413.75
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": 93,
          "savings_at_horizon": -1836.25
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -5086.26
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Auth0's operational record on the one service whose outage locks users out of everything else",
          "Attack protection, breached-password detection and bot defence as managed features",
          "The Auth0 Actions ecosystem"
        ],
        "you_gain": [
          "Pricing that does not move with monthly active users",
          "A Go service with a much smaller operational footprint than a JVM identity server",
          "AGPL-3.0, with multi-tenancy and audit trails in the open-source build"
        ]
      },
      "caveats": [
        "Everything on the Keycloak page applies here too: identity is the worst system to run badly, and a bad upgrade is a company-wide outage.",
        "Auth0 Professional is priced at up to 500 monthly active users. Above that its cost climbs steeply while Zitadel's does not, so check your own MAU before trusting this comparison.",
        "Twenty hours assumes you have migrated an identity provider before. If you have not, this is not a weekend."
      ],
      "category": "auth",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "calendly-to-calcom",
      "title": "Calendly Standard to self-hosted Cal.com",
      "summary": "Cal.com is a close feature match for Calendly, which makes this one of the cleaner swaps — if you have enough seats.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Calendly",
        "vendor_id": "calendly",
        "plan": "Standard",
        "plan_id": "standard",
        "amount": 10,
        "period": "month",
        "per_seat": true,
        "billed": "annual",
        "seats": 3,
        "quote": "Standard ... $10 /seat/mo",
        "caveat": null,
        "source_url": "https://calendly.com/pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "Cal.com (self-hosted)",
        "repo": "calcom/cal.com",
        "project": {
          "full_name": "calcom/cal.diy",
          "url": "https://github.com/calcom/cal.diy",
          "homepage": "https://cal.diy",
          "description": "Scheduling infrastructure for absolutely everyone.",
          "stars": 49148,
          "forks": 15377,
          "open_issues": 1515,
          "license": "MIT",
          "archived": false,
          "pushed_at": "2026-10-18T10:27:02Z",
          "days_since_push": 1,
          "latest_release": {
            "tag": "v6.2.0",
            "published_at": "2026-03-01T23:49:01Z",
            "url": "https://github.com/calcom/cal.diy/releases/tag/v6.2.0"
          },
          "days_since_release": 231,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:47.895Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-2c-4gb",
          "id": "vultr:vc2-2c-4gb",
          "vcpu": 2,
          "ram_gb": 4,
          "disk_gb": 80,
          "bandwidth_tb": 3,
          "monthly_usd": 20,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 20,
          "monthly_usd": 0.14
        },
        "requirements": {
          "ram_gb": 4,
          "vcpu": 2,
          "disk_gb": 30
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-2c-4gb",
            "monthly_usd": 20,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 4GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "2 vCPU · 4 GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 8,
        "maintenance_hours_per_month": 0.75
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 3,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 30,
          "time_monthly": 0,
          "monthly": 30,
          "one_time": 0,
          "annual": 360
        },
        "alternative": {
          "cash_monthly": 20.14,
          "time_monthly": 37.5,
          "monthly": 57.64,
          "one_time": 400,
          "cash_one_time": 0,
          "time_one_time": 400,
          "annual": 691.67
        },
        "delta": {
          "monthly": -27.64,
          "upfront_to_switch": 400,
          "annual": -331.67
        },
        "break_even_month": null,
        "break_even_hourly_rate": 10.14,
        "totals": {
          "at_12_months": {
            "incumbent": 360,
            "alternative": 1091.67
          },
          "at_36_months": {
            "incumbent": 1080,
            "alternative": 2475
          },
          "at_horizon": {
            "incumbent": 1080,
            "alternative": 2475
          }
        },
        "savings": {
          "year_1": -731.67,
          "year_3": -1395,
          "at_horizon": -1395
        },
        "verdict": "stay"
      },
      "managed": null,
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 400
        },
        {
          "month": 1,
          "incumbent": 30,
          "alternative": 457.64
        },
        {
          "month": 2,
          "incumbent": 60,
          "alternative": 515.28
        },
        {
          "month": 3,
          "incumbent": 90,
          "alternative": 572.92
        },
        {
          "month": 4,
          "incumbent": 120,
          "alternative": 630.56
        },
        {
          "month": 5,
          "incumbent": 150,
          "alternative": 688.2
        },
        {
          "month": 6,
          "incumbent": 180,
          "alternative": 745.84
        },
        {
          "month": 7,
          "incumbent": 210,
          "alternative": 803.48
        },
        {
          "month": 8,
          "incumbent": 240,
          "alternative": 861.12
        },
        {
          "month": 9,
          "incumbent": 270,
          "alternative": 918.76
        },
        {
          "month": 10,
          "incumbent": 300,
          "alternative": 976.4
        },
        {
          "month": 11,
          "incumbent": 330,
          "alternative": 1034.04
        },
        {
          "month": 12,
          "incumbent": 360,
          "alternative": 1091.68
        },
        {
          "month": 13,
          "incumbent": 390,
          "alternative": 1149.32
        },
        {
          "month": 14,
          "incumbent": 420,
          "alternative": 1206.96
        },
        {
          "month": 15,
          "incumbent": 450,
          "alternative": 1264.6
        },
        {
          "month": 16,
          "incumbent": 480,
          "alternative": 1322.24
        },
        {
          "month": 17,
          "incumbent": 510,
          "alternative": 1379.88
        },
        {
          "month": 18,
          "incumbent": 540,
          "alternative": 1437.52
        },
        {
          "month": 19,
          "incumbent": 570,
          "alternative": 1495.16
        },
        {
          "month": 20,
          "incumbent": 600,
          "alternative": 1552.8
        },
        {
          "month": 21,
          "incumbent": 630,
          "alternative": 1610.44
        },
        {
          "month": 22,
          "incumbent": 660,
          "alternative": 1668.08
        },
        {
          "month": 23,
          "incumbent": 690,
          "alternative": 1725.72
        },
        {
          "month": 24,
          "incumbent": 720,
          "alternative": 1783.36
        },
        {
          "month": 25,
          "incumbent": 750,
          "alternative": 1841
        },
        {
          "month": 26,
          "incumbent": 780,
          "alternative": 1898.64
        },
        {
          "month": 27,
          "incumbent": 810,
          "alternative": 1956.28
        },
        {
          "month": 28,
          "incumbent": 840,
          "alternative": 2013.92
        },
        {
          "month": 29,
          "incumbent": 870,
          "alternative": 2071.56
        },
        {
          "month": 30,
          "incumbent": 900,
          "alternative": 2129.2
        },
        {
          "month": 31,
          "incumbent": 930,
          "alternative": 2186.84
        },
        {
          "month": 32,
          "incumbent": 960,
          "alternative": 2244.48
        },
        {
          "month": 33,
          "incumbent": 990,
          "alternative": 2302.12
        },
        {
          "month": 34,
          "incumbent": 1020,
          "alternative": 2359.76
        },
        {
          "month": 35,
          "incumbent": 1050,
          "alternative": 2417.4
        },
        {
          "month": 36,
          "incumbent": 1080,
          "alternative": 2475.04
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 355
        },
        {
          "hourly_rate": 25,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -520
        },
        {
          "hourly_rate": 50,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -1395
        },
        {
          "hourly_rate": 75,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -2270
        },
        {
          "hourly_rate": 100,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -3145
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -4895
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -6645
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Calendly's polish, particularly on mobile booking pages",
          "Managed calendar-sync reliability — OAuth tokens to Google and Microsoft are now yours to keep alive",
          "Some routing and workflow features gated behind Cal.com's own commercial licence"
        ],
        "you_gain": [
          "Free seats, which is the whole argument once you pass a handful of users",
          "Booking data in your own database",
          "AGPL-3.0 for the core product"
        ]
      },
      "caveats": [
        "Cal.com self-hosted is a Next.js monorepo and is heavier to run than its feature list suggests. The 4 GB requirement is not padding.",
        "Parts of Cal.com are under a commercial licence rather than the AGPL core. Check the /packages/features/ee directory against what you need before committing.",
        "Google Calendar OAuth setup is fiddly and is the most common place this migration stalls."
      ],
      "category": "scheduling",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "calendly-to-easyappointments",
      "title": "Calendly Standard to self-hosted Easy!Appointments",
      "summary": "The lightest scheduling swap here — a PHP app on a $6 box. The trade is that it looks and feels like one.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Calendly",
        "vendor_id": "calendly",
        "plan": "Standard",
        "plan_id": "standard",
        "amount": 10,
        "period": "month",
        "per_seat": true,
        "billed": "annual",
        "seats": 6,
        "quote": "Standard ... $10 /seat/mo",
        "caveat": null,
        "source_url": "https://calendly.com/pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "Easy!Appointments (self-hosted)",
        "repo": "alextselegidis/easyappointments",
        "project": {
          "full_name": "alextselegidis/easyappointments",
          "url": "https://github.com/alextselegidis/easyappointments",
          "homepage": "https://easyappointments.org",
          "description": ":date: Easy!Appointments - Self Hosted Appointment Scheduler",
          "stars": 4447,
          "forks": 1578,
          "open_issues": 176,
          "license": "GPL-3.0",
          "archived": false,
          "pushed_at": "2026-10-19T10:38:41Z",
          "days_since_push": 0,
          "latest_release": {
            "tag": "1.6.1",
            "published_at": "2026-10-19T08:45:26Z",
            "url": "https://github.com/alextselegidis/easyappointments/releases/tag/1.6.1"
          },
          "days_since_release": 0,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:48.845Z"
        },
        "box": {
          "provider": "Linode",
          "name": "Nanode 1GB",
          "id": "linode:g6-nanode-1",
          "vcpu": 1,
          "ram_gb": 1,
          "disk_gb": 25,
          "bandwidth_tb": 0.98,
          "monthly_usd": 5,
          "url": "https://www.linode.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 10,
          "monthly_usd": 0.07
        },
        "requirements": {
          "ram_gb": 1,
          "vcpu": 1,
          "disk_gb": 20
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-1c-1gb",
            "monthly_usd": 5,
            "vcpu": 1,
            "ram_gb": 1,
            "disk_gb": 25,
            "url": "https://www.vultr.com/pricing/",
            "chosen": false
          },
          {
            "provider": "Linode",
            "name": "Nanode 1GB",
            "monthly_usd": 5,
            "vcpu": 1,
            "ram_gb": 1,
            "disk_gb": 25,
            "url": "https://www.linode.com/pricing/",
            "chosen": true
          },
          {
            "provider": "DigitalOcean",
            "name": "1 vCPU · 1 GB",
            "monthly_usd": 6,
            "vcpu": 1,
            "ram_gb": 1,
            "disk_gb": 25,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 5,
        "maintenance_hours_per_month": 0.5
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 6,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 60,
          "time_monthly": 0,
          "monthly": 60,
          "one_time": 0,
          "annual": 720
        },
        "alternative": {
          "cash_monthly": 5.07,
          "time_monthly": 25,
          "monthly": 30.07,
          "one_time": 250,
          "cash_one_time": 0,
          "time_one_time": 250,
          "annual": 360.83
        },
        "delta": {
          "monthly": 29.93,
          "upfront_to_switch": 250,
          "annual": 359.17
        },
        "break_even_month": 9,
        "break_even_hourly_rate": 85.98,
        "totals": {
          "at_12_months": {
            "incumbent": 720,
            "alternative": 610.83
          },
          "at_36_months": {
            "incumbent": 2160,
            "alternative": 1332.5
          },
          "at_horizon": {
            "incumbent": 2160,
            "alternative": 1332.5
          }
        },
        "savings": {
          "year_1": 109.17,
          "year_3": 827.5,
          "at_horizon": 827.5
        },
        "verdict": "switch"
      },
      "managed": {
        "provider": "PikaPods",
        "app": "Easy!Appointments",
        "url": "https://www.pikapods.com/",
        "note": "Runs the same open-source software, applies updates, and takes daily encrypted backups to storage you own.",
        "source_url": "https://www.pikapods.com/apps",
        "quote": "Easy!Appointments Self-hosted appointment scheduler … Run Your Own From $1.8/month",
        "monthly_usd": 1.8,
        "verified_at": "2026-10-19T10:54:00.624Z",
        "migration_hours": 3,
        "result": {
          "computable": true,
          "inputs": {
            "seats": 6,
            "horizon_months": 36,
            "hourly_rate": 50
          },
          "incumbent": {
            "cash_monthly": 60,
            "time_monthly": 0,
            "monthly": 60,
            "one_time": 0,
            "annual": 720
          },
          "alternative": {
            "cash_monthly": 1.8,
            "time_monthly": 0,
            "monthly": 1.8,
            "one_time": 150,
            "cash_one_time": 0,
            "time_one_time": 150,
            "annual": 21.6
          },
          "delta": {
            "monthly": 58.2,
            "upfront_to_switch": 150,
            "annual": 698.4
          },
          "break_even_month": 3,
          "break_even_hourly_rate": 698.4,
          "totals": {
            "at_12_months": {
              "incumbent": 720,
              "alternative": 171.6
            },
            "at_36_months": {
              "incumbent": 2160,
              "alternative": 214.8
            },
            "at_horizon": {
              "incumbent": 2160,
              "alternative": 214.8
            }
          },
          "savings": {
            "year_1": 548.4,
            "year_3": 1945.2,
            "at_horizon": 1945.2
          },
          "verdict": "switch"
        },
        "crossover": 698.4
      },
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 250
        },
        {
          "month": 1,
          "incumbent": 60,
          "alternative": 280.07
        },
        {
          "month": 2,
          "incumbent": 120,
          "alternative": 310.14
        },
        {
          "month": 3,
          "incumbent": 180,
          "alternative": 340.21
        },
        {
          "month": 4,
          "incumbent": 240,
          "alternative": 370.28
        },
        {
          "month": 5,
          "incumbent": 300,
          "alternative": 400.35
        },
        {
          "month": 6,
          "incumbent": 360,
          "alternative": 430.42
        },
        {
          "month": 7,
          "incumbent": 420,
          "alternative": 460.49
        },
        {
          "month": 8,
          "incumbent": 480,
          "alternative": 490.56
        },
        {
          "month": 9,
          "incumbent": 540,
          "alternative": 520.63
        },
        {
          "month": 10,
          "incumbent": 600,
          "alternative": 550.7
        },
        {
          "month": 11,
          "incumbent": 660,
          "alternative": 580.77
        },
        {
          "month": 12,
          "incumbent": 720,
          "alternative": 610.84
        },
        {
          "month": 13,
          "incumbent": 780,
          "alternative": 640.91
        },
        {
          "month": 14,
          "incumbent": 840,
          "alternative": 670.98
        },
        {
          "month": 15,
          "incumbent": 900,
          "alternative": 701.05
        },
        {
          "month": 16,
          "incumbent": 960,
          "alternative": 731.12
        },
        {
          "month": 17,
          "incumbent": 1020,
          "alternative": 761.19
        },
        {
          "month": 18,
          "incumbent": 1080,
          "alternative": 791.26
        },
        {
          "month": 19,
          "incumbent": 1140,
          "alternative": 821.33
        },
        {
          "month": 20,
          "incumbent": 1200,
          "alternative": 851.4
        },
        {
          "month": 21,
          "incumbent": 1260,
          "alternative": 881.47
        },
        {
          "month": 22,
          "incumbent": 1320,
          "alternative": 911.54
        },
        {
          "month": 23,
          "incumbent": 1380,
          "alternative": 941.61
        },
        {
          "month": 24,
          "incumbent": 1440,
          "alternative": 971.68
        },
        {
          "month": 25,
          "incumbent": 1500,
          "alternative": 1001.75
        },
        {
          "month": 26,
          "incumbent": 1560,
          "alternative": 1031.82
        },
        {
          "month": 27,
          "incumbent": 1620,
          "alternative": 1061.89
        },
        {
          "month": 28,
          "incumbent": 1680,
          "alternative": 1091.96
        },
        {
          "month": 29,
          "incumbent": 1740,
          "alternative": 1122.03
        },
        {
          "month": 30,
          "incumbent": 1800,
          "alternative": 1152.1
        },
        {
          "month": 31,
          "incumbent": 1860,
          "alternative": 1182.17
        },
        {
          "month": 32,
          "incumbent": 1920,
          "alternative": 1212.24
        },
        {
          "month": 33,
          "incumbent": 1980,
          "alternative": 1242.31
        },
        {
          "month": 34,
          "incumbent": 2040,
          "alternative": 1272.38
        },
        {
          "month": 35,
          "incumbent": 2100,
          "alternative": 1302.45
        },
        {
          "month": 36,
          "incumbent": 2160,
          "alternative": 1332.52
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 1977.5
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 3,
          "savings_at_horizon": 1402.5
        },
        {
          "hourly_rate": 50,
          "verdict": "switch",
          "break_even_month": 9,
          "savings_at_horizon": 827.5
        },
        {
          "hourly_rate": 75,
          "verdict": "marginal",
          "break_even_month": 22,
          "savings_at_horizon": 252.5
        },
        {
          "hourly_rate": 100,
          "verdict": "stay",
          "break_even_month": 102,
          "savings_at_horizon": -322.5
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -1472.5
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -2622.5
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Calendly's polish, which matters because your customers see this page, not you",
          "Deep calendar sync; Google works, everything else is thinner",
          "Routing forms, workflows and reminders beyond the basics"
        ],
        "you_gain": [
          "A LAMP app that runs on the smallest box sold and asks almost nothing of you",
          "Free seats, which is the entire argument past a couple of users",
          "GPL-3.0 with no feature gating"
        ]
      },
      "caveats": [
        "This is the booking page your customers land on. If it looks dated, that cost does not appear anywhere in the arithmetic below and may still be the deciding factor.",
        "If you want a like-for-like Calendly replacement, read the Cal.com page instead — closer product, heavier server.",
        "Timezone handling has historically been the rough edge. Test it against a customer in another country before you switch."
      ],
      "category": "scheduling",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "chatwoot-cloud-to-self-hosted",
      "title": "Chatwoot Cloud to self-hosted Chatwoot",
      "summary": "Same software either way, so this is the cleanest comparison on the site: purely the price of someone else running it.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Chatwoot Cloud",
        "vendor_id": "chatwoot-cloud",
        "plan": "Startups",
        "plan_id": "startups",
        "amount": 19,
        "period": "month",
        "per_seat": true,
        "billed": "annual",
        "seats": 5,
        "quote": "Startups $19 /agent/month billed annually",
        "caveat": null,
        "source_url": "https://www.chatwoot.com/pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "Chatwoot (self-hosted)",
        "repo": "chatwoot/chatwoot",
        "project": {
          "full_name": "chatwoot/chatwoot",
          "url": "https://github.com/chatwoot/chatwoot",
          "homepage": "https://www.chatwoot.com/help-center",
          "description": "Open-source live-chat, email support, omni-channel desk. An alternative to Intercom, Zendesk, Salesforce Service Cloud etc. 🔥💬",
          "stars": 37947,
          "forks": 9254,
          "open_issues": 1604,
          "license": null,
          "archived": false,
          "pushed_at": "2026-10-19T10:48:10Z",
          "days_since_push": 0,
          "latest_release": {
            "tag": "v4.18.0",
            "published_at": "2026-09-18T00:02:33Z",
            "url": "https://github.com/chatwoot/chatwoot/releases/tag/v4.18.0"
          },
          "days_since_release": 31,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:49.256Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-2c-4gb",
          "id": "vultr:vc2-2c-4gb",
          "vcpu": 2,
          "ram_gb": 4,
          "disk_gb": 80,
          "bandwidth_tb": 3,
          "monthly_usd": 20,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 50,
          "monthly_usd": 0.35
        },
        "requirements": {
          "ram_gb": 4,
          "vcpu": 2,
          "disk_gb": 40
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-2c-4gb",
            "monthly_usd": 20,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 4GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "2 vCPU · 4 GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 8,
        "maintenance_hours_per_month": 1
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 5,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 95,
          "time_monthly": 0,
          "monthly": 95,
          "one_time": 0,
          "annual": 1140
        },
        "alternative": {
          "cash_monthly": 20.35,
          "time_monthly": 50,
          "monthly": 70.35,
          "one_time": 400,
          "cash_one_time": 0,
          "time_one_time": 400,
          "annual": 844.17
        },
        "delta": {
          "monthly": 24.65,
          "upfront_to_switch": 400,
          "annual": 295.83
        },
        "break_even_month": 17,
        "break_even_hourly_rate": 61.08,
        "totals": {
          "at_12_months": {
            "incumbent": 1140,
            "alternative": 1244.17
          },
          "at_36_months": {
            "incumbent": 3420,
            "alternative": 2932.51
          },
          "at_horizon": {
            "incumbent": 3420,
            "alternative": 2932.51
          }
        },
        "savings": {
          "year_1": -104.17,
          "year_3": 487.49,
          "at_horizon": 487.49
        },
        "verdict": "switch"
      },
      "managed": null,
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 400
        },
        {
          "month": 1,
          "incumbent": 95,
          "alternative": 470.35
        },
        {
          "month": 2,
          "incumbent": 190,
          "alternative": 540.7
        },
        {
          "month": 3,
          "incumbent": 285,
          "alternative": 611.05
        },
        {
          "month": 4,
          "incumbent": 380,
          "alternative": 681.4
        },
        {
          "month": 5,
          "incumbent": 475,
          "alternative": 751.75
        },
        {
          "month": 6,
          "incumbent": 570,
          "alternative": 822.1
        },
        {
          "month": 7,
          "incumbent": 665,
          "alternative": 892.45
        },
        {
          "month": 8,
          "incumbent": 760,
          "alternative": 962.8
        },
        {
          "month": 9,
          "incumbent": 855,
          "alternative": 1033.15
        },
        {
          "month": 10,
          "incumbent": 950,
          "alternative": 1103.5
        },
        {
          "month": 11,
          "incumbent": 1045,
          "alternative": 1173.85
        },
        {
          "month": 12,
          "incumbent": 1140,
          "alternative": 1244.2
        },
        {
          "month": 13,
          "incumbent": 1235,
          "alternative": 1314.55
        },
        {
          "month": 14,
          "incumbent": 1330,
          "alternative": 1384.9
        },
        {
          "month": 15,
          "incumbent": 1425,
          "alternative": 1455.25
        },
        {
          "month": 16,
          "incumbent": 1520,
          "alternative": 1525.6
        },
        {
          "month": 17,
          "incumbent": 1615,
          "alternative": 1595.95
        },
        {
          "month": 18,
          "incumbent": 1710,
          "alternative": 1666.3
        },
        {
          "month": 19,
          "incumbent": 1805,
          "alternative": 1736.65
        },
        {
          "month": 20,
          "incumbent": 1900,
          "alternative": 1807
        },
        {
          "month": 21,
          "incumbent": 1995,
          "alternative": 1877.35
        },
        {
          "month": 22,
          "incumbent": 2090,
          "alternative": 1947.7
        },
        {
          "month": 23,
          "incumbent": 2185,
          "alternative": 2018.05
        },
        {
          "month": 24,
          "incumbent": 2280,
          "alternative": 2088.4
        },
        {
          "month": 25,
          "incumbent": 2375,
          "alternative": 2158.75
        },
        {
          "month": 26,
          "incumbent": 2470,
          "alternative": 2229.1
        },
        {
          "month": 27,
          "incumbent": 2565,
          "alternative": 2299.45
        },
        {
          "month": 28,
          "incumbent": 2660,
          "alternative": 2369.8
        },
        {
          "month": 29,
          "incumbent": 2755,
          "alternative": 2440.15
        },
        {
          "month": 30,
          "incumbent": 2850,
          "alternative": 2510.5
        },
        {
          "month": 31,
          "incumbent": 2945,
          "alternative": 2580.85
        },
        {
          "month": 32,
          "incumbent": 3040,
          "alternative": 2651.2
        },
        {
          "month": 33,
          "incumbent": 3135,
          "alternative": 2721.55
        },
        {
          "month": 34,
          "incumbent": 3230,
          "alternative": 2791.9
        },
        {
          "month": 35,
          "incumbent": 3325,
          "alternative": 2862.25
        },
        {
          "month": 36,
          "incumbent": 3420,
          "alternative": 2932.6
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 2687.49
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 5,
          "savings_at_horizon": 1587.49
        },
        {
          "hourly_rate": 50,
          "verdict": "switch",
          "break_even_month": 17,
          "savings_at_horizon": 487.49
        },
        {
          "hourly_rate": 75,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -612.51
        },
        {
          "hourly_rate": 100,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -1712.51
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -3912.51
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -6112.51
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Managed upgrades on a Rails app with Postgres, Redis and Sidekiq behind it",
          "Deliverability handled for you — running your own inbound and outbound mail is its own project",
          "Support from the people who wrote it"
        ],
        "you_gain": [
          "Identical software with no per-agent charge",
          "Customer conversations on infrastructure you control, which is often the actual requirement",
          "No ceiling on agents, inboxes or conversation volume"
        ]
      },
      "caveats": [
        "Chatwoot self-hosted is the same product, so there is no feature trade-off to weigh — only operational cost. That makes the hourly rate below unusually decisive.",
        "Email deliverability is the hidden cost. If your support inbox runs on email, budget for a transactional mail provider on top of the figures here.",
        "The stack wants 4 GB. It will boot in 2 GB and then fall over during a busy hour."
      ],
      "category": "support-inbox",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "docusign-to-documenso",
      "title": "Docusign Standard to self-hosted Documenso",
      "summary": "Docusign is expensive per seat and Documenso is a direct answer, but the legal-evidence story is where the real comparison lives.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Docusign",
        "vendor_id": "docusign",
        "plan": "Standard",
        "plan_id": "standard",
        "amount": 30,
        "period": "month",
        "per_seat": true,
        "billed": "annual",
        "seats": 3,
        "quote": "Standard ... $ 30 /user/month Annual ... This is an annual commitment of $360.",
        "caveat": null,
        "source_url": "https://www.docusign.com/products-and-pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "Documenso (self-hosted)",
        "repo": "documenso/documenso",
        "project": {
          "full_name": "documenso/documenso",
          "url": "https://github.com/documenso/documenso",
          "homepage": "https://documenso.com",
          "description": "The Open Source DocuSign Alternative.",
          "stars": 15468,
          "forks": 3371,
          "open_issues": 211,
          "license": "AGPL-3.0",
          "archived": false,
          "pushed_at": "2026-10-19T10:08:13Z",
          "days_since_push": 0,
          "latest_release": {
            "tag": "v2.21.0",
            "published_at": "2026-10-19T01:25:42Z",
            "url": "https://github.com/documenso/documenso/releases/tag/v2.21.0"
          },
          "days_since_release": 0,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:49.788Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-2c-4gb",
          "id": "vultr:vc2-2c-4gb",
          "vcpu": 2,
          "ram_gb": 4,
          "disk_gb": 80,
          "bandwidth_tb": 3,
          "monthly_usd": 20,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 40,
          "monthly_usd": 0.28
        },
        "requirements": {
          "ram_gb": 4,
          "vcpu": 2,
          "disk_gb": 30
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-2c-4gb",
            "monthly_usd": 20,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 4GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "2 vCPU · 4 GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 8,
        "maintenance_hours_per_month": 0.75
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 3,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 90,
          "time_monthly": 0,
          "monthly": 90,
          "one_time": 0,
          "annual": 1080
        },
        "alternative": {
          "cash_monthly": 20.28,
          "time_monthly": 37.5,
          "monthly": 57.78,
          "one_time": 400,
          "cash_one_time": 0,
          "time_one_time": 400,
          "annual": 693.34
        },
        "delta": {
          "monthly": 32.22,
          "upfront_to_switch": 400,
          "annual": 386.66
        },
        "break_even_month": 13,
        "break_even_hourly_rate": 71.71,
        "totals": {
          "at_12_months": {
            "incumbent": 1080,
            "alternative": 1093.34
          },
          "at_36_months": {
            "incumbent": 3240,
            "alternative": 2480.01
          },
          "at_horizon": {
            "incumbent": 3240,
            "alternative": 2480.01
          }
        },
        "savings": {
          "year_1": -13.34,
          "year_3": 759.99,
          "at_horizon": 759.99
        },
        "verdict": "switch"
      },
      "managed": null,
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 400
        },
        {
          "month": 1,
          "incumbent": 90,
          "alternative": 457.78
        },
        {
          "month": 2,
          "incumbent": 180,
          "alternative": 515.56
        },
        {
          "month": 3,
          "incumbent": 270,
          "alternative": 573.34
        },
        {
          "month": 4,
          "incumbent": 360,
          "alternative": 631.12
        },
        {
          "month": 5,
          "incumbent": 450,
          "alternative": 688.9
        },
        {
          "month": 6,
          "incumbent": 540,
          "alternative": 746.68
        },
        {
          "month": 7,
          "incumbent": 630,
          "alternative": 804.46
        },
        {
          "month": 8,
          "incumbent": 720,
          "alternative": 862.24
        },
        {
          "month": 9,
          "incumbent": 810,
          "alternative": 920.02
        },
        {
          "month": 10,
          "incumbent": 900,
          "alternative": 977.8
        },
        {
          "month": 11,
          "incumbent": 990,
          "alternative": 1035.58
        },
        {
          "month": 12,
          "incumbent": 1080,
          "alternative": 1093.36
        },
        {
          "month": 13,
          "incumbent": 1170,
          "alternative": 1151.14
        },
        {
          "month": 14,
          "incumbent": 1260,
          "alternative": 1208.92
        },
        {
          "month": 15,
          "incumbent": 1350,
          "alternative": 1266.7
        },
        {
          "month": 16,
          "incumbent": 1440,
          "alternative": 1324.48
        },
        {
          "month": 17,
          "incumbent": 1530,
          "alternative": 1382.26
        },
        {
          "month": 18,
          "incumbent": 1620,
          "alternative": 1440.04
        },
        {
          "month": 19,
          "incumbent": 1710,
          "alternative": 1497.82
        },
        {
          "month": 20,
          "incumbent": 1800,
          "alternative": 1555.6
        },
        {
          "month": 21,
          "incumbent": 1890,
          "alternative": 1613.38
        },
        {
          "month": 22,
          "incumbent": 1980,
          "alternative": 1671.16
        },
        {
          "month": 23,
          "incumbent": 2070,
          "alternative": 1728.94
        },
        {
          "month": 24,
          "incumbent": 2160,
          "alternative": 1786.72
        },
        {
          "month": 25,
          "incumbent": 2250,
          "alternative": 1844.5
        },
        {
          "month": 26,
          "incumbent": 2340,
          "alternative": 1902.28
        },
        {
          "month": 27,
          "incumbent": 2430,
          "alternative": 1960.06
        },
        {
          "month": 28,
          "incumbent": 2520,
          "alternative": 2017.84
        },
        {
          "month": 29,
          "incumbent": 2610,
          "alternative": 2075.62
        },
        {
          "month": 30,
          "incumbent": 2700,
          "alternative": 2133.4
        },
        {
          "month": 31,
          "incumbent": 2790,
          "alternative": 2191.18
        },
        {
          "month": 32,
          "incumbent": 2880,
          "alternative": 2248.96
        },
        {
          "month": 33,
          "incumbent": 2970,
          "alternative": 2306.74
        },
        {
          "month": 34,
          "incumbent": 3060,
          "alternative": 2364.52
        },
        {
          "month": 35,
          "incumbent": 3150,
          "alternative": 2422.3
        },
        {
          "month": 36,
          "incumbent": 3240,
          "alternative": 2480.08
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 2509.99
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 4,
          "savings_at_horizon": 1634.99
        },
        {
          "hourly_rate": 50,
          "verdict": "switch",
          "break_even_month": 13,
          "savings_at_horizon": 759.99
        },
        {
          "hourly_rate": 75,
          "verdict": "stay",
          "break_even_month": 45,
          "savings_at_horizon": -115.01
        },
        {
          "hourly_rate": 100,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -990.01
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -2740.01
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -4490.01
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Docusign's name on the audit trail, which counts for something in a dispute",
          "Twenty years of case law and enterprise procurement acceptance",
          "Managed certificate handling and identity verification add-ons"
        ],
        "you_gain": [
          "Signed documents stored on infrastructure you control",
          "No envelope limits",
          "AGPL-3.0 with an open, inspectable signing implementation"
        ]
      },
      "caveats": [
        "Read this one carefully: e-signature validity depends on your jurisdiction and on the evidence you can produce. Documenso produces a cryptographically sound audit trail, but \"sound\" and \"accepted by the other side's lawyers\" are different questions.",
        "You must supply your own signing certificate. Getting a trusted one is a cost this page does not include, because it varies enormously.",
        "For high-value contracts, the cost difference here is small relative to the risk. We would stay on Docusign."
      ],
      "category": "e-signature",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "docusign-to-docuseal",
      "title": "Docusign Standard to self-hosted DocuSeal",
      "summary": "DocuSeal is lighter to run than Documenso and does the same job. The legal question is identical, though.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Docusign",
        "vendor_id": "docusign",
        "plan": "Standard",
        "plan_id": "standard",
        "amount": 30,
        "period": "month",
        "per_seat": true,
        "billed": "annual",
        "seats": 5,
        "quote": "Standard ... $ 30 /user/month Annual ... This is an annual commitment of $360.",
        "caveat": null,
        "source_url": "https://www.docusign.com/products-and-pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "DocuSeal (self-hosted)",
        "repo": "docusealco/docuseal",
        "project": {
          "full_name": "docusealco/docuseal",
          "url": "https://github.com/docusealco/docuseal",
          "homepage": "https://www.docuseal.com",
          "description": "Open source DocuSign alternative. Create, fill, and sign digital documents ✍️",
          "stars": 18752,
          "forks": 1896,
          "open_issues": 126,
          "license": "AGPL-3.0",
          "archived": false,
          "pushed_at": "2026-10-12T12:39:51Z",
          "days_since_push": 7,
          "latest_release": {
            "tag": "3.3.2",
            "published_at": "2026-10-12T12:39:51Z",
            "url": "https://github.com/docusealco/docuseal/releases/tag/3.3.2"
          },
          "days_since_release": 7,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:50.233Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-1c-2gb",
          "id": "vultr:vc2-1c-2gb",
          "vcpu": 1,
          "ram_gb": 2,
          "disk_gb": 55,
          "bandwidth_tb": 2,
          "monthly_usd": 10,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 50,
          "monthly_usd": 0.35
        },
        "requirements": {
          "ram_gb": 2,
          "vcpu": 1,
          "disk_gb": 30
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-1c-2gb",
            "monthly_usd": 10,
            "vcpu": 1,
            "ram_gb": 2,
            "disk_gb": 55,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 2GB",
            "monthly_usd": 12,
            "vcpu": 1,
            "ram_gb": 2,
            "disk_gb": 50,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "1 vCPU · 2 GB",
            "monthly_usd": 12,
            "vcpu": 1,
            "ram_gb": 2,
            "disk_gb": 50,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 6,
        "maintenance_hours_per_month": 0.6
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 5,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 150,
          "time_monthly": 0,
          "monthly": 150,
          "one_time": 0,
          "annual": 1800
        },
        "alternative": {
          "cash_monthly": 10.35,
          "time_monthly": 30,
          "monthly": 40.35,
          "one_time": 300,
          "cash_one_time": 0,
          "time_one_time": 300,
          "annual": 484.17
        },
        "delta": {
          "monthly": 109.65,
          "upfront_to_switch": 300,
          "annual": 1315.83
        },
        "break_even_month": 3,
        "break_even_hourly_rate": 182.16,
        "totals": {
          "at_12_months": {
            "incumbent": 1800,
            "alternative": 784.17
          },
          "at_36_months": {
            "incumbent": 5400,
            "alternative": 1752.51
          },
          "at_horizon": {
            "incumbent": 5400,
            "alternative": 1752.51
          }
        },
        "savings": {
          "year_1": 1015.83,
          "year_3": 3647.49,
          "at_horizon": 3647.49
        },
        "verdict": "switch"
      },
      "managed": null,
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 300
        },
        {
          "month": 1,
          "incumbent": 150,
          "alternative": 340.35
        },
        {
          "month": 2,
          "incumbent": 300,
          "alternative": 380.7
        },
        {
          "month": 3,
          "incumbent": 450,
          "alternative": 421.05
        },
        {
          "month": 4,
          "incumbent": 600,
          "alternative": 461.4
        },
        {
          "month": 5,
          "incumbent": 750,
          "alternative": 501.75
        },
        {
          "month": 6,
          "incumbent": 900,
          "alternative": 542.1
        },
        {
          "month": 7,
          "incumbent": 1050,
          "alternative": 582.45
        },
        {
          "month": 8,
          "incumbent": 1200,
          "alternative": 622.8
        },
        {
          "month": 9,
          "incumbent": 1350,
          "alternative": 663.15
        },
        {
          "month": 10,
          "incumbent": 1500,
          "alternative": 703.5
        },
        {
          "month": 11,
          "incumbent": 1650,
          "alternative": 743.85
        },
        {
          "month": 12,
          "incumbent": 1800,
          "alternative": 784.2
        },
        {
          "month": 13,
          "incumbent": 1950,
          "alternative": 824.55
        },
        {
          "month": 14,
          "incumbent": 2100,
          "alternative": 864.9
        },
        {
          "month": 15,
          "incumbent": 2250,
          "alternative": 905.25
        },
        {
          "month": 16,
          "incumbent": 2400,
          "alternative": 945.6
        },
        {
          "month": 17,
          "incumbent": 2550,
          "alternative": 985.95
        },
        {
          "month": 18,
          "incumbent": 2700,
          "alternative": 1026.3
        },
        {
          "month": 19,
          "incumbent": 2850,
          "alternative": 1066.65
        },
        {
          "month": 20,
          "incumbent": 3000,
          "alternative": 1107
        },
        {
          "month": 21,
          "incumbent": 3150,
          "alternative": 1147.35
        },
        {
          "month": 22,
          "incumbent": 3300,
          "alternative": 1187.7
        },
        {
          "month": 23,
          "incumbent": 3450,
          "alternative": 1228.05
        },
        {
          "month": 24,
          "incumbent": 3600,
          "alternative": 1268.4
        },
        {
          "month": 25,
          "incumbent": 3750,
          "alternative": 1308.75
        },
        {
          "month": 26,
          "incumbent": 3900,
          "alternative": 1349.1
        },
        {
          "month": 27,
          "incumbent": 4050,
          "alternative": 1389.45
        },
        {
          "month": 28,
          "incumbent": 4200,
          "alternative": 1429.8
        },
        {
          "month": 29,
          "incumbent": 4350,
          "alternative": 1470.15
        },
        {
          "month": 30,
          "incumbent": 4500,
          "alternative": 1510.5
        },
        {
          "month": 31,
          "incumbent": 4650,
          "alternative": 1550.85
        },
        {
          "month": 32,
          "incumbent": 4800,
          "alternative": 1591.2
        },
        {
          "month": 33,
          "incumbent": 4950,
          "alternative": 1631.55
        },
        {
          "month": 34,
          "incumbent": 5100,
          "alternative": 1671.9
        },
        {
          "month": 35,
          "incumbent": 5250,
          "alternative": 1712.25
        },
        {
          "month": 36,
          "incumbent": 5400,
          "alternative": 1752.6
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 5027.49
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 2,
          "savings_at_horizon": 4337.49
        },
        {
          "hourly_rate": 50,
          "verdict": "switch",
          "break_even_month": 3,
          "savings_at_horizon": 3647.49
        },
        {
          "hourly_rate": 75,
          "verdict": "switch",
          "break_even_month": 5,
          "savings_at_horizon": 2957.49
        },
        {
          "hourly_rate": 100,
          "verdict": "switch",
          "break_even_month": 8,
          "savings_at_horizon": 2267.49
        },
        {
          "hourly_rate": 150,
          "verdict": "marginal",
          "break_even_month": 19,
          "savings_at_horizon": 887.49
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": 62,
          "savings_at_horizon": -492.51
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Docusign on the audit trail, which is worth something in a dispute",
          "Enterprise procurement acceptance you do not have to argue for",
          "Managed identity verification"
        ],
        "you_gain": [
          "A single Rails app that runs happily on a small box",
          "No envelope limits at any team size",
          "AGPL-3.0, with the signing implementation open to inspection"
        ]
      },
      "caveats": [
        "Everything on the Documenso page applies here: validity depends on your jurisdiction and on the evidence you can produce, and \"cryptographically sound\" is not the same as \"accepted by the other side's lawyers\".",
        "DocuSeal needs materially less server than Documenso, which is most of why the arithmetic differs between the two pages.",
        "For contracts worth more than the annual saving, we would stay on Docusign and treat the difference as insurance."
      ],
      "category": "e-signature",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "docusign-to-opensign",
      "title": "Docusign Standard to self-hosted OpenSign",
      "summary": "Five seats of Docusign is $1,800 a year. The cost is not the hard part of this decision — the evidence trail is.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Docusign",
        "vendor_id": "docusign",
        "plan": "Standard",
        "plan_id": "standard",
        "amount": 30,
        "period": "month",
        "per_seat": true,
        "billed": "annual",
        "seats": 5,
        "quote": "Standard ... $ 30 /user/month Annual ... This is an annual commitment of $360.",
        "caveat": null,
        "source_url": "https://www.docusign.com/products-and-pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "OpenSign (self-hosted)",
        "repo": "OpenSignLabs/OpenSign",
        "project": {
          "full_name": "OpenSignLabs/OpenSign",
          "url": "https://github.com/OpenSignLabs/OpenSign",
          "homepage": "https://www.opensignlabs.com",
          "description": "🔥 The free & Open Source DocuSign alternative",
          "stars": 7115,
          "forks": 844,
          "open_issues": 157,
          "license": null,
          "archived": false,
          "pushed_at": "2026-10-16T14:10:18Z",
          "days_since_push": 3,
          "latest_release": {
            "tag": "v2.41.3",
            "published_at": "2026-08-21T12:29:09Z",
            "url": "https://github.com/OpenSignLabs/OpenSign/releases/tag/v2.41.3"
          },
          "days_since_release": 59,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:50.704Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-2c-4gb",
          "id": "vultr:vc2-2c-4gb",
          "vcpu": 2,
          "ram_gb": 4,
          "disk_gb": 80,
          "bandwidth_tb": 3,
          "monthly_usd": 20,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 60,
          "monthly_usd": 0.42
        },
        "requirements": {
          "ram_gb": 4,
          "vcpu": 2,
          "disk_gb": 40
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-2c-4gb",
            "monthly_usd": 20,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 4GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "2 vCPU · 4 GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 10,
        "maintenance_hours_per_month": 1
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 5,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 150,
          "time_monthly": 0,
          "monthly": 150,
          "one_time": 0,
          "annual": 1800
        },
        "alternative": {
          "cash_monthly": 20.42,
          "time_monthly": 50,
          "monthly": 70.42,
          "one_time": 500,
          "cash_one_time": 0,
          "time_one_time": 500,
          "annual": 845
        },
        "delta": {
          "monthly": 79.58,
          "upfront_to_switch": 500,
          "annual": 955
        },
        "break_even_month": 7,
        "break_even_hourly_rate": 101.41,
        "totals": {
          "at_12_months": {
            "incumbent": 1800,
            "alternative": 1345
          },
          "at_36_months": {
            "incumbent": 5400,
            "alternative": 3035.01
          },
          "at_horizon": {
            "incumbent": 5400,
            "alternative": 3035.01
          }
        },
        "savings": {
          "year_1": 455,
          "year_3": 2364.99,
          "at_horizon": 2364.99
        },
        "verdict": "switch"
      },
      "managed": null,
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 500
        },
        {
          "month": 1,
          "incumbent": 150,
          "alternative": 570.42
        },
        {
          "month": 2,
          "incumbent": 300,
          "alternative": 640.84
        },
        {
          "month": 3,
          "incumbent": 450,
          "alternative": 711.26
        },
        {
          "month": 4,
          "incumbent": 600,
          "alternative": 781.68
        },
        {
          "month": 5,
          "incumbent": 750,
          "alternative": 852.1
        },
        {
          "month": 6,
          "incumbent": 900,
          "alternative": 922.52
        },
        {
          "month": 7,
          "incumbent": 1050,
          "alternative": 992.94
        },
        {
          "month": 8,
          "incumbent": 1200,
          "alternative": 1063.36
        },
        {
          "month": 9,
          "incumbent": 1350,
          "alternative": 1133.78
        },
        {
          "month": 10,
          "incumbent": 1500,
          "alternative": 1204.2
        },
        {
          "month": 11,
          "incumbent": 1650,
          "alternative": 1274.62
        },
        {
          "month": 12,
          "incumbent": 1800,
          "alternative": 1345.04
        },
        {
          "month": 13,
          "incumbent": 1950,
          "alternative": 1415.46
        },
        {
          "month": 14,
          "incumbent": 2100,
          "alternative": 1485.88
        },
        {
          "month": 15,
          "incumbent": 2250,
          "alternative": 1556.3
        },
        {
          "month": 16,
          "incumbent": 2400,
          "alternative": 1626.72
        },
        {
          "month": 17,
          "incumbent": 2550,
          "alternative": 1697.14
        },
        {
          "month": 18,
          "incumbent": 2700,
          "alternative": 1767.56
        },
        {
          "month": 19,
          "incumbent": 2850,
          "alternative": 1837.98
        },
        {
          "month": 20,
          "incumbent": 3000,
          "alternative": 1908.4
        },
        {
          "month": 21,
          "incumbent": 3150,
          "alternative": 1978.82
        },
        {
          "month": 22,
          "incumbent": 3300,
          "alternative": 2049.24
        },
        {
          "month": 23,
          "incumbent": 3450,
          "alternative": 2119.66
        },
        {
          "month": 24,
          "incumbent": 3600,
          "alternative": 2190.08
        },
        {
          "month": 25,
          "incumbent": 3750,
          "alternative": 2260.5
        },
        {
          "month": 26,
          "incumbent": 3900,
          "alternative": 2330.92
        },
        {
          "month": 27,
          "incumbent": 4050,
          "alternative": 2401.34
        },
        {
          "month": 28,
          "incumbent": 4200,
          "alternative": 2471.76
        },
        {
          "month": 29,
          "incumbent": 4350,
          "alternative": 2542.18
        },
        {
          "month": 30,
          "incumbent": 4500,
          "alternative": 2612.6
        },
        {
          "month": 31,
          "incumbent": 4650,
          "alternative": 2683.02
        },
        {
          "month": 32,
          "incumbent": 4800,
          "alternative": 2753.44
        },
        {
          "month": 33,
          "incumbent": 4950,
          "alternative": 2823.86
        },
        {
          "month": 34,
          "incumbent": 5100,
          "alternative": 2894.28
        },
        {
          "month": 35,
          "incumbent": 5250,
          "alternative": 2964.7
        },
        {
          "month": 36,
          "incumbent": 5400,
          "alternative": 3035.12
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 4664.99
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 3,
          "savings_at_horizon": 3514.99
        },
        {
          "hourly_rate": 50,
          "verdict": "switch",
          "break_even_month": 7,
          "savings_at_horizon": 2364.99
        },
        {
          "hourly_rate": 75,
          "verdict": "switch",
          "break_even_month": 14,
          "savings_at_horizon": 1214.99
        },
        {
          "hourly_rate": 100,
          "verdict": "marginal",
          "break_even_month": 34,
          "savings_at_horizon": 64.99
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -2235.01
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -4535.01
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Docusign's name on the audit trail, which carries weight in a dispute",
          "Two decades of procurement acceptance and legal precedent",
          "Managed identity verification and certificate handling"
        ],
        "you_gain": [
          "Signed documents on infrastructure you control",
          "No envelope limits at any team size",
          "An open, inspectable signing implementation"
        ]
      },
      "caveats": [
        "Signature validity depends on your jurisdiction and on the evidence you can produce. A technically sound audit trail and one the other side's lawyers accept are different things.",
        "You supply your own signing certificate, and a trusted one is a cost this page does not include.",
        "For contracts where the amount at stake dwarfs $1,800 a year, we would stay on Docusign and consider the difference an insurance premium."
      ],
      "category": "e-signature",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "figma-to-penpot",
      "title": "Figma Professional to self-hosted Penpot",
      "summary": "Penpot is the only design tool where open file format and open source are the same decision, and the seat math is where Figma charges most.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Figma",
        "vendor_id": "figma",
        "plan": "Professional — Full seat",
        "plan_id": "professional-full",
        "amount": 16,
        "period": "month",
        "per_seat": true,
        "billed": "annual",
        "seats": 6,
        "quote": "Professional Monthly Annual Full seat $16 /mo + 3,000 AI credits/mo",
        "caveat": "Figma prices per seat with three seat types. Full seat is the editor; Dev and Collab seats are cheaper and read- or comment-mostly.",
        "source_url": "https://www.figma.com/pricing/",
        "verified_at": "2026-10-11",
        "needs_reverification": false
      },
      "alternative": {
        "name": "Penpot (self-hosted)",
        "repo": "penpot/penpot",
        "project": {
          "full_name": "penpot/penpot",
          "url": "https://github.com/penpot/penpot",
          "homepage": "https://penpot.app",
          "description": "Penpot: The open-source design platform for Product teams that need scalable collaboration.",
          "stars": 61356,
          "forks": 4253,
          "open_issues": 863,
          "license": "MPL-2.0",
          "archived": false,
          "pushed_at": "2026-10-19T10:51:28Z",
          "days_since_push": 0,
          "latest_release": {
            "tag": "2.18.3",
            "published_at": "2026-10-06T12:46:50Z",
            "url": "https://github.com/penpot/penpot/releases/tag/2.18.3"
          },
          "days_since_release": 13,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:51.172Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-2c-4gb",
          "id": "vultr:vc2-2c-4gb",
          "vcpu": 2,
          "ram_gb": 4,
          "disk_gb": 80,
          "bandwidth_tb": 3,
          "monthly_usd": 20,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 40,
          "monthly_usd": 0.28
        },
        "requirements": {
          "ram_gb": 4,
          "vcpu": 2,
          "disk_gb": 50
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-2c-4gb",
            "monthly_usd": 20,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 4GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "2 vCPU · 4 GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 12,
        "maintenance_hours_per_month": 1
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 6,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 96,
          "time_monthly": 0,
          "monthly": 96,
          "one_time": 0,
          "annual": 1152
        },
        "alternative": {
          "cash_monthly": 20.28,
          "time_monthly": 50,
          "monthly": 70.28,
          "one_time": 600,
          "cash_one_time": 0,
          "time_one_time": 600,
          "annual": 843.34
        },
        "delta": {
          "monthly": 25.72,
          "upfront_to_switch": 600,
          "annual": 308.66
        },
        "break_even_month": 24,
        "break_even_hourly_rate": 56.79,
        "totals": {
          "at_12_months": {
            "incumbent": 1152,
            "alternative": 1443.34
          },
          "at_36_months": {
            "incumbent": 3456,
            "alternative": 3130.01
          },
          "at_horizon": {
            "incumbent": 3456,
            "alternative": 3130.01
          }
        },
        "savings": {
          "year_1": -291.34,
          "year_3": 325.99,
          "at_horizon": 325.99
        },
        "verdict": "marginal"
      },
      "managed": null,
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 600
        },
        {
          "month": 1,
          "incumbent": 96,
          "alternative": 670.28
        },
        {
          "month": 2,
          "incumbent": 192,
          "alternative": 740.56
        },
        {
          "month": 3,
          "incumbent": 288,
          "alternative": 810.84
        },
        {
          "month": 4,
          "incumbent": 384,
          "alternative": 881.12
        },
        {
          "month": 5,
          "incumbent": 480,
          "alternative": 951.4
        },
        {
          "month": 6,
          "incumbent": 576,
          "alternative": 1021.68
        },
        {
          "month": 7,
          "incumbent": 672,
          "alternative": 1091.96
        },
        {
          "month": 8,
          "incumbent": 768,
          "alternative": 1162.24
        },
        {
          "month": 9,
          "incumbent": 864,
          "alternative": 1232.52
        },
        {
          "month": 10,
          "incumbent": 960,
          "alternative": 1302.8
        },
        {
          "month": 11,
          "incumbent": 1056,
          "alternative": 1373.08
        },
        {
          "month": 12,
          "incumbent": 1152,
          "alternative": 1443.36
        },
        {
          "month": 13,
          "incumbent": 1248,
          "alternative": 1513.64
        },
        {
          "month": 14,
          "incumbent": 1344,
          "alternative": 1583.92
        },
        {
          "month": 15,
          "incumbent": 1440,
          "alternative": 1654.2
        },
        {
          "month": 16,
          "incumbent": 1536,
          "alternative": 1724.48
        },
        {
          "month": 17,
          "incumbent": 1632,
          "alternative": 1794.76
        },
        {
          "month": 18,
          "incumbent": 1728,
          "alternative": 1865.04
        },
        {
          "month": 19,
          "incumbent": 1824,
          "alternative": 1935.32
        },
        {
          "month": 20,
          "incumbent": 1920,
          "alternative": 2005.6
        },
        {
          "month": 21,
          "incumbent": 2016,
          "alternative": 2075.88
        },
        {
          "month": 22,
          "incumbent": 2112,
          "alternative": 2146.16
        },
        {
          "month": 23,
          "incumbent": 2208,
          "alternative": 2216.44
        },
        {
          "month": 24,
          "incumbent": 2304,
          "alternative": 2286.72
        },
        {
          "month": 25,
          "incumbent": 2400,
          "alternative": 2357
        },
        {
          "month": 26,
          "incumbent": 2496,
          "alternative": 2427.28
        },
        {
          "month": 27,
          "incumbent": 2592,
          "alternative": 2497.56
        },
        {
          "month": 28,
          "incumbent": 2688,
          "alternative": 2567.84
        },
        {
          "month": 29,
          "incumbent": 2784,
          "alternative": 2638.12
        },
        {
          "month": 30,
          "incumbent": 2880,
          "alternative": 2708.4
        },
        {
          "month": 31,
          "incumbent": 2976,
          "alternative": 2778.68
        },
        {
          "month": 32,
          "incumbent": 3072,
          "alternative": 2848.96
        },
        {
          "month": 33,
          "incumbent": 3168,
          "alternative": 2919.24
        },
        {
          "month": 34,
          "incumbent": 3264,
          "alternative": 2989.52
        },
        {
          "month": 35,
          "incumbent": 3360,
          "alternative": 3059.8
        },
        {
          "month": 36,
          "incumbent": 3456,
          "alternative": 3130.08
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 2725.99
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 6,
          "savings_at_horizon": 1525.99
        },
        {
          "hourly_rate": 50,
          "verdict": "marginal",
          "break_even_month": 24,
          "savings_at_horizon": 325.99
        },
        {
          "hourly_rate": 75,
          "verdict": "stay",
          "break_even_month": 1247,
          "savings_at_horizon": -874.01
        },
        {
          "hourly_rate": 100,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -2074.01
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -4474.01
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -6874.01
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Figma's plugin ecosystem, which is years ahead of anyone's",
          "Auto-layout and some of the newer prototyping interactions behave differently",
          "Figma AI — Penpot has AI in cloud offerings, not in the self-hosted build"
        ],
        "you_gain": [
          "No seat taxonomy: no Full/Dev/Collab split to manage, everyone edits",
          "SVG-native — files are web standards, not a proprietary format",
          "MPL-2.0, and Penpot is the only design tool the EU has invested in as public infrastructure"
        ]
      },
      "caveats": [
        "Penpot is genuinely close on UI but not identical. Auto-layout, variant behaviour and some keyboard muscle memory differ; budget a re-learning week for a design-heavy team.",
        "Importing Figma files works file-by-file via SVG/PDF rather than a full-workspace importer. The 12-hour estimate assumes a 6-seat team's active projects, not every historical draft.",
        "Penpot self-hosted needs 4 GB RAM minimum and is heavier on disk than the design work itself suggests — the render pipeline and Postgres dominate."
      ],
      "category": "design",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "miro-to-drawio",
      "title": "Miro Starter to self-hosted draw.io",
      "summary": "draw.io costs almost nothing to run and does maybe a third of what Miro does. Which third decides this.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Miro",
        "vendor_id": "miro",
        "plan": "Starter",
        "plan_id": "starter",
        "amount": 8,
        "period": "month",
        "per_seat": true,
        "billed": "annual",
        "seats": 6,
        "quote": "Starter For small teams collaborating regularly with unlimited boards $ 8 /month per member, billed yearly",
        "caveat": null,
        "source_url": "https://miro.com/pricing/",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "draw.io (self-hosted)",
        "repo": "jgraph/drawio",
        "project": {
          "full_name": "jgraph/drawio",
          "url": "https://github.com/jgraph/drawio",
          "homepage": "https://www.drawio.com",
          "description": "draw.io is a JavaScript, client-side editor for general diagramming.",
          "stars": 8863,
          "forks": 1326,
          "open_issues": 31,
          "license": "Apache-2.0",
          "archived": false,
          "pushed_at": "2026-10-18T10:53:15Z",
          "days_since_push": 1,
          "latest_release": {
            "tag": "v32.5.5",
            "published_at": "2026-10-18T10:54:09Z",
            "url": "https://github.com/jgraph/drawio/releases/tag/v32.5.5"
          },
          "days_since_release": 1,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:51.639Z"
        },
        "box": {
          "provider": "Linode",
          "name": "Nanode 1GB",
          "id": "linode:g6-nanode-1",
          "vcpu": 1,
          "ram_gb": 1,
          "disk_gb": 25,
          "bandwidth_tb": 0.98,
          "monthly_usd": 5,
          "url": "https://www.linode.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 10,
          "monthly_usd": 0.07
        },
        "requirements": {
          "ram_gb": 1,
          "vcpu": 1,
          "disk_gb": 20
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-1c-1gb",
            "monthly_usd": 5,
            "vcpu": 1,
            "ram_gb": 1,
            "disk_gb": 25,
            "url": "https://www.vultr.com/pricing/",
            "chosen": false
          },
          {
            "provider": "Linode",
            "name": "Nanode 1GB",
            "monthly_usd": 5,
            "vcpu": 1,
            "ram_gb": 1,
            "disk_gb": 25,
            "url": "https://www.linode.com/pricing/",
            "chosen": true
          },
          {
            "provider": "DigitalOcean",
            "name": "1 vCPU · 1 GB",
            "monthly_usd": 6,
            "vcpu": 1,
            "ram_gb": 1,
            "disk_gb": 25,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 3,
        "maintenance_hours_per_month": 0.3
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 6,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 48,
          "time_monthly": 0,
          "monthly": 48,
          "one_time": 0,
          "annual": 576
        },
        "alternative": {
          "cash_monthly": 5.07,
          "time_monthly": 15,
          "monthly": 20.07,
          "one_time": 150,
          "cash_one_time": 0,
          "time_one_time": 150,
          "annual": 240.83
        },
        "delta": {
          "monthly": 27.93,
          "upfront_to_switch": 150,
          "annual": 335.17
        },
        "break_even_month": 6,
        "break_even_hourly_rate": 111.99,
        "totals": {
          "at_12_months": {
            "incumbent": 576,
            "alternative": 390.83
          },
          "at_36_months": {
            "incumbent": 1728,
            "alternative": 872.5
          },
          "at_horizon": {
            "incumbent": 1728,
            "alternative": 872.5
          }
        },
        "savings": {
          "year_1": 185.17,
          "year_3": 855.5,
          "at_horizon": 855.5
        },
        "verdict": "switch"
      },
      "managed": null,
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 150
        },
        {
          "month": 1,
          "incumbent": 48,
          "alternative": 170.07
        },
        {
          "month": 2,
          "incumbent": 96,
          "alternative": 190.14
        },
        {
          "month": 3,
          "incumbent": 144,
          "alternative": 210.21
        },
        {
          "month": 4,
          "incumbent": 192,
          "alternative": 230.28
        },
        {
          "month": 5,
          "incumbent": 240,
          "alternative": 250.35
        },
        {
          "month": 6,
          "incumbent": 288,
          "alternative": 270.42
        },
        {
          "month": 7,
          "incumbent": 336,
          "alternative": 290.49
        },
        {
          "month": 8,
          "incumbent": 384,
          "alternative": 310.56
        },
        {
          "month": 9,
          "incumbent": 432,
          "alternative": 330.63
        },
        {
          "month": 10,
          "incumbent": 480,
          "alternative": 350.7
        },
        {
          "month": 11,
          "incumbent": 528,
          "alternative": 370.77
        },
        {
          "month": 12,
          "incumbent": 576,
          "alternative": 390.84
        },
        {
          "month": 13,
          "incumbent": 624,
          "alternative": 410.91
        },
        {
          "month": 14,
          "incumbent": 672,
          "alternative": 430.98
        },
        {
          "month": 15,
          "incumbent": 720,
          "alternative": 451.05
        },
        {
          "month": 16,
          "incumbent": 768,
          "alternative": 471.12
        },
        {
          "month": 17,
          "incumbent": 816,
          "alternative": 491.19
        },
        {
          "month": 18,
          "incumbent": 864,
          "alternative": 511.26
        },
        {
          "month": 19,
          "incumbent": 912,
          "alternative": 531.33
        },
        {
          "month": 20,
          "incumbent": 960,
          "alternative": 551.4
        },
        {
          "month": 21,
          "incumbent": 1008,
          "alternative": 571.47
        },
        {
          "month": 22,
          "incumbent": 1056,
          "alternative": 591.54
        },
        {
          "month": 23,
          "incumbent": 1104,
          "alternative": 611.61
        },
        {
          "month": 24,
          "incumbent": 1152,
          "alternative": 631.68
        },
        {
          "month": 25,
          "incumbent": 1200,
          "alternative": 651.75
        },
        {
          "month": 26,
          "incumbent": 1248,
          "alternative": 671.82
        },
        {
          "month": 27,
          "incumbent": 1296,
          "alternative": 691.89
        },
        {
          "month": 28,
          "incumbent": 1344,
          "alternative": 711.96
        },
        {
          "month": 29,
          "incumbent": 1392,
          "alternative": 732.03
        },
        {
          "month": 30,
          "incumbent": 1440,
          "alternative": 752.1
        },
        {
          "month": 31,
          "incumbent": 1488,
          "alternative": 772.17
        },
        {
          "month": 32,
          "incumbent": 1536,
          "alternative": 792.24
        },
        {
          "month": 33,
          "incumbent": 1584,
          "alternative": 812.31
        },
        {
          "month": 34,
          "incumbent": 1632,
          "alternative": 832.38
        },
        {
          "month": 35,
          "incumbent": 1680,
          "alternative": 852.45
        },
        {
          "month": 36,
          "incumbent": 1728,
          "alternative": 872.52
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 1545.5
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 3,
          "savings_at_horizon": 1200.5
        },
        {
          "hourly_rate": 50,
          "verdict": "switch",
          "break_even_month": 6,
          "savings_at_horizon": 855.5
        },
        {
          "hourly_rate": 75,
          "verdict": "switch",
          "break_even_month": 12,
          "savings_at_horizon": 510.5
        },
        {
          "hourly_rate": 100,
          "verdict": "marginal",
          "break_even_month": 24,
          "savings_at_horizon": 165.5
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -524.5
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -1214.5
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Real-time multiplayer, which is most of what Miro sells",
          "Templates, voting, timers and everything built for running a workshop",
          "Comment threads and the review flow around them"
        ],
        "you_gain": [
          "The best diagramming tool of the lot, and it is not close for flowcharts and architecture",
          "Diagrams as XML files you can version and diff in git",
          "Apache-2.0, and a container that runs on the cheapest box sold"
        ]
      },
      "caveats": [
        "These are different products. draw.io is for diagrams; Miro is for meetings. If your team runs workshops on Miro, this is not a replacement.",
        "Self-hosted draw.io has no collaboration server. People edit files, not a shared board.",
        "If you want an infinite shared canvas, read the Excalidraw page instead."
      ],
      "category": "whiteboard",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "miro-to-excalidraw",
      "title": "Miro Business to self-hosted Excalidraw",
      "summary": "Excalidraw is a fraction of Miro and runs on almost nothing — but it is a whiteboard, not a workspace, and that distinction decides this one.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Miro",
        "vendor_id": "miro",
        "plan": "Business",
        "plan_id": "business",
        "amount": 20,
        "period": "month",
        "per_seat": true,
        "billed": "annual",
        "seats": 8,
        "quote": "Business For growing organizations and consultants to streamline workflows with AI $ 20 /month per member, billed yearly",
        "caveat": null,
        "source_url": "https://miro.com/pricing/",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "Excalidraw (self-hosted)",
        "repo": "excalidraw/excalidraw",
        "project": {
          "full_name": "excalidraw/excalidraw",
          "url": "https://github.com/excalidraw/excalidraw",
          "homepage": "https://excalidraw.com",
          "description": "Virtual whiteboard for sketching hand-drawn like diagrams",
          "stars": 134151,
          "forks": 15728,
          "open_issues": 3334,
          "license": "MIT",
          "archived": false,
          "pushed_at": "2026-10-19T09:56:20Z",
          "days_since_push": 0,
          "latest_release": {
            "tag": "v0.18.1",
            "published_at": "2026-04-21T08:43:20Z",
            "url": "https://github.com/excalidraw/excalidraw/releases/tag/v0.18.1"
          },
          "days_since_release": 181,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:52.080Z"
        },
        "box": {
          "provider": "Linode",
          "name": "Nanode 1GB",
          "id": "linode:g6-nanode-1",
          "vcpu": 1,
          "ram_gb": 1,
          "disk_gb": 25,
          "bandwidth_tb": 0.98,
          "monthly_usd": 5,
          "url": "https://www.linode.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 15,
          "monthly_usd": 0.1
        },
        "requirements": {
          "ram_gb": 1,
          "vcpu": 1,
          "disk_gb": 20
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-1c-1gb",
            "monthly_usd": 5,
            "vcpu": 1,
            "ram_gb": 1,
            "disk_gb": 25,
            "url": "https://www.vultr.com/pricing/",
            "chosen": false
          },
          {
            "provider": "Linode",
            "name": "Nanode 1GB",
            "monthly_usd": 5,
            "vcpu": 1,
            "ram_gb": 1,
            "disk_gb": 25,
            "url": "https://www.linode.com/pricing/",
            "chosen": true
          },
          {
            "provider": "DigitalOcean",
            "name": "1 vCPU · 1 GB",
            "monthly_usd": 6,
            "vcpu": 1,
            "ram_gb": 1,
            "disk_gb": 25,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 4,
        "maintenance_hours_per_month": 0.3
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 8,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 160,
          "time_monthly": 0,
          "monthly": 160,
          "one_time": 0,
          "annual": 1920
        },
        "alternative": {
          "cash_monthly": 5.1,
          "time_monthly": 15,
          "monthly": 20.1,
          "one_time": 200,
          "cash_one_time": 0,
          "time_one_time": 200,
          "annual": 241.25
        },
        "delta": {
          "monthly": 139.9,
          "upfront_to_switch": 200,
          "annual": 1678.75
        },
        "break_even_month": 2,
        "break_even_hourly_rate": 376.77,
        "totals": {
          "at_12_months": {
            "incumbent": 1920,
            "alternative": 441.25
          },
          "at_36_months": {
            "incumbent": 5760,
            "alternative": 923.75
          },
          "at_horizon": {
            "incumbent": 5760,
            "alternative": 923.75
          }
        },
        "savings": {
          "year_1": 1478.75,
          "year_3": 4836.25,
          "at_horizon": 4836.25
        },
        "verdict": "switch"
      },
      "managed": {
        "provider": "PikaPods",
        "app": "Excalidraw",
        "url": "https://www.pikapods.com/",
        "note": "Runs the same open-source software, applies updates, and takes daily encrypted backups to storage you own.",
        "source_url": "https://www.pikapods.com/apps",
        "quote": "Excalidraw Virtual collaborative whiteboard … Run Your Own From $1.8/month",
        "monthly_usd": 1.8,
        "verified_at": "2026-10-19T10:54:00.624Z",
        "migration_hours": 2,
        "result": {
          "computable": true,
          "inputs": {
            "seats": 8,
            "horizon_months": 36,
            "hourly_rate": 50
          },
          "incumbent": {
            "cash_monthly": 160,
            "time_monthly": 0,
            "monthly": 160,
            "one_time": 0,
            "annual": 1920
          },
          "alternative": {
            "cash_monthly": 1.8,
            "time_monthly": 0,
            "monthly": 1.8,
            "one_time": 100,
            "cash_one_time": 0,
            "time_one_time": 100,
            "annual": 21.6
          },
          "delta": {
            "monthly": 158.2,
            "upfront_to_switch": 100,
            "annual": 1898.4
          },
          "break_even_month": 1,
          "break_even_hourly_rate": 2847.6,
          "totals": {
            "at_12_months": {
              "incumbent": 1920,
              "alternative": 121.6
            },
            "at_36_months": {
              "incumbent": 5760,
              "alternative": 164.8
            },
            "at_horizon": {
              "incumbent": 5760,
              "alternative": 164.8
            }
          },
          "savings": {
            "year_1": 1798.4,
            "year_3": 5595.2,
            "at_horizon": 5595.2
          },
          "verdict": "switch"
        },
        "crossover": 2847.6
      },
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 200
        },
        {
          "month": 1,
          "incumbent": 160,
          "alternative": 220.1
        },
        {
          "month": 2,
          "incumbent": 320,
          "alternative": 240.2
        },
        {
          "month": 3,
          "incumbent": 480,
          "alternative": 260.3
        },
        {
          "month": 4,
          "incumbent": 640,
          "alternative": 280.4
        },
        {
          "month": 5,
          "incumbent": 800,
          "alternative": 300.5
        },
        {
          "month": 6,
          "incumbent": 960,
          "alternative": 320.6
        },
        {
          "month": 7,
          "incumbent": 1120,
          "alternative": 340.7
        },
        {
          "month": 8,
          "incumbent": 1280,
          "alternative": 360.8
        },
        {
          "month": 9,
          "incumbent": 1440,
          "alternative": 380.9
        },
        {
          "month": 10,
          "incumbent": 1600,
          "alternative": 401
        },
        {
          "month": 11,
          "incumbent": 1760,
          "alternative": 421.1
        },
        {
          "month": 12,
          "incumbent": 1920,
          "alternative": 441.2
        },
        {
          "month": 13,
          "incumbent": 2080,
          "alternative": 461.3
        },
        {
          "month": 14,
          "incumbent": 2240,
          "alternative": 481.4
        },
        {
          "month": 15,
          "incumbent": 2400,
          "alternative": 501.5
        },
        {
          "month": 16,
          "incumbent": 2560,
          "alternative": 521.6
        },
        {
          "month": 17,
          "incumbent": 2720,
          "alternative": 541.7
        },
        {
          "month": 18,
          "incumbent": 2880,
          "alternative": 561.8
        },
        {
          "month": 19,
          "incumbent": 3040,
          "alternative": 581.9
        },
        {
          "month": 20,
          "incumbent": 3200,
          "alternative": 602
        },
        {
          "month": 21,
          "incumbent": 3360,
          "alternative": 622.1
        },
        {
          "month": 22,
          "incumbent": 3520,
          "alternative": 642.2
        },
        {
          "month": 23,
          "incumbent": 3680,
          "alternative": 662.3
        },
        {
          "month": 24,
          "incumbent": 3840,
          "alternative": 682.4
        },
        {
          "month": 25,
          "incumbent": 4000,
          "alternative": 702.5
        },
        {
          "month": 26,
          "incumbent": 4160,
          "alternative": 722.6
        },
        {
          "month": 27,
          "incumbent": 4320,
          "alternative": 742.7
        },
        {
          "month": 28,
          "incumbent": 4480,
          "alternative": 762.8
        },
        {
          "month": 29,
          "incumbent": 4640,
          "alternative": 782.9
        },
        {
          "month": 30,
          "incumbent": 4800,
          "alternative": 803
        },
        {
          "month": 31,
          "incumbent": 4960,
          "alternative": 823.1
        },
        {
          "month": 32,
          "incumbent": 5120,
          "alternative": 843.2
        },
        {
          "month": 33,
          "incumbent": 5280,
          "alternative": 863.3
        },
        {
          "month": 34,
          "incumbent": 5440,
          "alternative": 883.4
        },
        {
          "month": 35,
          "incumbent": 5600,
          "alternative": 903.5
        },
        {
          "month": 36,
          "incumbent": 5760,
          "alternative": 923.6
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 5576.25
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 1,
          "savings_at_horizon": 5206.25
        },
        {
          "hourly_rate": 50,
          "verdict": "switch",
          "break_even_month": 2,
          "savings_at_horizon": 4836.25
        },
        {
          "hourly_rate": 75,
          "verdict": "switch",
          "break_even_month": 3,
          "savings_at_horizon": 4466.25
        },
        {
          "hourly_rate": 100,
          "verdict": "switch",
          "break_even_month": 4,
          "savings_at_horizon": 4096.25
        },
        {
          "hourly_rate": 150,
          "verdict": "switch",
          "break_even_month": 6,
          "savings_at_horizon": 3356.25
        },
        {
          "hourly_rate": 200,
          "verdict": "switch",
          "break_even_month": 9,
          "savings_at_horizon": 2616.25
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Miro's templates, frameworks and the meeting facilitation tooling built on top of them",
          "Infinite-canvas features like voting, timers and Jira integration",
          "Comment threads and the review workflow around them"
        ],
        "you_gain": [
          "A static front end that costs almost nothing to run and almost never breaks",
          "Drawings stored as plain files you can version and diff",
          "MIT licensing, the most permissive on this site"
        ]
      },
      "caveats": [
        "These are not the same product. Excalidraw is a sketching tool; Miro is a workspace people run meetings in. If your team lives in Miro, this comparison is not for you.",
        "Real-time collaboration needs the separate excalidraw-room server. The estimate assumes you deploy both.",
        "There is no Miro importer. Existing boards are recreated by hand or not at all."
      ],
      "category": "whiteboard",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "monday-to-openproject",
      "title": "monday.com Pro to self-hosted OpenProject",
      "summary": "monday charges per seat for boards; OpenProject gives you boards, Gantt, wikis and time tracking with no seat count anywhere in the bill.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "monday.com",
        "vendor_id": "monday",
        "plan": "Pro",
        "plan_id": "pro",
        "amount": 19,
        "period": "month",
        "per_seat": true,
        "billed": "annual",
        "seats": 15,
        "quote": "Pro $ 19 seat / month Total of $190 $220 $19 x 10 seats = $190 ... billed annually",
        "caveat": null,
        "source_url": "https://monday.com/pricing",
        "verified_at": "2026-10-11",
        "needs_reverification": false
      },
      "alternative": {
        "name": "OpenProject (self-hosted)",
        "repo": "opf/openproject",
        "project": {
          "full_name": "opf/openproject",
          "url": "https://github.com/opf/openproject",
          "homepage": "https://www.openproject.org",
          "description": "OpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub",
          "stars": 16464,
          "forks": 3570,
          "open_issues": 311,
          "license": "GPL-3.0",
          "archived": false,
          "pushed_at": "2026-10-19T10:53:38Z",
          "days_since_push": 0,
          "latest_release": {
            "tag": "v17.9.2",
            "published_at": "2026-10-15T11:56:10Z",
            "url": "https://github.com/opf/openproject/releases/tag/v17.9.2"
          },
          "days_since_release": 4,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:45.801Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-2c-4gb",
          "id": "vultr:vc2-2c-4gb",
          "vcpu": 2,
          "ram_gb": 4,
          "disk_gb": 80,
          "bandwidth_tb": 3,
          "monthly_usd": 20,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 30,
          "monthly_usd": 0.21
        },
        "requirements": {
          "ram_gb": 4,
          "vcpu": 2,
          "disk_gb": 50
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-2c-4gb",
            "monthly_usd": 20,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 4GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "2 vCPU · 4 GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 12,
        "maintenance_hours_per_month": 1
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 15,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 285,
          "time_monthly": 0,
          "monthly": 285,
          "one_time": 0,
          "annual": 3420
        },
        "alternative": {
          "cash_monthly": 20.21,
          "time_monthly": 50,
          "monthly": 70.21,
          "one_time": 600,
          "cash_one_time": 0,
          "time_one_time": 600,
          "annual": 842.5
        },
        "delta": {
          "monthly": 214.79,
          "upfront_to_switch": 600,
          "annual": 2577.5
        },
        "break_even_month": 3,
        "break_even_hourly_rate": 198.59,
        "totals": {
          "at_12_months": {
            "incumbent": 3420,
            "alternative": 1442.5
          },
          "at_36_months": {
            "incumbent": 10260,
            "alternative": 3127.51
          },
          "at_horizon": {
            "incumbent": 10260,
            "alternative": 3127.51
          }
        },
        "savings": {
          "year_1": 1977.5,
          "year_3": 7132.49,
          "at_horizon": 7132.49
        },
        "verdict": "switch"
      },
      "managed": null,
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 600
        },
        {
          "month": 1,
          "incumbent": 285,
          "alternative": 670.21
        },
        {
          "month": 2,
          "incumbent": 570,
          "alternative": 740.42
        },
        {
          "month": 3,
          "incumbent": 855,
          "alternative": 810.63
        },
        {
          "month": 4,
          "incumbent": 1140,
          "alternative": 880.84
        },
        {
          "month": 5,
          "incumbent": 1425,
          "alternative": 951.05
        },
        {
          "month": 6,
          "incumbent": 1710,
          "alternative": 1021.26
        },
        {
          "month": 7,
          "incumbent": 1995,
          "alternative": 1091.47
        },
        {
          "month": 8,
          "incumbent": 2280,
          "alternative": 1161.68
        },
        {
          "month": 9,
          "incumbent": 2565,
          "alternative": 1231.89
        },
        {
          "month": 10,
          "incumbent": 2850,
          "alternative": 1302.1
        },
        {
          "month": 11,
          "incumbent": 3135,
          "alternative": 1372.31
        },
        {
          "month": 12,
          "incumbent": 3420,
          "alternative": 1442.52
        },
        {
          "month": 13,
          "incumbent": 3705,
          "alternative": 1512.73
        },
        {
          "month": 14,
          "incumbent": 3990,
          "alternative": 1582.94
        },
        {
          "month": 15,
          "incumbent": 4275,
          "alternative": 1653.15
        },
        {
          "month": 16,
          "incumbent": 4560,
          "alternative": 1723.36
        },
        {
          "month": 17,
          "incumbent": 4845,
          "alternative": 1793.57
        },
        {
          "month": 18,
          "incumbent": 5130,
          "alternative": 1863.78
        },
        {
          "month": 19,
          "incumbent": 5415,
          "alternative": 1933.99
        },
        {
          "month": 20,
          "incumbent": 5700,
          "alternative": 2004.2
        },
        {
          "month": 21,
          "incumbent": 5985,
          "alternative": 2074.41
        },
        {
          "month": 22,
          "incumbent": 6270,
          "alternative": 2144.62
        },
        {
          "month": 23,
          "incumbent": 6555,
          "alternative": 2214.83
        },
        {
          "month": 24,
          "incumbent": 6840,
          "alternative": 2285.04
        },
        {
          "month": 25,
          "incumbent": 7125,
          "alternative": 2355.25
        },
        {
          "month": 26,
          "incumbent": 7410,
          "alternative": 2425.46
        },
        {
          "month": 27,
          "incumbent": 7695,
          "alternative": 2495.67
        },
        {
          "month": 28,
          "incumbent": 7980,
          "alternative": 2565.88
        },
        {
          "month": 29,
          "incumbent": 8265,
          "alternative": 2636.09
        },
        {
          "month": 30,
          "incumbent": 8550,
          "alternative": 2706.3
        },
        {
          "month": 31,
          "incumbent": 8835,
          "alternative": 2776.51
        },
        {
          "month": 32,
          "incumbent": 9120,
          "alternative": 2846.72
        },
        {
          "month": 33,
          "incumbent": 9405,
          "alternative": 2916.93
        },
        {
          "month": 34,
          "incumbent": 9690,
          "alternative": 2987.14
        },
        {
          "month": 35,
          "incumbent": 9975,
          "alternative": 3057.35
        },
        {
          "month": 36,
          "incumbent": 10260,
          "alternative": 3127.56
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 9532.49
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 2,
          "savings_at_horizon": 8332.49
        },
        {
          "hourly_rate": 50,
          "verdict": "switch",
          "break_even_month": 3,
          "savings_at_horizon": 7132.49
        },
        {
          "hourly_rate": 75,
          "verdict": "switch",
          "break_even_month": 5,
          "savings_at_horizon": 5932.49
        },
        {
          "hourly_rate": 100,
          "verdict": "switch",
          "break_even_month": 8,
          "savings_at_horizon": 4732.49
        },
        {
          "hourly_rate": 150,
          "verdict": "switch",
          "break_even_month": 16,
          "savings_at_horizon": 2332.49
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": 38,
          "savings_at_horizon": -67.51
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "monday's automations marketplace and its no-code automation builder",
          "The polish of monday's UI — OpenProject is utilitarian by comparison",
          "Native docs and whiteboard in the same workspace"
        ],
        "you_gain": [
          "Gantt charts with dependencies and baselines, which monday gates behind expensive tiers",
          "GPL-3.0 with unlimited users — no seat count in any direction of the arithmetic",
          "Time tracking and agile boards native, no add-on cost"
        ]
      },
      "caveats": [
        "monday's credit system (2,000-3,000 actions/month) makes its real bill move with usage; the $19 figure is the per-seat base, so if your endpoint automations burn credits the honest price is higher and OpenProject wins sooner.",
        "There is no monday importer. Export boards to CSV and rebuild the automations yourself or accept losing them — the 12-hour estimate covers the second choice.",
        "OpenProject needs 4 GB RAM and regular updates; more moving parts than the SaaS it replaces, which is exactly the trade the page prices."
      ],
      "category": "project-management",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "notion-to-affine",
      "title": "Notion Plus to self-hosted AFFiNE",
      "summary": "AFFiNE merges a document editor with an infinite canvas. At three seats, the question is whether that is worth becoming its operator.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Notion",
        "vendor_id": "notion",
        "plan": "Plus",
        "plan_id": "plus",
        "amount": 10,
        "period": "month",
        "per_seat": true,
        "billed": "annual",
        "seats": 3,
        "quote": "Plus $10 per member / month",
        "caveat": null,
        "source_url": "https://www.notion.com/pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "AFFiNE (self-hosted)",
        "repo": "toeverything/AFFiNE",
        "project": {
          "full_name": "toeverything/AFFiNE",
          "url": "https://github.com/toeverything/AFFiNE",
          "homepage": "https://affine.pro",
          "description": "There can be more than Notion and Miro. AFFiNE(pronounced [ə‘fain]) is a next-gen knowledge base that brings planning, sorting and creating all together. Privacy first, open-source, customizable and ready to use. ",
          "stars": 73651,
          "forks": 5371,
          "open_issues": 777,
          "license": null,
          "archived": false,
          "pushed_at": "2026-10-12T09:51:10Z",
          "days_since_push": 7,
          "latest_release": {
            "tag": "v0.27.4",
            "published_at": "2026-08-18T16:51:39Z",
            "url": "https://github.com/toeverything/AFFiNE/releases/tag/v0.27.4"
          },
          "days_since_release": 62,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:52.539Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-2c-4gb",
          "id": "vultr:vc2-2c-4gb",
          "vcpu": 2,
          "ram_gb": 4,
          "disk_gb": 80,
          "bandwidth_tb": 3,
          "monthly_usd": 20,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 40,
          "monthly_usd": 0.28
        },
        "requirements": {
          "ram_gb": 4,
          "vcpu": 2,
          "disk_gb": 40
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-2c-4gb",
            "monthly_usd": 20,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 4GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "2 vCPU · 4 GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 10,
        "maintenance_hours_per_month": 0.75
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 3,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 30,
          "time_monthly": 0,
          "monthly": 30,
          "one_time": 0,
          "annual": 360
        },
        "alternative": {
          "cash_monthly": 20.28,
          "time_monthly": 37.5,
          "monthly": 57.78,
          "one_time": 500,
          "cash_one_time": 0,
          "time_one_time": 500,
          "annual": 693.34
        },
        "delta": {
          "monthly": -27.78,
          "upfront_to_switch": 500,
          "annual": -333.34
        },
        "break_even_month": null,
        "break_even_hourly_rate": 9.46,
        "totals": {
          "at_12_months": {
            "incumbent": 360,
            "alternative": 1193.34
          },
          "at_36_months": {
            "incumbent": 1080,
            "alternative": 2580.01
          },
          "at_horizon": {
            "incumbent": 1080,
            "alternative": 2580.01
          }
        },
        "savings": {
          "year_1": -833.34,
          "year_3": -1500.01,
          "at_horizon": -1500.01
        },
        "verdict": "stay"
      },
      "managed": null,
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 500
        },
        {
          "month": 1,
          "incumbent": 30,
          "alternative": 557.78
        },
        {
          "month": 2,
          "incumbent": 60,
          "alternative": 615.56
        },
        {
          "month": 3,
          "incumbent": 90,
          "alternative": 673.34
        },
        {
          "month": 4,
          "incumbent": 120,
          "alternative": 731.12
        },
        {
          "month": 5,
          "incumbent": 150,
          "alternative": 788.9
        },
        {
          "month": 6,
          "incumbent": 180,
          "alternative": 846.68
        },
        {
          "month": 7,
          "incumbent": 210,
          "alternative": 904.46
        },
        {
          "month": 8,
          "incumbent": 240,
          "alternative": 962.24
        },
        {
          "month": 9,
          "incumbent": 270,
          "alternative": 1020.02
        },
        {
          "month": 10,
          "incumbent": 300,
          "alternative": 1077.8
        },
        {
          "month": 11,
          "incumbent": 330,
          "alternative": 1135.58
        },
        {
          "month": 12,
          "incumbent": 360,
          "alternative": 1193.36
        },
        {
          "month": 13,
          "incumbent": 390,
          "alternative": 1251.14
        },
        {
          "month": 14,
          "incumbent": 420,
          "alternative": 1308.92
        },
        {
          "month": 15,
          "incumbent": 450,
          "alternative": 1366.7
        },
        {
          "month": 16,
          "incumbent": 480,
          "alternative": 1424.48
        },
        {
          "month": 17,
          "incumbent": 510,
          "alternative": 1482.26
        },
        {
          "month": 18,
          "incumbent": 540,
          "alternative": 1540.04
        },
        {
          "month": 19,
          "incumbent": 570,
          "alternative": 1597.82
        },
        {
          "month": 20,
          "incumbent": 600,
          "alternative": 1655.6
        },
        {
          "month": 21,
          "incumbent": 630,
          "alternative": 1713.38
        },
        {
          "month": 22,
          "incumbent": 660,
          "alternative": 1771.16
        },
        {
          "month": 23,
          "incumbent": 690,
          "alternative": 1828.94
        },
        {
          "month": 24,
          "incumbent": 720,
          "alternative": 1886.72
        },
        {
          "month": 25,
          "incumbent": 750,
          "alternative": 1944.5
        },
        {
          "month": 26,
          "incumbent": 780,
          "alternative": 2002.28
        },
        {
          "month": 27,
          "incumbent": 810,
          "alternative": 2060.06
        },
        {
          "month": 28,
          "incumbent": 840,
          "alternative": 2117.84
        },
        {
          "month": 29,
          "incumbent": 870,
          "alternative": 2175.62
        },
        {
          "month": 30,
          "incumbent": 900,
          "alternative": 2233.4
        },
        {
          "month": 31,
          "incumbent": 930,
          "alternative": 2291.18
        },
        {
          "month": 32,
          "incumbent": 960,
          "alternative": 2348.96
        },
        {
          "month": 33,
          "incumbent": 990,
          "alternative": 2406.74
        },
        {
          "month": 34,
          "incumbent": 1020,
          "alternative": 2464.52
        },
        {
          "month": 35,
          "incumbent": 1050,
          "alternative": 2522.3
        },
        {
          "month": 36,
          "incumbent": 1080,
          "alternative": 2580.08
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 349.99
        },
        {
          "hourly_rate": 25,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -575.01
        },
        {
          "hourly_rate": 50,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -1500.01
        },
        {
          "hourly_rate": 75,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -2425.01
        },
        {
          "hourly_rate": 100,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -3350.01
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -5200.01
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -7050.01
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Notion databases, relations and rollups",
          "A decade of templates, integrations and institutional familiarity",
          "Notion AI"
        ],
        "you_gain": [
          "A whiteboard and a document editor in the same file, which Notion does not offer",
          "Local-first storage with real offline editing",
          "No per-seat cost"
        ]
      },
      "caveats": [
        "AFFiNE moves fast and its self-hosted releases have been less stable than the hosted product. Pin a version and read the upgrade notes before every bump.",
        "Three seats of Notion Plus is $360 a year. That is a low bar for a VPS plus your hours to clear, and this page will often say so."
      ],
      "category": "docs-wiki",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "notion-to-appflowy",
      "title": "Notion Business to self-hosted AppFlowy",
      "summary": "AppFlowy is the closest open-source shape to Notion. Whether it pays off depends almost entirely on your seat count.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Notion",
        "vendor_id": "notion",
        "plan": "Business",
        "plan_id": "business",
        "amount": 20,
        "period": "month",
        "per_seat": true,
        "billed": "annual",
        "seats": 5,
        "quote": "Business Recommended $20 per member / month",
        "caveat": null,
        "source_url": "https://www.notion.com/pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "AppFlowy (self-hosted)",
        "repo": "AppFlowy-IO/AppFlowy",
        "project": {
          "full_name": "AppFlowy-IO/AppFlowy",
          "url": "https://github.com/AppFlowy-IO/AppFlowy",
          "homepage": "https://appflowy.com",
          "description": "Bring projects, wikis, and teams together with AI. AppFlowy is the AI collaborative workspace where you achieve more without losing control of your data. The leading open source Notion alternative.",
          "stars": 77553,
          "forks": 6083,
          "open_issues": 1043,
          "license": "AGPL-3.0",
          "archived": false,
          "pushed_at": "2026-10-08T11:00:14Z",
          "days_since_push": 11,
          "latest_release": {
            "tag": "0.14.8",
            "published_at": "2026-10-08T11:00:14Z",
            "url": "https://github.com/AppFlowy-IO/AppFlowy/releases/tag/0.14.8"
          },
          "days_since_release": 11,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:53.058Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-2c-4gb",
          "id": "vultr:vc2-2c-4gb",
          "vcpu": 2,
          "ram_gb": 4,
          "disk_gb": 80,
          "bandwidth_tb": 3,
          "monthly_usd": 20,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 50,
          "monthly_usd": 0.35
        },
        "requirements": {
          "ram_gb": 4,
          "vcpu": 2,
          "disk_gb": 40
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-2c-4gb",
            "monthly_usd": 20,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 4GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "2 vCPU · 4 GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 10,
        "maintenance_hours_per_month": 0.75
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 5,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 100,
          "time_monthly": 0,
          "monthly": 100,
          "one_time": 0,
          "annual": 1200
        },
        "alternative": {
          "cash_monthly": 20.35,
          "time_monthly": 37.5,
          "monthly": 57.85,
          "one_time": 500,
          "cash_one_time": 0,
          "time_one_time": 500,
          "annual": 694.17
        },
        "delta": {
          "monthly": 42.15,
          "upfront_to_switch": 500,
          "annual": 505.83
        },
        "break_even_month": 12,
        "break_even_hourly_rate": 77.5,
        "totals": {
          "at_12_months": {
            "incumbent": 1200,
            "alternative": 1194.17
          },
          "at_36_months": {
            "incumbent": 3600,
            "alternative": 2582.51
          },
          "at_horizon": {
            "incumbent": 3600,
            "alternative": 2582.51
          }
        },
        "savings": {
          "year_1": 5.83,
          "year_3": 1017.49,
          "at_horizon": 1017.49
        },
        "verdict": "switch"
      },
      "managed": null,
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 500
        },
        {
          "month": 1,
          "incumbent": 100,
          "alternative": 557.85
        },
        {
          "month": 2,
          "incumbent": 200,
          "alternative": 615.7
        },
        {
          "month": 3,
          "incumbent": 300,
          "alternative": 673.55
        },
        {
          "month": 4,
          "incumbent": 400,
          "alternative": 731.4
        },
        {
          "month": 5,
          "incumbent": 500,
          "alternative": 789.25
        },
        {
          "month": 6,
          "incumbent": 600,
          "alternative": 847.1
        },
        {
          "month": 7,
          "incumbent": 700,
          "alternative": 904.95
        },
        {
          "month": 8,
          "incumbent": 800,
          "alternative": 962.8
        },
        {
          "month": 9,
          "incumbent": 900,
          "alternative": 1020.65
        },
        {
          "month": 10,
          "incumbent": 1000,
          "alternative": 1078.5
        },
        {
          "month": 11,
          "incumbent": 1100,
          "alternative": 1136.35
        },
        {
          "month": 12,
          "incumbent": 1200,
          "alternative": 1194.2
        },
        {
          "month": 13,
          "incumbent": 1300,
          "alternative": 1252.05
        },
        {
          "month": 14,
          "incumbent": 1400,
          "alternative": 1309.9
        },
        {
          "month": 15,
          "incumbent": 1500,
          "alternative": 1367.75
        },
        {
          "month": 16,
          "incumbent": 1600,
          "alternative": 1425.6
        },
        {
          "month": 17,
          "incumbent": 1700,
          "alternative": 1483.45
        },
        {
          "month": 18,
          "incumbent": 1800,
          "alternative": 1541.3
        },
        {
          "month": 19,
          "incumbent": 1900,
          "alternative": 1599.15
        },
        {
          "month": 20,
          "incumbent": 2000,
          "alternative": 1657
        },
        {
          "month": 21,
          "incumbent": 2100,
          "alternative": 1714.85
        },
        {
          "month": 22,
          "incumbent": 2200,
          "alternative": 1772.7
        },
        {
          "month": 23,
          "incumbent": 2300,
          "alternative": 1830.55
        },
        {
          "month": 24,
          "incumbent": 2400,
          "alternative": 1888.4
        },
        {
          "month": 25,
          "incumbent": 2500,
          "alternative": 1946.25
        },
        {
          "month": 26,
          "incumbent": 2600,
          "alternative": 2004.1
        },
        {
          "month": 27,
          "incumbent": 2700,
          "alternative": 2061.95
        },
        {
          "month": 28,
          "incumbent": 2800,
          "alternative": 2119.8
        },
        {
          "month": 29,
          "incumbent": 2900,
          "alternative": 2177.65
        },
        {
          "month": 30,
          "incumbent": 3000,
          "alternative": 2235.5
        },
        {
          "month": 31,
          "incumbent": 3100,
          "alternative": 2293.35
        },
        {
          "month": 32,
          "incumbent": 3200,
          "alternative": 2351.2
        },
        {
          "month": 33,
          "incumbent": 3300,
          "alternative": 2409.05
        },
        {
          "month": 34,
          "incumbent": 3400,
          "alternative": 2466.9
        },
        {
          "month": 35,
          "incumbent": 3500,
          "alternative": 2524.75
        },
        {
          "month": 36,
          "incumbent": 3600,
          "alternative": 2582.6
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 2867.49
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 5,
          "savings_at_horizon": 1942.49
        },
        {
          "hourly_rate": 50,
          "verdict": "switch",
          "break_even_month": 12,
          "savings_at_horizon": 1017.49
        },
        {
          "hourly_rate": 75,
          "verdict": "marginal",
          "break_even_month": 33,
          "savings_at_horizon": 92.49
        },
        {
          "hourly_rate": 100,
          "verdict": "stay",
          "break_even_month": 215,
          "savings_at_horizon": -832.51
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -2682.51
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -4532.51
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Notion's AI features, which are a large part of what the Business tier is sold on",
          "Public page publishing and the template gallery",
          "Mature mobile apps — AppFlowy's are usable but noticeably behind",
          "Someone else's uptime guarantee"
        ],
        "you_gain": [
          "Your documents in a Postgres database you can query and back up yourself",
          "No per-seat cost, so adding people is free",
          "Local-first editing that keeps working when the network does not",
          "AGPL-3.0 licensing with no vendor able to change the terms on you"
        ]
      },
      "caveats": [
        "AppFlowy Cloud self-hosting is a multi-container stack (Postgres, Redis, GoTrue, MinIO). It is a real deployment, not a single binary.",
        "Notion's import is one-way. Getting a large workspace out cleanly takes longer than the estimate if you have deeply nested databases.",
        "The 10-hour migration figure assumes a workspace of a few hundred pages. Multiply it for a large one."
      ],
      "category": "docs-wiki",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "notion-to-docmost",
      "title": "Notion Business to self-hosted Docmost",
      "summary": "Docmost is the closest open-source thing to a Notion team wiki with real-time editing. It is also newer than Outline.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Notion",
        "vendor_id": "notion",
        "plan": "Business",
        "plan_id": "business",
        "amount": 20,
        "period": "month",
        "per_seat": true,
        "billed": "annual",
        "seats": 8,
        "quote": "Business Recommended $20 per member / month",
        "caveat": null,
        "source_url": "https://www.notion.com/pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "Docmost (self-hosted)",
        "repo": "docmost/docmost",
        "project": {
          "full_name": "docmost/docmost",
          "url": "https://github.com/docmost/docmost",
          "homepage": "https://docmost.com",
          "description": "Docmost is an open-source collaborative wiki and documentation software. It is an open-source alternative to Confluence and Notion.",
          "stars": 22031,
          "forks": 1789,
          "open_issues": 357,
          "license": "AGPL-3.0",
          "archived": false,
          "pushed_at": "2026-10-18T20:23:51Z",
          "days_since_push": 1,
          "latest_release": {
            "tag": "v0.96.0",
            "published_at": "2026-09-08T14:18:03Z",
            "url": "https://github.com/docmost/docmost/releases/tag/v0.96.0"
          },
          "days_since_release": 41,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:53.537Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-1c-2gb",
          "id": "vultr:vc2-1c-2gb",
          "vcpu": 1,
          "ram_gb": 2,
          "disk_gb": 55,
          "bandwidth_tb": 2,
          "monthly_usd": 10,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 40,
          "monthly_usd": 0.28
        },
        "requirements": {
          "ram_gb": 2,
          "vcpu": 1,
          "disk_gb": 30
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-1c-2gb",
            "monthly_usd": 10,
            "vcpu": 1,
            "ram_gb": 2,
            "disk_gb": 55,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 2GB",
            "monthly_usd": 12,
            "vcpu": 1,
            "ram_gb": 2,
            "disk_gb": 50,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "1 vCPU · 2 GB",
            "monthly_usd": 12,
            "vcpu": 1,
            "ram_gb": 2,
            "disk_gb": 50,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 8,
        "maintenance_hours_per_month": 0.6
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 8,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 160,
          "time_monthly": 0,
          "monthly": 160,
          "one_time": 0,
          "annual": 1920
        },
        "alternative": {
          "cash_monthly": 10.28,
          "time_monthly": 30,
          "monthly": 40.28,
          "one_time": 400,
          "cash_one_time": 0,
          "time_one_time": 400,
          "annual": 483.34
        },
        "delta": {
          "monthly": 119.72,
          "upfront_to_switch": 400,
          "annual": 1436.66
        },
        "break_even_month": 4,
        "break_even_hourly_rate": 182.09,
        "totals": {
          "at_12_months": {
            "incumbent": 1920,
            "alternative": 883.34
          },
          "at_36_months": {
            "incumbent": 5760,
            "alternative": 1850.01
          },
          "at_horizon": {
            "incumbent": 5760,
            "alternative": 1850.01
          }
        },
        "savings": {
          "year_1": 1036.66,
          "year_3": 3909.99,
          "at_horizon": 3909.99
        },
        "verdict": "switch"
      },
      "managed": {
        "provider": "PikaPods",
        "app": "Docmost",
        "url": "https://www.pikapods.com/",
        "note": "Runs the same open-source software, applies updates, and takes daily encrypted backups to storage you own.",
        "source_url": "https://www.pikapods.com/apps",
        "quote": "Docmost A collaborative wiki … Run Your Own From $2.8/month",
        "monthly_usd": 2.8,
        "verified_at": "2026-10-19T10:54:00.624Z",
        "migration_hours": 4,
        "result": {
          "computable": true,
          "inputs": {
            "seats": 8,
            "horizon_months": 36,
            "hourly_rate": 50
          },
          "incumbent": {
            "cash_monthly": 160,
            "time_monthly": 0,
            "monthly": 160,
            "one_time": 0,
            "annual": 1920
          },
          "alternative": {
            "cash_monthly": 2.8,
            "time_monthly": 0,
            "monthly": 2.8,
            "one_time": 200,
            "cash_one_time": 0,
            "time_one_time": 200,
            "annual": 33.6
          },
          "delta": {
            "monthly": 157.2,
            "upfront_to_switch": 200,
            "annual": 1886.4
          },
          "break_even_month": 2,
          "break_even_hourly_rate": 1414.8,
          "totals": {
            "at_12_months": {
              "incumbent": 1920,
              "alternative": 233.6
            },
            "at_36_months": {
              "incumbent": 5760,
              "alternative": 300.8
            },
            "at_horizon": {
              "incumbent": 5760,
              "alternative": 300.8
            }
          },
          "savings": {
            "year_1": 1686.4,
            "year_3": 5459.2,
            "at_horizon": 5459.2
          },
          "verdict": "switch"
        },
        "crossover": 1414.8
      },
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 400
        },
        {
          "month": 1,
          "incumbent": 160,
          "alternative": 440.28
        },
        {
          "month": 2,
          "incumbent": 320,
          "alternative": 480.56
        },
        {
          "month": 3,
          "incumbent": 480,
          "alternative": 520.84
        },
        {
          "month": 4,
          "incumbent": 640,
          "alternative": 561.12
        },
        {
          "month": 5,
          "incumbent": 800,
          "alternative": 601.4
        },
        {
          "month": 6,
          "incumbent": 960,
          "alternative": 641.68
        },
        {
          "month": 7,
          "incumbent": 1120,
          "alternative": 681.96
        },
        {
          "month": 8,
          "incumbent": 1280,
          "alternative": 722.24
        },
        {
          "month": 9,
          "incumbent": 1440,
          "alternative": 762.52
        },
        {
          "month": 10,
          "incumbent": 1600,
          "alternative": 802.8
        },
        {
          "month": 11,
          "incumbent": 1760,
          "alternative": 843.08
        },
        {
          "month": 12,
          "incumbent": 1920,
          "alternative": 883.36
        },
        {
          "month": 13,
          "incumbent": 2080,
          "alternative": 923.64
        },
        {
          "month": 14,
          "incumbent": 2240,
          "alternative": 963.92
        },
        {
          "month": 15,
          "incumbent": 2400,
          "alternative": 1004.2
        },
        {
          "month": 16,
          "incumbent": 2560,
          "alternative": 1044.48
        },
        {
          "month": 17,
          "incumbent": 2720,
          "alternative": 1084.76
        },
        {
          "month": 18,
          "incumbent": 2880,
          "alternative": 1125.04
        },
        {
          "month": 19,
          "incumbent": 3040,
          "alternative": 1165.32
        },
        {
          "month": 20,
          "incumbent": 3200,
          "alternative": 1205.6
        },
        {
          "month": 21,
          "incumbent": 3360,
          "alternative": 1245.88
        },
        {
          "month": 22,
          "incumbent": 3520,
          "alternative": 1286.16
        },
        {
          "month": 23,
          "incumbent": 3680,
          "alternative": 1326.44
        },
        {
          "month": 24,
          "incumbent": 3840,
          "alternative": 1366.72
        },
        {
          "month": 25,
          "incumbent": 4000,
          "alternative": 1407
        },
        {
          "month": 26,
          "incumbent": 4160,
          "alternative": 1447.28
        },
        {
          "month": 27,
          "incumbent": 4320,
          "alternative": 1487.56
        },
        {
          "month": 28,
          "incumbent": 4480,
          "alternative": 1527.84
        },
        {
          "month": 29,
          "incumbent": 4640,
          "alternative": 1568.12
        },
        {
          "month": 30,
          "incumbent": 4800,
          "alternative": 1608.4
        },
        {
          "month": 31,
          "incumbent": 4960,
          "alternative": 1648.68
        },
        {
          "month": 32,
          "incumbent": 5120,
          "alternative": 1688.96
        },
        {
          "month": 33,
          "incumbent": 5280,
          "alternative": 1729.24
        },
        {
          "month": 34,
          "incumbent": 5440,
          "alternative": 1769.52
        },
        {
          "month": 35,
          "incumbent": 5600,
          "alternative": 1809.8
        },
        {
          "month": 36,
          "incumbent": 5760,
          "alternative": 1850.08
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 5389.99
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 2,
          "savings_at_horizon": 4649.99
        },
        {
          "hourly_rate": 50,
          "verdict": "switch",
          "break_even_month": 4,
          "savings_at_horizon": 3909.99
        },
        {
          "hourly_rate": 75,
          "verdict": "switch",
          "break_even_month": 6,
          "savings_at_horizon": 3169.99
        },
        {
          "hourly_rate": 100,
          "verdict": "switch",
          "break_even_month": 9,
          "savings_at_horizon": 2429.99
        },
        {
          "hourly_rate": 150,
          "verdict": "marginal",
          "break_even_month": 21,
          "savings_at_horizon": 949.99
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": 54,
          "savings_at_horizon": -530.01
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Notion databases, relations and rollups entirely",
          "Notion AI",
          "The maturity that comes from a decade of use"
        ],
        "you_gain": [
          "Real-time collaborative editing, which Outline does not have",
          "Spaces and permissions built for teams rather than bolted on",
          "AGPL-3.0 and free seats at a tier where Notion charges $20 each"
        ]
      },
      "caveats": [
        "Docmost is younger than Outline and moves faster. If you want the settled option in this category, read the Outline page.",
        "It has a Notion importer, which is why the estimate is 8 hours rather than more. Verify nested pages after import — that is where imports usually lose things.",
        "Some features are behind an enterprise edition. Check which side of that line you need before migrating."
      ],
      "category": "docs-wiki",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "notion-to-outline",
      "title": "Notion Business to self-hosted Outline",
      "summary": "Outline is a narrower product than Notion — a team wiki, not a database — which is exactly why the migration is cheaper.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Notion",
        "vendor_id": "notion",
        "plan": "Business",
        "plan_id": "business",
        "amount": 20,
        "period": "month",
        "per_seat": true,
        "billed": "annual",
        "seats": 10,
        "quote": "Business Recommended $20 per member / month",
        "caveat": null,
        "source_url": "https://www.notion.com/pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "Outline (self-hosted)",
        "repo": "outline/outline",
        "project": {
          "full_name": "outline/outline",
          "url": "https://github.com/outline/outline",
          "homepage": "https://www.getoutline.com",
          "description": "The fastest knowledge base for growing teams. Beautiful, realtime collaborative, feature packed, and markdown compatible.",
          "stars": 40969,
          "forks": 3620,
          "open_issues": 76,
          "license": null,
          "archived": false,
          "pushed_at": "2026-10-19T02:54:07Z",
          "days_since_push": 0,
          "latest_release": {
            "tag": "v1.11.0",
            "published_at": "2026-10-12T14:22:35Z",
            "url": "https://github.com/outline/outline/releases/tag/v1.11.0"
          },
          "days_since_release": 7,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:54.052Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-1c-2gb",
          "id": "vultr:vc2-1c-2gb",
          "vcpu": 1,
          "ram_gb": 2,
          "disk_gb": 55,
          "bandwidth_tb": 2,
          "monthly_usd": 10,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 30,
          "monthly_usd": 0.21
        },
        "requirements": {
          "ram_gb": 2,
          "vcpu": 1,
          "disk_gb": 25
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-1c-2gb",
            "monthly_usd": 10,
            "vcpu": 1,
            "ram_gb": 2,
            "disk_gb": 55,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 2GB",
            "monthly_usd": 12,
            "vcpu": 1,
            "ram_gb": 2,
            "disk_gb": 50,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "1 vCPU · 2 GB",
            "monthly_usd": 12,
            "vcpu": 1,
            "ram_gb": 2,
            "disk_gb": 50,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 8,
        "maintenance_hours_per_month": 0.5
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 10,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 200,
          "time_monthly": 0,
          "monthly": 200,
          "one_time": 0,
          "annual": 2400
        },
        "alternative": {
          "cash_monthly": 10.21,
          "time_monthly": 25,
          "monthly": 35.21,
          "one_time": 400,
          "cash_one_time": 0,
          "time_one_time": 400,
          "annual": 422.5
        },
        "delta": {
          "monthly": 164.79,
          "upfront_to_switch": 400,
          "annual": 1977.5
        },
        "break_even_month": 3,
        "break_even_hourly_rate": 262.79,
        "totals": {
          "at_12_months": {
            "incumbent": 2400,
            "alternative": 822.5
          },
          "at_36_months": {
            "incumbent": 7200,
            "alternative": 1667.51
          },
          "at_horizon": {
            "incumbent": 7200,
            "alternative": 1667.51
          }
        },
        "savings": {
          "year_1": 1577.5,
          "year_3": 5532.49,
          "at_horizon": 5532.49
        },
        "verdict": "switch"
      },
      "managed": null,
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 400
        },
        {
          "month": 1,
          "incumbent": 200,
          "alternative": 435.21
        },
        {
          "month": 2,
          "incumbent": 400,
          "alternative": 470.42
        },
        {
          "month": 3,
          "incumbent": 600,
          "alternative": 505.63
        },
        {
          "month": 4,
          "incumbent": 800,
          "alternative": 540.84
        },
        {
          "month": 5,
          "incumbent": 1000,
          "alternative": 576.05
        },
        {
          "month": 6,
          "incumbent": 1200,
          "alternative": 611.26
        },
        {
          "month": 7,
          "incumbent": 1400,
          "alternative": 646.47
        },
        {
          "month": 8,
          "incumbent": 1600,
          "alternative": 681.68
        },
        {
          "month": 9,
          "incumbent": 1800,
          "alternative": 716.89
        },
        {
          "month": 10,
          "incumbent": 2000,
          "alternative": 752.1
        },
        {
          "month": 11,
          "incumbent": 2200,
          "alternative": 787.31
        },
        {
          "month": 12,
          "incumbent": 2400,
          "alternative": 822.52
        },
        {
          "month": 13,
          "incumbent": 2600,
          "alternative": 857.73
        },
        {
          "month": 14,
          "incumbent": 2800,
          "alternative": 892.94
        },
        {
          "month": 15,
          "incumbent": 3000,
          "alternative": 928.15
        },
        {
          "month": 16,
          "incumbent": 3200,
          "alternative": 963.36
        },
        {
          "month": 17,
          "incumbent": 3400,
          "alternative": 998.57
        },
        {
          "month": 18,
          "incumbent": 3600,
          "alternative": 1033.78
        },
        {
          "month": 19,
          "incumbent": 3800,
          "alternative": 1068.99
        },
        {
          "month": 20,
          "incumbent": 4000,
          "alternative": 1104.2
        },
        {
          "month": 21,
          "incumbent": 4200,
          "alternative": 1139.41
        },
        {
          "month": 22,
          "incumbent": 4400,
          "alternative": 1174.62
        },
        {
          "month": 23,
          "incumbent": 4600,
          "alternative": 1209.83
        },
        {
          "month": 24,
          "incumbent": 4800,
          "alternative": 1245.04
        },
        {
          "month": 25,
          "incumbent": 5000,
          "alternative": 1280.25
        },
        {
          "month": 26,
          "incumbent": 5200,
          "alternative": 1315.46
        },
        {
          "month": 27,
          "incumbent": 5400,
          "alternative": 1350.67
        },
        {
          "month": 28,
          "incumbent": 5600,
          "alternative": 1385.88
        },
        {
          "month": 29,
          "incumbent": 5800,
          "alternative": 1421.09
        },
        {
          "month": 30,
          "incumbent": 6000,
          "alternative": 1456.3
        },
        {
          "month": 31,
          "incumbent": 6200,
          "alternative": 1491.51
        },
        {
          "month": 32,
          "incumbent": 6400,
          "alternative": 1526.72
        },
        {
          "month": 33,
          "incumbent": 6600,
          "alternative": 1561.93
        },
        {
          "month": 34,
          "incumbent": 6800,
          "alternative": 1597.14
        },
        {
          "month": 35,
          "incumbent": 7000,
          "alternative": 1632.35
        },
        {
          "month": 36,
          "incumbent": 7200,
          "alternative": 1667.56
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 6832.49
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 2,
          "savings_at_horizon": 6182.49
        },
        {
          "hourly_rate": 50,
          "verdict": "switch",
          "break_even_month": 3,
          "savings_at_horizon": 5532.49
        },
        {
          "hourly_rate": 75,
          "verdict": "switch",
          "break_even_month": 4,
          "savings_at_horizon": 4882.49
        },
        {
          "hourly_rate": 100,
          "verdict": "switch",
          "break_even_month": 6,
          "savings_at_horizon": 4232.49
        },
        {
          "hourly_rate": 150,
          "verdict": "switch",
          "break_even_month": 11,
          "savings_at_horizon": 2932.49
        },
        {
          "hourly_rate": 200,
          "verdict": "switch",
          "break_even_month": 18,
          "savings_at_horizon": 1632.49
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Notion databases entirely — Outline is documents and collections, with no relational views",
          "Kanban boards, calendars and rollups",
          "Notion AI"
        ],
        "you_gain": [
          "A genuinely fast wiki; Outline is the better product if documents are what you actually use Notion for",
          "Markdown in, Markdown out, so you are never locked in again",
          "Real full-text search that does not degrade as the workspace grows"
        ]
      },
      "caveats": [
        "If your team uses Notion databases as a lightweight app platform, Outline is not a replacement and this comparison does not apply to you.",
        "Outline needs an external auth provider (Google, Slack, OIDC). Budget an hour for that on top of the estimate."
      ],
      "category": "docs-wiki",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "notion-to-siyuan",
      "title": "Notion Plus to self-hosted SiYuan",
      "summary": "SiYuan runs on almost nothing. At one seat, that still may not be enough to beat paying Notion.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Notion",
        "vendor_id": "notion",
        "plan": "Plus",
        "plan_id": "plus",
        "amount": 10,
        "period": "month",
        "per_seat": true,
        "billed": "annual",
        "seats": 1,
        "quote": "Plus $10 per member / month",
        "caveat": null,
        "source_url": "https://www.notion.com/pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "SiYuan (self-hosted)",
        "repo": "siyuan-note/siyuan",
        "project": {
          "full_name": "siyuan-note/siyuan",
          "url": "https://github.com/siyuan-note/siyuan",
          "homepage": "https://b3log.org/siyuan",
          "description": "An open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间，让人与智能体在此协作",
          "stars": 46835,
          "forks": 3076,
          "open_issues": 12,
          "license": "AGPL-3.0",
          "archived": false,
          "pushed_at": "2026-10-19T10:13:22Z",
          "days_since_push": 0,
          "latest_release": {
            "tag": "v3.8.7",
            "published_at": "2026-10-14T03:24:20Z",
            "url": "https://github.com/siyuan-note/siyuan/releases/tag/v3.8.7"
          },
          "days_since_release": 5,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:54.530Z"
        },
        "box": {
          "provider": "Linode",
          "name": "Nanode 1GB",
          "id": "linode:g6-nanode-1",
          "vcpu": 1,
          "ram_gb": 1,
          "disk_gb": 25,
          "bandwidth_tb": 0.98,
          "monthly_usd": 5,
          "url": "https://www.linode.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 15,
          "monthly_usd": 0.1
        },
        "requirements": {
          "ram_gb": 1,
          "vcpu": 1,
          "disk_gb": 20
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-1c-1gb",
            "monthly_usd": 5,
            "vcpu": 1,
            "ram_gb": 1,
            "disk_gb": 25,
            "url": "https://www.vultr.com/pricing/",
            "chosen": false
          },
          {
            "provider": "Linode",
            "name": "Nanode 1GB",
            "monthly_usd": 5,
            "vcpu": 1,
            "ram_gb": 1,
            "disk_gb": 25,
            "url": "https://www.linode.com/pricing/",
            "chosen": true
          },
          {
            "provider": "DigitalOcean",
            "name": "1 vCPU · 1 GB",
            "monthly_usd": 6,
            "vcpu": 1,
            "ram_gb": 1,
            "disk_gb": 25,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 6,
        "maintenance_hours_per_month": 0.4
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 1,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 10,
          "time_monthly": 0,
          "monthly": 10,
          "one_time": 0,
          "annual": 120
        },
        "alternative": {
          "cash_monthly": 5.1,
          "time_monthly": 20,
          "monthly": 25.1,
          "one_time": 300,
          "cash_one_time": 0,
          "time_one_time": 300,
          "annual": 301.25
        },
        "delta": {
          "monthly": -15.1,
          "upfront_to_switch": 300,
          "annual": -181.25
        },
        "break_even_month": null,
        "break_even_hourly_rate": 8.64,
        "totals": {
          "at_12_months": {
            "incumbent": 120,
            "alternative": 601.25
          },
          "at_36_months": {
            "incumbent": 360,
            "alternative": 1203.75
          },
          "at_horizon": {
            "incumbent": 360,
            "alternative": 1203.75
          }
        },
        "savings": {
          "year_1": -481.25,
          "year_3": -843.75,
          "at_horizon": -843.75
        },
        "verdict": "stay"
      },
      "managed": null,
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 300
        },
        {
          "month": 1,
          "incumbent": 10,
          "alternative": 325.1
        },
        {
          "month": 2,
          "incumbent": 20,
          "alternative": 350.2
        },
        {
          "month": 3,
          "incumbent": 30,
          "alternative": 375.3
        },
        {
          "month": 4,
          "incumbent": 40,
          "alternative": 400.4
        },
        {
          "month": 5,
          "incumbent": 50,
          "alternative": 425.5
        },
        {
          "month": 6,
          "incumbent": 60,
          "alternative": 450.6
        },
        {
          "month": 7,
          "incumbent": 70,
          "alternative": 475.7
        },
        {
          "month": 8,
          "incumbent": 80,
          "alternative": 500.8
        },
        {
          "month": 9,
          "incumbent": 90,
          "alternative": 525.9
        },
        {
          "month": 10,
          "incumbent": 100,
          "alternative": 551
        },
        {
          "month": 11,
          "incumbent": 110,
          "alternative": 576.1
        },
        {
          "month": 12,
          "incumbent": 120,
          "alternative": 601.2
        },
        {
          "month": 13,
          "incumbent": 130,
          "alternative": 626.3
        },
        {
          "month": 14,
          "incumbent": 140,
          "alternative": 651.4
        },
        {
          "month": 15,
          "incumbent": 150,
          "alternative": 676.5
        },
        {
          "month": 16,
          "incumbent": 160,
          "alternative": 701.6
        },
        {
          "month": 17,
          "incumbent": 170,
          "alternative": 726.7
        },
        {
          "month": 18,
          "incumbent": 180,
          "alternative": 751.8
        },
        {
          "month": 19,
          "incumbent": 190,
          "alternative": 776.9
        },
        {
          "month": 20,
          "incumbent": 200,
          "alternative": 802
        },
        {
          "month": 21,
          "incumbent": 210,
          "alternative": 827.1
        },
        {
          "month": 22,
          "incumbent": 220,
          "alternative": 852.2
        },
        {
          "month": 23,
          "incumbent": 230,
          "alternative": 877.3
        },
        {
          "month": 24,
          "incumbent": 240,
          "alternative": 902.4
        },
        {
          "month": 25,
          "incumbent": 250,
          "alternative": 927.5
        },
        {
          "month": 26,
          "incumbent": 260,
          "alternative": 952.6
        },
        {
          "month": 27,
          "incumbent": 270,
          "alternative": 977.7
        },
        {
          "month": 28,
          "incumbent": 280,
          "alternative": 1002.8
        },
        {
          "month": 29,
          "incumbent": 290,
          "alternative": 1027.9
        },
        {
          "month": 30,
          "incumbent": 300,
          "alternative": 1053
        },
        {
          "month": 31,
          "incumbent": 310,
          "alternative": 1078.1
        },
        {
          "month": 32,
          "incumbent": 320,
          "alternative": 1103.2
        },
        {
          "month": 33,
          "incumbent": 330,
          "alternative": 1128.3
        },
        {
          "month": 34,
          "incumbent": 340,
          "alternative": 1153.4
        },
        {
          "month": 35,
          "incumbent": 350,
          "alternative": 1178.5
        },
        {
          "month": 36,
          "incumbent": 360,
          "alternative": 1203.6
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 176.25
        },
        {
          "hourly_rate": 25,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -333.75
        },
        {
          "hourly_rate": 50,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -843.75
        },
        {
          "hourly_rate": 75,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -1353.75
        },
        {
          "hourly_rate": 100,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -1863.75
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -2883.75
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -3903.75
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Notion databases, relations and rollups",
          "Real-time collaboration — SiYuan is built for one person",
          "A polished web app; SiYuan is a desktop-first tool with a server mode"
        ],
        "you_gain": [
          "Block-level linking and backlinks that Notion does not do as well",
          "Local Markdown files you own outright",
          "A binary small enough to run on the cheapest box any provider sells"
        ]
      },
      "caveats": [
        "We expect this page to say stay, and it is here for that reason. One seat of Notion Plus is $120 a year, which is very hard to beat once your own hours are counted.",
        "SiYuan is single-user by design. If anyone else needs access, this comparison does not apply to you.",
        "Some SiYuan features are behind a paid cloud subscription of its own. The self-hosted core does not include them."
      ],
      "category": "docs-wiki",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "plausible-cloud-to-self-hosted",
      "title": "Plausible Cloud to self-hosted Plausible CE",
      "summary": "The rare case where the vendor publishes the self-hosting instructions themselves — and the rarer case where the numbers usually say do not bother.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Plausible Analytics (Cloud)",
        "vendor_id": "plausible",
        "plan": "Business",
        "plan_id": "business",
        "amount": 19,
        "period": "month",
        "per_seat": false,
        "billed": "annual",
        "seats": 1,
        "quote": "Business /year /month $19 /month ... Up to 10 sites",
        "caveat": null,
        "source_url": "https://plausible.io/#pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "Plausible Community Edition (self-hosted)",
        "repo": "plausible/analytics",
        "project": {
          "full_name": "plausible/analytics",
          "url": "https://github.com/plausible/analytics",
          "homepage": "https://plausible.io",
          "description": "Open source, privacy-first web analytics. Lightweight, cookie-free Google Analytics alternative. Self-hosted or cloud.",
          "stars": 29547,
          "forks": 1913,
          "open_issues": 58,
          "license": "AGPL-3.0",
          "archived": false,
          "pushed_at": "2026-10-19T10:46:51Z",
          "days_since_push": 0,
          "latest_release": {
            "tag": "v3.2.1",
            "published_at": "2026-05-15T09:15:56Z",
            "url": "https://github.com/plausible/analytics/releases/tag/v3.2.1"
          },
          "days_since_release": 157,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:55.169Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-2c-4gb",
          "id": "vultr:vc2-2c-4gb",
          "vcpu": 2,
          "ram_gb": 4,
          "disk_gb": 80,
          "bandwidth_tb": 3,
          "monthly_usd": 20,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 30,
          "monthly_usd": 0.21
        },
        "requirements": {
          "ram_gb": 4,
          "vcpu": 2,
          "disk_gb": 40
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-2c-4gb",
            "monthly_usd": 20,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 4GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "2 vCPU · 4 GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 4,
        "maintenance_hours_per_month": 0.75
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 1,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 19,
          "time_monthly": 0,
          "monthly": 19,
          "one_time": 0,
          "annual": 228
        },
        "alternative": {
          "cash_monthly": 20.21,
          "time_monthly": 37.5,
          "monthly": 57.71,
          "one_time": 200,
          "cash_one_time": 0,
          "time_one_time": 200,
          "annual": 692.5
        },
        "delta": {
          "monthly": -38.71,
          "upfront_to_switch": 200,
          "annual": -464.5
        },
        "break_even_month": null,
        "break_even_hourly_rate": -1.4,
        "totals": {
          "at_12_months": {
            "incumbent": 228,
            "alternative": 892.5
          },
          "at_36_months": {
            "incumbent": 684,
            "alternative": 2277.51
          },
          "at_horizon": {
            "incumbent": 684,
            "alternative": 2277.51
          }
        },
        "savings": {
          "year_1": -664.5,
          "year_3": -1593.51,
          "at_horizon": -1593.51
        },
        "verdict": "stay"
      },
      "managed": null,
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 200
        },
        {
          "month": 1,
          "incumbent": 19,
          "alternative": 257.71
        },
        {
          "month": 2,
          "incumbent": 38,
          "alternative": 315.42
        },
        {
          "month": 3,
          "incumbent": 57,
          "alternative": 373.13
        },
        {
          "month": 4,
          "incumbent": 76,
          "alternative": 430.84
        },
        {
          "month": 5,
          "incumbent": 95,
          "alternative": 488.55
        },
        {
          "month": 6,
          "incumbent": 114,
          "alternative": 546.26
        },
        {
          "month": 7,
          "incumbent": 133,
          "alternative": 603.97
        },
        {
          "month": 8,
          "incumbent": 152,
          "alternative": 661.68
        },
        {
          "month": 9,
          "incumbent": 171,
          "alternative": 719.39
        },
        {
          "month": 10,
          "incumbent": 190,
          "alternative": 777.1
        },
        {
          "month": 11,
          "incumbent": 209,
          "alternative": 834.81
        },
        {
          "month": 12,
          "incumbent": 228,
          "alternative": 892.52
        },
        {
          "month": 13,
          "incumbent": 247,
          "alternative": 950.23
        },
        {
          "month": 14,
          "incumbent": 266,
          "alternative": 1007.94
        },
        {
          "month": 15,
          "incumbent": 285,
          "alternative": 1065.65
        },
        {
          "month": 16,
          "incumbent": 304,
          "alternative": 1123.36
        },
        {
          "month": 17,
          "incumbent": 323,
          "alternative": 1181.07
        },
        {
          "month": 18,
          "incumbent": 342,
          "alternative": 1238.78
        },
        {
          "month": 19,
          "incumbent": 361,
          "alternative": 1296.49
        },
        {
          "month": 20,
          "incumbent": 380,
          "alternative": 1354.2
        },
        {
          "month": 21,
          "incumbent": 399,
          "alternative": 1411.91
        },
        {
          "month": 22,
          "incumbent": 418,
          "alternative": 1469.62
        },
        {
          "month": 23,
          "incumbent": 437,
          "alternative": 1527.33
        },
        {
          "month": 24,
          "incumbent": 456,
          "alternative": 1585.04
        },
        {
          "month": 25,
          "incumbent": 475,
          "alternative": 1642.75
        },
        {
          "month": 26,
          "incumbent": 494,
          "alternative": 1700.46
        },
        {
          "month": 27,
          "incumbent": 513,
          "alternative": 1758.17
        },
        {
          "month": 28,
          "incumbent": 532,
          "alternative": 1815.88
        },
        {
          "month": 29,
          "incumbent": 551,
          "alternative": 1873.59
        },
        {
          "month": 30,
          "incumbent": 570,
          "alternative": 1931.3
        },
        {
          "month": 31,
          "incumbent": 589,
          "alternative": 1989.01
        },
        {
          "month": 32,
          "incumbent": 608,
          "alternative": 2046.72
        },
        {
          "month": 33,
          "incumbent": 627,
          "alternative": 2104.43
        },
        {
          "month": 34,
          "incumbent": 646,
          "alternative": 2162.14
        },
        {
          "month": 35,
          "incumbent": 665,
          "alternative": 2219.85
        },
        {
          "month": 36,
          "incumbent": 684,
          "alternative": 2277.56
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "stay",
          "break_even_month": 0,
          "savings_at_horizon": -43.51
        },
        {
          "hourly_rate": 25,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -818.51
        },
        {
          "hourly_rate": 50,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -1593.51
        },
        {
          "hourly_rate": 75,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -2368.51
        },
        {
          "hourly_rate": 100,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -3143.51
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -4693.51
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -6243.51
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Funnels, ecommerce revenue tracking and several other features that are cloud-only",
          "Managed ClickHouse, which is the part of this stack most likely to bite you",
          "Supporting a small independent company that publishes its own self-hosting guide"
        ],
        "you_gain": [
          "Analytics data on your own infrastructure, which is the actual point for most people who ask",
          "No pageview ceiling",
          "AGPL-3.0"
        ]
      },
      "caveats": [
        "We expect this page to tell most readers to stay. Plausible Cloud is cheap, the CE build drops features, and ClickHouse is not a database you want to learn during an outage.",
        "Plausible CE is deliberately a subset of the cloud product. Check the feature matrix before you migrate, not after.",
        "This escape is here precisely because it usually loses. A site that only publishes wins is a marketing site."
      ],
      "category": "analytics",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "plausible-to-matomo",
      "title": "Plausible Business to self-hosted Matomo",
      "summary": "Matomo does far more than Plausible and costs far more to run. Whether that is a trade or a downgrade depends entirely on what you actually look at.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Plausible Analytics (Cloud)",
        "vendor_id": "plausible",
        "plan": "Business",
        "plan_id": "business",
        "amount": 19,
        "period": "month",
        "per_seat": false,
        "billed": "annual",
        "seats": 1,
        "quote": "Business /year /month $19 /month ... Up to 10 sites",
        "caveat": null,
        "source_url": "https://plausible.io/#pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "Matomo (self-hosted)",
        "repo": "matomo-org/matomo",
        "project": {
          "full_name": "matomo-org/matomo",
          "url": "https://github.com/matomo-org/matomo",
          "homepage": "https://matomo.org/",
          "description": "Empowering People Ethically 🚀 — Matomo is hiring! Join us → https://matomo.org/jobs Matomo is the leading open-source alternative to Google Analytics, giving you complete control and built-in privacy. Easily collect, visualise, and analyse data from websites & apps. Star us on GitHub ⭐️  – Pull Requests welcome! ",
          "stars": 21960,
          "forks": 2918,
          "open_issues": 2562,
          "license": "GPL-3.0",
          "archived": false,
          "pushed_at": "2026-10-19T09:14:03Z",
          "days_since_push": 0,
          "latest_release": {
            "tag": "5.14.1",
            "published_at": "2026-10-04T19:50:07Z",
            "url": "https://github.com/matomo-org/matomo/releases/tag/5.14.1"
          },
          "days_since_release": 15,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:55.582Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-1c-2gb",
          "id": "vultr:vc2-1c-2gb",
          "vcpu": 1,
          "ram_gb": 2,
          "disk_gb": 55,
          "bandwidth_tb": 2,
          "monthly_usd": 10,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 60,
          "monthly_usd": 0.42
        },
        "requirements": {
          "ram_gb": 2,
          "vcpu": 1,
          "disk_gb": 40
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-1c-2gb",
            "monthly_usd": 10,
            "vcpu": 1,
            "ram_gb": 2,
            "disk_gb": 55,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 2GB",
            "monthly_usd": 12,
            "vcpu": 1,
            "ram_gb": 2,
            "disk_gb": 50,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "1 vCPU · 2 GB",
            "monthly_usd": 12,
            "vcpu": 1,
            "ram_gb": 2,
            "disk_gb": 50,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 6,
        "maintenance_hours_per_month": 1
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 1,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 19,
          "time_monthly": 0,
          "monthly": 19,
          "one_time": 0,
          "annual": 228
        },
        "alternative": {
          "cash_monthly": 10.42,
          "time_monthly": 50,
          "monthly": 60.42,
          "one_time": 300,
          "cash_one_time": 0,
          "time_one_time": 300,
          "annual": 725
        },
        "delta": {
          "monthly": -41.42,
          "upfront_to_switch": 300,
          "annual": -497
        },
        "break_even_month": null,
        "break_even_hourly_rate": 7.36,
        "totals": {
          "at_12_months": {
            "incumbent": 228,
            "alternative": 1025
          },
          "at_36_months": {
            "incumbent": 684,
            "alternative": 2475.01
          },
          "at_horizon": {
            "incumbent": 684,
            "alternative": 2475.01
          }
        },
        "savings": {
          "year_1": -797,
          "year_3": -1791.01,
          "at_horizon": -1791.01
        },
        "verdict": "stay"
      },
      "managed": {
        "provider": "PikaPods",
        "app": "Matomo",
        "url": "https://www.pikapods.com/",
        "note": "Runs the same open-source software, applies updates, and takes daily encrypted backups to storage you own.",
        "source_url": "https://www.pikapods.com/apps",
        "quote": "Matomo Matomo is the … Run Your Own From $2.7/month",
        "monthly_usd": 2.7,
        "verified_at": "2026-10-19T10:54:00.624Z",
        "migration_hours": 3,
        "result": {
          "computable": true,
          "inputs": {
            "seats": 1,
            "horizon_months": 36,
            "hourly_rate": 50
          },
          "incumbent": {
            "cash_monthly": 19,
            "time_monthly": 0,
            "monthly": 19,
            "one_time": 0,
            "annual": 228
          },
          "alternative": {
            "cash_monthly": 2.7,
            "time_monthly": 0,
            "monthly": 2.7,
            "one_time": 150,
            "cash_one_time": 0,
            "time_one_time": 150,
            "annual": 32.4
          },
          "delta": {
            "monthly": 16.3,
            "upfront_to_switch": 150,
            "annual": 195.6
          },
          "break_even_month": 10,
          "break_even_hourly_rate": 195.6,
          "totals": {
            "at_12_months": {
              "incumbent": 228,
              "alternative": 182.4
            },
            "at_36_months": {
              "incumbent": 684,
              "alternative": 247.2
            },
            "at_horizon": {
              "incumbent": 684,
              "alternative": 247.2
            }
          },
          "savings": {
            "year_1": 45.6,
            "year_3": 436.8,
            "at_horizon": 436.8
          },
          "verdict": "switch"
        },
        "crossover": 195.6
      },
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 300
        },
        {
          "month": 1,
          "incumbent": 19,
          "alternative": 360.42
        },
        {
          "month": 2,
          "incumbent": 38,
          "alternative": 420.84
        },
        {
          "month": 3,
          "incumbent": 57,
          "alternative": 481.26
        },
        {
          "month": 4,
          "incumbent": 76,
          "alternative": 541.68
        },
        {
          "month": 5,
          "incumbent": 95,
          "alternative": 602.1
        },
        {
          "month": 6,
          "incumbent": 114,
          "alternative": 662.52
        },
        {
          "month": 7,
          "incumbent": 133,
          "alternative": 722.94
        },
        {
          "month": 8,
          "incumbent": 152,
          "alternative": 783.36
        },
        {
          "month": 9,
          "incumbent": 171,
          "alternative": 843.78
        },
        {
          "month": 10,
          "incumbent": 190,
          "alternative": 904.2
        },
        {
          "month": 11,
          "incumbent": 209,
          "alternative": 964.62
        },
        {
          "month": 12,
          "incumbent": 228,
          "alternative": 1025.04
        },
        {
          "month": 13,
          "incumbent": 247,
          "alternative": 1085.46
        },
        {
          "month": 14,
          "incumbent": 266,
          "alternative": 1145.88
        },
        {
          "month": 15,
          "incumbent": 285,
          "alternative": 1206.3
        },
        {
          "month": 16,
          "incumbent": 304,
          "alternative": 1266.72
        },
        {
          "month": 17,
          "incumbent": 323,
          "alternative": 1327.14
        },
        {
          "month": 18,
          "incumbent": 342,
          "alternative": 1387.56
        },
        {
          "month": 19,
          "incumbent": 361,
          "alternative": 1447.98
        },
        {
          "month": 20,
          "incumbent": 380,
          "alternative": 1508.4
        },
        {
          "month": 21,
          "incumbent": 399,
          "alternative": 1568.82
        },
        {
          "month": 22,
          "incumbent": 418,
          "alternative": 1629.24
        },
        {
          "month": 23,
          "incumbent": 437,
          "alternative": 1689.66
        },
        {
          "month": 24,
          "incumbent": 456,
          "alternative": 1750.08
        },
        {
          "month": 25,
          "incumbent": 475,
          "alternative": 1810.5
        },
        {
          "month": 26,
          "incumbent": 494,
          "alternative": 1870.92
        },
        {
          "month": 27,
          "incumbent": 513,
          "alternative": 1931.34
        },
        {
          "month": 28,
          "incumbent": 532,
          "alternative": 1991.76
        },
        {
          "month": 29,
          "incumbent": 551,
          "alternative": 2052.18
        },
        {
          "month": 30,
          "incumbent": 570,
          "alternative": 2112.6
        },
        {
          "month": 31,
          "incumbent": 589,
          "alternative": 2173.02
        },
        {
          "month": 32,
          "incumbent": 608,
          "alternative": 2233.44
        },
        {
          "month": 33,
          "incumbent": 627,
          "alternative": 2293.86
        },
        {
          "month": 34,
          "incumbent": 646,
          "alternative": 2354.28
        },
        {
          "month": 35,
          "incumbent": 665,
          "alternative": 2414.7
        },
        {
          "month": 36,
          "incumbent": 684,
          "alternative": 2475.12
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 308.99
        },
        {
          "hourly_rate": 25,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -741.01
        },
        {
          "hourly_rate": 50,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -1791.01
        },
        {
          "hourly_rate": 75,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -2841.01
        },
        {
          "hourly_rate": 100,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -3891.01
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -5991.01
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -8091.01
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Plausible's speed and its one-screen simplicity, which is why people choose it",
          "A managed service that never needs a cron job debugged",
          "Funnels and revenue tracking on the cloud plan"
        ],
        "you_gain": [
          "Fifteen years of features: heatmaps, session recording, goals, e-commerce, A/B tests",
          "GDPR tooling that a European auditor already recognises",
          "GPL-3.0, and an importer that can pull your history out of Google Analytics"
        ]
      },
      "caveats": [
        "Matomo's archiving cron is the piece that bites people. If it is not running, your reports quietly stop updating and nothing tells you.",
        "Disk grows fast on a busy site. The 40 GB here suits modest traffic; budget more if you have real volume.",
        "If you picked Plausible because it is simple, Matomo is not an upgrade. Read the Umami page instead — it is the closer swap."
      ],
      "category": "analytics",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "plausible-to-umami",
      "title": "Plausible Business to self-hosted Umami",
      "summary": "Umami is much lighter to run than Plausible Community Edition, which is the only reason this comparison reads differently from the other one.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Plausible Analytics (Cloud)",
        "vendor_id": "plausible",
        "plan": "Business",
        "plan_id": "business",
        "amount": 19,
        "period": "month",
        "per_seat": false,
        "billed": "annual",
        "seats": 1,
        "quote": "Business /year /month $19 /month ... Up to 10 sites",
        "caveat": null,
        "source_url": "https://plausible.io/#pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "Umami (self-hosted)",
        "repo": "umami-software/umami",
        "project": {
          "full_name": "umami-software/umami",
          "url": "https://github.com/umami-software/umami",
          "homepage": "https://umami.is",
          "description": "Umami is a privacy-first analytics platform. Traffic, campaigns, behavior, conversions, and revenue in one place — no cookies, no surveillance, self-hosted or in the cloud.",
          "stars": 39459,
          "forks": 8343,
          "open_issues": 113,
          "license": "MIT",
          "archived": false,
          "pushed_at": "2026-10-17T08:54:13Z",
          "days_since_push": 2,
          "latest_release": {
            "tag": "v3.4.0",
            "published_at": "2026-09-17T04:21:49Z",
            "url": "https://github.com/umami-software/umami/releases/tag/v3.4.0"
          },
          "days_since_release": 32,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:56.148Z"
        },
        "box": {
          "provider": "Linode",
          "name": "Nanode 1GB",
          "id": "linode:g6-nanode-1",
          "vcpu": 1,
          "ram_gb": 1,
          "disk_gb": 25,
          "bandwidth_tb": 0.98,
          "monthly_usd": 5,
          "url": "https://www.linode.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 20,
          "monthly_usd": 0.14
        },
        "requirements": {
          "ram_gb": 1,
          "vcpu": 1,
          "disk_gb": 20
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-1c-1gb",
            "monthly_usd": 5,
            "vcpu": 1,
            "ram_gb": 1,
            "disk_gb": 25,
            "url": "https://www.vultr.com/pricing/",
            "chosen": false
          },
          {
            "provider": "Linode",
            "name": "Nanode 1GB",
            "monthly_usd": 5,
            "vcpu": 1,
            "ram_gb": 1,
            "disk_gb": 25,
            "url": "https://www.linode.com/pricing/",
            "chosen": true
          },
          {
            "provider": "DigitalOcean",
            "name": "1 vCPU · 1 GB",
            "monthly_usd": 6,
            "vcpu": 1,
            "ram_gb": 1,
            "disk_gb": 25,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 3,
        "maintenance_hours_per_month": 0.4
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 1,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 19,
          "time_monthly": 0,
          "monthly": 19,
          "one_time": 0,
          "annual": 228
        },
        "alternative": {
          "cash_monthly": 5.14,
          "time_monthly": 20,
          "monthly": 25.14,
          "one_time": 150,
          "cash_one_time": 0,
          "time_one_time": 150,
          "annual": 301.67
        },
        "delta": {
          "monthly": -6.14,
          "upfront_to_switch": 150,
          "annual": -73.67
        },
        "break_even_month": null,
        "break_even_hourly_rate": 28.68,
        "totals": {
          "at_12_months": {
            "incumbent": 228,
            "alternative": 451.67
          },
          "at_36_months": {
            "incumbent": 684,
            "alternative": 1055
          },
          "at_horizon": {
            "incumbent": 684,
            "alternative": 1055
          }
        },
        "savings": {
          "year_1": -223.67,
          "year_3": -371,
          "at_horizon": -371
        },
        "verdict": "stay"
      },
      "managed": {
        "provider": "PikaPods",
        "app": "Umami",
        "url": "https://www.pikapods.com/",
        "note": "Runs the same open-source software, applies updates, and takes daily encrypted backups to storage you own.",
        "source_url": "https://www.pikapods.com/apps",
        "quote": "Umami Umami is a … Run Your Own From $2.8/month",
        "monthly_usd": 2.8,
        "verified_at": "2026-10-19T10:54:00.624Z",
        "migration_hours": 2,
        "result": {
          "computable": true,
          "inputs": {
            "seats": 1,
            "horizon_months": 36,
            "hourly_rate": 50
          },
          "incumbent": {
            "cash_monthly": 19,
            "time_monthly": 0,
            "monthly": 19,
            "one_time": 0,
            "annual": 228
          },
          "alternative": {
            "cash_monthly": 2.8,
            "time_monthly": 0,
            "monthly": 2.8,
            "one_time": 100,
            "cash_one_time": 0,
            "time_one_time": 100,
            "annual": 33.6
          },
          "delta": {
            "monthly": 16.2,
            "upfront_to_switch": 100,
            "annual": 194.4
          },
          "break_even_month": 7,
          "break_even_hourly_rate": 291.6,
          "totals": {
            "at_12_months": {
              "incumbent": 228,
              "alternative": 133.6
            },
            "at_36_months": {
              "incumbent": 684,
              "alternative": 200.8
            },
            "at_horizon": {
              "incumbent": 684,
              "alternative": 200.8
            }
          },
          "savings": {
            "year_1": 94.4,
            "year_3": 483.2,
            "at_horizon": 483.2
          },
          "verdict": "switch"
        },
        "crossover": 291.6
      },
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 150
        },
        {
          "month": 1,
          "incumbent": 19,
          "alternative": 175.14
        },
        {
          "month": 2,
          "incumbent": 38,
          "alternative": 200.28
        },
        {
          "month": 3,
          "incumbent": 57,
          "alternative": 225.42
        },
        {
          "month": 4,
          "incumbent": 76,
          "alternative": 250.56
        },
        {
          "month": 5,
          "incumbent": 95,
          "alternative": 275.7
        },
        {
          "month": 6,
          "incumbent": 114,
          "alternative": 300.84
        },
        {
          "month": 7,
          "incumbent": 133,
          "alternative": 325.98
        },
        {
          "month": 8,
          "incumbent": 152,
          "alternative": 351.12
        },
        {
          "month": 9,
          "incumbent": 171,
          "alternative": 376.26
        },
        {
          "month": 10,
          "incumbent": 190,
          "alternative": 401.4
        },
        {
          "month": 11,
          "incumbent": 209,
          "alternative": 426.54
        },
        {
          "month": 12,
          "incumbent": 228,
          "alternative": 451.68
        },
        {
          "month": 13,
          "incumbent": 247,
          "alternative": 476.82
        },
        {
          "month": 14,
          "incumbent": 266,
          "alternative": 501.96
        },
        {
          "month": 15,
          "incumbent": 285,
          "alternative": 527.1
        },
        {
          "month": 16,
          "incumbent": 304,
          "alternative": 552.24
        },
        {
          "month": 17,
          "incumbent": 323,
          "alternative": 577.38
        },
        {
          "month": 18,
          "incumbent": 342,
          "alternative": 602.52
        },
        {
          "month": 19,
          "incumbent": 361,
          "alternative": 627.66
        },
        {
          "month": 20,
          "incumbent": 380,
          "alternative": 652.8
        },
        {
          "month": 21,
          "incumbent": 399,
          "alternative": 677.94
        },
        {
          "month": 22,
          "incumbent": 418,
          "alternative": 703.08
        },
        {
          "month": 23,
          "incumbent": 437,
          "alternative": 728.22
        },
        {
          "month": 24,
          "incumbent": 456,
          "alternative": 753.36
        },
        {
          "month": 25,
          "incumbent": 475,
          "alternative": 778.5
        },
        {
          "month": 26,
          "incumbent": 494,
          "alternative": 803.64
        },
        {
          "month": 27,
          "incumbent": 513,
          "alternative": 828.78
        },
        {
          "month": 28,
          "incumbent": 532,
          "alternative": 853.92
        },
        {
          "month": 29,
          "incumbent": 551,
          "alternative": 879.06
        },
        {
          "month": 30,
          "incumbent": 570,
          "alternative": 904.2
        },
        {
          "month": 31,
          "incumbent": 589,
          "alternative": 929.34
        },
        {
          "month": 32,
          "incumbent": 608,
          "alternative": 954.48
        },
        {
          "month": 33,
          "incumbent": 627,
          "alternative": 979.62
        },
        {
          "month": 34,
          "incumbent": 646,
          "alternative": 1004.76
        },
        {
          "month": 35,
          "incumbent": 665,
          "alternative": 1029.9
        },
        {
          "month": 36,
          "incumbent": 684,
          "alternative": 1055.04
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 499
        },
        {
          "hourly_rate": 25,
          "verdict": "marginal",
          "break_even_month": 20,
          "savings_at_horizon": 64
        },
        {
          "hourly_rate": 50,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -371
        },
        {
          "hourly_rate": 75,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -806
        },
        {
          "hourly_rate": 100,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -1241
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -2111
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -2981
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Plausible's polish, and its funnels and revenue tracking",
          "A hosted service run by people who care about privacy analytics specifically",
          "Email reports and shared dashboards without configuration"
        ],
        "you_gain": [
          "Postgres or MySQL instead of ClickHouse, which is the difference between a 1 GB box and a 4 GB one",
          "No pageview ceiling",
          "MIT licensing"
        ]
      },
      "caveats": [
        "Historical data does not transfer. You start counting from zero unless you write the import yourself.",
        "Plausible Cloud at $19 a month is genuinely cheap. This comparison exists because Umami is light enough to change the answer, not because $19 is outrageous.",
        "Umami's reporting is thinner than Plausible's. If you actually read your analytics rather than just collecting them, that matters."
      ],
      "category": "analytics",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "slack-to-rocketchat",
      "title": "Slack Pro to self-hosted Rocket.Chat",
      "summary": "Rocket.Chat is the closest thing to Slack you can run yourself, and seats are where Slack's bill compounds.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Slack",
        "vendor_id": "slack",
        "plan": "Pro",
        "plan_id": "pro",
        "amount": 7.25,
        "period": "month",
        "per_seat": true,
        "billed": "annual",
        "seats": 12,
        "quote": "$7.25 USD per user / month, when paying annually",
        "caveat": "Slack's headline shows a 50%-off-for-3-months promo figure ($4.38) next to the real one; $7.25 is the standard annual rate and $8.75 the monthly rate.",
        "source_url": "https://slack.com/pricing",
        "verified_at": "2026-10-11",
        "needs_reverification": false
      },
      "alternative": {
        "name": "Rocket.Chat (self-hosted)",
        "repo": "RocketChat/Rocket.Chat",
        "project": {
          "full_name": "RocketChat/Rocket.Chat",
          "url": "https://github.com/RocketChat/Rocket.Chat",
          "homepage": "https://rocket.chat/",
          "description": "The Secure CommsOS™ for mission-critical operations",
          "stars": 46288,
          "forks": 14005,
          "open_issues": 4283,
          "license": null,
          "archived": false,
          "pushed_at": "2026-10-19T07:04:56Z",
          "days_since_push": 0,
          "latest_release": {
            "tag": "8.9.0",
            "published_at": "2026-10-05T17:41:21Z",
            "url": "https://github.com/RocketChat/Rocket.Chat/releases/tag/8.9.0"
          },
          "days_since_release": 14,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:56.589Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-2c-4gb",
          "id": "vultr:vc2-2c-4gb",
          "vcpu": 2,
          "ram_gb": 4,
          "disk_gb": 80,
          "bandwidth_tb": 3,
          "monthly_usd": 20,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 40,
          "monthly_usd": 0.28
        },
        "requirements": {
          "ram_gb": 4,
          "vcpu": 2,
          "disk_gb": 50
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-2c-4gb",
            "monthly_usd": 20,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 4GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "2 vCPU · 4 GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 10,
        "maintenance_hours_per_month": 1
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 12,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 87,
          "time_monthly": 0,
          "monthly": 87,
          "one_time": 0,
          "annual": 1044
        },
        "alternative": {
          "cash_monthly": 20.28,
          "time_monthly": 50,
          "monthly": 70.28,
          "one_time": 500,
          "cash_one_time": 0,
          "time_one_time": 500,
          "annual": 843.34
        },
        "delta": {
          "monthly": 16.72,
          "upfront_to_switch": 500,
          "annual": 200.66
        },
        "break_even_month": 30,
        "break_even_hourly_rate": 52.22,
        "totals": {
          "at_12_months": {
            "incumbent": 1044,
            "alternative": 1343.34
          },
          "at_36_months": {
            "incumbent": 3132,
            "alternative": 3030.01
          },
          "at_horizon": {
            "incumbent": 3132,
            "alternative": 3030.01
          }
        },
        "savings": {
          "year_1": -299.34,
          "year_3": 101.99,
          "at_horizon": 101.99
        },
        "verdict": "marginal"
      },
      "managed": {
        "provider": "PikaPods",
        "app": "Rocket.Chat",
        "url": "https://www.pikapods.com/",
        "note": "Runs the same open-source software, applies updates, and takes daily encrypted backups to storage you own.",
        "source_url": "https://www.pikapods.com/apps",
        "quote": "Rocket.Chat Fully customizable communications … Run Your Own From $4.9/month",
        "monthly_usd": 4.9,
        "verified_at": "2026-10-19T10:54:00.624Z",
        "migration_hours": 5,
        "result": {
          "computable": true,
          "inputs": {
            "seats": 12,
            "horizon_months": 36,
            "hourly_rate": 50
          },
          "incumbent": {
            "cash_monthly": 87,
            "time_monthly": 0,
            "monthly": 87,
            "one_time": 0,
            "annual": 1044
          },
          "alternative": {
            "cash_monthly": 4.9,
            "time_monthly": 0,
            "monthly": 4.9,
            "one_time": 250,
            "cash_one_time": 0,
            "time_one_time": 250,
            "annual": 58.8
          },
          "delta": {
            "monthly": 82.1,
            "upfront_to_switch": 250,
            "annual": 985.2
          },
          "break_even_month": 4,
          "break_even_hourly_rate": 591.12,
          "totals": {
            "at_12_months": {
              "incumbent": 1044,
              "alternative": 308.8
            },
            "at_36_months": {
              "incumbent": 3132,
              "alternative": 426.4
            },
            "at_horizon": {
              "incumbent": 3132,
              "alternative": 426.4
            }
          },
          "savings": {
            "year_1": 735.2,
            "year_3": 2705.6,
            "at_horizon": 2705.6
          },
          "verdict": "switch"
        },
        "crossover": 591.12
      },
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 500
        },
        {
          "month": 1,
          "incumbent": 87,
          "alternative": 570.28
        },
        {
          "month": 2,
          "incumbent": 174,
          "alternative": 640.56
        },
        {
          "month": 3,
          "incumbent": 261,
          "alternative": 710.84
        },
        {
          "month": 4,
          "incumbent": 348,
          "alternative": 781.12
        },
        {
          "month": 5,
          "incumbent": 435,
          "alternative": 851.4
        },
        {
          "month": 6,
          "incumbent": 522,
          "alternative": 921.68
        },
        {
          "month": 7,
          "incumbent": 609,
          "alternative": 991.96
        },
        {
          "month": 8,
          "incumbent": 696,
          "alternative": 1062.24
        },
        {
          "month": 9,
          "incumbent": 783,
          "alternative": 1132.52
        },
        {
          "month": 10,
          "incumbent": 870,
          "alternative": 1202.8
        },
        {
          "month": 11,
          "incumbent": 957,
          "alternative": 1273.08
        },
        {
          "month": 12,
          "incumbent": 1044,
          "alternative": 1343.36
        },
        {
          "month": 13,
          "incumbent": 1131,
          "alternative": 1413.64
        },
        {
          "month": 14,
          "incumbent": 1218,
          "alternative": 1483.92
        },
        {
          "month": 15,
          "incumbent": 1305,
          "alternative": 1554.2
        },
        {
          "month": 16,
          "incumbent": 1392,
          "alternative": 1624.48
        },
        {
          "month": 17,
          "incumbent": 1479,
          "alternative": 1694.76
        },
        {
          "month": 18,
          "incumbent": 1566,
          "alternative": 1765.04
        },
        {
          "month": 19,
          "incumbent": 1653,
          "alternative": 1835.32
        },
        {
          "month": 20,
          "incumbent": 1740,
          "alternative": 1905.6
        },
        {
          "month": 21,
          "incumbent": 1827,
          "alternative": 1975.88
        },
        {
          "month": 22,
          "incumbent": 1914,
          "alternative": 2046.16
        },
        {
          "month": 23,
          "incumbent": 2001,
          "alternative": 2116.44
        },
        {
          "month": 24,
          "incumbent": 2088,
          "alternative": 2186.72
        },
        {
          "month": 25,
          "incumbent": 2175,
          "alternative": 2257
        },
        {
          "month": 26,
          "incumbent": 2262,
          "alternative": 2327.28
        },
        {
          "month": 27,
          "incumbent": 2349,
          "alternative": 2397.56
        },
        {
          "month": 28,
          "incumbent": 2436,
          "alternative": 2467.84
        },
        {
          "month": 29,
          "incumbent": 2523,
          "alternative": 2538.12
        },
        {
          "month": 30,
          "incumbent": 2610,
          "alternative": 2608.4
        },
        {
          "month": 31,
          "incumbent": 2697,
          "alternative": 2678.68
        },
        {
          "month": 32,
          "incumbent": 2784,
          "alternative": 2748.96
        },
        {
          "month": 33,
          "incumbent": 2871,
          "alternative": 2819.24
        },
        {
          "month": 34,
          "incumbent": 2958,
          "alternative": 2889.52
        },
        {
          "month": 35,
          "incumbent": 3045,
          "alternative": 2959.8
        },
        {
          "month": 36,
          "incumbent": 3132,
          "alternative": 3030.08
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 2401.99
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 6,
          "savings_at_horizon": 1251.99
        },
        {
          "hourly_rate": 50,
          "verdict": "marginal",
          "break_even_month": 30,
          "savings_at_horizon": 101.99
        },
        {
          "hourly_rate": 75,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -1048.01
        },
        {
          "hourly_rate": 100,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -2198.01
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -4498.01
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -6798.01
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Slack's 2,600-app directory and the integrations your team already installed",
          "Huddles and clip — the low-friction audio/video that keeps people out of meetings",
          "Someone else handling the next security patch on a chat server that faces the internet"
        ],
        "you_gain": [
          "No per-seat charge, so guests and whole departments stop costing money per head",
          "Unlimited message history — the Free-tier 90-day limit and the Pro-tier pins both go away",
          "Matrix federation and an API you can automate against without approval"
        ]
      },
      "caveats": [
        "Rocket.Chat's community edition carries most of the product, but some features (LDAP, audit, OAuth enterprise) are enterprise-licensed — check your must-haves against their edition matrix before committing.",
        "Chat history grows fast. The 40 GB backup assumption fits a chatty 12-person team for about two years; re-check if you migrate years of logs in.",
        "Migration means re-creating channels and re-inviting people — Slack does not export member relationships to a competitor. The 10-hour estimate is for a 12-seat workspace, not a 200-seat one."
      ],
      "category": "team-chat",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "slack-to-zulip",
      "title": "Slack Pro to self-hosted Zulip",
      "summary": "Zulip's threaded topics are a different shape of chat — better for decisions, worse for banter, and free of per-seat pricing.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Slack",
        "vendor_id": "slack",
        "plan": "Pro",
        "plan_id": "pro",
        "amount": 7.25,
        "period": "month",
        "per_seat": true,
        "billed": "annual",
        "seats": 12,
        "quote": "$7.25 USD per user / month, when paying annually",
        "caveat": "Slack's headline shows a 50%-off-for-3-months promo figure ($4.38) next to the real one; $7.25 is the standard annual rate and $8.75 the monthly rate.",
        "source_url": "https://slack.com/pricing",
        "verified_at": "2026-10-11",
        "needs_reverification": false
      },
      "alternative": {
        "name": "Zulip (self-hosted)",
        "repo": "zulip/zulip",
        "project": {
          "full_name": "zulip/zulip",
          "url": "https://github.com/zulip/zulip",
          "homepage": "https://zulip.com",
          "description": "Zulip server and web application. Open-source team chat that helps teams stay productive and focused.",
          "stars": 26069,
          "forks": 10428,
          "open_issues": 2056,
          "license": "Apache-2.0",
          "archived": false,
          "pushed_at": "2026-10-18T16:22:46Z",
          "days_since_push": 1,
          "latest_release": {
            "tag": "12.3",
            "published_at": "2026-09-21T17:10:07Z",
            "url": "https://github.com/zulip/zulip/releases/tag/12.3"
          },
          "days_since_release": 28,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:57.069Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-1c-2gb",
          "id": "vultr:vc2-1c-2gb",
          "vcpu": 1,
          "ram_gb": 2,
          "disk_gb": 55,
          "bandwidth_tb": 2,
          "monthly_usd": 10,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 30,
          "monthly_usd": 0.21
        },
        "requirements": {
          "ram_gb": 2,
          "vcpu": 1,
          "disk_gb": 40
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-1c-2gb",
            "monthly_usd": 10,
            "vcpu": 1,
            "ram_gb": 2,
            "disk_gb": 55,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 2GB",
            "monthly_usd": 12,
            "vcpu": 1,
            "ram_gb": 2,
            "disk_gb": 50,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "1 vCPU · 2 GB",
            "monthly_usd": 12,
            "vcpu": 1,
            "ram_gb": 2,
            "disk_gb": 50,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 9,
        "maintenance_hours_per_month": 0.8
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 12,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 87,
          "time_monthly": 0,
          "monthly": 87,
          "one_time": 0,
          "annual": 1044
        },
        "alternative": {
          "cash_monthly": 10.21,
          "time_monthly": 40,
          "monthly": 50.21,
          "one_time": 450,
          "cash_one_time": 0,
          "time_one_time": 450,
          "annual": 602.5
        },
        "delta": {
          "monthly": 36.79,
          "upfront_to_switch": 450,
          "annual": 441.5
        },
        "break_even_month": 13,
        "break_even_hourly_rate": 73.13,
        "totals": {
          "at_12_months": {
            "incumbent": 1044,
            "alternative": 1052.5
          },
          "at_36_months": {
            "incumbent": 3132,
            "alternative": 2257.51
          },
          "at_horizon": {
            "incumbent": 3132,
            "alternative": 2257.51
          }
        },
        "savings": {
          "year_1": -8.5,
          "year_3": 874.49,
          "at_horizon": 874.49
        },
        "verdict": "switch"
      },
      "managed": null,
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 450
        },
        {
          "month": 1,
          "incumbent": 87,
          "alternative": 500.21
        },
        {
          "month": 2,
          "incumbent": 174,
          "alternative": 550.42
        },
        {
          "month": 3,
          "incumbent": 261,
          "alternative": 600.63
        },
        {
          "month": 4,
          "incumbent": 348,
          "alternative": 650.84
        },
        {
          "month": 5,
          "incumbent": 435,
          "alternative": 701.05
        },
        {
          "month": 6,
          "incumbent": 522,
          "alternative": 751.26
        },
        {
          "month": 7,
          "incumbent": 609,
          "alternative": 801.47
        },
        {
          "month": 8,
          "incumbent": 696,
          "alternative": 851.68
        },
        {
          "month": 9,
          "incumbent": 783,
          "alternative": 901.89
        },
        {
          "month": 10,
          "incumbent": 870,
          "alternative": 952.1
        },
        {
          "month": 11,
          "incumbent": 957,
          "alternative": 1002.31
        },
        {
          "month": 12,
          "incumbent": 1044,
          "alternative": 1052.52
        },
        {
          "month": 13,
          "incumbent": 1131,
          "alternative": 1102.73
        },
        {
          "month": 14,
          "incumbent": 1218,
          "alternative": 1152.94
        },
        {
          "month": 15,
          "incumbent": 1305,
          "alternative": 1203.15
        },
        {
          "month": 16,
          "incumbent": 1392,
          "alternative": 1253.36
        },
        {
          "month": 17,
          "incumbent": 1479,
          "alternative": 1303.57
        },
        {
          "month": 18,
          "incumbent": 1566,
          "alternative": 1353.78
        },
        {
          "month": 19,
          "incumbent": 1653,
          "alternative": 1403.99
        },
        {
          "month": 20,
          "incumbent": 1740,
          "alternative": 1454.2
        },
        {
          "month": 21,
          "incumbent": 1827,
          "alternative": 1504.41
        },
        {
          "month": 22,
          "incumbent": 1914,
          "alternative": 1554.62
        },
        {
          "month": 23,
          "incumbent": 2001,
          "alternative": 1604.83
        },
        {
          "month": 24,
          "incumbent": 2088,
          "alternative": 1655.04
        },
        {
          "month": 25,
          "incumbent": 2175,
          "alternative": 1705.25
        },
        {
          "month": 26,
          "incumbent": 2262,
          "alternative": 1755.46
        },
        {
          "month": 27,
          "incumbent": 2349,
          "alternative": 1805.67
        },
        {
          "month": 28,
          "incumbent": 2436,
          "alternative": 1855.88
        },
        {
          "month": 29,
          "incumbent": 2523,
          "alternative": 1906.09
        },
        {
          "month": 30,
          "incumbent": 2610,
          "alternative": 1956.3
        },
        {
          "month": 31,
          "incumbent": 2697,
          "alternative": 2006.51
        },
        {
          "month": 32,
          "incumbent": 2784,
          "alternative": 2056.72
        },
        {
          "month": 33,
          "incumbent": 2871,
          "alternative": 2106.93
        },
        {
          "month": 34,
          "incumbent": 2958,
          "alternative": 2157.14
        },
        {
          "month": 35,
          "incumbent": 3045,
          "alternative": 2207.35
        },
        {
          "month": 36,
          "incumbent": 3132,
          "alternative": 2257.56
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 2764.49
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 4,
          "savings_at_horizon": 1819.49
        },
        {
          "hourly_rate": 50,
          "verdict": "switch",
          "break_even_month": 13,
          "savings_at_horizon": 874.49
        },
        {
          "hourly_rate": 75,
          "verdict": "stay",
          "break_even_month": 41,
          "savings_at_horizon": -70.51
        },
        {
          "hourly_rate": 100,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -1015.51
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -2905.51
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -4795.51
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Slack's familiar single-stream interface — Zulip's topic threading divides people",
          "The 2,600-app integration directory",
          "Huddles; Zulip has voice/video via Jitsi integration but it is not the same"
        ],
        "you_gain": [
          "Topics make a busy channel readable, which is the one thing Slack has never solved",
          "Apache-2.0 with no edition matrix — every feature is in the free self-hosted build",
          "Message history and search that never hit a 90-day wall"
        ]
      },
      "caveats": [
        "Zulip is opinionated: every message goes in a topic. Teams that fight itbounce off; teams that adopt it rarely go back. Do a two-week pilot before moving a whole workspace.",
        "Import from Slack is first-party (they ship a tooling path for it), which is unusual — the 9-hour estimate assumes it works on your export."
      ],
      "category": "team-chat",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "todoist-to-vikunja",
      "title": "Todoist Business to self-hosted Vikunja",
      "summary": "Todoist Business is cheap per seat, which makes this a genuine test of whether a $96-a-year subscription is worth escaping at all.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Todoist",
        "vendor_id": "todoist",
        "plan": "Business",
        "plan_id": "business",
        "amount": 8,
        "period": "month",
        "per_seat": true,
        "billed": "annual",
        "seats": 6,
        "quote": "Teams Business Manage your teamwork, too ... US $8 plus local tax per user/month, $96 billed yearly",
        "caveat": null,
        "source_url": "https://www.todoist.com/pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "Vikunja (self-hosted)",
        "repo": "go-vikunja/vikunja",
        "project": {
          "full_name": "go-vikunja/vikunja",
          "url": "https://github.com/go-vikunja/vikunja",
          "homepage": "https://vikunja.io",
          "description": "The task manager you actually own.",
          "stars": 5793,
          "forks": 761,
          "open_issues": 257,
          "license": "AGPL-3.0",
          "archived": false,
          "pushed_at": "2026-10-19T10:37:28Z",
          "days_since_push": 0,
          "latest_release": {
            "tag": "v2.7.0",
            "published_at": "2026-10-02T21:18:37Z",
            "url": "https://github.com/go-vikunja/vikunja/releases/tag/v2.7.0"
          },
          "days_since_release": 17,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:57.587Z"
        },
        "box": {
          "provider": "Linode",
          "name": "Nanode 1GB",
          "id": "linode:g6-nanode-1",
          "vcpu": 1,
          "ram_gb": 1,
          "disk_gb": 25,
          "bandwidth_tb": 0.98,
          "monthly_usd": 5,
          "url": "https://www.linode.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 10,
          "monthly_usd": 0.07
        },
        "requirements": {
          "ram_gb": 1,
          "vcpu": 1,
          "disk_gb": 20
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-1c-1gb",
            "monthly_usd": 5,
            "vcpu": 1,
            "ram_gb": 1,
            "disk_gb": 25,
            "url": "https://www.vultr.com/pricing/",
            "chosen": false
          },
          {
            "provider": "Linode",
            "name": "Nanode 1GB",
            "monthly_usd": 5,
            "vcpu": 1,
            "ram_gb": 1,
            "disk_gb": 25,
            "url": "https://www.linode.com/pricing/",
            "chosen": true
          },
          {
            "provider": "DigitalOcean",
            "name": "1 vCPU · 1 GB",
            "monthly_usd": 6,
            "vcpu": 1,
            "ram_gb": 1,
            "disk_gb": 25,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 5,
        "maintenance_hours_per_month": 0.4
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 6,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 48,
          "time_monthly": 0,
          "monthly": 48,
          "one_time": 0,
          "annual": 576
        },
        "alternative": {
          "cash_monthly": 5.07,
          "time_monthly": 20,
          "monthly": 25.07,
          "one_time": 250,
          "cash_one_time": 0,
          "time_one_time": 250,
          "annual": 300.83
        },
        "delta": {
          "monthly": 22.93,
          "upfront_to_switch": 250,
          "annual": 275.17
        },
        "break_even_month": 11,
        "break_even_hourly_rate": 79.66,
        "totals": {
          "at_12_months": {
            "incumbent": 576,
            "alternative": 550.83
          },
          "at_36_months": {
            "incumbent": 1728,
            "alternative": 1152.5
          },
          "at_horizon": {
            "incumbent": 1728,
            "alternative": 1152.5
          }
        },
        "savings": {
          "year_1": 25.17,
          "year_3": 575.5,
          "at_horizon": 575.5
        },
        "verdict": "switch"
      },
      "managed": {
        "provider": "PikaPods",
        "app": "Vikunja",
        "url": "https://www.pikapods.com/",
        "note": "Runs the same open-source software, applies updates, and takes daily encrypted backups to storage you own.",
        "source_url": "https://www.pikapods.com/apps",
        "quote": "Vikunja Self-hosted task and … Run Your Own From $2.7/month",
        "monthly_usd": 2.7,
        "verified_at": "2026-10-19T10:54:00.624Z",
        "migration_hours": 3,
        "result": {
          "computable": true,
          "inputs": {
            "seats": 6,
            "horizon_months": 36,
            "hourly_rate": 50
          },
          "incumbent": {
            "cash_monthly": 48,
            "time_monthly": 0,
            "monthly": 48,
            "one_time": 0,
            "annual": 576
          },
          "alternative": {
            "cash_monthly": 2.7,
            "time_monthly": 0,
            "monthly": 2.7,
            "one_time": 150,
            "cash_one_time": 0,
            "time_one_time": 150,
            "annual": 32.4
          },
          "delta": {
            "monthly": 45.3,
            "upfront_to_switch": 150,
            "annual": 543.6
          },
          "break_even_month": 4,
          "break_even_hourly_rate": 543.6,
          "totals": {
            "at_12_months": {
              "incumbent": 576,
              "alternative": 182.4
            },
            "at_36_months": {
              "incumbent": 1728,
              "alternative": 247.2
            },
            "at_horizon": {
              "incumbent": 1728,
              "alternative": 247.2
            }
          },
          "savings": {
            "year_1": 393.6,
            "year_3": 1480.8,
            "at_horizon": 1480.8
          },
          "verdict": "switch"
        },
        "crossover": 543.6
      },
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 250
        },
        {
          "month": 1,
          "incumbent": 48,
          "alternative": 275.07
        },
        {
          "month": 2,
          "incumbent": 96,
          "alternative": 300.14
        },
        {
          "month": 3,
          "incumbent": 144,
          "alternative": 325.21
        },
        {
          "month": 4,
          "incumbent": 192,
          "alternative": 350.28
        },
        {
          "month": 5,
          "incumbent": 240,
          "alternative": 375.35
        },
        {
          "month": 6,
          "incumbent": 288,
          "alternative": 400.42
        },
        {
          "month": 7,
          "incumbent": 336,
          "alternative": 425.49
        },
        {
          "month": 8,
          "incumbent": 384,
          "alternative": 450.56
        },
        {
          "month": 9,
          "incumbent": 432,
          "alternative": 475.63
        },
        {
          "month": 10,
          "incumbent": 480,
          "alternative": 500.7
        },
        {
          "month": 11,
          "incumbent": 528,
          "alternative": 525.77
        },
        {
          "month": 12,
          "incumbent": 576,
          "alternative": 550.84
        },
        {
          "month": 13,
          "incumbent": 624,
          "alternative": 575.91
        },
        {
          "month": 14,
          "incumbent": 672,
          "alternative": 600.98
        },
        {
          "month": 15,
          "incumbent": 720,
          "alternative": 626.05
        },
        {
          "month": 16,
          "incumbent": 768,
          "alternative": 651.12
        },
        {
          "month": 17,
          "incumbent": 816,
          "alternative": 676.19
        },
        {
          "month": 18,
          "incumbent": 864,
          "alternative": 701.26
        },
        {
          "month": 19,
          "incumbent": 912,
          "alternative": 726.33
        },
        {
          "month": 20,
          "incumbent": 960,
          "alternative": 751.4
        },
        {
          "month": 21,
          "incumbent": 1008,
          "alternative": 776.47
        },
        {
          "month": 22,
          "incumbent": 1056,
          "alternative": 801.54
        },
        {
          "month": 23,
          "incumbent": 1104,
          "alternative": 826.61
        },
        {
          "month": 24,
          "incumbent": 1152,
          "alternative": 851.68
        },
        {
          "month": 25,
          "incumbent": 1200,
          "alternative": 876.75
        },
        {
          "month": 26,
          "incumbent": 1248,
          "alternative": 901.82
        },
        {
          "month": 27,
          "incumbent": 1296,
          "alternative": 926.89
        },
        {
          "month": 28,
          "incumbent": 1344,
          "alternative": 951.96
        },
        {
          "month": 29,
          "incumbent": 1392,
          "alternative": 977.03
        },
        {
          "month": 30,
          "incumbent": 1440,
          "alternative": 1002.1
        },
        {
          "month": 31,
          "incumbent": 1488,
          "alternative": 1027.17
        },
        {
          "month": 32,
          "incumbent": 1536,
          "alternative": 1052.24
        },
        {
          "month": 33,
          "incumbent": 1584,
          "alternative": 1077.31
        },
        {
          "month": 34,
          "incumbent": 1632,
          "alternative": 1102.38
        },
        {
          "month": 35,
          "incumbent": 1680,
          "alternative": 1127.45
        },
        {
          "month": 36,
          "incumbent": 1728,
          "alternative": 1152.52
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 1545.5
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 4,
          "savings_at_horizon": 1060.5
        },
        {
          "hourly_rate": 50,
          "verdict": "switch",
          "break_even_month": 11,
          "savings_at_horizon": 575.5
        },
        {
          "hourly_rate": 75,
          "verdict": "marginal",
          "break_even_month": 30,
          "savings_at_horizon": 90.5
        },
        {
          "hourly_rate": 100,
          "verdict": "stay",
          "break_even_month": 171,
          "savings_at_horizon": -394.5
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -1364.5
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -2334.5
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Todoist's natural-language quick add, which is the feature most people actually stay for",
          "Mature apps on every platform, including watch and widget support",
          "Karma, streaks and the habit machinery that makes people keep using it"
        ],
        "you_gain": [
          "A Go binary that runs comfortably on the smallest box any provider sells",
          "Free seats, so the whole team costs the same as one person",
          "Kanban, Gantt and list views without a higher tier"
        ]
      },
      "caveats": [
        "Vikunja imports from Todoist directly, which is why the migration estimate is low. Recurring tasks are the part that most often needs rebuilding by hand.",
        "Todoist Business is one of the cheaper subscriptions on this site. At small team sizes the arithmetic here usually favours simply paying it."
      ],
      "category": "tasks",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "vercel-to-caprover",
      "title": "Vercel Pro to self-hosted CapRover",
      "summary": "CapRover is the oldest and calmest of the self-hosted deploy platforms. It is also the least fashionable, which is often a recommendation.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Vercel",
        "vendor_id": "vercel",
        "plan": "Pro",
        "plan_id": "pro",
        "amount": 20,
        "period": "month",
        "per_seat": true,
        "billed": "monthly",
        "seats": 4,
        "quote": "Pro Popular $20 /mo. ... Team Seats Developer seat 1 $20 / month",
        "caveat": "$20 per developer seat per month, which includes $20 of usage credit. Bandwidth and compute above that credit are billed on top, so real bills commonly exceed the seat price.",
        "source_url": "https://vercel.com/pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "CapRover (self-hosted)",
        "repo": "caprover/caprover",
        "project": {
          "full_name": "caprover/caprover",
          "url": "https://github.com/caprover/caprover",
          "homepage": "https://CapRover.com",
          "description": "Scalable PaaS (automated Docker+nginx) - aka Heroku on Steroids",
          "stars": 15189,
          "forks": 1005,
          "open_issues": 175,
          "license": null,
          "archived": false,
          "pushed_at": "2026-10-19T05:23:41Z",
          "days_since_push": 0,
          "latest_release": {
            "tag": "v1.15.4",
            "published_at": "2026-08-30T22:41:34Z",
            "url": "https://github.com/caprover/caprover/releases/tag/v1.15.4"
          },
          "days_since_release": 50,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:58.043Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-2c-4gb",
          "id": "vultr:vc2-2c-4gb",
          "vcpu": 2,
          "ram_gb": 4,
          "disk_gb": 80,
          "bandwidth_tb": 3,
          "monthly_usd": 20,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 40,
          "monthly_usd": 0.28
        },
        "requirements": {
          "ram_gb": 4,
          "vcpu": 2,
          "disk_gb": 50
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-2c-4gb",
            "monthly_usd": 20,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 4GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "2 vCPU · 4 GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 8,
        "maintenance_hours_per_month": 0.75
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 4,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 80,
          "time_monthly": 0,
          "monthly": 80,
          "one_time": 0,
          "annual": 960
        },
        "alternative": {
          "cash_monthly": 20.28,
          "time_monthly": 37.5,
          "monthly": 57.78,
          "one_time": 400,
          "cash_one_time": 0,
          "time_one_time": 400,
          "annual": 693.34
        },
        "delta": {
          "monthly": 22.22,
          "upfront_to_switch": 400,
          "annual": 266.66
        },
        "break_even_month": 19,
        "break_even_hourly_rate": 61.43,
        "totals": {
          "at_12_months": {
            "incumbent": 960,
            "alternative": 1093.34
          },
          "at_36_months": {
            "incumbent": 2880,
            "alternative": 2480.01
          },
          "at_horizon": {
            "incumbent": 2880,
            "alternative": 2480.01
          }
        },
        "savings": {
          "year_1": -133.34,
          "year_3": 399.99,
          "at_horizon": 399.99
        },
        "verdict": "marginal"
      },
      "managed": null,
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 400
        },
        {
          "month": 1,
          "incumbent": 80,
          "alternative": 457.78
        },
        {
          "month": 2,
          "incumbent": 160,
          "alternative": 515.56
        },
        {
          "month": 3,
          "incumbent": 240,
          "alternative": 573.34
        },
        {
          "month": 4,
          "incumbent": 320,
          "alternative": 631.12
        },
        {
          "month": 5,
          "incumbent": 400,
          "alternative": 688.9
        },
        {
          "month": 6,
          "incumbent": 480,
          "alternative": 746.68
        },
        {
          "month": 7,
          "incumbent": 560,
          "alternative": 804.46
        },
        {
          "month": 8,
          "incumbent": 640,
          "alternative": 862.24
        },
        {
          "month": 9,
          "incumbent": 720,
          "alternative": 920.02
        },
        {
          "month": 10,
          "incumbent": 800,
          "alternative": 977.8
        },
        {
          "month": 11,
          "incumbent": 880,
          "alternative": 1035.58
        },
        {
          "month": 12,
          "incumbent": 960,
          "alternative": 1093.36
        },
        {
          "month": 13,
          "incumbent": 1040,
          "alternative": 1151.14
        },
        {
          "month": 14,
          "incumbent": 1120,
          "alternative": 1208.92
        },
        {
          "month": 15,
          "incumbent": 1200,
          "alternative": 1266.7
        },
        {
          "month": 16,
          "incumbent": 1280,
          "alternative": 1324.48
        },
        {
          "month": 17,
          "incumbent": 1360,
          "alternative": 1382.26
        },
        {
          "month": 18,
          "incumbent": 1440,
          "alternative": 1440.04
        },
        {
          "month": 19,
          "incumbent": 1520,
          "alternative": 1497.82
        },
        {
          "month": 20,
          "incumbent": 1600,
          "alternative": 1555.6
        },
        {
          "month": 21,
          "incumbent": 1680,
          "alternative": 1613.38
        },
        {
          "month": 22,
          "incumbent": 1760,
          "alternative": 1671.16
        },
        {
          "month": 23,
          "incumbent": 1840,
          "alternative": 1728.94
        },
        {
          "month": 24,
          "incumbent": 1920,
          "alternative": 1786.72
        },
        {
          "month": 25,
          "incumbent": 2000,
          "alternative": 1844.5
        },
        {
          "month": 26,
          "incumbent": 2080,
          "alternative": 1902.28
        },
        {
          "month": 27,
          "incumbent": 2160,
          "alternative": 1960.06
        },
        {
          "month": 28,
          "incumbent": 2240,
          "alternative": 2017.84
        },
        {
          "month": 29,
          "incumbent": 2320,
          "alternative": 2075.62
        },
        {
          "month": 30,
          "incumbent": 2400,
          "alternative": 2133.4
        },
        {
          "month": 31,
          "incumbent": 2480,
          "alternative": 2191.18
        },
        {
          "month": 32,
          "incumbent": 2560,
          "alternative": 2248.96
        },
        {
          "month": 33,
          "incumbent": 2640,
          "alternative": 2306.74
        },
        {
          "month": 34,
          "incumbent": 2720,
          "alternative": 2364.52
        },
        {
          "month": 35,
          "incumbent": 2800,
          "alternative": 2422.3
        },
        {
          "month": 36,
          "incumbent": 2880,
          "alternative": 2480.08
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 2149.99
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 5,
          "savings_at_horizon": 1274.99
        },
        {
          "hourly_rate": 50,
          "verdict": "marginal",
          "break_even_month": 19,
          "savings_at_horizon": 399.99
        },
        {
          "hourly_rate": 75,
          "verdict": "stay",
          "break_even_month": 173,
          "savings_at_horizon": -475.01
        },
        {
          "hourly_rate": 100,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -1350.01
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -3100.01
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -4850.01
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Vercel's edge network, which a single box does not replicate",
          "Automatic image optimisation and instant cache invalidation",
          "Next.js features that exist because Vercel builds both halves",
          "Free idle preview deployments"
        ],
        "you_gain": [
          "A fixed bill instead of usage billing that can spike overnight",
          "Free seats, including for people who only read logs",
          "A mature, boring codebase — CapRover has been doing this since 2017"
        ]
      },
      "caveats": [
        "Global latency-sensitive traffic is the case this loses regardless of price. Put Cloudflare in front or stay on Vercel.",
        "CapRover is built on Docker Swarm, which is stable but effectively frozen. That is fine for a single box and a poor foundation for a cluster.",
        "The $20 per seat excludes usage overages. If bandwidth is why you are reading this, your real bill is higher and this page understates the saving."
      ],
      "category": "hosting-paas",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "vercel-to-coolify",
      "title": "Vercel Pro to self-hosted Coolify",
      "summary": "Coolify gives you a Vercel-shaped deploy experience on your own VPS. The seat price is only half the story — Vercel's usage billing is the other half.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Vercel",
        "vendor_id": "vercel",
        "plan": "Pro",
        "plan_id": "pro",
        "amount": 20,
        "period": "month",
        "per_seat": true,
        "billed": "monthly",
        "seats": 3,
        "quote": "Pro Popular $20 /mo. ... Team Seats Developer seat 1 $20 / month",
        "caveat": "$20 per developer seat per month, which includes $20 of usage credit. Bandwidth and compute above that credit are billed on top, so real bills commonly exceed the seat price.",
        "source_url": "https://vercel.com/pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "Coolify (self-hosted)",
        "repo": "coollabsio/coolify",
        "project": {
          "full_name": "coollabsio/coolify",
          "url": "https://github.com/coollabsio/coolify",
          "homepage": "https://coolify.io",
          "description": "An open-source, self-hostable PaaS alternative to Vercel, Heroku & Netlify that lets you easily deploy static sites, databases, full-stack applications and 360+ one-click services on your own servers.",
          "stars": 63187,
          "forks": 5690,
          "open_issues": 589,
          "license": "Apache-2.0",
          "archived": false,
          "pushed_at": "2026-10-19T10:29:35Z",
          "days_since_push": 0,
          "latest_release": {
            "tag": "v4.4.6",
            "published_at": "2026-10-09T18:42:05Z",
            "url": "https://github.com/coollabsio/coolify/releases/tag/v4.4.6"
          },
          "days_since_release": 10,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:58.484Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-2c-4gb",
          "id": "vultr:vc2-2c-4gb",
          "vcpu": 2,
          "ram_gb": 4,
          "disk_gb": 80,
          "bandwidth_tb": 3,
          "monthly_usd": 20,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 40,
          "monthly_usd": 0.28
        },
        "requirements": {
          "ram_gb": 4,
          "vcpu": 2,
          "disk_gb": 50
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-2c-4gb",
            "monthly_usd": 20,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 4GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "2 vCPU · 4 GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 10,
        "maintenance_hours_per_month": 1
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 3,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 60,
          "time_monthly": 0,
          "monthly": 60,
          "one_time": 0,
          "annual": 720
        },
        "alternative": {
          "cash_monthly": 20.28,
          "time_monthly": 50,
          "monthly": 70.28,
          "one_time": 500,
          "cash_one_time": 0,
          "time_one_time": 500,
          "annual": 843.34
        },
        "delta": {
          "monthly": -10.28,
          "upfront_to_switch": 500,
          "annual": -123.34
        },
        "break_even_month": null,
        "break_even_hourly_rate": 31.09,
        "totals": {
          "at_12_months": {
            "incumbent": 720,
            "alternative": 1343.34
          },
          "at_36_months": {
            "incumbent": 2160,
            "alternative": 3030.01
          },
          "at_horizon": {
            "incumbent": 2160,
            "alternative": 3030.01
          }
        },
        "savings": {
          "year_1": -623.34,
          "year_3": -870.01,
          "at_horizon": -870.01
        },
        "verdict": "stay"
      },
      "managed": null,
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 500
        },
        {
          "month": 1,
          "incumbent": 60,
          "alternative": 570.28
        },
        {
          "month": 2,
          "incumbent": 120,
          "alternative": 640.56
        },
        {
          "month": 3,
          "incumbent": 180,
          "alternative": 710.84
        },
        {
          "month": 4,
          "incumbent": 240,
          "alternative": 781.12
        },
        {
          "month": 5,
          "incumbent": 300,
          "alternative": 851.4
        },
        {
          "month": 6,
          "incumbent": 360,
          "alternative": 921.68
        },
        {
          "month": 7,
          "incumbent": 420,
          "alternative": 991.96
        },
        {
          "month": 8,
          "incumbent": 480,
          "alternative": 1062.24
        },
        {
          "month": 9,
          "incumbent": 540,
          "alternative": 1132.52
        },
        {
          "month": 10,
          "incumbent": 600,
          "alternative": 1202.8
        },
        {
          "month": 11,
          "incumbent": 660,
          "alternative": 1273.08
        },
        {
          "month": 12,
          "incumbent": 720,
          "alternative": 1343.36
        },
        {
          "month": 13,
          "incumbent": 780,
          "alternative": 1413.64
        },
        {
          "month": 14,
          "incumbent": 840,
          "alternative": 1483.92
        },
        {
          "month": 15,
          "incumbent": 900,
          "alternative": 1554.2
        },
        {
          "month": 16,
          "incumbent": 960,
          "alternative": 1624.48
        },
        {
          "month": 17,
          "incumbent": 1020,
          "alternative": 1694.76
        },
        {
          "month": 18,
          "incumbent": 1080,
          "alternative": 1765.04
        },
        {
          "month": 19,
          "incumbent": 1140,
          "alternative": 1835.32
        },
        {
          "month": 20,
          "incumbent": 1200,
          "alternative": 1905.6
        },
        {
          "month": 21,
          "incumbent": 1260,
          "alternative": 1975.88
        },
        {
          "month": 22,
          "incumbent": 1320,
          "alternative": 2046.16
        },
        {
          "month": 23,
          "incumbent": 1380,
          "alternative": 2116.44
        },
        {
          "month": 24,
          "incumbent": 1440,
          "alternative": 2186.72
        },
        {
          "month": 25,
          "incumbent": 1500,
          "alternative": 2257
        },
        {
          "month": 26,
          "incumbent": 1560,
          "alternative": 2327.28
        },
        {
          "month": 27,
          "incumbent": 1620,
          "alternative": 2397.56
        },
        {
          "month": 28,
          "incumbent": 1680,
          "alternative": 2467.84
        },
        {
          "month": 29,
          "incumbent": 1740,
          "alternative": 2538.12
        },
        {
          "month": 30,
          "incumbent": 1800,
          "alternative": 2608.4
        },
        {
          "month": 31,
          "incumbent": 1860,
          "alternative": 2678.68
        },
        {
          "month": 32,
          "incumbent": 1920,
          "alternative": 2748.96
        },
        {
          "month": 33,
          "incumbent": 1980,
          "alternative": 2819.24
        },
        {
          "month": 34,
          "incumbent": 2040,
          "alternative": 2889.52
        },
        {
          "month": 35,
          "incumbent": 2100,
          "alternative": 2959.8
        },
        {
          "month": 36,
          "incumbent": 2160,
          "alternative": 3030.08
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 1429.99
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 17,
          "savings_at_horizon": 279.99
        },
        {
          "hourly_rate": 50,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -870.01
        },
        {
          "hourly_rate": 75,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -2020.01
        },
        {
          "hourly_rate": 100,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -3170.01
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -5470.01
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -7770.01
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Vercel's edge network — this is the big one, and it is not something a single VPS replicates",
          "Instant global cache invalidation and automatic image optimisation",
          "Zero-config Next.js features that only exist because Vercel builds both sides",
          "Preview deployments that scale to zero for free"
        ],
        "you_gain": [
          "A fixed monthly bill instead of a usage bill that can spike without warning",
          "Free seats, and no per-seat charge for a viewer who just wants to see logs",
          "Any runtime you like, not only the ones the platform supports"
        ]
      },
      "caveats": [
        "If your traffic is global and latency-sensitive, one VPS is a genuine downgrade and no amount of savings fixes that. Put Cloudflare in front of it or stay on Vercel.",
        "The $20/seat Vercel figure excludes usage overages. If your bandwidth bill is the reason you are reading this, your real Vercel cost is higher and Coolify wins sooner.",
        "Coolify itself needs headroom on top of the applications you deploy. The 4 GB here is for Coolify plus a couple of small apps, not a full production estate."
      ],
      "category": "hosting-paas",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "vercel-to-dokploy",
      "title": "Vercel Pro to self-hosted Dokploy",
      "summary": "Dokploy is the lighter of the two self-hosted platform-as-a-service options here. The seat price is still only half the story.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Vercel",
        "vendor_id": "vercel",
        "plan": "Pro",
        "plan_id": "pro",
        "amount": 20,
        "period": "month",
        "per_seat": true,
        "billed": "monthly",
        "seats": 5,
        "quote": "Pro Popular $20 /mo. ... Team Seats Developer seat 1 $20 / month",
        "caveat": "$20 per developer seat per month, which includes $20 of usage credit. Bandwidth and compute above that credit are billed on top, so real bills commonly exceed the seat price.",
        "source_url": "https://vercel.com/pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "Dokploy (self-hosted)",
        "repo": "Dokploy/dokploy",
        "project": {
          "full_name": "Dokploy/dokploy",
          "url": "https://github.com/Dokploy/dokploy",
          "homepage": "https://dokploy.com/",
          "description": "Open Source Alternative to Vercel, Netlify and Heroku.",
          "stars": 37861,
          "forks": 3094,
          "open_issues": 777,
          "license": null,
          "archived": false,
          "pushed_at": "2026-10-16T15:40:46Z",
          "days_since_push": 3,
          "latest_release": {
            "tag": "v0.30.8",
            "published_at": "2026-09-29T08:16:23Z",
            "url": "https://github.com/Dokploy/dokploy/releases/tag/v0.30.8"
          },
          "days_since_release": 20,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:58.874Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-2c-4gb",
          "id": "vultr:vc2-2c-4gb",
          "vcpu": 2,
          "ram_gb": 4,
          "disk_gb": 80,
          "bandwidth_tb": 3,
          "monthly_usd": 20,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 40,
          "monthly_usd": 0.28
        },
        "requirements": {
          "ram_gb": 4,
          "vcpu": 2,
          "disk_gb": 50
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-2c-4gb",
            "monthly_usd": 20,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 4GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "2 vCPU · 4 GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 10,
        "maintenance_hours_per_month": 1
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 5,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 100,
          "time_monthly": 0,
          "monthly": 100,
          "one_time": 0,
          "annual": 1200
        },
        "alternative": {
          "cash_monthly": 20.28,
          "time_monthly": 50,
          "monthly": 70.28,
          "one_time": 500,
          "cash_one_time": 0,
          "time_one_time": 500,
          "annual": 843.34
        },
        "delta": {
          "monthly": 29.72,
          "upfront_to_switch": 500,
          "annual": 356.66
        },
        "break_even_month": 17,
        "break_even_hourly_rate": 62.39,
        "totals": {
          "at_12_months": {
            "incumbent": 1200,
            "alternative": 1343.34
          },
          "at_36_months": {
            "incumbent": 3600,
            "alternative": 3030.01
          },
          "at_horizon": {
            "incumbent": 3600,
            "alternative": 3030.01
          }
        },
        "savings": {
          "year_1": -143.34,
          "year_3": 569.99,
          "at_horizon": 569.99
        },
        "verdict": "switch"
      },
      "managed": null,
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 500
        },
        {
          "month": 1,
          "incumbent": 100,
          "alternative": 570.28
        },
        {
          "month": 2,
          "incumbent": 200,
          "alternative": 640.56
        },
        {
          "month": 3,
          "incumbent": 300,
          "alternative": 710.84
        },
        {
          "month": 4,
          "incumbent": 400,
          "alternative": 781.12
        },
        {
          "month": 5,
          "incumbent": 500,
          "alternative": 851.4
        },
        {
          "month": 6,
          "incumbent": 600,
          "alternative": 921.68
        },
        {
          "month": 7,
          "incumbent": 700,
          "alternative": 991.96
        },
        {
          "month": 8,
          "incumbent": 800,
          "alternative": 1062.24
        },
        {
          "month": 9,
          "incumbent": 900,
          "alternative": 1132.52
        },
        {
          "month": 10,
          "incumbent": 1000,
          "alternative": 1202.8
        },
        {
          "month": 11,
          "incumbent": 1100,
          "alternative": 1273.08
        },
        {
          "month": 12,
          "incumbent": 1200,
          "alternative": 1343.36
        },
        {
          "month": 13,
          "incumbent": 1300,
          "alternative": 1413.64
        },
        {
          "month": 14,
          "incumbent": 1400,
          "alternative": 1483.92
        },
        {
          "month": 15,
          "incumbent": 1500,
          "alternative": 1554.2
        },
        {
          "month": 16,
          "incumbent": 1600,
          "alternative": 1624.48
        },
        {
          "month": 17,
          "incumbent": 1700,
          "alternative": 1694.76
        },
        {
          "month": 18,
          "incumbent": 1800,
          "alternative": 1765.04
        },
        {
          "month": 19,
          "incumbent": 1900,
          "alternative": 1835.32
        },
        {
          "month": 20,
          "incumbent": 2000,
          "alternative": 1905.6
        },
        {
          "month": 21,
          "incumbent": 2100,
          "alternative": 1975.88
        },
        {
          "month": 22,
          "incumbent": 2200,
          "alternative": 2046.16
        },
        {
          "month": 23,
          "incumbent": 2300,
          "alternative": 2116.44
        },
        {
          "month": 24,
          "incumbent": 2400,
          "alternative": 2186.72
        },
        {
          "month": 25,
          "incumbent": 2500,
          "alternative": 2257
        },
        {
          "month": 26,
          "incumbent": 2600,
          "alternative": 2327.28
        },
        {
          "month": 27,
          "incumbent": 2700,
          "alternative": 2397.56
        },
        {
          "month": 28,
          "incumbent": 2800,
          "alternative": 2467.84
        },
        {
          "month": 29,
          "incumbent": 2900,
          "alternative": 2538.12
        },
        {
          "month": 30,
          "incumbent": 3000,
          "alternative": 2608.4
        },
        {
          "month": 31,
          "incumbent": 3100,
          "alternative": 2678.68
        },
        {
          "month": 32,
          "incumbent": 3200,
          "alternative": 2748.96
        },
        {
          "month": 33,
          "incumbent": 3300,
          "alternative": 2819.24
        },
        {
          "month": 34,
          "incumbent": 3400,
          "alternative": 2889.52
        },
        {
          "month": 35,
          "incumbent": 3500,
          "alternative": 2959.8
        },
        {
          "month": 36,
          "incumbent": 3600,
          "alternative": 3030.08
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 2869.99
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 5,
          "savings_at_horizon": 1719.99
        },
        {
          "hourly_rate": 50,
          "verdict": "switch",
          "break_even_month": 17,
          "savings_at_horizon": 569.99
        },
        {
          "hourly_rate": 75,
          "verdict": "stay",
          "break_even_month": 159,
          "savings_at_horizon": -580.01
        },
        {
          "hourly_rate": 100,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -1730.01
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -4030.01
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -6330.01
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Vercel's edge network, which one VPS does not replicate at any price",
          "Automatic image optimisation and instant cache invalidation",
          "Zero-config Next.js behaviour that exists because Vercel builds both halves",
          "Preview deployments that cost nothing when idle"
        ],
        "you_gain": [
          "A fixed bill instead of usage billing that can spike without warning",
          "Free seats, including for people who only need to read logs",
          "Any runtime, not only the supported ones"
        ]
      },
      "caveats": [
        "Latency-sensitive global traffic is the case where this loses regardless of price. Put a CDN in front of it or stay on Vercel.",
        "The $20 per seat excludes usage overages. If bandwidth is why you are here, your Vercel bill is higher than this page assumes and Dokploy wins sooner.",
        "Dokploy is younger than Coolify with a smaller community. That is a real operational risk on the box that runs your production apps."
      ],
      "category": "hosting-paas",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "zapier-to-activepieces",
      "title": "Zapier Team to self-hosted Activepieces",
      "summary": "Zapier Team is $828 a year before you exceed a single task allowance. That is where self-hosted automation starts to make sense.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Zapier",
        "vendor_id": "zapier",
        "plan": "Team",
        "plan_id": "team",
        "amount": 69,
        "period": "month",
        "per_seat": false,
        "billed": "annual",
        "seats": 1,
        "quote": "Team Starting from $69 /month",
        "caveat": "Entry tier; rises with task volume.",
        "source_url": "https://zapier.com/pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "Activepieces (self-hosted)",
        "repo": "activepieces/activepieces",
        "project": {
          "full_name": "activepieces/activepieces",
          "url": "https://github.com/activepieces/activepieces",
          "homepage": "https://www.activepieces.com",
          "description": "AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents",
          "stars": 25106,
          "forks": 4363,
          "open_issues": 778,
          "license": null,
          "archived": false,
          "pushed_at": "2026-10-19T10:52:44Z",
          "days_since_push": 0,
          "latest_release": {
            "tag": "0.92.3",
            "published_at": "2026-10-12T18:43:34Z",
            "url": "https://github.com/activepieces/activepieces/releases/tag/0.92.3"
          },
          "days_since_release": 7,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:59.317Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-1c-2gb",
          "id": "vultr:vc2-1c-2gb",
          "vcpu": 1,
          "ram_gb": 2,
          "disk_gb": 55,
          "bandwidth_tb": 2,
          "monthly_usd": 10,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 20,
          "monthly_usd": 0.14
        },
        "requirements": {
          "ram_gb": 2,
          "vcpu": 1,
          "disk_gb": 25
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-1c-2gb",
            "monthly_usd": 10,
            "vcpu": 1,
            "ram_gb": 2,
            "disk_gb": 55,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 2GB",
            "monthly_usd": 12,
            "vcpu": 1,
            "ram_gb": 2,
            "disk_gb": 50,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "1 vCPU · 2 GB",
            "monthly_usd": 12,
            "vcpu": 1,
            "ram_gb": 2,
            "disk_gb": 50,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 10,
        "maintenance_hours_per_month": 0.6
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 1,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 69,
          "time_monthly": 0,
          "monthly": 69,
          "one_time": 0,
          "annual": 828
        },
        "alternative": {
          "cash_monthly": 10.14,
          "time_monthly": 30,
          "monthly": 40.14,
          "one_time": 500,
          "cash_one_time": 0,
          "time_one_time": 500,
          "annual": 481.67
        },
        "delta": {
          "monthly": 28.86,
          "upfront_to_switch": 500,
          "annual": 346.33
        },
        "break_even_month": 18,
        "break_even_hourly_rate": 67.06,
        "totals": {
          "at_12_months": {
            "incumbent": 828,
            "alternative": 981.67
          },
          "at_36_months": {
            "incumbent": 2484,
            "alternative": 1945
          },
          "at_horizon": {
            "incumbent": 2484,
            "alternative": 1945
          }
        },
        "savings": {
          "year_1": -153.67,
          "year_3": 539,
          "at_horizon": 539
        },
        "verdict": "switch"
      },
      "managed": null,
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 500
        },
        {
          "month": 1,
          "incumbent": 69,
          "alternative": 540.14
        },
        {
          "month": 2,
          "incumbent": 138,
          "alternative": 580.28
        },
        {
          "month": 3,
          "incumbent": 207,
          "alternative": 620.42
        },
        {
          "month": 4,
          "incumbent": 276,
          "alternative": 660.56
        },
        {
          "month": 5,
          "incumbent": 345,
          "alternative": 700.7
        },
        {
          "month": 6,
          "incumbent": 414,
          "alternative": 740.84
        },
        {
          "month": 7,
          "incumbent": 483,
          "alternative": 780.98
        },
        {
          "month": 8,
          "incumbent": 552,
          "alternative": 821.12
        },
        {
          "month": 9,
          "incumbent": 621,
          "alternative": 861.26
        },
        {
          "month": 10,
          "incumbent": 690,
          "alternative": 901.4
        },
        {
          "month": 11,
          "incumbent": 759,
          "alternative": 941.54
        },
        {
          "month": 12,
          "incumbent": 828,
          "alternative": 981.68
        },
        {
          "month": 13,
          "incumbent": 897,
          "alternative": 1021.82
        },
        {
          "month": 14,
          "incumbent": 966,
          "alternative": 1061.96
        },
        {
          "month": 15,
          "incumbent": 1035,
          "alternative": 1102.1
        },
        {
          "month": 16,
          "incumbent": 1104,
          "alternative": 1142.24
        },
        {
          "month": 17,
          "incumbent": 1173,
          "alternative": 1182.38
        },
        {
          "month": 18,
          "incumbent": 1242,
          "alternative": 1222.52
        },
        {
          "month": 19,
          "incumbent": 1311,
          "alternative": 1262.66
        },
        {
          "month": 20,
          "incumbent": 1380,
          "alternative": 1302.8
        },
        {
          "month": 21,
          "incumbent": 1449,
          "alternative": 1342.94
        },
        {
          "month": 22,
          "incumbent": 1518,
          "alternative": 1383.08
        },
        {
          "month": 23,
          "incumbent": 1587,
          "alternative": 1423.22
        },
        {
          "month": 24,
          "incumbent": 1656,
          "alternative": 1463.36
        },
        {
          "month": 25,
          "incumbent": 1725,
          "alternative": 1503.5
        },
        {
          "month": 26,
          "incumbent": 1794,
          "alternative": 1543.64
        },
        {
          "month": 27,
          "incumbent": 1863,
          "alternative": 1583.78
        },
        {
          "month": 28,
          "incumbent": 1932,
          "alternative": 1623.92
        },
        {
          "month": 29,
          "incumbent": 2001,
          "alternative": 1664.06
        },
        {
          "month": 30,
          "incumbent": 2070,
          "alternative": 1704.2
        },
        {
          "month": 31,
          "incumbent": 2139,
          "alternative": 1744.34
        },
        {
          "month": 32,
          "incumbent": 2208,
          "alternative": 1784.48
        },
        {
          "month": 33,
          "incumbent": 2277,
          "alternative": 1824.62
        },
        {
          "month": 34,
          "incumbent": 2346,
          "alternative": 1864.76
        },
        {
          "month": 35,
          "incumbent": 2415,
          "alternative": 1904.9
        },
        {
          "month": 36,
          "incumbent": 2484,
          "alternative": 1945.04
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 2119
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 6,
          "savings_at_horizon": 1329
        },
        {
          "hourly_rate": 50,
          "verdict": "switch",
          "break_even_month": 18,
          "savings_at_horizon": 539
        },
        {
          "hourly_rate": 75,
          "verdict": "stay",
          "break_even_month": 55,
          "savings_at_horizon": -251
        },
        {
          "hourly_rate": 100,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -1041
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -2621
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -4201
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Zapier's integration catalogue, which is an order of magnitude larger",
          "Someone else repairing an integration when a vendor changes their API",
          "Zapier's reliability record on unattended overnight runs"
        ],
        "you_gain": [
          "Unmetered task volume, which is the entire argument",
          "A visual builder close enough to Zapier's that the team does not have to relearn it",
          "Pieces written in TypeScript that you can extend yourself"
        ]
      },
      "caveats": [
        "Activepieces uses the MIT licence for its core with some enterprise features held back. Check which side of that line the features you need fall on.",
        "The $69 Zapier figure is its entry tier. If you are on Team because of task volume rather than seats, your real bill is higher and this comparison understates the saving.",
        "There is no automated import. Every workflow is rebuilt by hand."
      ],
      "category": "automation",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "zapier-to-n8n",
      "title": "Zapier Professional to self-hosted n8n",
      "summary": "Zapier bills by task volume; n8n on your own box does not. The crossover depends on how much you automate, not how many people you employ.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Zapier",
        "vendor_id": "zapier",
        "plan": "Professional",
        "plan_id": "professional",
        "amount": 19.99,
        "period": "month",
        "per_seat": false,
        "billed": "annual",
        "seats": 1,
        "quote": "Professional Starting from $19.99 /month",
        "caveat": "Entry tier. Zapier prices by task volume, so the real bill rises with usage; this is the floor, not the typical spend.",
        "source_url": "https://zapier.com/pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "n8n (self-hosted)",
        "repo": "n8n-io/n8n",
        "project": {
          "full_name": "n8n-io/n8n",
          "url": "https://github.com/n8n-io/n8n",
          "homepage": "https://n8n.io",
          "description": "Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.",
          "stars": 207985,
          "forks": 61185,
          "open_issues": 1215,
          "license": null,
          "archived": false,
          "pushed_at": "2026-10-19T10:53:50Z",
          "days_since_push": 0,
          "latest_release": {
            "tag": "n8n@2.43.8",
            "published_at": "2026-10-19T07:23:26Z",
            "url": "https://github.com/n8n-io/n8n/releases/tag/n8n%402.43.8"
          },
          "days_since_release": 0,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:53:59.742Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-1c-2gb",
          "id": "vultr:vc2-1c-2gb",
          "vcpu": 1,
          "ram_gb": 2,
          "disk_gb": 55,
          "bandwidth_tb": 2,
          "monthly_usd": 10,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 20,
          "monthly_usd": 0.14
        },
        "requirements": {
          "ram_gb": 2,
          "vcpu": 1,
          "disk_gb": 25
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-1c-2gb",
            "monthly_usd": 10,
            "vcpu": 1,
            "ram_gb": 2,
            "disk_gb": 55,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 2GB",
            "monthly_usd": 12,
            "vcpu": 1,
            "ram_gb": 2,
            "disk_gb": 50,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "1 vCPU · 2 GB",
            "monthly_usd": 12,
            "vcpu": 1,
            "ram_gb": 2,
            "disk_gb": 50,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 8,
        "maintenance_hours_per_month": 0.5
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 1,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 19.99,
          "time_monthly": 0,
          "monthly": 19.99,
          "one_time": 0,
          "annual": 239.88
        },
        "alternative": {
          "cash_monthly": 10.14,
          "time_monthly": 25,
          "monthly": 35.14,
          "one_time": 400,
          "cash_one_time": 0,
          "time_one_time": 400,
          "annual": 421.67
        },
        "delta": {
          "monthly": -15.15,
          "upfront_to_switch": 400,
          "annual": -181.79
        },
        "break_even_month": null,
        "break_even_hourly_rate": 13.64,
        "totals": {
          "at_12_months": {
            "incumbent": 239.88,
            "alternative": 821.67
          },
          "at_36_months": {
            "incumbent": 719.64,
            "alternative": 1665
          },
          "at_horizon": {
            "incumbent": 719.64,
            "alternative": 1665
          }
        },
        "savings": {
          "year_1": -581.79,
          "year_3": -945.36,
          "at_horizon": -945.36
        },
        "verdict": "stay"
      },
      "managed": {
        "provider": "PikaPods",
        "app": "n8n",
        "url": "https://www.pikapods.com/",
        "note": "Runs the same open-source software, applies updates, and takes daily encrypted backups to storage you own.",
        "source_url": "https://www.pikapods.com/apps",
        "quote": "n8n n8n is an … Run Your Own From $3.7/month",
        "monthly_usd": 3.7,
        "verified_at": "2026-10-19T10:54:00.624Z",
        "migration_hours": 4,
        "result": {
          "computable": true,
          "inputs": {
            "seats": 1,
            "horizon_months": 36,
            "hourly_rate": 50
          },
          "incumbent": {
            "cash_monthly": 19.99,
            "time_monthly": 0,
            "monthly": 19.99,
            "one_time": 0,
            "annual": 239.88
          },
          "alternative": {
            "cash_monthly": 3.7,
            "time_monthly": 0,
            "monthly": 3.7,
            "one_time": 200,
            "cash_one_time": 0,
            "time_one_time": 200,
            "annual": 44.4
          },
          "delta": {
            "monthly": 16.29,
            "upfront_to_switch": 200,
            "annual": 195.48
          },
          "break_even_month": 13,
          "break_even_hourly_rate": 146.61,
          "totals": {
            "at_12_months": {
              "incumbent": 239.88,
              "alternative": 244.4
            },
            "at_36_months": {
              "incumbent": 719.64,
              "alternative": 333.2
            },
            "at_horizon": {
              "incumbent": 719.64,
              "alternative": 333.2
            }
          },
          "savings": {
            "year_1": -4.52,
            "year_3": 386.44,
            "at_horizon": 386.44
          },
          "verdict": "switch"
        },
        "crossover": 146.61
      },
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 400
        },
        {
          "month": 1,
          "incumbent": 19.99,
          "alternative": 435.14
        },
        {
          "month": 2,
          "incumbent": 39.98,
          "alternative": 470.28
        },
        {
          "month": 3,
          "incumbent": 59.97,
          "alternative": 505.42
        },
        {
          "month": 4,
          "incumbent": 79.96,
          "alternative": 540.56
        },
        {
          "month": 5,
          "incumbent": 99.95,
          "alternative": 575.7
        },
        {
          "month": 6,
          "incumbent": 119.94,
          "alternative": 610.84
        },
        {
          "month": 7,
          "incumbent": 139.93,
          "alternative": 645.98
        },
        {
          "month": 8,
          "incumbent": 159.92,
          "alternative": 681.12
        },
        {
          "month": 9,
          "incumbent": 179.91,
          "alternative": 716.26
        },
        {
          "month": 10,
          "incumbent": 199.9,
          "alternative": 751.4
        },
        {
          "month": 11,
          "incumbent": 219.89,
          "alternative": 786.54
        },
        {
          "month": 12,
          "incumbent": 239.88,
          "alternative": 821.68
        },
        {
          "month": 13,
          "incumbent": 259.87,
          "alternative": 856.82
        },
        {
          "month": 14,
          "incumbent": 279.86,
          "alternative": 891.96
        },
        {
          "month": 15,
          "incumbent": 299.85,
          "alternative": 927.1
        },
        {
          "month": 16,
          "incumbent": 319.84,
          "alternative": 962.24
        },
        {
          "month": 17,
          "incumbent": 339.83,
          "alternative": 997.38
        },
        {
          "month": 18,
          "incumbent": 359.82,
          "alternative": 1032.52
        },
        {
          "month": 19,
          "incumbent": 379.81,
          "alternative": 1067.66
        },
        {
          "month": 20,
          "incumbent": 399.8,
          "alternative": 1102.8
        },
        {
          "month": 21,
          "incumbent": 419.79,
          "alternative": 1137.94
        },
        {
          "month": 22,
          "incumbent": 439.78,
          "alternative": 1173.08
        },
        {
          "month": 23,
          "incumbent": 459.77,
          "alternative": 1208.22
        },
        {
          "month": 24,
          "incumbent": 479.76,
          "alternative": 1243.36
        },
        {
          "month": 25,
          "incumbent": 499.75,
          "alternative": 1278.5
        },
        {
          "month": 26,
          "incumbent": 519.74,
          "alternative": 1313.64
        },
        {
          "month": 27,
          "incumbent": 539.73,
          "alternative": 1348.78
        },
        {
          "month": 28,
          "incumbent": 559.72,
          "alternative": 1383.92
        },
        {
          "month": 29,
          "incumbent": 579.71,
          "alternative": 1419.06
        },
        {
          "month": 30,
          "incumbent": 599.7,
          "alternative": 1454.2
        },
        {
          "month": 31,
          "incumbent": 619.69,
          "alternative": 1489.34
        },
        {
          "month": 32,
          "incumbent": 639.68,
          "alternative": 1524.48
        },
        {
          "month": 33,
          "incumbent": 659.67,
          "alternative": 1559.62
        },
        {
          "month": 34,
          "incumbent": 679.66,
          "alternative": 1594.76
        },
        {
          "month": 35,
          "incumbent": 699.65,
          "alternative": 1629.9
        },
        {
          "month": 36,
          "incumbent": 719.64,
          "alternative": 1665.04
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 354.64
        },
        {
          "hourly_rate": 25,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -295.36
        },
        {
          "hourly_rate": 50,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -945.36
        },
        {
          "hourly_rate": 75,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -1595.36
        },
        {
          "hourly_rate": 100,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -2245.36
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -3545.36
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -4845.36
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Zapier's 8,000+ prebuilt integrations; n8n has a few hundred plus generic HTTP",
          "Someone else fixing an integration when a vendor changes their API",
          "Zero-maintenance reliability — a failed workflow at 3am is now your pager"
        ],
        "you_gain": [
          "Unmetered task volume, which is the whole point if you run high-frequency automations",
          "Arbitrary JavaScript in a workflow without paying for a higher tier",
          "Data that never leaves your server, which matters for regulated workloads"
        ]
      },
      "caveats": [
        "n8n's licence is a fair-code Sustainable Use Licence, not OSI open source. Self-hosting for your own internal use is permitted; reselling it as a service is not.",
        "The $19.99 Zapier figure is the entry tier. If you are over its task allowance your real bill is higher and n8n wins sooner than this page shows.",
        "Rebuilding Zaps is manual — there is no importer. The 8-hour estimate assumes roughly a dozen workflows."
      ],
      "category": "automation",
      "updated_at": "2026-10-19"
    },
    {
      "slug": "zapier-to-windmill",
      "title": "Zapier Team to self-hosted Windmill",
      "summary": "Windmill is automation for people who would rather write a function than drag a box. That suits some teams and rules out others.",
      "publishable": true,
      "block_reason": null,
      "freshness": {
        "state": "fresh",
        "publishable": true,
        "oldest_input_days": 46.5,
        "problems": []
      },
      "incumbent": {
        "vendor": "Zapier",
        "vendor_id": "zapier",
        "plan": "Team",
        "plan_id": "team",
        "amount": 69,
        "period": "month",
        "per_seat": false,
        "billed": "annual",
        "seats": 1,
        "quote": "Team Starting from $69 /month",
        "caveat": "Entry tier; rises with task volume.",
        "source_url": "https://zapier.com/pricing",
        "verified_at": "2026-10-19",
        "needs_reverification": false
      },
      "alternative": {
        "name": "Windmill (self-hosted)",
        "repo": "windmill-labs/windmill",
        "project": {
          "full_name": "windmill-labs/windmill",
          "url": "https://github.com/windmill-labs/windmill",
          "homepage": "https://windmill.dev",
          "description": "Open-source developer platform to power your entire infra and turn scripts into webhooks, workflows and UIs. Fastest workflow engine (13x vs Airflow). Open-source alternative to Retool and Temporal.",
          "stars": 18218,
          "forks": 1124,
          "open_issues": 864,
          "license": null,
          "archived": false,
          "pushed_at": "2026-10-19T10:53:46Z",
          "days_since_push": 0,
          "latest_release": {
            "tag": "v1.841.0",
            "published_at": "2026-10-18T23:53:51Z",
            "url": "https://github.com/windmill-labs/windmill/releases/tag/v1.841.0"
          },
          "days_since_release": 0,
          "health": "active",
          "recommended": true,
          "verified_at": "2026-10-19T10:54:00.217Z"
        },
        "box": {
          "provider": "Vultr",
          "name": "vc2-2c-4gb",
          "id": "vultr:vc2-2c-4gb",
          "vcpu": 2,
          "ram_gb": 4,
          "disk_gb": 80,
          "bandwidth_tb": 3,
          "monthly_usd": 20,
          "url": "https://www.vultr.com/pricing/",
          "verified_at": "2026-10-19T10:53:42.716Z"
        },
        "storage": {
          "id": "backblaze-b2",
          "name": "Backblaze B2",
          "usd_per_gb_month": 0.00695,
          "egress": "free up to 3x stored volume per month, then $0.01/GB",
          "pricing_url": "https://www.backblaze.com/cloud-storage/pricing",
          "quote": "the amount of data stored per byte-hour over the last month at a rate of $6.95/TB/30-day",
          "verified_at": "2026-09-03",
          "verified_by": "human",
          "affiliate": true,
          "gb": 25,
          "monthly_usd": 0.17
        },
        "requirements": {
          "ram_gb": 4,
          "vcpu": 2,
          "disk_gb": 40
        },
        "box_alternatives": [
          {
            "provider": "Vultr",
            "name": "vc2-2c-4gb",
            "monthly_usd": 20,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.vultr.com/pricing/",
            "chosen": true
          },
          {
            "provider": "Linode",
            "name": "Linode 4GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.linode.com/pricing/",
            "chosen": false
          },
          {
            "provider": "DigitalOcean",
            "name": "2 vCPU · 4 GB",
            "monthly_usd": 24,
            "vcpu": 2,
            "ram_gb": 4,
            "disk_gb": 80,
            "url": "https://www.digitalocean.com/pricing/droplets",
            "chosen": false
          }
        ],
        "migration_hours": 14,
        "maintenance_hours_per_month": 0.75
      },
      "result": {
        "computable": true,
        "inputs": {
          "seats": 1,
          "horizon_months": 36,
          "hourly_rate": 50
        },
        "incumbent": {
          "cash_monthly": 69,
          "time_monthly": 0,
          "monthly": 69,
          "one_time": 0,
          "annual": 828
        },
        "alternative": {
          "cash_monthly": 20.17,
          "time_monthly": 37.5,
          "monthly": 57.67,
          "one_time": 700,
          "cash_one_time": 0,
          "time_one_time": 700,
          "annual": 692.09
        },
        "delta": {
          "monthly": 11.33,
          "upfront_to_switch": 700,
          "annual": 135.92
        },
        "break_even_month": 62,
        "break_even_hourly_rate": 42.87,
        "totals": {
          "at_12_months": {
            "incumbent": 828,
            "alternative": 1392.09
          },
          "at_36_months": {
            "incumbent": 2484,
            "alternative": 2776.26
          },
          "at_horizon": {
            "incumbent": 2484,
            "alternative": 2776.26
          }
        },
        "savings": {
          "year_1": -564.09,
          "year_3": -292.26,
          "at_horizon": -292.26
        },
        "verdict": "stay"
      },
      "managed": null,
      "curve": [
        {
          "month": 0,
          "incumbent": 0,
          "alternative": 700
        },
        {
          "month": 1,
          "incumbent": 69,
          "alternative": 757.67
        },
        {
          "month": 2,
          "incumbent": 138,
          "alternative": 815.34
        },
        {
          "month": 3,
          "incumbent": 207,
          "alternative": 873.01
        },
        {
          "month": 4,
          "incumbent": 276,
          "alternative": 930.68
        },
        {
          "month": 5,
          "incumbent": 345,
          "alternative": 988.35
        },
        {
          "month": 6,
          "incumbent": 414,
          "alternative": 1046.02
        },
        {
          "month": 7,
          "incumbent": 483,
          "alternative": 1103.69
        },
        {
          "month": 8,
          "incumbent": 552,
          "alternative": 1161.36
        },
        {
          "month": 9,
          "incumbent": 621,
          "alternative": 1219.03
        },
        {
          "month": 10,
          "incumbent": 690,
          "alternative": 1276.7
        },
        {
          "month": 11,
          "incumbent": 759,
          "alternative": 1334.37
        },
        {
          "month": 12,
          "incumbent": 828,
          "alternative": 1392.04
        },
        {
          "month": 13,
          "incumbent": 897,
          "alternative": 1449.71
        },
        {
          "month": 14,
          "incumbent": 966,
          "alternative": 1507.38
        },
        {
          "month": 15,
          "incumbent": 1035,
          "alternative": 1565.05
        },
        {
          "month": 16,
          "incumbent": 1104,
          "alternative": 1622.72
        },
        {
          "month": 17,
          "incumbent": 1173,
          "alternative": 1680.39
        },
        {
          "month": 18,
          "incumbent": 1242,
          "alternative": 1738.06
        },
        {
          "month": 19,
          "incumbent": 1311,
          "alternative": 1795.73
        },
        {
          "month": 20,
          "incumbent": 1380,
          "alternative": 1853.4
        },
        {
          "month": 21,
          "incumbent": 1449,
          "alternative": 1911.07
        },
        {
          "month": 22,
          "incumbent": 1518,
          "alternative": 1968.74
        },
        {
          "month": 23,
          "incumbent": 1587,
          "alternative": 2026.41
        },
        {
          "month": 24,
          "incumbent": 1656,
          "alternative": 2084.08
        },
        {
          "month": 25,
          "incumbent": 1725,
          "alternative": 2141.75
        },
        {
          "month": 26,
          "incumbent": 1794,
          "alternative": 2199.42
        },
        {
          "month": 27,
          "incumbent": 1863,
          "alternative": 2257.09
        },
        {
          "month": 28,
          "incumbent": 1932,
          "alternative": 2314.76
        },
        {
          "month": 29,
          "incumbent": 2001,
          "alternative": 2372.43
        },
        {
          "month": 30,
          "incumbent": 2070,
          "alternative": 2430.1
        },
        {
          "month": 31,
          "incumbent": 2139,
          "alternative": 2487.77
        },
        {
          "month": 32,
          "incumbent": 2208,
          "alternative": 2545.44
        },
        {
          "month": 33,
          "incumbent": 2277,
          "alternative": 2603.11
        },
        {
          "month": 34,
          "incumbent": 2346,
          "alternative": 2660.78
        },
        {
          "month": 35,
          "incumbent": 2415,
          "alternative": 2718.45
        },
        {
          "month": 36,
          "incumbent": 2484,
          "alternative": 2776.12
        }
      ],
      "sensitivity": [
        {
          "hourly_rate": 0,
          "verdict": "switch",
          "break_even_month": 0,
          "savings_at_horizon": 1757.75
        },
        {
          "hourly_rate": 25,
          "verdict": "switch",
          "break_even_month": 12,
          "savings_at_horizon": 732.74
        },
        {
          "hourly_rate": 50,
          "verdict": "stay",
          "break_even_month": 62,
          "savings_at_horizon": -292.26
        },
        {
          "hourly_rate": 75,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -1317.26
        },
        {
          "hourly_rate": 100,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -2342.26
        },
        {
          "hourly_rate": 150,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -4392.25
        },
        {
          "hourly_rate": 200,
          "verdict": "stay",
          "break_even_month": null,
          "savings_at_horizon": -6442.25
        }
      ],
      "tradeoffs": {
        "you_lose": [
          "Zapier's catalogue of prebuilt integrations, which is the actual product",
          "Non-technical colleagues being able to build their own workflows",
          "Someone else fixing an integration when a vendor changes their API"
        ],
        "you_gain": [
          "Scripts in TypeScript, Python, Go or Bash with proper version control",
          "Genuinely fast execution — this is a Rust runtime, not a hosted queue",
          "Unmetered runs, which is the whole argument"
        ]
      },
      "caveats": [
        "This is the least like-for-like swap on the site. If the people building your automations are not programmers, Windmill is not a Zapier replacement and the arithmetic is beside the point.",
        "The 14-hour estimate assumes you are comfortable writing the integrations yourself. There is no importer.",
        "Windmill's licence is not one GitHub recognises automatically, and some features are enterprise-gated. Check before committing."
      ],
      "category": "automation",
      "updated_at": "2026-10-19"
    }
  ]
}