# Flow 2 — Resume · Fix it (ATS) · ~12 min · Oli=Chrome · Oscar=Firefox > Upload a résumé, get an honest Applicant-Tracking-Systems score, see the "robot's-eye" view, and optimize. The score must be honest (no faking a pass), and a non-résumé must be caught gracefully. **▶ Start here** - **Link:** `…/?startflow=ats` — the landing's **Resume → "Fix it"** card *(`…` = the app URL from Flow 1).* - **Lands on:** the résumé **upload screen** (drag-drop a .docx / PDF), ready to score. - **Voice:** none for testers. 🎥 **Founder recording only:** add `&demo=1&voice=premium` to make AVA narrate each step — that's a founder switch (it also reveals founder-only tools), so don't hand that variant to testers. ## Preconditions - [ ] **P1.** Fresh Incognito; new user (Gmail +alias). - [ ] **P2.** Have ready: a résumé as **.docx**, a résumé as **PDF**, and **any non-résumé** document (a report/letter/invoice). - [ ] **P3.** DevTools → Console open. ## Stage 1 — Entry + upload | # | Action | Expected result | |---|--------|-----------------| | 1 | Go to **Resume → Fix it** (ATS). Upload your **.docx** résumé. | It parses; an ATS analysis screen appears (no console errors). | ## Stage 2 — Not-a-résumé guard ⭐ (P0) | # | Action | Expected result | |---|--------|-----------------| | 2 ⭐ | Fresh upload; upload your **non-résumé** document. | Clean in-app notice: **"That's not a résumé… this looks like a [type]."** **No browser `alert()` popup.** | | 3 ⭐ | Look at the screen behind the notice. | Upload screen **stays intact** — you can pick another file immediately; the flow is not broken. | | | | **RED FLAG** | it *scores* a non-résumé, fires a raw `alert()`, freezes, or needs a refresh to recover. | ## Stage 3 — Honest four-pillar score + the bridge ⭐ (P0) | # | Action | Expected result | |---|--------|-----------------| | 4 | Re-upload your real **.docx**; read the score. | A score with a **four-pillar / category breakdown** (format, keywords, etc.), not just one number. | | 5 ⭐ | If your résumé is weak, the score reflects it honestly. | A weak résumé does **not** show a fake pass; it shows what's missing and how to reach the bar. | | 6 | Read the "what to fix" guidance. | Concrete, specific fixes (not vague). | ## Stage 4 — Robot's-eye view ⭐ (P0) | # | Action | Expected result | |---|--------|-----------------| | 7 ⭐ | Open the **"how the robot reads your résumé"** view. | You see the machine-parsed version — what an ATS actually extracts. | | | | **RED FLAG** | the robot view is blank, errors, or doesn't match the résumé. | ## Stage 5 — Optimize + the paywall | # | Action | Expected result | |---|--------|-----------------| | 8 | Click **Optimize / Download**. | Per **Flow 7 (Payments)** — on prod (free = 0) the **paywall appears**; pay or upgrade to proceed. | | 9 | After paying (test mode) / or with quota, optimize. | An optimized **.docx** is produced and downloads; improvements are summarized. | | | | **RED FLAG** | optimize runs free with no paywall (see Flow 7); or the download is broken/corrupt. | ## Stage 6 — PDF path | # | Action | Expected result | |---|--------|-----------------| | 10 | Repeat the upload with your **PDF** résumé. | It parses + scores (parsing may be rougher than .docx — note any garbled text). | ## Report 🐞 **Found a bug?** any screen — or **Submit a run**: step # · browser · expected · actual · screenshot. ⭐ = P0. Download behavior differs by browser — note Chrome vs Firefox. ## 🎥 Video (what to record · ≤3 min) Record: upload a non-résumé → clean catch (no alert) → upload real résumé → four-pillar score + robot view → click Optimize → paywall → (test card) → optimized download. Narrate what each screen is proving.