# The real-data companion

These are the actual social-video observations used in the article **How we design UI and UX with AI agents**. They are a frozen, deliberately bounded first-party extract, not sample data and not a live dashboard.

- `observations.json`: all 42 prepared eligible Instagram checkpoint rows; the four selected by views; two actual TikTok sharing readings; measured-zero and missing-field examples; all 66 points of one actual retention curve.
- `reproduce.py`: standard-library validation, selection from the supplied cohort and exact article arithmetic.
- `analysis.ipynb`: executed notebook with editable Matplotlib code, two embedded figures, calculations and interpretations. It opens with its saved outputs and needs no service credentials.

## Reproduce

Keep these files in one directory. Python 3 alone can run the calculations:

```sh
python reproduce.py
```

The script prints the input SHA-256, selected observations, leaders, sharing calculations and retention values. It does not make network requests or modify source files. A different JSON path may be passed as its only argument.

To inspect or rerun the figures, open `analysis.ipynb` in a Python Jupyter environment with Matplotlib, IPython, nbformat, nbclient and ipykernel available. Run the notebook from this directory, top to bottom. Its plotting code is editable; figures are native Matplotlib outputs, not screenshots of a hidden dashboard. No raw provider payload, private data path or credential is required.

## Source and selection

The source is a frozen Sweat AI social-metrics export with capture cutoff **2026-10-22T17:50:48.953Z**. Its compressed source SHA-256 is:

```text
70f856f52210af944e66dc0570aff5d71938fd6948b65c0afb536f6e10232ec1
```

The prepared comparison cohort contains **42 Instagram `@getsweatai` deliveries** published between **27 September and 20 October 2026**. Each had reached 48 hours by the cutoff and had a recorded capture between 46 and 50 hours after publication, with non-null views and average watch. Source preparation chooses the capture nearest to 48 hours; ties use earlier capture time, then smaller numeric snapshot ID. This is a capture checkpoint, not a guarantee about the provider's reporting data-through time.

The four highest-view rows are selected from that prepared cohort. Private source target IDs settle ranking ties during preparation. No views tie affects these four or their cutoff, so the selection is reproducible from the public data without those IDs. All 42 source rows were reconciled against the frozen export before extraction. The source checksum and original numeric snapshot IDs support tracing; they do not grant access to the omitted source.

**Reproduction boundary:** the public files reproduce row eligibility checks, top-four selection from the provided 42 rows, ratios and figure values. The complete private capture history is intentionally not distributed. A reader cannot independently establish cohort completeness or reconstruct nearest-capture selection across omitted records using only this subset.

## Row grain and columns

One `comparison_cohort` row is one published Instagram delivery at its prepared 48-hour checkpoint. `comparison` repeats the selected four in descending view order with the same fields. `label` is a shorter editorial name for its actual public title. It is not a generated film or a separate observation.

| Field | Meaning |
| --- | --- |
| `snapshot_id` | Original numeric source reading ID. |
| `label`, `title` | Short display name and actual public video title. |
| `platform`, `account_handle` | Platform and public account for the delivery. |
| `published_at`, `captured_at` | Original publication and collection timestamps, including UTC offset. |
| `observed_age_h` | `(captured_at − published_at)` in hours. |
| `checkpoint_h` | Target age, 48 hours; present on comparison rows. |
| `public_url` | Public video URL, stripped of query parameters and fragments. |
| `views`, `shares` | Recorded counters in that reading; `null` remains unreported. Views are not unique people. |
| `avg_watch_s` | Raw reported average watch in seconds; preserve full precision for calculation. |
| `duration_s` | Runtime used for that row; an unreported source runtime stays `null` outside the prepared comparison. |
| `avg_view_pct` | `avg_watch_s / duration_s × 100` on prepared comparison rows; not completed plays. |
| `runtime_source` | `snapshot.duration_s`, `post.metadata.duration_s`, or `not_reported_in_snapshot`. All comparison runtime values come from post metadata. |

The `sharing`, `zero_and_missing` and `retention` sections retain their own platform delivery and capture times. They are separate teaching examples, not extra rows in the 42-row Instagram comparison. The retention `points_seconds` array preserves all 66 supplied points. `keep` is a provider-reported fraction; multiply by 100 to display percent. Seconds were derived from normalized time using the runtime from that same source reading. The unreported curve sample size remains `null`.

## What the real rows show

| Film | Views | Average watch | Runtime | Average watch/runtime |
| --- | ---: | ---: | ---: | ---: |
| Mavrodi | 3,992 | 35.090 s | 77.880 s | 45.06% |
| Elizabeth Holmes | 1,607 | 19.847 s | 55.950 s | 35.47% |
| Anthony Gignac | 1,421 | 26.798 s | 50.560 s | 53.00% |
| Charles Ponzi | 1,415 | 24.610 s | 44.120 s | 55.78% |

Mavrodi leads views and mean seconds watched. Ponzi leads average-watch/runtime **among these four selected films**. These metrics answer different questions; the ratio does not estimate completed plays or establish creative quality.

For the Mavrodi TikTok delivery, the earlier reading has **1 share / 220 views = 4.55 per 1,000**; the later reading has **2 / 234 = 8.55 per 1,000**. Mixing the earlier share count with the later view count gives **4.27**, a value from neither recorded reading. It is an intentional counterexample, not an extra provider observation.

The Anastasia TikTok curve reports **65% at 4 seconds**, then **12% at its final supplied point, 65 seconds**. The runtime is 65.686 seconds; no final endpoint is invented. The source separately reports **12.53% completed plays**. That field is retained independently, and its denominator is not assumed to equal the curve's population.

## Limits and privacy

Distribution is unknown: these are not established-organic observations or a controlled experiment. Selecting the most-viewed films limits what this small comparison says about the complete cohort. A retention drop identifies a time worth inspecting, not its cause. No significance, causal lift, design outcome or editing recommendation is inferred.

The 363-view counter in the retention reading is a separate field, not an observed curve denominator. Missing shares in one YouTube reading are not zero and do not prove that the provider never supports shares. Comparison runtime metadata and capture ages remain visible because these affect interpretation.

The published JSON deliberately omits organization/account/post/target/release UUIDs, raw provider bodies, private paths, tokens and URL queries. It retains only the bounded allowlisted fields required to reproduce the examples. Original numeric snapshot IDs are retained as source references.
