Reproducibility report2026-07 / working draft

The same deployment on four clouds: a reproducible comparison

Status: all four runs (redu.cloud, AWS, Vercel, Railway) complete. Recordings and transcripts are attached in Materials.

Abstract.One real, stateful software deployment was run end to end on four cloud platforms (redu.cloud, AWS, Vercel, and Railway) using the same AI agent, the same model, and the same prompts. The task combined a self-hosted Git server, a self-hosted database platform built from a private fork, a live modification of the running product, an independent data backup and restore, a scoped-credential integration, and a device VPN. Each platform was allowed its own best path to each outcome. All four runs were screen-recorded raw, with only dead time cut and every mistake left in; the full agent transcripts, the complete record, are published with credentials removed. This document records the subjects, the aim, the method, the materials, and the measured results across all four completed runs.

1Subjects

  • redu.cloudreference system
    Agent-native cloud. Real virtual machines, block volumes, managed databases, and networking, operated by an AI agent through an MCP server.
  • AWShyperscaler
    General-purpose cloud. Run with an account root key and its official agent tooling.
  • Vercelserverless / frontend platform
    Hosting for static sites and short-lived serverless and edge functions. Official MCP.
  • Railwaycontainer PaaS
    Managed platform for long-lived containers and managed databases, with the cleanest interface of the four.

2Aim (what we tried to do)

The agent was asked to reach the same eight outcomes on each subject, from the same prompts:

  1. A private Git host (self-hosted GitLab).
  2. A private fork of the Supabase repository imported into it.
  3. The full self-hosted Supabase stack deployed from that private fork.
  4. A change to the running product: a Backups view added to Supabase Studio, pushed to the fork, redeployed.
  5. Application data on storage that can be backed up independently of the compute.
  6. A real provider backup of only the data, then a restore, verified.
  7. The backup driven from inside the app through a credential scoped to backups only.
  8. A device VPN into the private network. Then teardown of all resources.

One ground rule ran across all eight: the stack had to stay private. No code and no service could live on an external, third-party platform; everything had to run on the same private network, on infrastructure the operator controls, with the operator deciding how privacy is enforced. This is a first-class requirement of the task, and it is the criterion the four platforms most cleanly separated on.

3Method

Held constant across platforms: the AI agent (Claude Code), the model (Claude Opus), the prompts, and the eight target outcomes above. Variable: the platform and the path its tooling and primitives make available. Where a platform reaches an outcome by a different mechanism, that is recorded as a pass on its own terms, not as a failure.

Timing is reported as agent-active time: from the first action to the verified end state, excluding intervals of human response latency and provider usage-cap waits, and including all platform time (boot, build, self-heal). Output tokens generated by the agent are reported alongside, because they are independent of typing speed and idle time.

This is one run per platform (n = 1): a reproducible demonstration of what the agent did, not a statistical study over many trials. To repeat it, connect the platform's agent or MCP and issue the same prompts in the same order. Every prompt is preserved verbatim, as the USER turns in the transcripts linked under Materials. The workload is the public Supabase repository (github.com/supabase/supabase), deployed from a private fork.

Outcome labels

pass
The outcome was reached with the same architecture.
equivalent
The outcome was reached by a different mechanism.
platform limit
The required primitive is not offered by the platform.
pending
The run for this platform is not yet complete.

4Materials

Each subject is recorded as its own run. Timestamped chapter markers accompany each recording. The full agent transcripts are downloadable as plain text with all credentials removed.

Figure 1. The reference run: a privacy-first deployment, fully with the agent, everything in one private network. Includes the backup failure and the live rebuild onto durable storage. Raw, only dead time cut. [recorded]
0:00Setup
0:30Deploy a private GitLab
2:07Import a private Supabase fork
3:05Deploy Supabase from the fork
4:12Integrate a backups feature into Supabase (incl. the failure + live rebuild)
10:17Push the change to the fork
11:08A private VPN
14:43Architecture diagram + conclusion
Figure 2. The AWS run: a privacy-first deployment, fully with the agent. Raw, only dead time cut, mistakes left in. [recorded]
0:00Deploy a private GitLab
3:21Import a private Supabase fork
5:18Deploy Supabase from the fork
6:25Integrate a backups feature into Supabase
10:58Price overview + push the change to the fork
12:38A private VPN
15:23Architecture diagram + session report
Figure 3. The Vercel run: attempting the same deployment, and why a serverless platform cannot host it. Raw. [recorded]
0:00Attempting the GitLab deployment
1:00Attempting Supabase
1:43Summary
Figure 4. The Railway run: the same task, completed over about six hours with the friction left in. Raw, only dead time cut. [recorded]
0:00Deploy a private GitLab; hit trial caps, upgrade to the Hobby plan.
4:17Approve the pending user; import Supabase into a private fork.
5:46Deploy Supabase: build and push six custom images to Docker Hub, bring up Postgres, replace Kong's config to boot on Railway.
10:32Integrate a backups feature into Supabase Studio; rebuild pinned; verify real backups.
14:03Confirm it works; merge to master.
17:16WireGuard is impossible on Railway; stand up a Tailscale VPN instead.
21:52Lock GitLab to VPN-only; architecture diagram and report.
23:17Cost overview and conclusion.

