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.

How one lab is provisioned The learner app asks the session API for a lab. The request is queued. A provisioner starts one EC2 machine for the session, which runs the tutorial stack and reports four stages back. A broker behind a shared load balancer opens the lab only to its owner. A model gateway issues a personal key with a one euro limit. Closing the lab or the four-hour limit terminates the machine. Learner Control plane (serverless) One lab = one machine Learner appserved from a CDN Sign-inAmazon Cognito Session APIOpenAPI contract session table · audit table Queue+ dead-letter queue Provisionerlaunch template EC2 instance4 vCPU · 8 GiB · one per learner Tutorial stack (Compose)Dify 1.16.1 · 16 services 1 starting your machine2 starting the tools3 preparing the data4 checking everything answers Shared load balancerwildcard certificate Brokerowner checked on every request https://<32-character label>.session… Clean-upsweeper + the machine’s own timer close or 4-hour limit → terminate stage reports 1 2 3 4 5

  1. Request. The learner app asks the session API for a lab. The request is recorded and queued.
  2. Build. A provisioner starts one virtual machine for this session (4 vCPU, 8 GiB) from a launch template and a checksummed tutorial package.
  3. 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.
  4. 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.
  5. 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.
  1. Request

    Learner appSession APIQueue

    The learner app asks the session API for a lab. The request is recorded and queued.

  2. 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.

  3. Report

    Tutorial stack (Compose)

    Dify 1.16.1 · 16 services

    1. Starting your machine
    2. Starting the tools
    3. Preparing the data
    4. 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.

  4. 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.

  5. 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

  1. Step 1 of 4Starting your machine
  2. Step 2 of 4Starting the tools
  3. Step 3 of 4Preparing the data
  4. Step 4 of 4Checking everything answers
  5. 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

What the platform is made of
InterfaceA versioned HTTP API described by an OpenAPI contract
Control planeServerless on AWS: functions for the API, provisioning, brokering, clean-up and relaying
Work queueA queue with a dead-letter queue
StateA session table and a separate audit table
ComputeOne EC2 machine per lab, from a launch template
IngressA shared load balancer with a wildcard certificate
Sign-inAmazon Cognito
Front endsTwo web applications behind a CDN: the learner app and the operator backstage
InfrastructureDefined 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
The operator backstage Labs view: every lab with its state, time left, tutorial and the learner’s pseudonym
Real screen · backstage during a test run: one learner, three labs
The operator backstage, Platform now: labs running or starting, learners with a lab, starting, failed
Real screen · backstage during a test run, Platform now

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.

Pricing

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.

Talk to the founder