# THIS YOU — DEV SPEC
## Selective QR + Digital Link System
### v2

# 0. CORE RULE

> **A link alone does not justify a QR. A meaningful digital continuation does.**

Digital pages may contain many links. Print must stay quiet.

`links` and `needs_qr` are independent.

# 1. PAGE FIELDS

```json
{
  "links": [],
  "needs_qr": false,
  "qr_purpose": null,
  "qr_target_mode": null
}
```

Recommended `qr_purpose` values:

```text
digital_entry
style
motion
sponsor
```

Recommended `qr_target_mode` values:

```text
issue_root
same_page
```

# 2. ISSUE 01 DEFAULT QR MAP

```text
02  digital_entry  issue_root
08  style          same_page
12  style          same_page
16  style          same_page
20  style          same_page
22  motion         same_page
24  style          same_page
28  style          same_page
30  sponsor        same_page
```

These values belong to issue/page data. Do not hard-code the page numbers into the renderer.

# 3. EVENT STORY PAGES

Digital:
- render `OFFICIAL EVENT ↗`.

Print:
- no QR merely because that link exists.

Example:

```json
{
  "links": [
    {
      "type": "official_event",
      "label": "OFFICIAL EVENT",
      "url": "https://..."
    }
  ],
  "needs_qr": false
}
```

# 4. PAGE 02

Print label:

```text
OPEN YOUR DIGITAL EDITION
```

QR opens the reader's digital issue entry.

```text
qr_purpose = digital_entry
qr_target_mode = issue_root
```

# 5. STYLE PAGES

One QR per STYLE page.

Digital page contains:
- individual product links,
- whole-look reactions,
- product reactions.

Never one QR per product.

# 6. ARTCODINGLAB

Print:
- still + one QR.

Digital:
- motion / interactive version.

```text
qr_purpose = motion
qr_target_mode = same_page
```

# 7. SPONSOR PAGE

Print:
- one QR if meaningful sponsor CTA exists.

Digital:
- clickable sponsor/product CTA.

```text
qr_purpose = sponsor
qr_target_mode = same_page
```

# 8. NORMAL MUSIC / EVENT REFERENCES

A song, playlist, event URL or background reference does not automatically require print QR.

Digital can keep those links clickable.

# 9. ABSURD BACK COVER

Default:
- no QR,
- printed domain / project URL as design copy.

Use QR only for a future campaign where the digital experience genuinely benefits.

# 10. RENDERER

Correct:

```php
if (!empty($page['needs_qr'])) {
    $target = resolve_thisyou_qr_target($issue, $page);
    render_page_qr($target, $page['qr_purpose']);
}
```

Incorrect:

```php
if (!empty($page['links'])) {
    render_qr(...);
}
```

# 11. TARGET RESOLUTION

`issue_root` → canonical reader digital issue entry.

`same_page` → canonical reader URL for the exact page.

Reuse existing issue routes/token model.

# 12. PRIVACY

Personalized print QR must resolve only through that reader's intended access model.

Public/demo samples must use public/demo routes.

Never leak another reader token.

# 13. ADMIN

Expose independently:
- Links
- Needs print QR
- QR purpose
- QR target mode

Do not auto-enable QR when adding a link.

# 14. TESTS

1. Event STORY with link → clickable digital link, no print QR.
2. Page 02 → QR to issue root.
3. Style page with many products → one print QR.
4. Style QR → same digital page.
5. ArtCodingLab → one QR → same page.
6. Sponsor → one QR when CTA active.
7. Normal music SCENE → no QR by default.
8. Back cover → no QR by default.
9. Links never automatically enable QR.
10. `needs_qr=true` works with no external link.
11. Public/demo route never leaks a private token.
12. Digital output does not render print QR.

# 15. EXPECTED ISSUE 01 COUNT

Current plan:

```text
9 QR codes / 32 pages
```

Pages:

```text
02, 08, 12, 16, 20, 22, 24, 28, 30
```

The number is not the rule.

> **QR only where digital materially adds to print.**

# 16. PRINCIPLE

> **Print is the artifact. Digital is the interface.**

But the artifact should not look like an interface.