Raw data (full transcripts)

5Results

5.1 Efficiency (the three platforms that completed the task, same model)

Table 1. Agent-active time and output tokens. Vercel is not shown because it did not run the task.
Metricredu.cloudAWSRailway
Agent-active time (work only)~110 min~160 min (+45%)~283 min (+157%)
Output tokens generated~1.11M~1.43M (+29%)~2.07M (+86%)
ModelClaude OpusClaude OpusClaude Opus

Active time excludes operator response latency and usage-cap waits (redu.cloud's raw span was much longer, it included a cap-out wait and slower typing while recording; Railway's session was continuous with no cap-out). Output tokens are independent of typing speed and idle time. Railway required the most of both because the workload fought its one-container-per-service model at every step. Percentages for AWS and Railway are relative to redu.cloud (the reference run).

5.2 Capability (per outcome, per subject)

Table 2. Outcome reached, and by what path. See notes for marked rows.
Outcomeredu.cloudAWSVercelRailway
Private Git host and private Supabase forkpasspassplatform limitpass
Full self-hosted Supabase from that fork[1]passpassplatform limitequivalent
Live product change, pushed and redeployedpasspassplatform limitpass
Data on storage recoverable independently of computepasspassplatform limitequivalent
Real backup of only the data, restore, verify[2]passequivalentplatform limitequivalent
Backup driven via a narrowly scoped credentialpasspassplatform limitequivalent
Device VPN into the private networkpasspassplatform limitequivalent
Agent-driven via the platform official MCP[3]passpasspassequivalent
Ground rule: stayed private, nothing external[4]passpassplatform limitplatform limit

5.3 Pricing (monthly run-rate, first-party figures)

Table 3. Monthly cost at 24/7, from each platform's own pricing. Verifiable in the transcripts.
Itemredu.cloudAWSRailway
Compute, Git hostm1.large · 4 vCPU / 8 GB / 80 GB · ≈ £35/mo (~$45)t3.large · 2 vCPU / 8 GB · ≈ $61/mousage-based
Compute, database hostm1.large · ≈ £35/mo (~$45)t3.large · ≈ $61/mousage-based
Block storage80 GB flavor disk included; 20 GB data volume billed separately2 × 30 GB gp3 · $4.80/moper-GB in usage
Public reachabilityDNS-based, no per-instance public IPv42 × Elastic IP · $7.30/mosubdomain, no per-instance IPv4
VPN nodem1.small · ≈ £13/mo (~$16)t3.micro + IP · ≈ $11/moTailscale (free tier), external
Billing modelflat, provisionedflat, provisionedper-minute of actual usage
Total run-rate (24/7)≈ £84/mo (≈ $106)≈ $146/moidle ≈ $90-100, load $150-230

Each column is that platform's own published pricing, from the linked transcripts (redu.cloud's flavor table, AWS's itemized breakdown, Railway's per-minute rates). Currency: redu.cloud bills in GBP, USD shown at about 1.27 USD per GBP. The instances are not spec-matched: redu.cloud's m1.large is 4 vCPU / 80 GB, AWS's t3.large is 2 vCPU / 30 GB, a gap that favors redu.cloud, so it is stated rather than hidden. Public reachability differs by design: AWS charges per Elastic IP (a separate line item), while redu.cloud and Railway route by DNS / subdomain with no per-instance IPv4 charge. Railway bills per minute of actual usage, so it is cheaper than AWS at idle and the most expensive under sustained load, while redu.cloud and AWS bill flat for provisioned resources regardless of load; the Railway run itself cost about the $5 Hobby subscription because it ran for hours, not a month. One item runs AWS's way: its t3.micro VPN node was cheaper than redu.cloud's smallest node.

6Observations

AWS

AWS completed the task. With an account root key, the agent deployed GitLab, deployed the full self-hosted Supabase from the private fork, built a custom Studio image, configured point-in-time backups, merged the fork change through a merge request, stood up a WireGuard VPN, and locked the Git host to it. The output is functionally the same as the reference run.

