# Critic AFTER pass, production frenday.xyz, Thu 2026-09-24 22:39 to 23:15 ICT (W7)

Judged on PRODUCTION. (Quoted site copy is transcribed with hyphens where the site prints a dash; this file contains none.) The wave 1 build (commit 83e725b) landed on https://frenday.xyz at 22:39:12 (poll log: HTTP 200 with zero timetable markers every 30 s from 22:32:59, one HTTP 502 at 22:38:40 during the switch, then 32 `b-row`/`b-band` markers at 22:39:12). Everything below was shot after that moment, one page load at a time. The dev server at http://localhost:3400 was shot only for the comparison in the last section (it carries wave 2 in flight). Same method as `CRITIC-BEFORE-2026-09-24.md` (C10): five-second tests, the same five personas, generic-tell audit, trust audit from the served HTML, cross-page consistency table. No message was sent to Kathy. Production was read, never written.

## Screenshot index

Root: `/private/tmp/claude-501/-Users-james-3-nodejs-ai-new-business/02670483-a472-4ef6-aecf-74044a847b6e/scratchpad/wave2/w7/`

- `prod/<page>-<width>-<lang>.png` (37 shots, 22:40:25 to 22:45:47, strictly sequential) + `prod/chunks/<page>-<width>-<lang>-N.png` (900 px slices). Pages: home, browse, sell, pro, story, mint (`/c/mint`), kit (`/c/mint/kit`), ploy (`/p/ploy`), signin, signup, policy, notfound (`/no-such-page-w7`). Widths 390 (th+en for the main pages), 1440 (en), 820 (subset). Log with timestamps and page heights: `prod/shoot.log`.
- `text/<page>-<lang>.html` and `.txt`: served HTML and its rendered text (what a crawler sees), fetched 22:45.
- `dev/…` and `dev/chunks/…`: 11 comparison shots of localhost:3400 (22:39:06 to 22:40:12).
- `poll.log`: the deploy watch. `shoot.log` lines: the two slow loads were `/story` at 1440 (24 s) and `/story` at 820 (64 s, 22:44:27 to 22:45:31); everything else 5 to 12 s.

No 404 came back for any sequential load. A burst test at 22:48:15 (eight parallel `curl` loads of eight different pages) returned eight HTTP 200s with full bodies (28 to 64 KB) inside one second. That is weaker evidence than the BEFORE incident (which was five headless Chrome loads, each pulling assets), but the same burst shape on the same server no longer answers 404.

Page heights at 390 (before in brackets): `/` 1,237 (about 1,900 before with the two doors), `/browse` 3,131 (7,904), `/sell` 2,516, `/pro` 4,772 (3,628), `/story` 6,431 (6,431, unchanged), `/c/mint` 1,529, `/c/mint/kit` 4,537, `/p/ploy` 3,098, `/policy` 4,488, 404 fits in one screen.

## Five-second tests (390, first 844 px, real clock 22:40)

