What you’re deploying
The sirt-workshop-app is a React-based analyst console that runs as a Cloudflare Worker with static assets. It’s designed for progressive enhancement — you start with an empty shell and layer in capabilities lesson by lesson.
The app uses a STATE environment variable in wrangler.jsonc to gate features. Right now it’s set to state-1-empty, which renders just the UI shell with no data connections.
Step 1: Clone the repository
Open your terminal and clone the workshop app:
git clone <repo-url> sirt-workshop-app
After cloning, verify the directory structure:
ls sirt-workshop-app/
You should see at minimum: package.json, wrangler.jsonc, src/, and migrations/.
Step 2: Install dependencies
Navigate into the project and install:
cd sirt-workshop-app
npm install
This installs the React frontend dependencies, the Cloudflare Workers runtime types, and the wrangler CLI as a dev dependency. You should see no errors.
Step 3: Deploy to Workers
Deploy the app to your Cloudflare account:
npx wrangler deploy
Wrangler reads the configuration from wrangler.jsonc, bundles your app, and deploys it. Watch the output — it will print your live URL:
⛅️ wrangler 3.x.x
──────────────────
Total Upload: xxx KiB / gzip: xxx KiB
Worker Startup Time: xx ms
Uploaded sirt-workshop-app (x.xx sec)
Deployed sirt-workshop-app triggers (x.xx sec)
https://sirt-workshop-app.<your-subdomain>.workers.dev
Copy that *.workers.dev URL — this is your deployed analyst console.
Step 4: Verify the empty queue
Open the URL in your browser. You should see:
- A dark-themed UI with “SIRT” in the header
- An “Analyst Console” subtitle
- A queue card with the message “No incidents yet”
- A hint that says something like “Add a D1 database in lesson 06 to populate the queue”
This is state-1-empty — the empty shell. There’s no database connected yet, so there are no incidents to show.
Understanding STATE
If you open wrangler.jsonc, you’ll see an environment variable:
{
"vars": {
"STATE": "state-1-empty"
}
}
This STATE variable controls which features are active in the app. The React frontend and the API routes both check STATE to decide what to render. As you progress through lessons, you’ll change this value to unlock new capabilities:
state-1-empty— Empty queue shell (you are here)state-2-d1— Queue fetches from D1state-3-do— Per-incident state with Durable Objectsstate-4-workers-ai— AI-powered investigationstate-5-agent— Full agent harnessstate-6-sandbox— CLI enrichmentstate-7-dynamic-workers— Code generation
You don’t need to touch any application code for the first few lessons — just bindings and STATE.