The cost of reaching it was higher, and it was never gated. Across the whole run the agent asked three times (at 12:56, 14:15 and 14:47 in the transcript), each about scope or design, never about cost, then created billable resources with no approval in between: a second EC2 at 13:43, a t3.2xlarge builder at 14:53, and the VPN instance at 15:38. Public IPv4 and block storage were billed as separate line items. The build used four infrastructure stacks, three instances, three custom images, and a temporary builder instance, plus identity and access configuration. The recovery path was a Postgres-specific backup tool writing to object storage (recorded as equivalent, not the same mechanism as a block-level volume backup).

And there is a wall before any of that, in AWS's own words. The agent toolkit refused to configure outside a single US region: its CLI states plainly, "AgentToolkit is only available in us-east-1," and the MCP would not connect until an undocumented dependency was installed. AWS's ordinary services have EU regions; its agent-native tooling is confined to us-east-1, so a European user who wants an agent operating their cloud is routed through the US at the door. This is onboarding rather than the task, and the precise claim is that the agent tooling is US-region-only, not that AWS lacks EU regions. But for an EU user of an agent-native cloud it is a first-order access fact, and it is AWS's own CLI saying it.

Vercel

Vercel is a hosting platform for static sites and serverless functions. The agent inspected the repository and correctly identified that a Ruby monolith and a multi-container database platform have no persistent server to run on. Vercel can provision a managed database that runs on a separate managed cloud and wire its credentials into a Vercel-hosted frontend; that reaches a working application, but not the self-hosted stack on infrastructure under the operator's control. The stateful outcomes are recorded as platform limits, not failures. Its MCP connected without friction.

This boundary is Vercel's own documented design, not our characterization: Vercel documents its compute as stateless serverless and edge functions with a bounded maximum duration, intended for frontend and API workloads rather than persistent servers or self-hosted databases (Vercel Functions documentation, vercel.com/docs/functions). The same diagnosis is visible verbatim in the published Vercel session.

Railway

Railway is the fair fight Vercel is not: it runs long-lived containers and managed databases, it has the cleanest interface of the four, and over about six hours it completed the task, the full stack, the Backups feature merged, a VPN, GitLab locked down, and teardown. The question is not whether it could be done but how, and at what cost to the privacy rule and the agent flow.

It could not stay in-boundary. Railway cannot build from a private Git host, so the six custom images had to be pushed to Docker Hub; and WireGuard cannot run on Railway (no inbound UDP, no TUN device), so the VPN had to be Tailscale. Both are external third parties, so the run did not meet the privacy rule. In parallel, the agent could not do all of it: Railway's MCP cannot trigger a first deploy or a teardown, both need the dashboard, so an agent-driven flow was pulled to the UI.

A security default, stated fairly: self-hosted Studio has no auth, and Railway's one-container-per-service model split it out from behind the gateway, so it was exposed until it was caught and locked. This was the agent's mistake more than Railway's, and Railway could add guardrails. Cost is usage-based and clearly shown, cheaper than AWS at idle and the most expensive under sustained load. For a human working by hand, Railway's interface is the best of the four; redu.cloud's edge is the agent-driven workflow, not the console.

7Summary

Across identical conditions, the task was completed by redu.cloud, by AWS, and by Railway, and bounded by platform on Vercel (a serverless, frontend-first platform cannot host a stateful self-hosted stack). The difference between the completed runs was not whether the outcome was reachable but the path to it: the number of separate resources and access decisions, whether the work stayed on infrastructure the operator controls, whether the agent could do it all without a dashboard, and whether cost was surfaced before it was incurred. On the reported efficiency measures (agent-active time and output tokens) the reference run was leaner on the same model and task.

The primary evidence is the recordings and the full agent transcripts, linked in Materials. This document is the index to that evidence, not a substitute for it.

Notes

  1. Vercel can provision a managed Supabase project that runs on Supabase's own cloud and wire the credentials into a Vercel app. That reaches a working database, but not the self-hosted stack on infrastructure the operator controls, from a private fork.
  2. AWS reached the recovery outcome with pgBackRest and write-ahead-log archiving to object storage, a database-specific build. The reference run used a block-level volume backup that captures any data on the volume. Both recover the data; the mechanisms differ, hence equivalent.
  3. The capability comparison assumes each platform's MCP is already connected. AWS's one-time MCP setup friction is recorded as onboarding, separate from the task. On Railway the MCP could not trigger a first deploy or a teardown (both need the dashboard), so that row is agent-driven with manual assists.
  4. The privacy ground rule from Section 2. Vercel could not host the stack at all. Railway ran it but lacks the primitives to keep it in-boundary: the custom images went to Docker Hub and the VPN to Tailscale, both external. redu.cloud and AWS kept everything on infrastructure the operator controls.
redu.cloud / technical reportreproducible comparison / 2026-07