| Page | What a stranger believes in 5 s | Who / when / price / tap | Score (before) |
|---|---|---|---|
| `/` th+en (`prod/chunks/home-390-th-0`, `home-390-en-0`) | Still a time picker: "ว่างเมื่อไหร่ / When are you free?", the day strip now tagged "วันนี้ / พรุ่งนี้" (today / tomorrow), a 23:00 clock, the slider, and the first sentence is still "ชั่วโมงนี้ยังไม่มีใครว่างค่ะ / Nobody is free at this hour." The sun disc now sits beside the time in the wordmark. No face, no price, no Kathy in the fold. | who: no · when: the wrong answer · price: no · tap: seven underlined names | **2** (2) |
| `/browse` th+en (`browse-390-th-0`, `browse-390-en-0`) | A timetable. "ใครว่างไปด้วย / Who is free to come along", one line explaining the bar, "ว่างพรุ่งนี้ / Free tomorrow", the 06 to 24 scale, then Tae: portrait with the fictional caption, name in his blue, his line, four verbs, "ว่างพรุ่งนี้ 06:00–09:00", "฿500/ชม. ขั้นต่ำ 2 ชม.", three areas, his band on the axis. A second row (Auntie Nok) starts inside the fold. | who: yes · when: yes · price: yes · tap: the row | **5** (4) |
| `/sell` th (`sell-390-th-0`) | "หน้าเดียว ลิงก์เดียว ของคุณเอง", the promise, then "ทำการ์ดของคุณ →" as the FIRST button at about 490 px, one line of reassurance (no queue, nobody approves you), and Mint's real photo tile starting at 630 px. The cropped giant "ม" is gone. | who: yes · price: further down · tap: yes, in the fold | **5** (4) |
| `/pro` th (`pro-390-th-0`) | "โปรซื้ออะไรได้บ้าง", ฿499 huge, "ครั้งเดียว ใช้ได้ 12 เดือน", two doors, then the complete four-item list (row, kit, three clips, one link-name change) and "แสดงให้ดูจริง ไม่ใช่แค่บอก". | price: yes · tap: yes, two | **5** (4) |
| `/story` en (`story-390-en-0`, `-1`) | Unchanged at 390: about 250 px of empty cream, the Thai lockup on the English page, flag icons (UK flag on an American-English site), "Frenday. A friend-date you deserve.", then the same second paragraph ("Our trusted system offers automation, visibility boost, and scam elimination in one package"). | who: no · price: far down · tap: at the very end | **2** (2) |
| `/c/mint` th (`mint-390-th-0`) | Photo, and now "ตัวละครสมมติ · ภาพสร้างด้วยเอไอ" printed on the plate; name, her line, verbs, "฿500/ชม. ขั้นต่ำ 2 ชม.", areas, one button "แอด LINE เพื่อขอนัด" (was "เพื่อจอง"), LINE id, the trust line. | all four: yes | **5** (5) |
| `/p/ploy` th (`ploy-390-th-0`, `-1`) | Name in her plum, the two-line hook, four verbs, the photo with the stamp, the truth line. Price and both buttons still sit just below 844 px. Unchanged. | who: yes · when/price/tap: below the fold | **4** (4) |
| `/c/mint/kit` th (`kit-390-th-0`, `-2`) | "ชุดรูปของมินต์", day/night toggle, "ส่งให้เพื่อน", then the clips row first with two blank teal tiles, and every image tile below says "กำลังสร้างรูป…" at +2 s. Unchanged. | tap: "บันทึกรูป" per tile | **3** (3) |
| `/sign-in` th, `/sign-up` en (`signin-390-th-0`, `signup-390-en-0`) | Now framed: "กลับมาแก้หน้าของคุณ", a sentence saying what Frenday is, a pointer for people without an account, then the Clerk card, then "อีเมลกับรหัสผ่านมีไว้กลับมาแก้หน้าเท่านั้น" and the support address. "Secured by Clerk" is still the one English line on the Thai page. | | **4** (3) |
| `/policy` en (`policy-390-en-0`) | Unchanged and still the best paragraph on the site ("not a dating app, not a girlfriend experience … it isn't here"). | | **4** (4) |
| 404 en+th (`notfound-390-en-0`, `notfound-1440-th-0`) | Branded: wordmark, clock, language toggle, "404 · Page not found · There's no page at this address, or it has moved. · Find a companion → · Back to the front page". One language per page. | | new, **4** |

## Persona walkthroughs (after)

**1 · Ploy's TikTok follower, Thai, 22:30 Thursday → `/p/ploy`.** Same page as before: poster, "ว่างพรุ่งนี้ 10:00–20:00", "฿600/ชม.", "ขอนัดพลอย" / "ถามแคธี เรื่องพลอย". Three taps to a filed request. The doubts stand: nothing in the fold says who answers at 22:30 (Kathy now, Ploy in the morning). New: if she came through `/browse` she saw Ploy's row with hours, price and areas before tapping, so the page confirms rather than reveals.

**2 · Japanese newcomer, English, Saturday 10:00 → `/`.** Unchanged front door: "Company by the hour, every day, 06:00 to midnight" in small grey, then the clock. Tonight's answer is still "Nobody is free at this hour. Slide the sun to another one." The word "Company by the hour" is still the first English sentence on the site and still uncontradicted in the fold. Taps: 1 (See everyone, now a shorter page) → 2 (a row) → 3 (Send a request) → 4 to 5. `/browse` has become the real front door for this persona; `/` has not caught up.

**3 · Would-be Companion referred by a friend → `/sell`.** Better: the button is on the first screen, the foot of `/` now carries one seller door ("Want a page like this of your own → Your card, free, made yourself in three minutes"), the sign-up wall says what the account is for and lists the three steps. Taps to a published card: about 1 + 3 + editor. Doubt (a) is unchanged and now sharper: `/sell` still says "A customer opens it and messages you directly, no one in between" while `/story` on the same site still says "A customer asks Kathy … Kathy sends the customer's request". Doubt (b) is unchanged (no sign of how many Customers exist).

