# Support Playbook — PCDesigner

How the support team handles inbound tickets. Pair this doc with the `pcd-tech-support` skill — the skill is the diagnostic ladder per ticket; this doc is the operational layer (SLA, escalation, runbooks).

## 1. SLA

| Severity | First response | Resolution target |
|---|---|---|
| Sev 1 — checkout broken / data loss | 30 min (paid) / 2 h (free) | 4 h |
| Sev 2 — major feature broken | 2 h (paid) / 1 day (free) | 2 days |
| Sev 3 — degraded / cosmetic | 1 day | 5 days |
| Sev 4 — question / how-to | 2 days | best effort |

If a ticket pattern hits 3+ unique stores in 24 h, escalate to engineering as a Sev 1 incident.

## 2. Channels

- WP.org plugin support forum (free)
- Printcart helpdesk (paid)
- Live chat via Firebase widget (paid + free)
- GitHub issues (engineering-facing)
- Twitter / social (route into helpdesk)

## 3. Triage workflow

1. Acknowledge (template) within SLA.
2. Capture intake (template in `pcd-tech-support` skill).
3. Run the diagnostic ladder.
4. Apply known fix or hand off.
5. Confirm with merchant within 24 h of fix.
6. Tag ticket with: surface + cause + version + niche.

## 4. Top 10 known scenarios

1. **Connect to dashboard fails.** Cause: SSL invalid, outbound firewall, expired access key. Fix: regenerate key, verify SSL, allow `api.printcart.com`.
2. **Design missing in cart.** Cause: cart session lost (cache plugin), HPOS regression. Fix: exclude AJAX / cart from full-page cache; ensure code uses `$order->get_meta()`.
3. **PDF empty / 0 byte.** Cause: missing fonts under `K_PATH_FONTS`, write perms. Fix: re-upload fonts, chmod 0755 on `nbdesigner/`.
4. **Async PDF queue stuck.** Cause: WP cron not running. Fix: switch to system cron (`crontab` to `wp cron event run --due-now`).
5. **SiteGround flagged as nulled.** Cause: scanner false positive pre-2.4.8. Fix: upgrade plugin, ask host to re-scan.
6. **Editor blank on iOS Safari.** Cause: SVG sanitiser, third-party CDN missing CORS. Fix: bypass CDN for plugin assets temporarily; re-enable after CORS fix.
7. **Fonts disappeared after server move.** Cause: `K_PATH_FONTS` points to old absolute path. Fix: re-define constant; copy fonts back.
8. **My Designs 404.** Cause: rewrite rules. Fix: Settings → Permalinks → Save.
9. **License expiring.** Cause: cron not running. Fix: trigger `nbdesigner_lincense_event` (typo intentional) manually.
10. **3D preview not loading.** Cause: GLTF model path wrong, CORS. Fix: re-upload model under `_nbes_settings` folder; serve from same origin.

For each scenario, keep a one-paragraph article in the helpdesk and link to it from the diagnosis email so future tickets self-deflect.

## 5. Tier-aware response

- Free users: standard reply, link to documentation, encourage upgrade if asks for premium feature.
- Growth: standard SLA, no engineering escalation unless data loss.
- Pro / Scale / Enterprise: tighter SLA, can join Slack Connect.

Never let a paid user wait while a free user gets bumped — and vice versa for Sev 1.

## 6. Escalation

Engineering escalation needs:

```
Title:        <one-line>
Severity:     <1–4>
Stores affected: <count>
Plugin version: <…>
WP / WC version: <…>
PHP version: <…>
Hosting: <…>
Reproduction: <numbered steps>
Expected vs actual: <…>
Logs (last 200 lines): <attached>
Screen recording: <link>
Affected order IDs: <list>
Workaround offered: <yes/no — describe>
Why this is engineering-only: <one sentence>
```

Use a single GitHub issue per pattern; link related tickets to it.

## 7. Communication style

- Lead with the answer, not the explanation.
- One change at a time. Confirm completion before next step.
- No screenshots without alt text.
- Avoid "should be working now" — verify with the merchant.
- For data-loss cases, never blame the merchant.

## 8. Knowledge base

Maintain articles for:

- Setup wizard walkthrough
- How to connect to Printcart Dashboard
- Where customer designs live (`uploads/nbdesigner/designs/`)
- HPOS migration notes
- Troubleshooting "design missing" (with cache plugin matrix)
- Print partner integration walk-throughs (Printful, Printify, Gelato)
- ICC profile selection guide
- Custom font upload guide
- Multisite + WPML compatibility notes
- API key + access key rotation

Each article: 200–600 words, screenshot-rich, last reviewed date.

## 9. Tools

- Helpdesk: tag tickets with `version`, `surface`, `niche`, `cause`.
- Sentry: PHP + JS error capture (opt-in for free; on for paid).
- Loom: screen recording, share back.
- WP-CLI: most fixes are 1–2 commands; document the exact command.
- Postman / curl: for verifying outbound connectivity.

## 10. Postmortems

Run a 1-page postmortem after every Sev 1:

```
Incident:
Detected:
Resolved:
Customer impact: <stores, orders, revenue>
Root cause:
Why it wasn't caught earlier:
Action items:
  - Owner — Action — Due date
Public communication: <link>
```

Track action items in the engineering backlog.

## 11. Prevention loop

Every month, check:

- Top 10 ticket categories — anything we can ship to deflect?
- Ticket-to-install ratio per niche.
- Time-to-first-response by tier.
- Reopened ticket rate.
- "Failed to fix" tickets that resurface.

Feed insights into `docs/ROADMAP.md` and the corresponding skill.

## 12. Anti-patterns

- "Try clearing your cache" without specifying which one.
- Asking for credentials without a secure channel.
- Closing a ticket as "no response" within 48 h.
- Editing the merchant's site without explicit consent.
- Posting a fix on the public forum that hasn't been QA'd.
- Promising a feature in a support ticket — refer to the public roadmap instead.
