Case study 01 / Cloud operations

Focused portfolio demo · Source private

ArenaOps

Compute that explains when it is off.

ArenaOps is a browser multiplayer demo built around an operational constraint: the backend should not run all month merely to remain clickable. ECS sleeps at desired count zero, wakes through a public control path, reports readiness to the visitor, and returns to zero after the demo window.

The source repository is private. This case study carries the public architecture, operating decisions, screenshots, and limitations.

Idle state
ECS desired count 0
Wake control
Cloudflare Worker
Runtime
ECS/Fargate + ALB
Readiness
Status + target health
Shutdown
EventBridge Scheduler

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 turns asleep, starting, online, and shutdown into explicit user-facing states and only enables room controls after health checks pass.

02 / Service lifecycle

One operating loop, four legible states.

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

  1. 01

    Asleep

    Zero tasks running

    ECS desired count is 0. Game actions remain unavailable and the interface explains why.

    desiredCount: 0
  2. 02

    Starting

    Wake accepted

    The Worker starts ECS. The frontend polls status while the ALB waits for a healthy target.

    pending → health
  3. 03

    Online

    Room controls unlock

    Health passes and the browser can establish the WSS session with the FastAPI backend.

    healthOk: true
  4. 04

    Shutdown

    Return to zero

    EventBridge Scheduler stops the service after the demo window and cost returns to idle.

    desiredCount: 0

03 / Architecture

Runtime control and delivery stay separate.

A visitor needs low-latency lifecycle control. A deployment needs a reviewable image and infrastructure path. ArenaOps gives 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 are live-demo screens, not a fabricated dashboard. They show state before access and the realtime room once the backend is 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 is expected behavior.
  • No high-availability or production-traffic claim is made.
  • The private source repository is not required to understand the public proof.

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