Under the hood
The platform behind the labs
Testing Fantasy Cloud is a software platform that provisions and tracks hands-on labs. This page says how it is built and what state it is in.
Architecture
What happens when you press Begin quest
No shared server and no simulator. Each lab is a real machine in the EU (Ireland), started for one learner and reachable only by that learner.
- Request. The learner app asks the session API for a lab. The request is recorded and queued.
- Build. A provisioner starts one virtual machine for this session (4 vCPU, 8 GiB) from a launch template and a checksummed tutorial package.
- Report. The machine starts the tutorial's stack, here a 16-service Dify 1.16.1 installation, and reports four stages back. The learner sees them live.
- Open. A broker gives the lab its own random 32-character address behind a shared load balancer and checks on every request that the person opening it owns it.
- Remove. Closing the lab, or reaching the four-hour limit, terminates the machine. A sweeper and the machine's own timer catch anything left behind.
Request
Learner appSession APIQueue
The learner app asks the session API for a lab. The request is recorded and queued.
Build
EC2 instance · 4 vCPU · 8 GiB
one per learner, from a launch template
A provisioner starts one virtual machine for this session (4 vCPU, 8 GiB) from a launch template and a checksummed tutorial package.
Report
Tutorial stack (Compose)
Dify 1.16.1 · 16 services
- Starting your machine
- Starting the tools
- Preparing the data
- Checking everything answers
The machine starts the tutorial's stack, here a 16-service Dify 1.16.1 installation, and reports four stages back. The learner sees them live.
Open
Shared load balancerBrokerOwner check
A broker gives the lab its own random 32-character address behind a shared load balancer and checks on every request that the person opening it owns it.
Remove
TerminateSweeperMachine timer
Closing the lab, or reaching the four-hour limit, terminates the machine. A sweeper and the machine's own timer catch anything left behind.
REQUESTEDASSIGNEDPROVISIONINGREADYACTIVERELEASINGRELEASED
In the learner's words: Queued · Conjuring · Ready · Open · Closed
The four stages a learner sees while the lab builds
- Step 1 of 4Starting your machine
- Step 2 of 4Starting the tools
- Step 3 of 4Preparing the data
- Step 4 of 4Checking everything answers
- ThenLab ready
- 4 hmaximum per lab
- 15 minwarning before the end
- 30 minunused and never opened: released
- 1lab open per tutorial at a time
What the platform is made of
| Interface | A versioned HTTP API described by an OpenAPI contract |
|---|---|
| Control plane | Serverless on AWS: functions for the API, provisioning, brokering, clean-up and relaying |
| Work queue | A queue with a dead-letter queue |
| State | A session table and a separate audit table |
| Compute | One EC2 machine per lab, from a launch template |
| Ingress | A shared load balancer with a wildcard certificate |
| Sign-in | Amazon Cognito |
| Front ends | Two web applications behind a CDN: the learner app and the operator backstage |
| Infrastructure | Defined as Terraform |
Tutorials are packages
A tutorial is a manifest, a container stack and its lessons, with every file checksummed. The platform runs the package; adding a tutorial does not mean changing the platform.
Guardrails as product features
- 4 hmaximum per labA lab ends at four hours, whatever state it is in.
- 15 minwarning before the endThe learner is told in time to save what matters.
- 30 minunused and never opened: releasedA lab nobody opened does not keep a machine running.
- 1lab open per tutorial at a timeOne learner cannot multiply machines by accident.
Operations
The platform has a second application for the people who run it: today's labs at a glance, conference rooms with seat codes, the tutorial catalog and cost against a monthly ceiling. It is designed with a second sign-in factor for operators and a record of every operator action.
- Today
- Conferences
- Labs
- Catalog
- Cost


Billing
Written against Stripe subscriptions: one product, four prices, a 7-day trial, renewals, failed-payment handling, a self-service portal. The hosted wiring and the learner billing screens are in progress; nothing is charged before the opening.
Where it stands
What is built, and what is next
As of 11 October 2026: opening in November 2026 as a beta. One tutorial at opening: Testus Patronus.
Built
- Tutorial packagesA tutorial is a checksummed package the platform compiles and runs. The first one, Testus Patronus, is accepted.
- A lab per learnerSession API, queue, provisioner, broker and clean-up: one machine per lab, opened only to its owner.
- Learner app and backstageThe quest board, the tutorial page with its lab panel, and the operator console.
In progress
- Self-service betaA development environment is deployed. The production one is being prepared for the opening.
- SubscriptionsPlans, checkout and the customer portal are written against Stripe. The hosted wiring and the learner billing screens come next.
- Metered model accessThe per-lab key, its limit and the allowance shown on the lab panel work on the local stack with a real model. The hosted gateway is being wired.
Next
- A second tutorialThe next package moves an existing conference tutorial onto the platform.
- Operator control planeMore of the day-to-day operation moves into the backstage.
- HardeningNetwork isolation, richer progress and commerce features.
Contact
Testing Fantasy is a one-person product company in Biberach an der Riß, Germany, founded by Paula Bassagañas, IT architect. Testing Fantasy Cloud is its product.