You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: add slides TOC, promote Exercise 4, make Ex1 profile TODO explicit
Adds a numbered section table of contents that renders before every
major section divider in the deck, with the current section
highlighted in Temporal green. Reworks the intro slide to lead with
Tailscale outcomes rather than the AI agent. Promotes the Go agent
(Exercise 4) from a take-home stretch goal to a 15-minute in-session
exercise. Makes the "switch profiles to switch environments" lesson
explicit in Exercise 1 by turning the profile load into a required
code TODO instead of an implicit default. Adds a presenter guide for
the Slidev deck so someone cloning the repo can stand it up without
reading `slides/package.json`.
- `slides/theme-temporal/components/WorkshopToc.vue` lists the eight
workshop sections and highlights the active row in mint;
`slides/theme-temporal/layouts/toc.vue` wraps it in a two-column
layout over the existing perspective-grid background. Eight new
`layout: toc` dividers seeded through `slides/slides.md` with the
right `current` id for each section
- `slides/theme-temporal/styles/layout.css` gains numbered-list
styling: Temporal-green leading-zero markers, tabular-nums,
indented code blocks inside list items so the numbered Exercise
slides read cleanly
- "What We're Building Today" becomes "What You'll Learn Today."
Four outcome bullets now lead with infrastructure (Temporal server
on a tailnet, one config file for local/remote/tailnet, identity
based rate limits on a shared key) and treat the durable agent as
the last bullet rather than the framing. Drops the "By the end of
this workshop, you will be able to" preamble
- Exercise 4 promoted to in-session: `README.md`,
`docs/workshop-overview.md`, and the deck's Exercise 4 preview
slide updated. Ex3 tightened from 25 to 15 minutes to make room,
take-home language removed everywhere
- Exercise 1 gets a third TODO. `worker.py` and `starter.py` now ship
with a no-arg `ClientConfig.load_client_connect_config()` call plus
a TODO instructing learners to pass `profile="tailnet"`. Solution
files updated to match. `exercises/01_hello_tailnet/README.md`
renumbered (Step 2 creates the config, Step 3 is the new profile
load, Step 4 is the workflow-ID TODO, Steps 5-7 are run/verify)
- `docs/slides.md` walks through installing pnpm via corepack,
`pnpm install`, `pnpm dev`, presenter mode, PDF export, and theme
tweaks. Linked from `docs/index.md` (sixth audience card),
`mkdocs.yml` nav under "Teach the workshop",
`docs/run-with-instruqt.md`, and `docs/run-without-instruqt.md`
- Smaller fixes: Kartik's surname corrected from Venugopal to
Bharath; Mason's deck bio updated to Senior Solutions Architect
with the programmer/teacher quote and PSF/PyTexas credits; Aperture
sequence diagram participant renamed VM to Your Worker in the deck
and in `docs/architecture.md`; `temporal-ts-net` flags in the deck
updated to match the VPS (`--max-connections 500`,
`--connection-rate-limit 50`); section divider "temporal-ts-net &
Go Agent" becomes "and" for the keyboard-only sweep; leftover
em-dashes in `exercises/01_hello_tailnet/README.md` replaced with
commas and periods
Copy file name to clipboardExpand all lines: docs/run-with-instruqt.md
+4Lines changed: 4 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -62,6 +62,10 @@ The Aperture endpoint the workshop points at (`http://ai`) must be reachable fro
62
62
-[ ] One test workflow runs end-to-end from an Instruqt VM
63
63
-[ ] Slides loaded
64
64
65
+
## Slides
66
+
67
+
The deck lives at `slides/slides.md` and runs under Slidev. See [Present the slides](slides.md) for installing pnpm, running the deck, presenter mode, and exporting to PDF.
Copy file name to clipboardExpand all lines: docs/run-without-instruqt.md
+4Lines changed: 4 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -97,6 +97,10 @@ Pick (1) if your audience are pro devs with their own accounts. Pick (2) if you
97
97
-[ ] Auth key queued up for sharing (QR code printed, or paste-ready in chat)
98
98
-[ ] Slides open
99
99
100
+
## Slides
101
+
102
+
The deck lives at `slides/slides.md` and runs under Slidev. See [Present the slides](slides.md) for installing pnpm, running the deck, presenter mode, and exporting to PDF.
The deck lives at `slides/slides.md` and runs under [Slidev](https://sli.dev). It ships with a Temporal-branded theme at `slides/theme-temporal/` (Inter typography, mint + purple palette, grid + planet backgrounds) and a custom Shiki theme for code blocks.
4
+
5
+
## Prerequisites
6
+
7
+
- Node.js 20+
8
+
-`pnpm` (the lockfile in `slides/pnpm-lock.yaml` pins versions for pnpm specifically; npm will work but you will lose reproducible installs)
9
+
10
+
```shell
11
+
# If you don't have pnpm yet:
12
+
corepack enable
13
+
corepack prepare pnpm@10.33.0 --activate
14
+
```
15
+
16
+
## Install
17
+
18
+
```shell
19
+
cd slides
20
+
pnpm install
21
+
```
22
+
23
+
This pulls in `@slidev/cli` and links the local `slidev-theme-temporal` theme from `slides/theme-temporal/`.
24
+
25
+
## Run the deck locally
26
+
27
+
```shell
28
+
pnpm dev
29
+
```
30
+
31
+
Slidev starts on `http://localhost:3030`. Useful endpoints:
|`http://localhost:3030/overview/`| All slides at a glance |
38
+
39
+
The dev server hot-reloads whenever you edit `slides.md` or anything under `theme-temporal/`.
40
+
41
+
## Presenting
42
+
43
+
Run `pnpm dev` on the presenter laptop. Open `http://localhost:3030/presenter/` on your laptop screen and `http://localhost:3030/` on the projector / shared screen. Slidev keeps them in sync. Speaker notes come from HTML comments in `slides.md` (look for the `<!-- ... -->` blocks after each slide).
44
+
45
+
Handy keyboard shortcuts while presenting:
46
+
47
+
| Key | Action |
48
+
|---|---|
49
+
|`space`, `right arrow`, `click`| next step (advances through v-click reveals) |
50
+
|`left arrow`| previous step |
51
+
|`f`| toggle fullscreen |
52
+
|`o`| open overview |
53
+
|`d`| toggle dark / light mode |
54
+
55
+
## Export to PDF
56
+
57
+
```shell
58
+
pnpm export
59
+
```
60
+
61
+
Produces `slides-export.pdf` in `slides/`. Needs Chromium; Slidev pulls in `playwright-chromium` automatically on first run.
62
+
63
+
For a PDF that shows every v-click reveal expanded (useful for handouts):
64
+
65
+
```shell
66
+
pnpm export -- --with-clicks
67
+
```
68
+
69
+
For PNGs per slide:
70
+
71
+
```shell
72
+
pnpm export -- --format png
73
+
```
74
+
75
+
## Build static HTML
76
+
77
+
```shell
78
+
pnpm build
79
+
```
80
+
81
+
Writes a static site to `slides/dist/`. Useful if you want to host the deck somewhere alongside the docs site, or serve it from a USB stick at a conference with sketchy wifi.
82
+
83
+
## Tweaking the theme
84
+
85
+
The theme is local, not installed from npm, so you can edit it in place and see changes instantly in the dev server:
If you replace a background image, keep it WebP at ~1920 wide and ~200-300 KB for good projector quality without a slow page load. The originals are 16:9.
Copy file name to clipboardExpand all lines: exercises/01_hello_tailnet/README.md
+17-17Lines changed: 17 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,22 +1,22 @@
1
1
# Exercise 1: Hello Tailnet
2
2
3
-
Your first workflow on the shared Temporal server — accessed through the Tailscale network.
3
+
Your first workflow on the shared Temporal server, accessed through the Tailscale network.
4
4
5
5
## Goal
6
6
7
7
Connect your worker to the shared Temporal dev server running on the tailnet, run a simple geo-IP workflow, and see it in the Temporal Web UI.
8
8
9
9
## Background
10
10
11
-
A Temporal dev server is running on a remote VPS, exposed to this Tailscale network via [temporal-ts-net](https://github.com/temporal-community/temporal-ts-net). You can reach it at `temporal-dev:7233` (gRPC) and `http://temporal-dev:8233` (Web UI) — no VPN setup, no port forwarding, just Tailscale.
11
+
A Temporal dev server is running on a remote VPS, exposed to this Tailscale network via [temporal-ts-net](https://github.com/temporal-community/temporal-ts-net). You can reach it at `temporal-dev:7233` (gRPC) and `http://temporal-dev:8233` (Web UI). No VPN setup, no port forwarding, just Tailscale.
12
12
13
13
The workflow you'll run is simple: it gets your machine's public IP address, then geolocates it. Two activities, one result.
14
14
15
15
### How Environment Configuration Works
16
16
17
-
Instead of hardcoding server addresses in your code, the Temporal SDK reads connection settings from a [TOML configuration file](https://docs.temporal.io/develop/environment-configuration). This lets you switch between environments (local dev, tailnet, cloud) without changing any code — just switch profiles.
17
+
Instead of hardcoding server addresses in your code, the Temporal SDK reads connection settings from a [TOML configuration file](https://docs.temporal.io/develop/environment-configuration). This lets you switch between environments (local dev, tailnet, cloud) without changing any code. Just switch profiles.
18
18
19
-
The code already uses `ClientConfig.load_client_connect_config()`to load the active profile. Your job is to create the config file and tell it about the tailnet server.
19
+
Your job is to create the config file, then point the worker and starter at the `tailnet` profile so they connect to the shared server.
20
20
21
21
## Instructions
22
22
@@ -28,9 +28,9 @@ From the repository root:
28
28
uv run scripts/verify_setup.py
29
29
```
30
30
31
-
All dependency checks should pass. The Temporal connectivity check will fail — that's expected, you haven't configured the connection yet.
31
+
All dependency checks should pass. The Temporal connectivity check will fail, that's expected, you haven't configured the connection yet.
32
32
33
-
### Step 2: Complete TODO 1 — Create the Temporal config file
33
+
### Step 2: Complete TODO 1 - Create the Temporal config file
34
34
35
35
Create the file `~/.config/temporalio/temporal.toml` (you can copy the template from the repo root):
36
36
@@ -47,23 +47,23 @@ address = "temporal-dev:7233"
47
47
namespace = "default"
48
48
```
49
49
50
-
Then make sure your `.env` file sets the active profile:
50
+
### Step 3: Complete TODO 2 - Load the tailnet profile
51
51
52
-
```bash
53
-
TEMPORAL_PROFILE=tailnet
54
-
```
52
+
Open `practice/worker.py` and `practice/starter.py`. Each one calls `ClientConfig.load_client_connect_config()` with no arguments, which would load the `default` profile (localhost). Change both calls to load the `tailnet` profile:
55
53
56
-
The worker and starter code use `ClientConfig.load_client_connect_config()` which automatically reads this profile. No code changes needed for the connection — just the config file.
### Step 3: Complete TODO 2 — Add your name to the workflow ID
58
+
### Step 4: Complete TODO 3 - Add your name to the workflow ID
59
59
60
-
Open `practice/starter.py`. Find the TODO (~line 31) and add your `USER_ID` to the workflow ID so you can find it in the shared Temporal UI:
60
+
Still in `practice/starter.py`. Find the TODO near the `execute_workflow` call and add your `USER_ID` to the workflow ID so you can find it in the shared Temporal UI:
61
61
62
62
```python
63
63
id=f"{USER_ID}-geo-ip-{uuid.uuid4()}",
64
64
```
65
65
66
-
### Step 4: Start the worker
66
+
### Step 5: Start the worker
67
67
68
68
In one terminal:
69
69
@@ -74,7 +74,7 @@ uv run worker.py
74
74
75
75
You should see: `Connecting to Temporal at temporal-dev:7233` followed by `Starting worker on task queue: <your-user-id>-hello-tailnet`
76
76
77
-
### Step 5: Run the workflow
77
+
### Step 6: Run the workflow
78
78
79
79
In a second terminal:
80
80
@@ -85,15 +85,15 @@ uv run starter.py
85
85
86
86
You should see your public IP address and location printed.
87
87
88
-
### Step 6: Open the Temporal Web UI
88
+
### Step 7: Open the Temporal Web UI
89
89
90
90
Open your browser and go to:
91
91
92
92
```
93
93
http://temporal-dev:8233
94
94
```
95
95
96
-
Find your workflow by searching for your user ID. Click into it to see the execution history — both activities (get_ip, get_location_info) should show as completed.
96
+
Find your workflow by searching for your user ID. Click into it to see the execution history. Both activities (get_ip, get_location_info) should show as completed.
97
97
98
98
You're now running workflows on a shared Temporal server, accessible only through your Tailscale network. The same config file works for the worker, the starter, and the Temporal CLI:
0 commit comments