Case study 01 / Cloud operations

Retired August 2026 · Evidence preserved

ArenaOps

An on-demand backend with a visible lifecycle.

ArenaOps was a browser multiplayer demo built around an operational constraint: the backend should not run all month merely to remain clickable. ECS slept at desired count zero, woke through a public control path, reported readiness to the visitor, and returned to zero after the demo window. The paid runtime was retired after that loop had been proven end to end.

The source repository and full Git history remain private and preserved. This case study carries the architecture, operating decisions, screenshots, cost evidence, and limitations.

Status
Decommissioned
Former idle state
ECS desired count 0
Former runtime
ECS/Fargate + ALB
Preserved
Source, history, screenshots
FinOps outcome
About $24/month retired

01 / Operating problem

A sleeping demo can look exactly like a broken one.

Keeping a portfolio backend online 24/7 wastes compute. Switching it off without product feedback creates a dead link and asks the visitor to diagnose infrastructure they cannot see.

The answer was not to hide the cold start. ArenaOps turned asleep, starting, online, and shutdown into explicit user-facing states and only enabled room controls after health checks passed.

02 / Service lifecycle

One operating loop, four legible states.

The historical lifecycle is the product demonstration. Each state had an infrastructure condition, a visitor-facing message, and a clear transition rule.

  1. 01

    Asleep

    Zero tasks running

    ECS desired count was 0. Game actions remained unavailable and the interface explained why.

    desiredCount: 0
  2. 02

    Starting

    Wake accepted

    The Worker started ECS. The frontend polled status while the ALB waited for a healthy target.

    pending → health
  3. 03

    Online

    Room controls unlock

    Health passed and the browser established the WSS session with the FastAPI backend.

    healthOk: true
  4. 04

    Shutdown

    Return to zero

    EventBridge Scheduler stopped the service after the demo window and cost returned to idle.

    desiredCount: 0

03 / Architecture

Runtime control and delivery stay separate.

A visitor needed low-latency lifecycle control. A deployment needed a reviewable image and infrastructure path. ArenaOps gave each concern its own lane.

Lane A

Visitor and runtime path

  1. 01Cloudflare PagesReact + Phaser frontend
  2. 02Cloudflare WorkerWake and status API
  3. 03Application Load BalancerHTTPS / WSS and health
  4. 04ECS / FargateFastAPI WebSocket service
  5. 05EventBridgeScheduled return to zero
Lane B

Build and deployment path

  1. 01GitHub ActionsOIDC-authenticated workflow
  2. 02Amazon ECRVersioned backend image
  3. 03ECS deploymentTask and service update
  4. 04CloudWatchWake, health, traffic, shutdown
Foundation

Terraform · IAM · remote state · security boundaries · health checks · operational logs

04 / Working evidence

The operating loop is visible in the interface.

These captured live-demo screens are not a fabricated dashboard. They preserve state before access and the realtime room once the backend was ready.

A / Status and room flow
ArenaOps status screen reporting the backend online, the scheduled auto-stop, and room controls.
The visitor sees readiness and the shutdown window before creating or joining a room.
B / Realtime session
ArenaOps connected multiplayer room with operator controls and the active arena view.
After target health passes, the browser exchanges room and arena events with the backend over WSS.

05 / Engineering ownership

What I designed and implemented.

  1. 01

    Lifecycle contract

    Defined the asleep, starting, online, and shutdown states and made them part of the frontend experience.

  2. 02

    Public control boundary

    Separated visitor-triggered wake and status control from the slower deployment workflow.

  3. 03

    Cloud delivery

    Provisioned infrastructure with Terraform and delivered backend images through GitHub Actions, ECR, and ECS.

  4. 04

    Failure-aware operations

    Worked through IAM scope, CORS, ALB target health, Scheduler payloads, WebSockets, logs, and remote state.

06 / Boundaries

A focused cloud demo, not a production-scale multiplayer platform.

  • Cold-start delay is deliberate and communicated.
  • HTTP 503 while asleep was expected behavior.
  • No high-availability or production-traffic claim is made.
  • The private source repository is not required to understand the public proof.
  • The paid runtime was retired in August 2026; this page is the durable artifact.

07 / Retirement decision

Stop paying when the operating lesson is already proven.

Scale-to-zero eliminated idle Fargate compute, but July 2026 still produced about $24.25 in ArenaOps-only baseline charges: $16.74 for the Application Load Balancer, $7.44 for its two public IPv4 addresses, and about $0.07 for ECR storage.

The AWS stack was removed through its reviewed Terraform state boundary. The application source, infrastructure definitions, workflows, Git history, documentation, and working screenshots were preserved so the project keeps its portfolio value without recurring runtime cost.

Technical index

ArenaOps technology

React · TypeScript · Phaser · FastAPI · WebSockets · Docker · ECS/Fargate · ALB · ECR · IAM · EventBridge Scheduler · CloudWatch · Terraform · S3 remote state · GitHub Actions · Cloudflare Pages · Cloudflare Workers