PLUTUS · ENGINE ROOM // PAPER ONLY · NO LIVE CAPITAL
ENGINEERED BY LEOPARD DATA

The Azure Estate

One Pulumi program, one environment, every logical name prefixed plutus-. Half of it is running. The other half is code that waits for a gate.

Two halves of one program

Plutus.Pulumi.Infrastructure.Prod/Program.cs describes the whole estate, but it stands up in two steps behind a single flag. With deployEstate=false — the default, and the current stack configuration — only the foundation exists: a resource group, a storage account, one container, and a data-plane role for whoever ran pulumi up. Flipping the flag at Phase 4 adds everything else without touching what is already there.

The foundation was deployed on 2026-09-01, the same evening the news archiver first wrote to it. Nothing in the estate half has been stood up. That is deliberate — the rule is to deploy when a gate requires it — and this page describes the estate as designed, not as running.

The foundation — deployed

2026-09-01
ResourceNameSettings that matter
Resource groupplutus-prod-rgCentral US; tagged Production
Storage accountplutusprodblobStorageV2, Standard_ZRS, hot tier, TLS 1.2 minimum, no public blob access
Blob serviceVersioning on; 14-day soft delete
Containerplutus-artifactsThe one container — the path is the index, more containers buy nothing
Role assignmentStorage Blob Data ContributorGranted to the deployer's own identity, scoped to the account

Versioning and soft delete are there because the archive's whole value is that it is never lost; an accidental overwrite or delete is recoverable for two weeks. The role assignment is what lets the archiver run on a laptop with DefaultAzureCredential and no connection string. The VM's managed identity gets the same role when the estate arrives.

The whole footprintThe Azure estate: external services, the VNet with its subnets, the trader VM and its four consoles, the App Services, MySQL, blob and Key Vault
Prod only. The trader VM runs the engine and three sidecar consoles; the App Services host the admin site, this site, and the HTTP API; everything reaches Key Vault by managed identity.

The estate — coded, waiting for Phase 4

not deployed

A virtual network at 10.2.0.0/16 — chosen so it cannot collide with GMI's 10.1.0.0/16 if anyone ever needs the two to talk — with five /24 subnets:

SubnetPrefixDelegated to
plutus-prod-admin-app-subnet10.2.0.0/24App Service
plutus-prod-technology-app-subnet10.2.1.0/24App Service
plutus-prod-function-app-subnet10.2.2.0/24App Service (functions)
plutus-prod-mysql-subnet10.2.3.0/24MySQL Flexible Server
plutus-prod-vm-subnet10.2.4.0/24— (the trader VM)
  • Trader VM plutus-prod-trader-vm — Standard_B2s (2 vCPU, 4 GB), Ubuntu 22.04, system-assigned identity, SSH key only with password auth disabled, inbound 22 from one configured IP and the Azure DevOps range. A custom-script extension installs the .NET 10 runtime and lays out /opt/plutus.
  • Two App Service plans, both B1 Linux — plutus-prod-asp for the two SSR sites, plutus-prod-function-asp for the API, split to avoid VNet connection limits.
  • Three web appsplutus-prod-admin-webapp, plutus-prod-technology-webapp (this site), plutus-prod-functions; each with a managed identity and VNet routing.
  • MySQL Flexible Server plutus-prod-mysql — Standard_B1ms burstable, 32 GB, version 8.0.21, public network access disabled, 35-day backups, database plutusproddb in utf8mb4.
  • Key Vault plutus-prod-kv — Standard, soft delete for 90 days, purge protection on; the deployer can manage secrets, every workload identity can only get and list.

What it costs, and what it would cost elsewhere

Line$/month
Trader VM + OS disk~36
Two App Service plans (B1)~26
MySQL B1ms + 32 GB + backups~17–22
Storage, Key Vault, public IP, bandwidth~9–12
Azure subtotal~90–100
Claude, FMP, Twilio, IBKR data — cloud-agnostic~30–100
All-in at launch scale~120–200

The same capability was priced on AWS (~$68) and GCP (~$63–70). Most of the gap is one line: two always-on B1 plans against scale-to-zero hosting. That was kept on purpose, on 2026-08-27 — a visitor to this site should never wait on a cold start, and ~$20 a month is what that costs. Migration payback was estimated at years or never. Today's bill, with only the foundation running, is a few dollars.

Conventions
  • Prod only. No dev or staging environment, decided 2026-08-24 — roughly half the bill of a split
  • Every name starts plutus- (storage accounts drop the hyphen: plutusprodblob)
  • Identity over secrets — every compute resource has a system-assigned identity
  • No password auth anywhere a key or an identity can do the job
Deployed today
found.rg · blob · container · roleup
estateVNet · VM · MySQL · KV · 3 appsgate 4