CHAPTER 28 VISUAL LABS — boards 28a and 28b

These are original fictional teaching examples. Work locally.
Read the named boards first. Predict before running, and explain any
difference before changing a second thing.

HOW TO REPRODUCE
Open a terminal in this ch28 folder. Node 22+ is used by the book. Run:
node walkthrough.cjs
Expected output:
First fictional report:
Enquiries: 30
Cost per enquiry: 20.666666666666668
Changed report:
Enquiries: 0
Cost per enquiry unavailable: no enquiries
The calculation example is offline. It models the values after a
successful response, rather than claiming that it made a request.

TO OBSERVE THE ACTUAL LOCAL EXCHANGE
In a terminal opened in companion/web, run node server.cjs.
In a second terminal in companion/web, run node read_report.cjs.
Inspect http://127.0.0.1:8765/api/campaigns in a browser Network panel:
status 200; JSON body {"cost":620,"enquiries":30,"currency":"EUR"}.
Request /api/missing: status 404 and the taught failure sentence.
Stop the server with Ctrl+C, then reload: no HTTP response is received.
The server uses only this computer and fictional records.

CHANGE / PREDICT / CHECK
In walkthrough.cjs change the second report's enquiries from 0 to 20.
Predict first: Enquiries: 20 and Cost per enquiry: 31. Run to check.
A zero count is a data condition, not evidence that a request failed.
