# /story copy proposals for James (2026-09-24, wave 2, W9)

Proposals only. Nothing in `content/story.ts` was touched; those are your words. Each item below is a menu: pick, edit, or ignore. Every proposal is true of the product tonight (checked against `content/copy-pro-public.ts`, `content/copy-sell.ts`, `content/copy.ts`, `lib/companion-chat.ts`, and the spec's §9.68 notes). Conventions kept: no dash of any kind, hyphens only, American English, Thai and English never on one line, `{kathy}` stays a placeholder, one matched `*..*` pair only in a headline, present tense for today and "coming" for the roadmap, "free forever" on the money screen.

Sources: `apps/paiduay/docs/design/CRITIC-BEFORE-2026-09-24.md` items 2, 3, 4, 7 and the lower list; `04_QUICK_STATUS_FOR_JAMES.md` §3 (screen 2 vs 6, three clips, Thai polish); `docs/foundation/02-kernel-spec.md` §9.68 rounds 1 to 4; `apps/paiduay/docs/EDITORIAL-RULES.md`.

Line numbers refer to `apps/paiduay/content/story.ts` at commit 83e725b unless another file is named.

## 1. Screen 2, second sentence (story.ts line 266 EN, line 265 TH)

Current EN (96 characters): "Our trusted system offers automation, visibility boost, and scam elimination in one package."

Current TH: "ระบบที่เชื่อถือได้ของเราให้ทั้งระบบอัตโนมัติ คนเห็นมากขึ้น และการตัดพวกโกงออก ในแพ็กเกจเดียว"

Your first sentence stays as it is (it carries the "today" half: posts, comments, DMs, nothing guaranteed, all by hand). Each option below replaces only the second sentence, is 96 characters or fewer in English, and names only what exists tonight. Kathy is not named on screen 2 because the page introduces her on screen 3; "an AI" here, the name next screen.

| | English (chars) | Thai (native, not a gloss) | Why it is stronger |
|---|---|---|---|
| A | Frenday puts that on one card, an AI answers only from it, and the companion alone says yes. (92) | เฟรนเดย์เอาทั้งหมดนั้นมาไว้ในการ์ดใบเดียว ให้เอไอตอบจากการ์ดเท่านั้น ส่วนจะรับนัดหรือไม่ เพื่อนเที่ยวตัดสินเอง | Three concrete mechanisms in one breath, in the order screen 3 then draws them. "Answers only from it" is the ground-truth claim a VC has not heard before; "the companion alone says yes" is the trust claim. |
| B | Frenday is one card, a written rate, no deposit, and a yes only the companion can give. (87) | เฟรนเดย์คือการ์ดใบเดียว ราคาเขียนไว้ชัด ไม่มีมัดจำ และคนที่ตอบว่าไปได้มีแค่เพื่อนเที่ยวคนเดียว | Leads with the money moment: the two things that go wrong in a DM (a rate that moves, a deposit that vanishes) are named as absent. "No deposit" is true today (Kathy cannot take or ask for one; /sell says ไม่มีมัดจำ). |
| C | Frenday writes the trade down: one card, an AI that only quotes it, every request on record. (92) | เฟรนเดย์แค่เขียนงานเดิมให้เป็นลายลักษณ์อักษร การ์ดใบเดียว เอไอที่ตอบตามการ์ดเท่านั้น และทุกคำขอมีบันทึกไว้ | Frames the product as a record, not a marketplace: nothing new is sold, the existing trade becomes checkable. "Every request on record" is true (HOW_BUILT says so) and is the sentence a mentor repeats. |

Recommendation: A. It resolves the screen 2 vs 6 contradiction by itself (no boost, no scam claim), it sets up screen 3's three frames word for word, and it keeps your headline's rhythm ("The trade exists. The trust does not." then three short clauses). B if you want the deposit fact on the first scroll; it is the one line that speaks to trust at the money moment. C is the most quotable but the least visual.

Optional touch on your first sentence, only because the critic read the hyphen as a dash doing a dash's job: "...comments, and DMs: an untrusted, time-consuming, manual process." (colon, and DMs plural). Thai line unchanged.

## 2. Screen 6 roadmap (story.ts lines 350 to 358)

Current label EN: "Not in ฿499 yet but coming soon"
Current label TH:
"ยังไม่รวมใน ฿499 แต่กำลังจะมา"
Current lines: signal-based ranking and boosts; dynamic and surge pricing; market intelligence on what customers will pay; identity check and criminal background check.

What /pro says on the same site, today: "No boost inside the normal order" and "Does not mean verified, we verify no one" (`content/copy-pro-public.ts` lines 63 and 65). The tension: /pro sells the labeled paid row precisely because there is no boost; a roadmap that promises boosts tells a reader the honest row is temporary. Verification is a different trust model from "Kathy answers only from the companion's words and the companion says yes"; a mentor who has just read screen 4 asks which model you believe in.

Test note: `content/story.test.ts` lines 252 to 262 currently require the roadmap lines to contain "pricing", "identity check", "background check" and "what customers will pay". Option A needs those four assertions loosened in the same commit (a five-line test edit, not a rule change: the rule "written as coming, never as today" stays). Option B passes the test as written.

### Option A: cut to what strengthens the trust thesis

| Keep or drop | Line | Why |
|---|---|---|
| Keep | Dynamic pricing / ราคาตามช่วงเวลา | Screen 4's footnote already promises it ("Lower the rate*"). Keeping it here keeps the two screens consistent. Drop the word "surge": it reads as ride-hailing and it is the rate the companion sets, not a market. |
| Keep, reworded | Rate intelligence from real requests / ข้อมูลว่าราคาไหนที่ลูกค้ายอมจ่าย จากคำขอจริง | Unit economics for the companion, sourced from your own ground truth (filed requests), not "market intelligence" (which sounds bought). |
| Drop | Signal-based ranking and boosts | Contradicts /pro's reason for the labeled row. If ranking ever comes, it belongs on /browse's own page, not on a Pro roadmap. |
| Drop | Identity and criminal background checks | Contradicts "we verify no one" as a stance, not just as a today-fact. The page's trust claim is a record and a human yes; a badge would be a second, weaker claim beside it. If you do want it later, say it on /policy when it exists. |

Proposed block, Option A:

Label EN, unchanged: "Not in ฿499 yet but coming soon"
Label TH, unchanged:
"ยังไม่รวมใน ฿499 แต่กำลังจะมา"

Line 1 EN: "Dynamic pricing, so a companion's rate can follow the hour"
Line 1 TH: "ราคาตามช่วงเวลา ให้เพื่อนเที่ยวตั้งราคาต่างกันได้ตามชั่วโมง"
Line 2 EN: "What customers will pay, read from real requests, for the companion's eyes"
Line 2 TH: "ข้อมูลว่าลูกค้ายอมจ่ายเท่าไหร่ อ่านจากคำขอจริง ให้เพื่อนเที่ยวดูเอง"

### Option B: keep all four, reword so nothing claims boosting or verification today

Label EN: "Not in ฿499, not live yet, coming"
Label TH:
"ยังไม่รวมใน ฿499 ยังไม่เปิดใช้ แต่กำลังจะมา"

| Current EN | Proposed EN | Proposed TH |
|---|---|---|
| Signal-based ranking, and boosts that lift who gets seen | Ranking by real signals, later; today the only lift is the paid row, and it is labeled | จัดอันดับตามสัญญาณจริง ในอนาคต วันนี้มีแค่แถวโปรที่ติดป้ายไว้ชัด |
| Dynamic pricing, and surge pricing when demand spikes | Dynamic pricing, so a rate can differ by hour and by demand | ราคาตามช่วงเวลา ให้ราคาต่างกันได้ตามชั่วโมงและความต้องการ |
| Market intelligence on what customers will pay | What customers will pay, read from real requests | ข้อมูลว่าลูกค้ายอมจ่ายเท่าไหร่ อ่านจากคำขอจริง |
| An identity check, and a criminal background check | An identity check and a background check, both optional, neither a badge yet | การยืนยันตัวตนและตรวจประวัติ แบบสมัครใจ และยังไม่ใช่ป้ายรับรอง |

The label in B keeps "Not in" and "coming" (test), and the four lines keep the four required phrases.

Recommendation: A. Two lines that agree with screens 4 and /pro beat four lines that need a qualifier each. The a16z reader is not counting features; they are checking whether the roadmap and the thesis point the same way.

### The three clips (add to the Pro block, story.ts after line 345)

Per code and /pro: ฿499 once for twelve months buys every kit template including the night versions, three short clips (about 7 seconds, silent, for stories and square posts), one handle change, and the labeled Pro row on /browse. Your block lists three of the four.

Line EN: "Three short clips for stories and posts"
Line TH: "คลิปสั้นสามคลิป สำหรับสตอรี่และโพสต์"

Place it second, after the template line, so the block reads kit, clips, handle, row (the order /pro uses).

## 3. Screen 2 vs 6 contradiction: the minimal edit

If you take any option in section 1 the contradiction is gone. If you keep your own sentence, the smallest edit is one clause so it no longer claims boost or scam elimination today.

Candidate 1 (keep your structure, move two items to the future):
EN: "Our trusted system takes the manual part out today; visibility and vetting are on the roadmap."
TH: "ระบบของเราตัดงานที่ต้องทำมือออกได้แล้ววันนี้ ส่วนการช่วยให้คนเห็นมากขึ้นกับการคัดกรอง อยู่ในแผนถัดไป"

Candidate 2 (keep "trusted system", swap the three nouns for three true ones):
EN: "Our trusted system offers one card, one AI that only quotes it, and a yes that stays with the companion."
TH: "ระบบที่ไว้ใจได้ของเราคือการ์ดใบเดียว เอไอที่ตอบตามการ์ดเท่านั้น และคำตอบว่าไปที่ยังเป็นของเพื่อนเที่ยว"

Candidate 1 is the smaller diff to your words; Candidate 2 is the one that passes the a16z bar. Both leave screen 6 untouched.

## 4. Two funnels, one sentence

The fact: a self-serve card (`/c/<handle>`, what /sell sells) carries the companion's LINE and the customer messages them directly; a companion page (`/p/<slug>`, what screens 3 to 5 draw) has Kathy and the request, and no direct contact. Tonight both exist and /story never says which is which.

Where it should sit: screen 5, body, replacing the second sentence (line 314 EN, line 313 TH). Screen 5 is the screen that draws the page, so it is where a reader asks "is this the card from /sell?". Screen 3's points are already the three frames and a fourth would need a fourth drawing.

EN: "A companion posts one link, once, and never retypes it. The card carries their LINE, so a customer messages them directly; the page adds Kathy and the request."
TH: "เพื่อนเที่ยวโพสต์ลิงก์เดียว ครั้งเดียว แล้วไม่ต้องพิมพ์ซ้ำอีก การ์ดมีไลน์ของเพื่อนเที่ยว ลูกค้าทักตรงได้เลย ส่วนหน้าเต็มมี{kathy}และช่องส่งคำขอเพิ่มเข้ามา"

Fallback placement if you would rather not touch screen 5: screen 3, point 1 (line 274), "A companion publishes their card: photo, what they do, rate, area, and their LINE; the fuller page adds Kathy." Thai: "เพื่อนเที่ยวทำการ์ดของตัวเอง รูป กิจกรรม ราคา ย่าน และไลน์ ส่วนหน้าเต็มมี{kathy}เพิ่มเข้ามา". This one is 15 words in English, one over the point cap in the file header, so screen 5 is the cleaner home.

Note that the same sentence needs a twin on /sell (critic item 4); that is `content/copy-sell.ts` line 28 and not this document's scope.

## 5. Minor fixes

| Where | Current | Proposed | Note |
|---|---|---|---|
| story.ts 266 | "comments, and DM - an untrusted, time-consuming, manual process." | "comments, and DMs: an untrusted, time-consuming, manual process." | The hyphen is doing a dash's job; a colon does it without a dash. DMs plural. |
| story.ts 282 | "*{kathy}* can read and answer, but don't accept requests on your behalf." | "*{kathy}* can read and answer, but does not accept requests on your behalf." | Subject is singular. "Does not" matches screen 2's "The trust does not." |
| story.ts 311 | "One page. Everything they want and need." | "One page. Everything a customer wants and needs." | "They" has no antecedent on this screen; the body says customer, the headline can too. Your words, your call. TH already says ลูกค้า. |
| story.ts 363 | "Live in Bangkok since September 2026." | "Live in Bangkok, since September 2026." or "Live in Bangkok. Opened September 2026." | The critic read the bare date as a placeholder. A comma or a full stop makes it a fact. The test forbids "launch" in this headline; both proposals avoid it. |
| components/story/anatomy.tsx 116 to 117 | `{rate.replace("฿", "")}<span>{t("v3.perHour", lang)}</span>` renders the text "600baht an hour" | `{rate.replace("฿", "")}{" "}<span>...` so the text reads "600 baht an hour" / "600 บาท ต่อชั่วโมง"; or keep `rate` with the sign and use `v3.perHourUnit` for "฿600/hour" to match /browse and Ploy's page | Code, not copy. The eye sees a gap from CSS; screen readers, copy-paste and the critic's text dump do not. Same string on /p via `v3.perHour`. |
| components/story/signin.tsx 98 to 99 | Google and Facebook drawn as a circled "G" and a circled "f" | Drop the two tiles, or draw them as proper marks | Both are "not offered"; a tile that exists only to say a thing does not exist is what read as orphan letters. The row then says exactly what is true: email now; LINE, X, phone next. The `signinNo` state can stay for later. |
| components/story/story-page.tsx 178 | `<Logo variant="row" size={24} caption={false} />` puts the Thai wordmark เฟรนเดย์ alone atop the English page | `caption={lang === "en"}` so the small Latin "frenday" caption appears on the English page only; Thai page unchanged | Code, one prop. The critic's mentor saw a Thai lockup and a UK flag before any English. |
| story.ts 285 | "06:00 to midnight" | keep | Correct per rule 3; listed only so nobody "fixes" it to 24:00 on these routes. |
| story.ts 307 | "* Dynamic pricing coming soon." | keep, or "* Dynamic pricing is coming." | "Coming soon" twice on one scroll (here and the roadmap label) reads as a template phrase; one of the two can lose the "soon". |
| story.ts 433 (meta description EN) | "A friend-date you deserve: a companion in Bangkok's open spaces, any day. {kathy} answers only from their card; only they say yes." | "...{kathy} answers only from the companion's card; only the companion says yes." | Two bare "they"s in a one-line description; the rule 2 nouns are clearer in a search snippet. |

Not flagged: the "friend-date" hyphen (a compound, not a dash), "20 or over", "free forever", the ฿ sign in headlines.

## 6. Thai polish: every Thai line read as a native reader

Read all 60 Thai strings. 18 read translated, off-register, or carry a word that means something else in Thai. The rest read natively and are not listed. Founder screen skipped (placeholder).

| Line | Current TH | Reads as | Proposed TH |
|---|---|---|---|
| 256 screen 1 body | หาเพื่อนใหม่ไปด้วยกันในที่ทั่วไปที่มีคนทั่วกรุงเทพฯ ได้ทุกวัน ทุกเวลาที่เปิด | "ทั่วไป…ทั่ว" back to back; "ทุกเวลาที่เปิด" is a gloss of "anytime" | หาเพื่อนใหม่ไปเที่ยวด้วยกันในที่ทั่วไปที่มีคน ที่ไหนก็ได้ในกรุงเทพฯ ทุกวัน หกโมงเช้าถึงเที่ยงคืน |
| 265 screen 2 body, sentence 1 | คนที่ชอบอะไรคล้ายกันเสนอเวลาของตัวเองเป็นเพื่อนเที่ยว…เป็นวิธีที่ไม่มีอะไรรับประกัน กินเวลา และต้องทำมือทุกขั้น | "เสนอเวลาของตัวเอง" and "ทำมือทุกขั้น" are English constructions | ทุกวันนี้คนที่ชอบอะไรเหมือนกันรับงานเป็นเพื่อนเที่ยวในกรุงเทพฯ กันอยู่แล้ว ผ่านโพสต์ คอมเมนต์ และแชทส่วนตัว ซึ่งไม่มีอะไรรับประกัน เสียเวลา และต้องคุยเองทุกขั้น |
| 265 screen 2 body, sentence 2 | ระบบที่เชื่อถือได้ของเราให้ทั้ง…ในแพ็กเกจเดียว | Translated ("ในแพ็กเกจเดียว") | See section 1, options A to C |
| 284 screen 4 body | {kathy}คือโมเดลภาษาเอไอของเรา ผูกไว้กับสิ่งที่… ไม่มีเรื่องชู้สาว | "ผูกไว้กับ" is "bound to" word for word; "ชู้สาว" alone reads as adultery, the idiom is เชิงชู้สาว | {kathy}คือเอไอของเรา ตอบได้แค่ตามที่เพื่อนเที่ยวเขียนไว้เอง และตามกติกาของเฟรนเดย์ คือ อายุ 20 ปีขึ้นไปทั้งสองฝ่าย หกโมงเช้าถึงเที่ยงคืน ในที่ทั่วไปที่มีคน และไม่มีเรื่องเชิงชู้สาว ส่วนจะได้นัดหรือไม่ เพื่อนเที่ยวเป็นคนตอบ ไม่ใช่{kathy} |
| 292 can, line 2 | ตอบเรื่องทั่วไปของเธิร์ดเพลส สถานที่ หรือย่านที่เพื่อนเที่ยวเลือก | "เธิร์ดเพลส" is a transliteration no Thai reader uses | ตอบเรื่องทั่วไปของร้าน สถานที่ หรือย่านที่เพื่อนเที่ยวเลือกไว้ |
| 294 can, line 4 | ปฏิเสธสิ่งที่เฟรนเดย์ไม่ทำ | Stiff | ปฏิเสธเรื่องที่เฟรนเดย์ไม่ทำ |
| 301 cannot, line 1 | แต่งเวลาว่างหรือตารางขึ้นเอง | "แต่ง" is for stories and faces; time is คิดขึ้น | คิดเวลาว่างหรือตารางขึ้นมาเอง |
| 307 footnote | * ราคาแบบยืดหยุ่นตามช่วงเวลา กำลังจะมา | "กำลังจะมา" for a feature is a gloss of "coming" | * ราคาตามช่วงเวลา เร็ว ๆ นี้ |
| 313 screen 5 body | …กับที่ที่ถามและส่งคำขอได้ในหน้าเดียวกัน | "กับที่ที่" stacks two ที่ | เพื่อนเที่ยวโพสต์ลิงก์เดียว ครั้งเดียว แล้วไม่ต้องพิมพ์ซ้ำอีก ในหน้านั้นมีทุกอย่างที่ลูกค้าต้องรู้ก่อนตัดสินใจ และถามหรือส่งคำขอได้ในหน้าเดียวกันเลย (or the section 4 line) |
| 318 callout 1 | รูป ชื่อ และประโยคของเพื่อนเที่ยวเอง | "ประโยค" alone is a grammar word | รูป ชื่อ และประโยคแนะนำตัวที่เขียนเอง |
| 321 callout 4 | เวลาที่เปิดรับ ในคำของตัวเอง | "ในคำของตัวเอง" is "in their words" word for word | เวลาที่รับนัด ตามที่เขียนไว้เอง |
| 322 callout 5 | ที่ที่ลูกค้าถาม{kathy} และส่งคำขอ | Two ที่ again | ตรงที่ลูกค้าถาม{kathy} และส่งคำขอนัด |
| 329 screen 6 body | เฟรนเดย์ไม่หักอะไรจากนัดเลย | Fine; a punchier native close exists | ลูกค้าจ่ายให้เพื่อนเที่ยวโดยตรงตอนจบนัด เฟรนเดย์ไม่หักสักบาท |
| 347 Pro row line | แถวบนหน้ารายชื่อ ที่เขียนว่าตำแหน่งที่ซื้อ | "ที่เขียนว่าตำแหน่งที่ซื้อ" is a gloss of "labeled as paid placement" | แถวโปรบนหน้ารายชื่อ ติดป้ายว่าเป็นตำแหน่งที่ซื้อ |
| 353 roadmap line 1 | การดันให้คนเห็นมากขึ้น ตามสัญญาณที่วัดได้จริง | "การดัน" is slang for pushing a product; dropped in Option A, reworded in B | See section 2 |
| 363 screen 7 headline | ใช้งานจริงในกรุงเทพฯ ตั้งแต่กันยายน 2026 | "ใช้งานจริง" is what a developer says about a deploy | เปิดให้ใช้จริงแล้วในกรุงเทพฯ ตั้งแต่กันยายน 2026 (your call on 2026 vs 2569; the site uses 2026 elsewhere) |
| 382 sign-in caption | วันนี้ใช้อีเมล ถัดไปคือไลน์ เอ็กซ์ และเบอร์โทร | "ถัดไปคือ" is a list gloss | ตอนนี้เข้าด้วยอีเมล ต่อไปจะมีไลน์ เอ็กซ์ และเบอร์โทร |
| 432 meta description | หาเพื่อนเที่ยวคนใหม่ในที่ทั่วไปที่มีคนทั่วกรุงเทพฯ ได้ทุกวัน… | Same "ทั่วไป…ทั่ว" as screen 1 | หาเพื่อนเที่ยวคนใหม่ในที่ทั่วไปที่มีคน ที่ไหนก็ได้ในกรุงเทพฯ ทุกวัน {kathy}ตอบจากการ์ดของเพื่อนเที่ยวเท่านั้น ทุกนัดเป็นคำขอที่เพื่อนเที่ยวตอบเอง |
| 456 HOW_BUILT | ส่วนบัญชี การนัด และบทสนทนาเป็นของกลาง | "ของกลาง" means seized evidence in Thai; "shared parts" is ใช้ร่วมกัน. This one is a real error, not a register call. | เฟรนเดย์สร้างบนโค้ดชุดเดียวกับที่ผู้สร้างใช้ทำธุรกิจแบบอื่น ระบบบัญชี การนัด และบทสนทนาเป็นส่วนที่ใช้ร่วมกัน มีแค่หน้าเว็บกับกติกาที่เป็นของเฟรนเดย์เอง (rest of the paragraph unchanged) |

Read natively, left alone: both headlines on screens 1 and 2, screen 3's headline and three points, screen 4's headline, can lines 1, 3, 5, cannot lines 2 to 4, screen 5 headline, callouts 2 and 3, screen 6 headline and the Free block, roadmap lines 2 to 4 (subject to section 2), screen 7's two blocks, all of screen 8, the /our-story meta pair, STORY_UI's page words.

### The chip: รับงานวัน{day}ไหม (`content/copy.ts` line 771)

"รับงาน" without the qualifier เพื่อนเที่ยว is the phrase escort ads use ("รับงาน", "รับงานนอก"). On a chat chip under a companion's photo it is the one line a Thai reader screenshots. The English "Do you take meetups on {day}?" does not have this problem, so only the Thai changes.

| Option | Thai | Reads as |
|---|---|---|
| 1 (recommended) | วัน{day}ว่างไหม | "Are you free on {day}?", the question a friend asks; matches the product's word for the answer (เวลาว่าง). |
| 2 | วัน{day}รับนัดไหม | "Do you take a meetup on {day}?", the closest to the English and uses the product's own word นัด. |
| 3 | วัน{day}ไปด้วยได้ไหม | "Can you come along on {day}?", warmest, slightly long for a chip. |

Note for a later sweep, out of this scope: /sell's Thai "สำหรับคนที่รับงานเอง" (critic's five-second table) has the same word, softened by เอง but not by much; "สำหรับคนที่รับนัดเอง" is the same fix.

## Summary for the tracker

- Screen 2: recommend option A ("Frenday puts that on one card, an AI answers only from it, and the companion alone says yes."); it also dissolves the screen 2 vs 6 contradiction.
- Roadmap: recommend option A (keep dynamic pricing and rate intelligence from real requests; drop boosts and background checks); needs a five-line loosening in `content/story.test.ts` lines 259 to 262. Option B is the no-test-change path.
- Three clips: one line, second in the Pro block.
- Two funnels: one sentence on screen 5's body; twin needed on /sell.
- Minor: 9 items (2 code, 7 copy).
- Thai: 18 lines flagged, one of them a real error (ของกลาง in HOW_BUILT); chip: วัน{day}ว่างไหม.