**4 · Startup mentor, English only, laptop → `/story`.** The desktop treatment exists now: from 1024 px the object screens run words-left, object-right on one rail (`story-1440-en-1` to `-4`), the Free/Pro pair sits beside the money paragraph, the social row renders as seven icons (email, LINE, X, phone, IG, Threads, Facebook, the last three dimmed) instead of the "G / f" orphan letters. But the first laptop screen (`story-1440-en-0`) is still 220 px of empty cream, a Thai lockup, the slogan, one grey line, and 60 percent of the width empty; and every sentence the BEFORE critic quoted is still there word for word: "DM - an untrusted, time-consuming, manual process. Our trusted system offers automation, visibility boost, and scam elimination in one package", "Kathy can read and answer, but don't accept requests on your behalf", "Kathy, our AI language model", "600 baht an hour", the roadmap with surge pricing, market intelligence and a criminal background check. One new sneer: at 1440 the Ploy anatomy shows a blank pink square captioned "Their photo, their name, their own line" (`story-1440-en-3`, also at 390 in `story-390-en-3`); a mentor reads it as a broken image, not a schematic.

**5 · Thai parent on `/browse`: "is this an escort site?"** Better answered. The page now opens with a question ("ใครว่างไปด้วย"), a sentence about hours ("แถบคือชั่วโมงที่รับนัด หกโมงเช้าถึงเที่ยงคืน"), a departures-board axis, and rows whose verbs are ไปวิ่ง · ไปเข้ายิม · ไปปั่นจักรยาน · ไปกินข้าว, with "ตัวละครสมมติ / ภาพสร้างด้วยเอไอ" under every portrait. Auntie Nok now says หกโมงเช้า (06:00), not ตีห้าครึ่ง. The page title is still "ทุกคน - เฟรนเดย์" and the chip row still opens with "คาเฟ่ฮอปปิ้ง" and "เพื่อนกินข้าว", but the parent no longer needs the footer to get the answer.

## Score for the BEFORE ranked ten

