How we calculate costs
Every dollar on a StackPlan report comes from deterministic math over curated provider pricing data. The LLM writes the explanations — strengths, tradeoffs, clarifying questions — but it never invents a number. If the model is unavailable, you still get stacks and costs; you just lose the prose.
The knowledge base
Provider pricing lives in a D1 database we curate by hand. Each provider has services (compute, database, object storage, and so on). Each service has plan tiers with a base monthly price, included quotas, overage rates, and hard limits — all stored in integer cents to avoid floating-point drift.
Tiers are versioned. When a price changes, we retire the old row and insert a new one with an effective_from date. Nothing is overwritten silently. Published changes show up on the public pricing changelog, and Pro users get alerts when a tier they rely on moves.
You can browse and edit the raw data in /admin (founder-only). The recommendation engine reads only active providers, active services, and non-retired tiers — the same snapshot every report uses.
Daily verification
A scheduled agent reads each service's pricing page once per day, compares what it finds against the current KB tiers, and files evidence-backed proposals when something differs. No-change checks still bump lastCheckedAt, so we know the page was actually read. Proposals land in an admin review queue — agents propose, humans approve. Nothing auto-writes to production pricing.
That check history is what powers the freshness badges on reports and compare pages. A provider only counts as verified when every one of its tracked services has been checked; the badge shows the stalest check, not the freshest. Below is the live state for every provider in the KB right now: