Cloud & platform · cloud.catalogCI passing

Cloud Service Catalog and Governance

Self-service cloud with guard rails: policy checks, approvals, vetted Terraform and cost estimates that include usage.

Open the live demo View the code Evaluation report Demo tour Run it ›_ last push 2 days ago

8.5% vs 18.6%median cost-estimate error against list price, on held-out organisations

8.9% vs 35.1%of requests underestimated by over 30%

$153k vs $419kover budget in three months with the gate (no gate)

A request: the usage-aware estimate against list price, the approvals it needs and why, and the Terraform the platform will apply
A request: the usage-aware estimate against list price, the approvals it needs and why, and the Terraform the platform will apply. Screenshot from the project's demo (synthetic data).

demo Demo tour

Screenshots from the running application, with its synthetic demo data. Select one to enlarge.

A production database request: the estimate with usage against list price, the approvals it needs and why, and the Terraform.
A production database request: the estimate with usage against list price, the approvals it needs and why, and the Terraform.
A rejected request: each problem with the reason and how to fix it.
A rejected request: each problem with the reason and how to fix it.
The catalog of approved products, each encrypted, private by default and tagged to its team.
The catalog of approved products, each encrypted, private by default and tagged to its team.
Team budgets: last month's bill plus new requests against each budget.
Team budgets: last month's bill plus new requests against each budget.
Cost estimates against real bills on held-out organisations, and the budget gate compared with list-price gates.
Cost estimates against real bills on held-out organisations, and the budget gate compared with list-price gates.

01 The problem

Product teams wait days for cloud resources behind tickets, or provision them directly and skip encryption, residency and tagging. Either way the bill surprises everyone, because estimates use list prices and the usage part of the bill is invisible until it arrives.

02 How it works

  1. Form or plain English
  2. Schema validation
  3. Policy checks
  4. Usage-aware estimate
  5. Approvals and budget gate
  6. Vetted Terraform

03 What I built

  • A catalog of approved products with request forms generated from each product's schema, policy checks with a reason and a fix for every problem, and approval routing to finance, security and platform.
  • Terraform rendered from pinned, vetted modules with encryption, private networking and ownership tags always on.
  • Cost estimates that learn each product's usage ratio from similar running resources, a budget gate built on a cautious estimate, and plain-English requests drafted by Claude and validated against the catalog.

04 What I learned

The first 'catalog typical usage' baseline used the simulator's own ratios, which no real catalog knows; it was replaced with the common 'list price + 20%' habit before any held-out run.

The first held-out run showed every gate failing equally because simulated resources were never decommissioned; the world was fixed, tuning repeated, and the episode documented.

05 Known limitations

Every repository documents what it doesn't do yet. The main ones:

  • A request gate cannot stop growth in resources already running, which caused most overspend; running-cost alerts are needed alongside.
  • Terraform is rendered, not applied; approvals are routed, not collected.

06 Stack

PythonFastAPITerraformNumPyClaude APIDocker

The repository has the design document, operations runbook, full evaluation report and known limitations. All data is synthetic, generated by code in the repository.

run Run it yourself

Every project runs on a laptop: no cloud account and no paid API needed.

git clone https://github.com/codeROCK-IZZY/cloud-service-catalog.git
cd cloud-service-catalog
pip install -e ".[dev]" && pytest
catalog evaluate --gate                    # writes eval/reports/report.html

↑↓ to move · Enter to open · Esc to close