| # | BEFORE item | Verdict | Evidence on production |
|---|---|---|---|
| 1 | (E) Bare Next.js 404 under a burst of parallel loads; no branded not-found | **Fixed (with a caveat)** | `prod/chunks/notfound-390-en-0.png`, `notfound-1440-th-0.png`: branded 404 in both languages, HTTP 404. 37 sequential loads, zero 404s. Eight parallel curls at 22:48:15: eight 200s. Caveat: the BEFORE burst was headless Chrome, not curl; a same-shape Chrome burst was not re-run to keep loads sequential as briefed. |
| 2 | (J) `/story` second paragraph fails the a16z bar | **Not fixed** | `text/story-en.txt` line 5 is byte-identical to before; `prod/chunks/story-1440-en-1.png`. James's words; nobody touched `content/story.ts`. |
| 3 | (J) `/story` roadmap contradicts `/pro` (boosts, surge pricing, market intelligence, background check) | **Not fixed** | `text/story-en.txt` lines 54 to 57; `prod/chunks/story-1440-en-4.png`, `story-390-en-5.png`. `/pro` still says "we verify no one" and "nothing moves up inside the normal order" (`pro-1440-en-0`). |
| 4 | (E+J) Two funnels described as one product (`/sell` "messages you directly, no one in between" vs `/story` "asks Kathy") | **Not fixed** | `prod/chunks/sell-1440-en-0.png` still carries the sentence; `story-1440-en-1.png` still carries Kathy's. |
| 5 | (E) Home fold at night is an empty state; at 1440 the whole home page is one | **Not fixed on production** (dev has a fix in flight) | `prod/chunks/home-390-th-0.png`, `home-1440-en-0.png` (page is exactly 900 px, "Nobody is free at this hour", no face, no price). Dev (`dev/chunks/home-390-th-0.png`) already shows "ว่างถัดไป" rows with portraits and a Kathy line in the fold. |
| 6 | (E) "Book" on the card, "request" everywhere else | **Fixed** | `/c/mint` button "แอด LINE เพื่อขอนัด / Add on LINE to ask" (`mint-390-th-0`, `mint-1440-en-0`); browse tiles the same (`browse-1440-en-3`); grep for "to book" / "เพื่อจอง" / "bookings" over all 24 served texts: zero hits. |
| 7 | (E) Six small editorial breaks (favours, labelled, Daytime, don't accept, 600baht, 05:30) | **Partly** (4 of 6) | Fixed: "favors" (`text/ploy-en.txt`, `browse-en.txt`, `story-en.txt`), "labeled" (`sell-en.txt`, `pro-en.txt`), "06:00 at Pak Khlong" (`browse-en.txt` line 16). Not fixed: Mint's bio still says "Daytime, public places" / "นัดกันช่วงกลางวัน" (`text/mint-en.txt` line 13, `mint-th.txt` line 13; `prod/chunks/mint-390-th-1.png`); the string is not in `content/cards.ts` at HEAD, so it lives in the database row of the demo card, and X1's report ("someone already changed it") was reading the wrong source. Also not fixed: "don't accept" (`story-en.txt` line 10) and "600 baht an hour" (`story-en.txt`, `ploy-en.txt`), both James's copy. |
| 8 | (E) The kit ships as placeholders | **Not fixed** | `prod/chunks/kit-390-th-0.png`, `kit-390-th-2.png`, `kit-1440-en-0.png`: every tile "กำลังสร้างรูป…" / blank teal at +2 s; `text/kit-en.txt` still says "Rendering the image…" per tile. |
| 9 | (J) Kathy invisible on `/` and `/browse` | **Not fixed on production** (dev has it) | grep "Kathy" over `text/home-en.txt` and `browse-en.txt`: 0 hits. Dev home fold: "แตะชื่อแล้วคุยกับแคธีได้เลย แคธีตอบจากโปรไฟล์ของเขาและส่งคำขอให้ เพื่อนเที่ยวเป็นคนยืนยันเอง" (`dev/chunks/home-390-th-0.png`). |
| 10 | (J) Card / page / profile / directory / everyone | **Partly** | "Everyone" is now the consistent name for `/browse` on `/`, `/sell`, `/pro` ("the everyone page"); `/sell` and `/pro` say "card". Still mixed: `/story` "Open the directory", "A row on the directory", "Your Profile Card"; the card's own foot says "Want a **page** like this of your own" (`mint-390-th-1`); `/browse` cards section heading "การ์ด / Cards" under a page titled "ทุกคน". Dev is moving the card foot to "Want a card of your own" and "A sample card; a fictional character" (`dev/chunks/browse-1440-en-3.png`). |

Tally: 2 fixed, 2 partly, 6 not (of which 2 are already fixed on dev and 3 are James's-call copy nobody was allowed to touch).

## Generic-tell audit (after)

| Page | Tells still present | The one thing no template has |
|---|---|---|
| `/` | Empty-state sentence in the fold at night; a page that fits one laptop screen | The sun slider; now with today/tomorrow tags and a sun disc in the wordmark on every page |
| `/browse` | Chip soup (15 chips) unchanged; the "Cards" section below the deck opens with two tiles whose photo had not loaded at +2 s in the headless shot (`browse-1440-en-2`, `browse-390-th-2`; the `<img>` is `loading="lazy"` with no width/height on production, dev adds `srcset` + dimensions) | The departures-board axis: one 06 to 24 scale per day group, every person's hours drawn on the same x, so the eye reads who is free like a timetable. This is now the best screen on the site at every width |
| `/sell` | The landing-page ladder (steps, price, safety, CTA) is still there but the button is first and the example is the real tile | A real rendered card as the example; at 1440 words-left, card-right |
| `/pro` | "Newest first" is illustrated by four empty beige squares under the Pro row proof (`pro-1440-en-1`, `pro-390-th-2`); reads as tiles that failed to render | The real paid row and the real kit, "shown rather than claimed"; the four-item list now matches the code |
| `/story` | Slogan hero with 220 px of air above the lockup, icon-row three steps, can/cannot columns, Free/Pro columns, "coming soon" roadmap, flag toggle, a blank pink square where Ploy's photo should be | Live Kathy widget mid-explainer; at 1440 the sticky words beside the anatomy spread |
| `/c/mint` | None | One screen, one button, the provenance now on the plate |
| `/p/ploy` | The weekly hours grid | At 1440 the read is two columns (bio left; week, rate, own rules right), no longer a phone column in a void |
| `/kit` | Gallery of placeholders at load | Captions per platform in Mint's voice |
| 404 | None | It is branded, bilingual, and offers the directory |

## Trust audit (facts as rendered on production at 22:45)

- **AI-made picture label:** now on the card plate too ("ตัวละครสมมติ · ภาพสร้างด้วยเอไอ" / "Fictional character · AI-made picture", `mint-390-th-0`, `mint-1440-en-0`), under every `/browse` portrait as a two-line figcaption, on `/`'s posters, `/p/ploy`, `/story`. Gap unchanged: the kit's Band/Plate/Split posters carry Mint's face with no AI label in the downloadable image or its caption.
- **Service name:** Frenday / เฟรนเดย์ everywhere. Clean.
- **British spellings (EN):** none left (favour, labelled, colour, programme, practise: 0 hits over 12 EN pages).
- **"Daytime":** still on `/c/mint` (EN "Daytime, public places", TH "นัดกันช่วงกลางวัน"), contradicting "06:00 to midnight" two lines above it on the same card. The kit's day/night toggle "กลางวัน" is fine.
- **she/her for users:** none. Thai: no เธอ.
- **Em dashes on `/story`:** Ploy's hook line still carries one ("malls - no favors to call in", `story-en.txt` line 26, `ploy-en.txt` line 4); the body still uses a hyphen as a dash ("DM - an untrusted"). Em dashes also appear in `/pro` body copy ("Mint is a demo card - a fictional person", "The slip is pre-read first - amount, time…"), the kit's help lines, and every page `<title>` ("Everyone - Frenday", "Ploy - Frenday", "Sign in - Frenday"). If the no-em-dash rule is meant for public copy, titles are the most visible place it is broken.
- **Hours:** "06:00 to midnight" on `/`, `/browse`, `/sell`, `/story`, `/c/mint`, `/p/ploy`; `/policy` "06:00 to 24:00" and "06:00 – 24:00"; kit captions "06:00–24:00". Auntie Nok's hook is now 06:00; her own hours line on `/p/nok` still says 05:30 (per X1, left as her words). Tae's band on `/browse` correctly starts at 06.
- **Booking vs request:** every surface now says request / ขอนัด. Consistent.
- **Grammar:** "Kathy can read and answer, but don't accept requests" unchanged on `/story`.
- **404:** HTTP 404 with the branded page; `<title>` falls back to the home title ("Frenday, company by the hour"), which a browser tab shows as if the page were home.

## Cross-page consistency table (after)

| Fact | `/` | `/browse` | `/sell` | `/pro` | `/story` | `/c/mint` | `/c/mint/kit` | `/p/ploy` | `/policy` | Conflict? |
|---|---|---|---|---|---|---|---|---|---|---|
| Price of Pro | - | - | ฿499 once, 12 months | ฿499 once, 12 months | ฿499 once, twelve months | - | - | - | - | consistent |
| What ฿499 buys | - | Pro row label | kit + clips + one link-name change + labeled row | the same four, listed and shown | kit incl. night + one handle change + directory row; **clips omitted**; roadmap adds boosts, surge, market intelligence, checks | - | - | - | - | **still YES**: `/story` is one item short and its roadmap contradicts `/pro` |
| Hours | 06:00 to midnight | 06:00 to midnight; Nok 06:00 | 06:00 to midnight | - | 06:00 to midnight | 06:00 to midnight, but bio "Daytime" | 06:00–24:00 | 06:00 to midnight | 06:00 to 24:00 / 06:00 – 24:00 | **minor**: one "Daytime", three spellings |
| Agent name | not mentioned | not mentioned | not mentioned | not mentioned | Kathy ×13 | not mentioned | not mentioned | Kathy ×2 | Kathy ×1 | **gap unchanged on production** (dev home introduces แคธี) |
| Support email | - | - | - | - | hello@frenday.xyz | report link | - | report link | hello@frenday.xyz | consistent; now also on the sign-in/sign-up walls |
| Request vs booking | - | "Add on LINE to ask" | "a request; you confirm or decline" | - | "A meetup is a request" | "Add on LINE to ask" | "friend-date requests" | "Send Ploy a request" | request | **fixed** |
| Card vs page naming | "page like this" / "Your card"; foot "Everyone · Cards" | "See the cards"; "Cards"; card foot "Want a page like this" | "card", "the everyone page" | "the everyone page", "card" | "Profile Card", "One page", "the directory" | "Want a page like this of your own" | "kit" | "page" | - | **partly**: `/story` and the card foot still off-script |
| Who answers the customer | tap a name | open a row | "messages you directly, no one in between" | - | "asks Kathy … Kathy sends the request" | LINE, direct | LINE | Kathy + request sheet | "every companion screens every request personally" | **still YES** |
| Price grammar | hours only | ฿500 /hour · 2-hour minimum | ฿500/hour, 2-hour minimum | ฿499 | "600 baht an hour" | ฿500/ชม. ขั้นต่ำ 2 ชม. | ฿500/hour | ฿600/hour + "600 baht an hour" | - | **minor**: `/story` and `/p` rate block |
| Fictional label | "Every profile in this demo is fictional" | under every portrait | "Mint is fictional" | "a fictional person" | "Ploy is fictional; the picture is AI-made" | on the plate now | "fictional" once | on the photo | once | consistent; kit posters still unlabeled |

## Regressions (blunt)

1. **`/pro` grew four empty boxes.** The "Newest first" strip under the paid-row proof is four blank beige squares at every width (`prod/chunks/pro-1440-en-1.png`, `pro-390-th-2.png`). Before, the grey schematic strip at least looked like a schematic; now a real Mint tile sits above four tiles that look like they failed to load. `/pro` at 390 is also 1,144 px longer (4,772 vs 3,628) for the same decision.
2. **`/browse` lost its poster.** The BEFORE report called the full-bleed one-person-per-screen poster "the one screen a template could not have produced". It is gone; the timetable is better for scanning and I score it higher, but the site no longer has a single screen with a person at poster size except `/p/*` and `/c/*`. `/browse` at 1440 now ends with a "Cards" section whose left edge (100 px) does not align with the timetable's rail (230 px) (`browse-1440-en-2`, `-3`), and whose two tiles show a blank gradient where the photo belongs until the lazy image arrives.
3. **The home page is now the thinnest page on the site.** With the two doors folded into one and nothing added above, `/` at 390 is 1,237 px and at 1440 exactly one viewport (`home-1440-en-0.png`) with 150 px of bare paper under the foot; at 820 the right column is squeezed so "Free on Thursday at 23:00" and "Tap a name to open their page" each wrap to three lines and "Auntie Nok" breaks across two (`home-820-en-0.png`). R5 flagged this at 22:09 and it shipped as is.
4. **`/story` did not move at 390.** Byte-for-byte the same page height (6,431) and the same first screen. The desktop treatment is real, but the mentor in persona 4 reads on a laptop where the first screen is still the emptiest on the site, and the flag toggle on `/story` is the only place the site uses flags instead of "ไทย / EN".
5. **Smaller:** the story anatomy's blank pink photo square is more visible now that it sits in a 1440 spread; the 404's `<title>` is the home title; `/story` loads noticeably slower than any other page (24 s and 64 s in the shot log, versus 5 to 12 s), which is the page a mentor opens first.

## Mentor test

A startup mentor opening frenday.xyz/story on a laptop sees a slab-serif slogan over a lot of cream, scrolls, and hits "Our trusted system offers automation, visibility boost, and scam elimination in one package" within one screen; that sentence alone tells them the explainer was written for a deck, and "surge pricing when demand spikes" and "market intelligence on what customers will pay" three screens later tell them the trust thesis is decoration. The blank pink square captioned "Their photo" reads as a bug. Then they open /browse and the sneer stops: a departures board of eight named people with hours, rates, areas and an honest "AI-made picture" under every face is a product decision, not a template, and the wide layout holds. The verdict tonight is "the product page is better than the pitch page", which is the right way round for a build and the wrong way round for a fundraise; fix the five sentences on /story before showing it to anyone who reads English for a living.

## Ranked: the NEXT ten changes

Engineering (E) and James's-own-call (J), in order of impact on a prospect's confidence.

1. **(J) Rewrite the five sentences on `/story`** that carry every remaining English sneer: the "automation, visibility boost, and scam elimination" paragraph; "Kathy can read and answer, but don't accept"; "Kathy, our AI language model"; "600 baht an hour"; and the roadmap (cut to the two items that strengthen the thesis, or move it to a mentor-only doc). Also add "three clips" to the Pro column so `/story` matches `/pro`. Nothing else on the site is now as costly per word. Evidence: `text/story-en.txt` lines 5, 10, 11, 26, 54 to 57.
2. **(E) Ship the dev home fold to production.** Dev already answers BEFORE #5 and #9 at once (next-free rows with portraits, "เลื่อนไปพรุ่งนี้ 06:00", and a Kathy line in the fold). Production's front door at the audience's hour is still "Nobody is free at this hour" with no face. Evidence: `prod/chunks/home-390-th-0.png` vs `dev/chunks/home-390-th-0.png`.
3. **(E+J) One sentence that names both doors, on `/sell` and `/story`.** "Your card carries your LINE; Kathy answers on your page." Until then `/sell`'s "no one in between" and `/story`'s "asks Kathy" describe two products. (Carried from BEFORE #4, unchanged.)
4. **(E) `/pro`: remove the four empty squares** under the paid-row proof, or draw real dimmed tiles (the same `CardTile` with First and Mint). Evidence: `pro-1440-en-1.png`, `pro-390-th-2.png`.
5. **(E) Fix Mint's bio in the database**, not in `content/cards.ts`: "Daytime, public places" / "นัดกันช่วงกลางวัน" is served from the demo card row and contradicts the card's own hours line. One SQL update on production, then the same on dev. Evidence: `text/mint-en.txt` line 13; `git show HEAD:apps/paiduay/content/cards.ts` has no "Daytime".
6. **(E) `/browse` cards section:** align its rail with the timetable (230 px at 1440), give the tile `<img>` width/height and `srcset` (dev already has this) so the foot does not open with two blank gradients, and retitle "Cards" to match the "everyone" vocabulary or say what it is ("Cards, newest first: the free one-page product"). Evidence: `browse-1440-en-2`, `browse-1440-en-3`.
7. **(E) Home at 820 and 1440:** widen the right column at 820 (three-line wraps, "Auntie Nok" broken), and give 1440 something below the foot or let the picker fill the height. Evidence: `home-820-en-0.png`, `home-1440-en-0.png`.
8. **(E) Kit: pre-render Band for demo cards** so the gallery does not open as a wall of "กำลังสร้างรูป…" tiles. Unchanged from BEFORE #8. Evidence: `kit-390-th-2.png`.
9. **(E) `/story` first screen and load time:** drop the 220 px of air above the lockup, use "ไทย / EN" instead of flags, put a real image (or Ploy's row) in the hero's empty right half at 1024+, and find out why `/story` takes 24 to 64 s to settle in headless Chrome when every other page takes 5 to 12 (the live chat widget's polling is the obvious suspect). Evidence: `story-1440-en-0.png`, `prod/shoot.log`.
10. **(J) Finish the vocabulary:** `/story` "the directory" → "everyone"; "Your Profile Card" → "Your card"; the card foot "Want a page like this" → "Want a card of your own" (dev has the last one). And decide on em dashes in page `<title>`s ("Everyone - Frenday" on every tab) if the public-copy rule applies to them. Evidence: consistency table row "Card vs page naming"; `text/*.html` titles.

Also seen, lower: "Secured by Clerk" is still the one English line on the Thai sign-in; the 404's `<title>` is the home title; the kit's downloadable posters carry Mint's face without an AI label; Auntie Nok's own hours line still reads 05:30 on her page while her hook says 06:00.

## Production vs dev (localhost:3400) for the same page

Dev carries wave 2 in flight, so differences are expected; only the items marked "production bug" need action on production.

- `/` : dev has a rebuilt fold (Kathy line, "เลื่อนไปพรุ่งนี้ 06:00", "ว่างถัดไป" rows with portraits and a per-meetup estimate "ประมาณ 1,000 บาท · 2 ชม."); dev height 2,029 vs production 1,237. Not a production bug; production is simply behind.
- `/browse` : dev tile images have `srcset` + `width`/`height`; production tiles are bare lazy `<img>` with no dimensions (layout shift and blank tiles at +2 s in the shot). Borderline production bug (item 6).
- `/browse` foot: dev says "Want a card of your own" / "A sample card; a fictional character" / "Every person in this demo is fictional"; production says "Want a page like this of your own" / "Sample profile, a fictional character" / "Every profile in this demo is fictional". Copy in flight.
- `/c/mint` : identical, including "Daytime" in the bio on both, which confirms the string is in the database, not in the tree (item 5). Production bug in data.
- `/story`, `/pro`, `/sell`, `/p/ploy`, 404: no visible difference between dev and production in the shots taken (`dev/chunks/*` vs `prod/chunks/*`); `/story` copy identical (both contain "scam elimination").
- `/pro` : the four empty "Newest first" squares appear on both, so this is a design of wave 1, not a deploy fault.
