Beamco Portal V3 Copy Requirements

Generated: 2026-04-24 · Source: [COPIES ONLY] beamco_portal_v3_feedback_harold.md · Scope: copy-only and copy-adjacent UI text requirements.

Implementation contract: the Required Copy column is the final decision. Match case, punctuation, spacing, currency format, pluralization, and placeholders exactly. Credentials are intentionally excluded from this handoff.

Chinese mode note: The Chinese toggle translates navigation, table labels, and helper instructions only. CTA strings, Current Copy, Required Copy, proposed copy changes, and Dev Action content stay in English because they are the implementation source of truth.

159Total requirements
53P0 release blockers
79Artist Portal rows
80Fans Portal rows

How To Use This Handoff

  1. Required Copy is the final implementation decision. Do not ask design/product to choose between alternatives unless a row explicitly says product logic is required.
  2. Match case, punctuation, spacing, currency format, and pluralization exactly.
  3. Where a row contains placeholders such as {N}, {Artist Name}, {Currency Code}, or {eventId}, implement via i18n variables and test zero/one/many where relevant.
  4. Do not ship Chinese seed copy, raw IDs, placeholder text, or test strings in public English UAT routes unless the route is explicitly internal-only.
  5. Do not include these credentials in tickets, copy JSON, screenshots, or commits.

Artist audit items intentionally not reworded: 3, 4, 8, 27, 36, 43 (missing), 45, 54, 67, 71, 72, 74, 77. Treat these as engineering bugs, deferred features, or design decisions outside this copy-only implementation set.

Artist Portal Screenshot Coverage

This table states which Artist UAT surfaces have annotated screenshots and which remain URL/breadcrumb-only because the current draft state locks later wizard routes.

Surface Status Evidence Notes
Events list Covered with annotated screenshot S3 Covers pagination/object noun rows and visible event-list currency/date formatting.
Create Event type selector Covered with annotated screenshot S4 Covers create-type entry and external-event wording context.
Event Information wizard Covered with annotated screenshot S5 Covers visible wizard header, event fields, on-sale schedule, cover/tag sections, and helper copy.
Home dashboard Covered with annotated screenshot S6 Covers Artist dashboard date, revenue, and financial/table vocabulary examples.
Crowdfunding tab/list Covered with annotated screenshot S7 Covers the Artist sidebar Crowdfunding tab and the project-list table copy, including CTA, capacity/progress columns, dates, status chips, seed data, and pagination.
Ticket Pricing / Discount / Bundle / Completion wizard steps Partially blocked by app state URL/breadcrumb only Direct step URLs redirected to Event Information because the draft event is incomplete. Rows remain in the requirement matrix with route breadcrumbs; screenshots should be added once a complete event is available.

Categorized Annotated Screenshots

These are the fastest implementation references. Each screenshot has numbered callouts, a category, the current visible copy, the required replacement, and the related requirement IDs.

A1 · Fans Portal — HowZ Storefront Copy Changes

Category: Storefront CTA, labels, seed data, and commerce copy · URL: /store/howz

Use this sheet for public-storefront cleanup on HowZ. The callouts map visible copy defects to exact replacement rules.

Fans Portal — HowZ Storefront Copy Changes
Callout Category Related IDs Current Copy Required Copy Dev Action
1 CTA, State & Status Copy FAN-F3 FAN-I1 FAN-RULE-7 Join the Community Follow → Following. Hover/secondary state: Unfollow. Use the global follow-state component text. Remove the Community wording unless a separate community feature exists.
2 Navigation & Section Labels FAN-F5 FAN-I3 HowZ's Event / HowZ's Product Upcoming Events / Shop Drop artist possessives and singular object nouns from store section headings.
3 Seed Data, Empty States & Placeholders FAN-F12 FAN-I2 test test test / Test Event placeholder content No public English UAT route should display raw test strings. Gate test data behind internal-only stores or replace with production-quality English seed content.
4 Commerce, Currency & Revenue FAN-F11 FAN-I9 FAN-RULE-1 Chinese bundle copy paired with USD pricing English seed copy and one currency format per store, e.g. USD 81.75. Normalize seed copy language and enforce one store currency display format.

A2 · Fans Portal — Leslie Cheung Storefront & Crowdfunding Copy Changes

Category: Storefront CTA, crowdfunding label, inventory grammar, and metric labels · URL: /store/lesliecheung

Use this sheet for the Leslie store public copy and crowdfunding-card grammar fixes.

Fans Portal — Leslie Cheung Storefront & Crowdfunding Copy Changes
Callout Category Related IDs Current Copy Required Copy Dev Action
1 CTA, State & Status Copy FAN-F3 FAN-I1 FAN-RULE-7 Join the Community Follow → Following. Hover/secondary state: Unfollow. Use the same follow-state text as HowZ and every other artist store.
2 Navigation & Section Labels FAN-F5 FAN-F36 FAN-I3 Leslie Cheung's Fanvestor Crowdfunding Projects or Live Crowdfunding Use a plural feature label; keep Fanvestor for people, not the section heading.
3 Inventory, Counts & Pluralization FAN-F14 FAN-F18 FAN-RULE-2 9 Spot left 9 spots left Implement count-aware pluralization for spot/left strings.
4 Inventory, Counts & Pluralization FAN-F15 FAN-F18 1 Supporter Tier: Supporter plus separate backer count, e.g. 1 backer. Separate tier labels from participation counts so the metric is unambiguous.

A3 · Artist Portal — Events List Pagination Copy Change

Category: Tables & Pagination · URL: /events

Use this sheet for the event-list footer copy fix and object-noun cleanup.

Artist Portal — Events List Pagination Copy Change
Callout Category Related IDs Current Copy Required Copy Dev Action
1 Tables & Pagination ART-005 ART-006 Showing 1 - 0 of 0 works/products Showing 1–10 of 100 events Use en dash ranges and the correct object noun for the table. For empty states, do not show impossible ranges such as 1 - 0.

A4 · Artist Portal — Create Event Type Copy Changes

Category: Event type selector and external-event wording · URL: /events/create

Use this sheet for the Artist create-entry screen and external-event copy context.

Artist Portal — Create Event Type Copy Changes
Callout Category Related IDs Current Copy Required Copy Dev Action
1 Navigation & Section Labels ART-044 Offline Event Keep clear event-type labels in Title Case. Ensure event-type cards use consistent naming and helper text across Offline, Online, and External Event.
2 Storefront Copy ART-034 ART-035 Online Event helper references a meeting or streaming link. Streaming or meeting link / Optional password helper downstream. Keep online-event helper language aligned with link and password field copy.
3 Tickets & Bundles ART-044 External Event Generate a ticket for me / Upload my own ticket design. When the external-event choice advances, use outcome-based ticket design options rather than Quick Create / Manual Create.

A5 · Artist Portal — Event Information Wizard Copy Changes

Category: Wizard step labels, fields, schedule, tags · URL: /events/%7BeventId%7D/edit/1

Use this sheet for visible Artist wizard copy. Later wizard steps are route-locked until the draft event is complete.

Artist Portal — Event Information Wizard Copy Changes
Callout Category Related IDs Current Copy Required Copy Dev Action
1 Navigation & Section Labels ART-002 ART-017 Event Introduction / Completion & Preview Event Details / About This Event where applicable. Update wizard step names so step labels and body labels do not repeat or conflict.
2 Artist Event Wizard Copy ART-007 Event Name * Event Name with required state handled by UI/ARIA. Keep label Title Case and expose required state through UI semantics rather than inline text.
3 Seed Data, Empty States & Placeholders ART-018 ART-046 Enter a short event description... Tell fans what to expect: who's performing, the vibe, and why they shouldn't miss it. Replace generic placeholder with fan-facing writing prompt; remove Please-prefixed placeholder pattern globally.
4 Date, Time & Scheduling ART-011 ART-012 Listing Publish Date / Activate Sale Scheduled. Sale starts on / Schedule ticket sales. Use action-oriented scheduling labels and remove awkward scheduled-sale grammar.
5 Seed Data, Empty States & Placeholders ART-009 ART-010 Tagging / Make it easier for users to discover your work. Tags / Add 3–5 tags so fans can find your event in search and discovery. Use noun label plus specific helper text with count and discovery context.

A6 · Artist Portal — Dashboard Revenue, Date, and Table Copy Changes

Category: Date, currency, revenue, table labels · URL: /home

Use this sheet for Artist-wide date, financial vocabulary, and table label conventions.

Artist Portal — Dashboard Revenue, Date, and Table Copy Changes
Callout Category Related IDs Current Copy Required Copy Dev Action
1 Date, Time & Scheduling ART-031 ART-055 ART-RULE-7 10/27 - 04/24 Named months and en dash ranges, e.g. Oct 27 – Apr 24. Avoid numeric slash dates in English UI; use en dash with spaces for ranges.
2 Commerce, Currency & Revenue ART-RULE-4 ART-RULE-5 Total Merchandise Sales / USD2731 Use frozen revenue terms and currency spacing, e.g. USD 2,731. Normalize financial terms and currency formatting across Artist dashboard/table surfaces.
3 Tables & Pagination ART-033 ART-RULE-4 Merchandise / Sales Quantity / List Price / Sales Use consistent object nouns and financial vocabulary. Apply frozen terms such as Gross revenue, Net revenue, Platform fee, and Event expenses where relevant.

A7 · Artist Portal — Crowdfunding Tab & Project List Copy Changes

Category: Crowdfunding navigation, project table metrics, status, dates, and pagination · URL: /crowdfunding

Use this sheet for the Artist Crowdfunding sidebar tab and project-list table. This surface is separate from Events and must not inherit works/products or event-specific nouns.

Artist Portal — Crowdfunding Tab & Project List Copy Changes
Callout Category Related IDs Current Copy Required Copy Dev Action
1 Navigation & Section Labels ART-CF-001 Crowdfunding / Create Project Crowdfunding / + New Project Keep the sidebar feature noun but align the primary CTA with the Artist + New {Object} convention.
2 Tables & Pagination ART-CF-003 ART-CF-004 Remaining/Total / Percentage Sold Spots remaining / Funding progress Use crowdfunding-specific metric labels and render capacity as {remaining} of {total}, not slash-compressed values.
3 CTA, State & Status Copy ART-CF-005 Draft / In Progress / Failed Draft / Funding live / Funding failed / Funding complete Use status labels that describe campaign state rather than generic workflow state.
4 Date, Time & Scheduling ART-CF-007 ART-RULE-7 2026/04/17 ~ 2026/04/18 / - ~ - Apr 17 – Apr 18, 2026 / Sales window TBA Replace slash dates and tilde ranges with named months and en dash ranges; suppress dangling punctuation when dates are missing.
5 Seed Data, Empty States & Placeholders ART-CF-006 test 3 / TEST 2 / Try testing again! No public English UAT route should display raw test strings. Gate test projects behind internal-only data or replace names with production-quality English seed examples.
6 Tables & Pagination ART-CF-002 ART-006 Showing 1 - 9 of 9 works/products Showing 1–9 of 9 projects Use the project object noun on the Crowdfunding table footer and use an en dash for the range.

Screenshot Appendix

Fans Portal — HowZ storefront, annotated
S1 · Fans Portal — HowZ storefront, annotated
/store/howz
Annotated live UAT capture. Callouts cover follow-state CTA, section heading nouns, test data, and mixed-language/currency product copy.
Fans Portal — Leslie Cheung storefront, annotated
S2 · Fans Portal — Leslie Cheung storefront, annotated
/store/lesliecheung
Annotated live UAT capture. Callouts cover follow-state CTA, crowdfunding section label, pluralization, and ambiguous supporter/tier copy.
Artist Portal — Events list, authenticated
S3 · Artist Portal — Events list, authenticated
/events
Annotated authenticated capture. Callouts cover event-list pagination/object noun and currency spacing.
Artist Portal — Create Event type selector, annotated
S4 · Artist Portal — Create Event type selector, annotated
/events/create
Annotated authenticated capture. Callouts cover Offline/Online/External Event type copy and external-event ticket-design wording context.
Artist Portal — Event Information wizard, annotated
S5 · Artist Portal — Event Information wizard, annotated
/events/{eventId}/edit/1
Annotated authenticated capture. Callouts cover wizard step labels, Event Name, Description placeholder, schedule copy, and tags helper copy.
Artist Portal — Home dashboard, annotated
S6 · Artist Portal — Home dashboard, annotated
/home
Annotated authenticated capture. Callouts cover date range style, revenue/currency spacing, and table/financial vocabulary.
Artist Portal — Crowdfunding list, annotated
S7 · Artist Portal — Crowdfunding list, annotated
/crowdfunding
Annotated authenticated capture. Callouts cover the Crowdfunding sidebar tab, Create Project CTA, table metric labels, date ranges, status chips, seed names, and pagination object noun.

Artist Portal — Event Wizard & Events List 65 requirements · 14 P0

ID / Priority Category Portal / Surface URL / Breadcrumb Current Copy Issue Required Copy Acceptance Criteria Evidence
ART-001
P1 · copy string
CTA, State & Status Copy Artist Portal
Wizard header, all steps (/events/{id}/edit/*)
/events/{eventId}/edit
Artist Portal > Wizard header, all steps (/events/{id}/edit/*)
自動儲存中… Status badge pattern: shows success by default, only flips to progress verb while writing. Reduces flicker and matches Notion/Linear. Saved · just now (idle) / Saving… (in-flight) The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S5
ART-002
P1 · copy string
Navigation & Section Labels Artist Portal
Progress bar steps 2 & 4
/events/{eventId}/edit
Artist Portal > Progress bar steps 2 & 4
Ticket pricing / Event introduction Title Case fixed. "Details" outperforms "Introduction" — shorter, matches step content (description + T&C + images), avoids collision with the body heading. Ticket Pricing / Event Details The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S5
ART-005
P1 · copy string
Tables & Pagination Artist Portal
Events list footer pagination
/events
Artist Portal > Events List
顯示第 1-10,共 100 作品/商品 Keeps object noun so the label is meaningful on mixed dashboards. Showing 1–10 of 100 events The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S3
ART-006
P1 · copy + UI logic
Accessibility & Metadata Artist Portal
Same pagination, EN variant
/events/{eventId}/edit
Artist Portal > Same pagination, EN variant
"works/products" Noun should match the table object. events (or dynamic: tickets sold, projects) The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S3
ART-007
P1 · copy string
Accessibility & Metadata Artist Portal
Event Information › first field label
/events/{eventId}/edit/event-information
Artist Portal > Event Wizard > Event Information
Name of Item Title Case matches other labels. Use red asterisk + aria-required, not inline "*". Event Name (required) The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S5
ART-009
P1 · copy string
Artist Event Wizard Copy Artist Portal
Event Information › tags block
/events/{eventId}/edit/event-information
Artist Portal > Event Wizard > Event Information
Tagging Noun form; sub-label replaces the weak "Make it easier…" line. Tags + sub-label "Help fans discover your event" The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S5
ART-010
P1 · copy string
Artist Event Wizard Copy Artist Portal
Same block helper
/events/{eventId}/edit
Artist Portal > Same block helper
Make it easier for users to discover your work Specifies count, explains where tags surface. Add 3–5 tags so fans can find your event in search and discovery. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S5
ART-011
P1 · copy string
Date, Time & Scheduling Artist Portal
Ticket Sales › schedule
/events/{eventId}/edit/ticket-sales
Artist Portal > Event Wizard > Ticket Sales
Listing publish date Action-oriented, unambiguous, pairs naturally with Sale ends on. Sale starts on The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S5
ART-012
P1 · copy string
Inventory, Counts & Pluralization Artist Portal
Ticket Sales › toggle
/events/{eventId}/edit/ticket-sales
Artist Portal > Event Wizard > Ticket Sales
Activate Sale Scheduled Natural verb phrase; plural "sales" reads better in UI. Schedule ticket sales The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S5
ART-013
P1 · copy string
Artist Event Wizard Copy Artist Portal
Ticket Sales › toggle
/events/{eventId}/edit/ticket-sales
Artist Portal > Event Wizard > Ticket Sales
Purchase-Restricted Item Names the real constraint; fan-facing language. Limit tickets per buyer + helper "Cap how many tickets one fan can buy in a single order." The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S5
ART-014
P1 · copy string
Artist Event Wizard Copy Artist Portal
Ticket Pricing › ticket card
/events/{eventId}/edit/ticket-pricing
Artist Portal > Event Wizard > Ticket Pricing
Customization Verb + object removes ambiguity about what is being customized. (US spelling matches the rest of the product; confirm locale with Yves.) Customize Ticket. Use US spelling in the English locale. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-015
P1 · copy string
Tickets & Bundles Artist Portal
Ticket Pricing › Ticket Name helper
/events/{eventId}/edit/ticket-pricing
Artist Portal > Event Wizard > Ticket Pricing
Avoid using a different ticket name Explains why consistency matters. Use your artist or event name — this appears on the printed ticket and fan receipts. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-016
P1 · copy string
Artist Event Wizard Copy Artist Portal
Ticket Pricing › logo upload helper
/events/{eventId}/edit/ticket-pricing
Artist Portal > Event Wizard > Ticket Pricing
(confusing copy w/ apostrophe bugs) Removes stray apostrophes; specifies file types + effect. Upload your artist logo (PNG or WEBP, transparent background). It replaces the ticket-name text on the ticket. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-017
P1 · copy string
Navigation & Section Labels Artist Portal
Step 4 heading vs body
/events/{eventId}/edit
Artist Portal > Step 4 heading vs body
Event Description / Event Introduction Decouples step name from field label so users don't see the same words twice. About This Event (step name) + Description (field label) The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S5
ART-018
P1 · copy string
Seed Data, Empty States & Placeholders Artist Portal
Description editor placeholder
/events/{eventId}/edit
Artist Portal > Description editor placeholder
Introduce your project Concrete prompts; conversational. Tell fans what to expect: who's performing, the vibe, and why they shouldn't miss it. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S5
ART-019
P1 · copy string
Seed Data, Empty States & Placeholders Artist Portal
T&C editor placeholder
/events/{eventId}/edit
Artist Portal > T&C editor placeholder
(same as description — bug) Checkout-centric framing. Set expectations: entry requirements, refund policy, age limits, and any rules fans must accept at checkout. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-020
P1 · copy string
Terms, Policy & Legal Copy Artist Portal
T&C default-text helper
/events/{eventId}/edit
Artist Portal > T&C default-text helper
(apologetic tone) Confident default + clear escape hatch. Use Beamco's standard termsRecommended. You can edit or replace them below. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-021
P0 · copy string
Date, Time & Scheduling Artist Portal
Discount type selector (p.100)
/events/{eventId}/edit/discount
Artist Portal > Event Wizard > Discount Settings
(all Chinese) Lose "Offer" suffix where redundant; hyphenate compound adjectives. Ship the p.98 English design — cards: Limited-Time Offer · Fan Exclusive · Fan Limited-Time Offer The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-022
P1 · copy string
Terms, Policy & Legal Copy Artist Portal
T&C heading
/events/{eventId}/edit
Artist Portal > T&C heading
Event Terms and Conditions Global standard; remove "Event" prefix — context is already the event page. Terms & Conditions The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-023
P0 · copy string
Commerce, Currency & Revenue Artist Portal
Expense calculator helper
/events/{eventId}/edit
Artist Portal > Expense calculator helper
Enable to facilitate the calculation of sales revenue Active verb; temporal anchor. Log event costs to see your net revenue after the show. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-024
P1 · copy string
Date, Time & Scheduling Artist Portal
Ticket Design › date/time field helper
/events/{eventId}/edit/ticket-design
Artist Portal > Event Wizard > Ticket Design
(missing) Shorter; names the step explicitly. Synced from Event Information. Edit there to update. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S5
ART-025
P1 · copy string
Artist Event Wizard Copy Artist Portal
Completion screen › incomplete header
/events/{eventId}/edit/completion
Artist Portal > Event Wizard > Completion
You're Not Done Yet! Neutral, non-scolding. A few sections need finishing The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-026
P1 · copy string
Artist Event Wizard Copy Artist Portal
Completion screen body
/events/{eventId}/edit/completion
Artist Portal > Event Wizard > Completion
creating your event "Create" already happened on step 1; publish is the remaining verb. publish your event The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-028
P1 · copy string
Artist Event Wizard Copy Artist Portal
Completion screen › success header
/events/{eventId}/edit/completion
Artist Portal > Event Wizard > Completion
Ready to Publish Event Declarative, not imperative — matches the "review & confirm" tone of the screen. Your event is ready to publish The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-029
P1 · copy string
Artist Event Wizard Copy Artist Portal
Completion screen › success body
/events/{eventId}/edit/completion
Artist Portal > Event Wizard > Completion
create and publish… Spells out both outcomes; no redundant verbs. Publish now to open ticket sales, or keep editing as a draft. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-030
P1 · copy string
CTA, State & Status Copy Artist Portal
Events list › status + action
/events
Artist Portal > Events List
Sales Paused vs Stop selling Verb↔state symmetry; avoids "Stop" (sounds terminal). Action Pause sales → status Sales paused · Action Resume sales → status On sale The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S3
ART-031
P2 · copy string
Date, Time & Scheduling Artist Portal
All date ranges (list, wizard, preview)
/events/{eventId}/edit
Artist Portal > All date ranges (list, wizard, preview)
~ Matches Chicago style; reads cleanly across locales. Apr 24 – Apr 26, 2026 (en dash, spaces, comma before year) The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S6
ART-032
P2 · copy string
Artist Event Wizard Copy Artist Portal
Row overflow menu
/events/{eventId}/edit
Artist Portal > Row overflow menu
duplicate Title Case for menu items. Duplicate The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-033
P0 · copy string
Commerce, Currency & Revenue Artist Portal
Calculate summary panel
/events/{eventId}/edit
Artist Portal > Calculate summary panel
Platform fee : Financial summaries read better as label/value columns than colon-separated lines. Platform fee followed by right-aligned value (no colon at all) The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S6
ART-034
P0 · copy string
Artist Event Wizard Copy Artist Portal
Online event › link field
/events/{eventId}/edit/ticket-sales
Artist Portal > Event Wizard > Ticket Sales
conference link Gives fans concrete examples of what's allowed. Streaming or meeting link (label) · "Zoom, YouTube Live, Twitch, or any public URL." (helper) The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-035
P0 · copy string
Artist Event Wizard Copy Artist Portal
Online event › password helper
/events/{eventId}/edit/ticket-sales
Artist Portal > Event Wizard > Ticket Sales
please enter this default password Clarifies when fans see it. Optional"Add a password if your link is protected. Fans will see it after purchase." The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-037
P0 · copy string
Accessibility & Metadata Artist Portal
Discount Conditions radios
/events/{eventId}/edit/discount
Artist Portal > Event Wizard > Discount Settings
All / Time Only / Loyalty Points Only Plain-English conditions instead of jargon. Any purchase · During a set period · Fans who hold loyalty points The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-038
P0 · copy string
Seed Data, Empty States & Placeholders Artist Portal
Discount › date picker placeholder
/events/{eventId}/edit/discount
Artist Portal > Event Wizard > Discount Settings
Enter Discount Duration Concise; "window" implies start + end. Choose a promotion window The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-039
P1 · copy string
Accessibility & Metadata Artist Portal
Loyalty points condition
/events/{eventId}/edit
Artist Portal > Loyalty points condition
(verbose) Active-voice label. Minimum points required · placeholder e.g., 600 The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-040
P0 · copy string
Tickets & Bundles Artist Portal
Ticket Design › image validator
/events/{eventId}/edit/ticket-design
Artist Portal > Event Wizard > Ticket Design
至少必須上傳一張圖片,即可下一步 Drops "Please"; imperative + reason. Add at least one image to continue. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S5
ART-041
P1 · copy string
Tickets & Bundles Artist Portal
Ticket Name helper (Offline vs Online)
/events/{eventId}/edit/ticket-pricing
Artist Portal > Event Wizard > Ticket Pricing
(artist vs event) One helper covers both flows. Use your artist or event name — whichever fans will recognize on their ticket. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-042
P0 · copy string
Commerce, Currency & Revenue Artist Portal
Default T&C clause 3
/events/{eventId}/edit
Artist Portal > Default T&C clause 3
price inflation Adds the consequence — what actually matters legally. Resale above face value is prohibited and may void the ticket. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-044
P1 · copy string
Tickets & Bundles Artist Portal
External event toggle
/events/{eventId}/edit
Artist Portal > External event toggle
Quick Create / Manual Create Speaks to outcome, not method. Generate a ticket for me · Upload my own ticket design The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S4
ART-046
P1 · copy string
Seed Data, Empty States & Placeholders Artist Portal
All placeholders
/events/{eventId}/edit
Artist Portal > All placeholders
"Please enter…" / "Enter…" One convention; matches modern UX norms. "Enter…" globally The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S5
ART-047
P0 · copy + i18n logic
Commerce, Currency & Revenue Artist Portal
Ticket price label
/events/{eventId}/edit/ticket-pricing
Artist Portal > Event Wizard > Ticket Pricing
Price / Ticket Price Include the currency inline; prevents currency-confusion tickets. Ticket Price ({Currency Code}), for example Ticket Price (USD). Copy renders dynamically with correct count/state/currency. Edge cases are covered for zero, one, and many where applicable. URL/breadcrumb only
ART-048
P0 · copy string
Discounts & Promotions Artist Portal
Discount selector p.100
/events/{eventId}/edit/discount
Artist Portal > Event Wizard > Discount Settings
(Chinese) Use p.98 English design — ship as single source of truth The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-049
P1 · copy string
Date, Time & Scheduling Artist Portal
Discount type cards
/events/{eventId}/edit/discount
Artist Portal > Event Wizard > Discount Settings
(no sub-text) Stand-alone descriptions fans can scan. Limited-Time OfferRuns for a set window. · Fan ExclusiveOnly fans on your allow-list can buy. · Fan Limited-Time OfferTime-limited + fan-only. Combines both. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-050
P1 · copy + i18n logic
Discounts & Promotions Artist Portal
Optional discount screen primary button
/events/{eventId}/edit/discount
Artist Portal > Event Wizard > Discount Settings
Create Names the object being saved; secondary is escape hatch. Primary Save discount · Secondary Skip for now The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-051
P1 · copy + i18n logic
Discounts & Promotions Artist Portal
Discount Settings heading
/events/{eventId}/edit/discount
Artist Portal > Event Wizard > Discount Settings
"(Optional)" disappears when filled Chip persists; heading stays clean. Keep heading Discount Settings (plain), and show Optional as a neutral tag chip beside it in all states The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-052
P1 · copy string
Date, Time & Scheduling Artist Portal
Offline/Online discount duration label
/events/{eventId}/edit/discount
Artist Portal > Event Wizard > Discount Settings
Discount Duration Industry-standard phrasing. Promotion Period The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-053
P1 · copy string
Seed Data, Empty States & Placeholders Artist Portal
Discount date picker placeholder
/events/{eventId}/edit/discount
Artist Portal > Event Wizard > Discount Settings
Please select the discount time Same convention as #38. Choose a promotion window The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-055
P2 · copy string
Date, Time & Scheduling Artist Portal
Date format
/events/{eventId}/edit
Artist Portal > Date format
2025/08/20 vs Jun 20 Ambiguity-free across locales. Apr 24, 2026 (long) · 24 Apr (compact, list rows) · never bare numeric slashes The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S6
ART-056
P0 · copy string
Commerce, Currency & Revenue Artist Portal
Expense calculator toggle (CN)
/events/{eventId}/edit
Artist Portal > Expense calculator toggle (CN)
活動開銷計算 / 開啟活動開銷計算 Three-part structure: object / verb / why. Label Event expenses · toggle Track event expenses · helper "Subtract production costs from gross revenue to see your net." The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-057
P1 · copy + i18n logic
Date, Time & Scheduling Artist Portal
Discount section help text (use globally)
/events/{eventId}/edit/discount
Artist Portal > Event Wizard > Discount Settings
(p.114 best in doc) Keeps stacking capability explicit. "Offer discounts using promo codes, time windows, or fan eligibility. You can stack conditions for a specific offer." The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-058
P1 · copy string
Navigation & Section Labels Artist Portal
Bundle section heading
/events/{eventId}/edit/bundles
Artist Portal > Event Wizard > Bundles
Setup Bundle Sales "Set Up" is a CTA, not a heading. This names the feature fans see at checkout. Bundles The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-059
P1 · copy string
Tickets & Bundles Artist Portal
Add bundle button
/events/{eventId}/edit/bundles
Artist Portal > Event Wizard > Bundles
add bundle Matches common "+ New [object]" pattern used elsewhere in the app. + New Bundle The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-060
P1 · copy string
Commerce, Currency & Revenue Artist Portal
Bundle help text
/events/{eventId}/edit/bundles
Artist Portal > Event Wizard > Bundles
Each offer is a bundle fans can purchase Concrete examples; "one checkout" explains the value. Package a ticket with merch or perks and sell it at a special price — one checkout, one price. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-061
P1 · copy + i18n logic
Seed Data, Empty States & Placeholders Artist Portal
Bundle description placeholder
/events/{eventId}/edit/bundles
Artist Portal > Event Wizard > Bundles
(wrong word, 4 dots, misplaced counter) Example guides writing; counter in standard location. Placeholder "What's in this bundle? (e.g., VIP ticket + tote + signed poster)" · counter 0/70 bottom-right inside field The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-062
P1 · copy string
Commerce, Currency & Revenue Artist Portal
Bundle table
/events/{eventId}/edit/bundles
Artist Portal > Event Wizard > Bundles
Original price Title Case column headers. Original Price The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-063
P1 · copy string
Artist Event Wizard Copy Artist Portal
Ticket tier naming
/events/{eventId}/edit
Artist Portal > Ticket tier naming
Regular Ticket vs Normal "Regular/Normal" sound like seconds. "General Admission" is the live-events industry default. General Admission (default tier) · VIP, Early Bird as extras The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-064
P1 · copy string
Navigation & Section Labels Artist Portal
Bundle table
/events/{eventId}/edit/bundles
Artist Portal > Event Wizard > Bundles
Item name Same rule. Item Name The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-065
P1 · copy string
Tickets & Bundles Artist Portal
Add Bundle card (CN)
/events/{eventId}/edit/bundles
Artist Portal > Event Wizard > Bundles
新增套組 Matches #59. + New Bundle The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-066
P0 · copy + UI logic
Inventory, Counts & Pluralization Artist Portal
Inventory column
/events/{eventId}/edit
Artist Portal > Inventory column
9 / 2,000 / Limited 3,000 Three separate columns beats one slash-stuffed cell. Column split: Sold · Available · Cap (with tooltip "Sold tickets count toward Cap.") The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-068
P1 · copy string
Artist Event Wizard Copy Artist Portal
Modal heading
/events/{eventId}/edit
Artist Portal > Modal heading
Go to edit item Kept; it's already good. Edit this item? The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-069
P1 · copy string
Artist Event Wizard Copy Artist Portal
Modal body
/events/{eventId}/edit
Artist Portal > Modal body
Go to the item editing page Names navigation cost + reassures about drafts. You'll leave this screen and open the item editor. Any unsaved changes here will be kept as a draft. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-070
P1 · copy string
Artist Event Wizard Copy Artist Portal
Modal button
/events/{eventId}/edit
Artist Portal > Modal button
Go to edit Matches modal verb; avoids echoing heading. Open editor The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-073
P1 · copy string
Seed Data, Empty States & Placeholders Artist Portal
Bundle description demo (CN)
/events/{eventId}/edit/bundles
Artist Portal > Event Wizard > Bundles
(Chinese sample) Concrete example matches placeholder style. "VIP admission + signed tour poster + meet-and-greet pass" The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-075
P1 · copy string
Tickets & Bundles Artist Portal
Add Ticket Type card (CN)
/events/{eventId}/edit
Artist Portal > Add Ticket Type card (CN)
新增票種 Same "+ New" convention. + New Ticket Type The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-076
P1 · copy + UI logic
Navigation & Section Labels Artist Portal
Ticket list tab label (CN)
/events/{eventId}/edit
Artist Portal > Ticket list tab label (CN)
票種名稱 Static column header in English + dynamic values. Ticket Type (tab label) · row name renders dynamically The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
ART-078
P0 · copy string
Date, Time & Scheduling Artist Portal
Discount date validation (CN)
/events/{eventId}/edit/discount
Artist Portal > Event Wizard > Discount Settings
時間不能早於開賣時間… Plain English with the two boundaries named. Promotion window must start after ticket sales open and end before the event starts. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only

Artist Portal — Crowdfunding Tab & Project List 7 requirements · 2 P0

ID / Priority Category Portal / Surface URL / Breadcrumb Current Copy Issue Required Copy Acceptance Criteria Evidence
ART-CF-001
P1 · copy string
CTA, State & Status Copy Artist Portal
Crowdfunding list page title and primary CTA
/crowdfunding
Artist Portal > Crowdfunding
Crowdfunding / Create Project CTA does not follow the Artist global "+ New {Object}" convention. Page title: Crowdfunding. Primary CTA: + New Project. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S7
ART-CF-002
P0 · copy string
Navigation & Section Labels Artist Portal
Crowdfunding list footer pagination
/crowdfunding
Artist Portal > Crowdfunding
Showing 1 - 9 of 9 works/products Wrong object noun on the Crowdfunding table; this is a project list, not works/products. Showing 1–9 of 9 projects The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S7
ART-CF-003
P1 · copy + i18n logic
Inventory, Counts & Pluralization Artist Portal
Crowdfunding table capacity column
/crowdfunding
Artist Portal > Crowdfunding
Remaining/Total with values like 9 /10 and 100 /100 Slash-stuffed metric is hard to scan and does not name spots or backing capacity. Column: Spots remaining. Value format: {remaining} of {total}. Copy renders dynamically with correct count/state/currency. Edge cases are covered for zero, one, and many where applicable. S7
ART-CF-004
P1 · copy string
Inventory, Counts & Pluralization Artist Portal
Crowdfunding table progress column
/crowdfunding
Artist Portal > Crowdfunding
Percentage Sold "Sold" sounds like inventory commerce; crowdfunding needs funding/backing progress language. Funding progress The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S7
ART-CF-005
P1 · copy string
CTA, State & Status Copy Artist Portal
Crowdfunding table status chips
/crowdfunding
Artist Portal > Crowdfunding
Draft / In Progress / Failed In Progress is vague for a live funding campaign, and Failed needs crowdfunding context. Draft / Funding live / Funding failed / Funding complete The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S7
ART-CF-006
P0 · copy string
Artist Event Wizard Copy Artist Portal
Crowdfunding project names
/crowdfunding
Artist Portal > Crowdfunding
test 3 / TEST 2 / Try testing again! Public UAT route exposes raw test project names. No public English UAT route should display raw test strings. Gate test projects behind internal-only data or replace with production-quality English seed names. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S7
ART-CF-007
P1 · copy string
Seed Data, Empty States & Placeholders Artist Portal
Crowdfunding preview and sales date columns
/crowdfunding
Artist Portal > Crowdfunding
2026/04/17 ~ 2026/04/18 and - ~ - Numeric slash dates and tilde ranges are inconsistent with the Artist date rule; empty date ranges should not render punctuation. Apr 17 – Apr 18, 2026. If unknown: Sales window TBA. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S7

Artist Portal — Global Copy Patterns 7 requirements · 0 P0

ID / Priority Category Portal / Surface URL / Breadcrumb Current Copy Issue Required Copy Acceptance Criteria Evidence
ART-RULE-1
P1 · copy + i18n logic
Discounts & Promotions Artist Portal
Artist Portal global copy pattern
/events, /events/{eventId}/edit/*
Artist Portal > All event wizard and event list routes
Multiple inconsistent patterns Global standard to adopt "+ New {Object}" for add buttons (Bundle, Ticket Type, Discount). All matching Artist Portal surfaces follow this rule. No conflicting English copy pattern remains in UAT. URL/breadcrumb only
ART-RULE-2
P1 · copy + i18n logic
CTA, State & Status Copy Artist Portal
Artist Portal global copy pattern
/events, /events/{eventId}/edit/*
Artist Portal > All event wizard and event list routes
Multiple inconsistent patterns Global standard to adopt Verb ↔ State symmetry for toggles (Pause sales ↔ Sales paused). All matching Artist Portal surfaces follow this rule. No conflicting English copy pattern remains in UAT. URL/breadcrumb only
ART-RULE-3
P1 · copy + i18n logic
Artist Event Wizard Copy Artist Portal
Artist Portal global copy pattern
/events, /events/{eventId}/edit/*
Artist Portal > All event wizard and event list routes
Multiple inconsistent patterns Global standard to adopt Label + Helper + Example for every field that has a non-obvious format. All matching Artist Portal surfaces follow this rule. No conflicting English copy pattern remains in UAT. URL/breadcrumb only
ART-RULE-4
P1 · copy + i18n logic
Commerce, Currency & Revenue Artist Portal
Artist Portal global copy pattern
/events, /events/{eventId}/edit/*
Artist Portal > All event wizard and event list routes
Multiple inconsistent patterns Global standard to adopt Financial terms frozen: Gross revenue, Net revenue, Platform fee, Event expenses — never "sales revenue" or "cost". All matching Artist Portal surfaces follow this rule. No conflicting English copy pattern remains in UAT. URL/breadcrumb only
ART-RULE-5
P1 · copy + i18n logic
Commerce, Currency & Revenue Artist Portal
Artist Portal global copy pattern
/events, /events/{eventId}/edit/*
Artist Portal > All event wizard and event list routes
Multiple inconsistent patterns Global standard to adopt Currency in the label, not appended to the value: Ticket Price (USD). All matching Artist Portal surfaces follow this rule. No conflicting English copy pattern remains in UAT. URL/breadcrumb only
ART-RULE-6
P1 · copy + i18n logic
Artist Event Wizard Copy Artist Portal
Artist Portal global copy pattern
/events, /events/{eventId}/edit/*
Artist Portal > All event wizard and event list routes
Multiple inconsistent patterns Global standard to adopt No apologetic helpers ("don't worry", "please"). Replace with action + reason. All matching Artist Portal surfaces follow this rule. No conflicting English copy pattern remains in UAT. URL/breadcrumb only
ART-RULE-7
P1 · copy + i18n logic
Date, Time & Scheduling Artist Portal
Artist Portal global copy pattern
/events, /events/{eventId}/edit/*
Artist Portal > All event wizard and event list routes
Multiple inconsistent patterns Global standard to adopt Date/time: en dash for ranges, named months, 2026 not 26. All matching Artist Portal surfaces follow this rule. No conflicting English copy pattern remains in UAT. URL/breadcrumb only

Fans Portal — Storefront 18 requirements · 8 P0

ID / Priority Category Portal / Surface URL / Breadcrumb Current Copy Issue Required Copy Acceptance Criteria Evidence
FAN-F1
P0 · copy + UI logic
Navigation & Section Labels Fans Portal
Browser tab title (every SPA route)
/store/{artistSlug}
/store/lesliecheung
Fans Portal > Storefront > HowZ and Leslie Cheung
Store - Beamco Title never updates across routes — bad for tabs, bookmarks, SEO, a11y. Dynamic per route: {Artist Name} · Store, {Product Name} · {Artist}, Cart · Beamco, Checkout · Beamco, My Account · Beamco. Copy renders dynamically with correct count/state/currency. Edge cases are covered for zero, one, and many where applicable. S1, S2
FAN-F2
P2 · copy string
Storefront Copy Fans Portal
HowZ hero tagline
/store/howz
Fans Portal > Storefront > HowZ
From my rotten body, flowers will grow 💐 Artist-authored bio; ships as-is on public UAT. Keep per-artist, but the field label should force a soft char-cap and warn on jarring hero language. (Author field — no rewrite) · Add helper on Artist side: "Hero tagline (max 80 chars). Shown directly below your name on your store page." The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S1
FAN-F3
P1 · copy string
CTA, State & Status Copy Fans Portal
HowZ follow CTA (guest / not yet following)
/store/howz
Fans Portal > Storefront > HowZ
Join the Community Inconsistent with Leslie Cheung's post-follow state copy. Unclear whether "Community" is a separate feature. Follow (default) → Following (selected). Hover or secondary action: Unfollow. Do not use Join the Community. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S1
FAN-F4
P0 · copy + i18n logic
Seed Data, Empty States & Placeholders Fans Portal
Leslie Cheung post-follow state
/store/lesliecheung
Fans Portal > Storefront > Leslie Cheung
You are fan of Artist Known grammar bug. Literal i18n key / placeholder. You're following {Artist Name} · "We'll notify you about drops and events." Copy renders dynamically with correct count/state/currency. Edge cases are covered for zero, one, and many where applicable. S2
FAN-F5
P1 · copy string
Inventory, Counts & Pluralization Fans Portal
Section heading (both stores)
/store/{artistSlug}
/store/lesliecheung
Fans Portal > Storefront > HowZ and Leslie Cheung
HowZ's Event · Leslie Cheung's Fanvestor · HowZ's Product · Leslie Cheung's Product Possessive + singular noun even when multiple items render. Grammatically off and inconsistent (why Events the tab, Event the heading?). Upcoming Events · Crowdfunding Projects · Shop The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S1, S2
FAN-F6
P0 · copy string
Navigation & Section Labels Fans Portal
Tab row
/store/{artistSlug}
/store/lesliecheung
Fans Portal > Storefront > HowZ and Leslie Cheung
All / Shop / Events / Top Fans / About /about tab click does not switch content (renders Top Fans body). About is dead. Rename Top Fans to Fan Leaderboard. Remove or fix the dead About tab before release. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S1, S2
FAN-F7
P1 · copy string
Navigation & Section Labels Fans Portal
Top Fans column header
/store/{artistSlug}
/store/lesliecheung
Fans Portal > Storefront > HowZ and Leslie Cheung
Point Singular; value is a total count. Points The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S1, S2
FAN-F8
P0 · copy + i18n logic
Seed Data, Empty States & Placeholders Fans Portal
Top Fans rows
/store/{artistSlug}
/store/lesliecheung
Fans Portal > Storefront > HowZ and Leslie Cheung
Rank cells render avatar for positions 1–3 and a numeric "4", "5"… for 4+; other users' Points cells show literal -; logged-in self is sticky bottom row with a second rank number. Mixed rank rendering; - shipped as value; sticky row duplicates the rank number (5 / Kumar / 3252 appears alongside 5 / Kumar / - in the list). Rank cell must always show the rank number. Add medal treatment for ranks 1–3. Empty points render as 0. Sticky self-row renders Your rank · #{rank} · {points} pts. Copy renders dynamically with correct count/state/currency. Edge cases are covered for zero, one, and many where applicable. S1, S2
FAN-F9
P0 · copy + i18n logic
Seed Data, Empty States & Placeholders Fans Portal
Top Fans usernames
/store/{artistSlug}
/store/lesliecheung
Fans Portal > Storefront > HowZ and Leslie Cheung
13973945674ytf, 游客1097407420843560960, 1102138378972958720 Raw account IDs surfacing as usernames. Either enforce a display-name requirement at signup, or mask: Fan #…560960 with Chinese-script fallback for "guest" accounts. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S1, S2
FAN-F10
P1 · copy + i18n logic
Inventory, Counts & Pluralization Fans Portal
HowZ product card tag
/store/howz
Fans Portal > Storefront > HowZ
BUNDLE LIMITED All-caps, ambiguous. Limited what — quantity, time, region? Limited Bundle · optional sub-badge "Only {N} left". Copy renders dynamically with correct count/state/currency. Edge cases are covered for zero, one, and many where applicable. S1
FAN-F11
P0 · copy string
Commerce, Currency & Revenue Fans Portal
HowZ product description
/store/howz
Fans Portal > Storefront > HowZ
超級 VIP 套組內容(售價 2580 元,共限量 100 份) alongside USD 81.72 CN description + TWD-implied pricing next to USD totals — mixed currencies / markets on a single card. Demo content gate: English seed only on UAT-public stores. "Super VIP Bundle — 100 available (orig. USD 85.00)." The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S1
FAN-F12
P0 · copy string
Seed Data, Empty States & Placeholders Fans Portal
HowZ event card
/store/howz
Fans Portal > Storefront > HowZ
test test test · May 1 · Online event Test data shipped on public UAT storefront. Gate test data behind feature flag / test-only subdomain. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S1
FAN-F13
P2 · copy + UI logic
Storefront Copy Fans Portal
Leslie Cheung hero subtitle
/store/lesliecheung
Fans Portal > Storefront > Leslie Cheung
Celebrating Leslie Cheung's Legacy + long intro Good copy; truncates with ... after \~160 chars with no Show more. Add an inline Show more toggle or collapse after 2 lines on mobile. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S2
FAN-F14
P1 · copy + i18n logic
Inventory, Counts & Pluralization Fans Portal
Leslie Cheung crowdfund card
/store/lesliecheung
Fans Portal > Storefront > Leslie Cheung
9 / Spot left Singular "Spot" with count of 9; awkward line break. {N} spot left when N = 1; {N} spots left for all other counts. Copy renders dynamically with correct count/state/currency. Edge cases are covered for zero, one, and many where applicable. S2
FAN-F15
P1 · copy + i18n logic
Inventory, Counts & Pluralization Fans Portal
Same card
/store/{artistSlug}
/store/lesliecheung
Fans Portal > Storefront > HowZ and Leslie Cheung
1 / Supporter Looks like "1 supporter" but is actually the plan tier name "Supporter". Visually ambiguous. Render tier name inside a labelled chip: Tier: Supporter · count separately: 1 backer. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S1, S2
FAN-F16
P1 · copy string
Inventory, Counts & Pluralization Fans Portal
Same card
/store/{artistSlug}
/store/lesliecheung
Fans Portal > Storefront > HowZ and Leslie Cheung
34 Days Left Title Case on a unit phrase; inconsistent with lowercase "left" elsewhere. 34 days left (sentence case) · singular handling: 1 day left / Ends today. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S1, S2
FAN-F17
P1 · copy + i18n logic
Date, Time & Scheduling Fans Portal
Leslie Cheung shop card tag
/store/lesliecheung
Fans Portal > Storefront > Leslie Cheung
FANS DISC. Abbreviation unclear ("Discussion"? "Discount"?); all-caps with trailing period looks like a bug. Fan Discount (full phrase, Title Case, no period). The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. S2
FAN-F18
P0 · copy + i18n logic
Inventory, Counts & Pluralization Fans Portal
Inventory labels, mixed
/store/{artistSlug}
/store/lesliecheung
Fans Portal > Storefront > HowZ and Leslie Cheung
100 left (shop) · 9 left (shop) · Limit 8 per person (PDP) · 1 Sold (PDP) · 9 Spot left (fundraising card) · minimum of 100 slots (fundraising body) Four different nouns for the same concept (left / Sold / spots / slots). Inventory: {N} left. Sold count: {N} sold. Crowdfund capacity: {N} of {M} spots claimed. Per-order cap: Max {N} per order. Retire slots. Copy renders dynamically with correct count/state/currency. Edge cases are covered for zero, one, and many where applicable. S1, S2

Fans Portal — Ticket Product Detail Page 13 requirements · 6 P0

ID / Priority Category Portal / Surface URL / Breadcrumb Current Copy Issue Required Copy Acceptance Criteria Evidence
FAN-F19
P1 · copy string
Storefront Copy Fans Portal
Ticket-type PDP — /product?id=… (Let's Pop!)
/product?id={ticketId}
Fans Portal > Product Detail > Ticket PDP > Let's Pop!
Offline event (top label) Lowercase "event"; inconsistent with later Title Case. Offline Event (badge) The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F20
P1 · copy string
Storefront Copy Fans Portal
Ticket-type PDP — /product?id=… (Let's Pop!)
/product?id={ticketId}
Fans Portal > Product Detail > Ticket PDP > Let's Pop!
Limit 8 per person OK but a little robotic. Max 8 tickets per fan The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F21
P1 · copy string
Inventory, Counts & Pluralization Fans Portal
Ticket-type PDP — /product?id=… (Let's Pop!)
/product?id={ticketId}
Fans Portal > Product Detail > Ticket PDP > Let's Pop!
1 Sold Inconsistent case; no thousands separator for larger numbers. 1 sold · 1,247 sold The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F22
P0 · copy + UI logic
Seed Data, Empty States & Placeholders Fans Portal
Ticket-type PDP — /product?id=… (Let's Pop!)
/product?id={ticketId}
Fans Portal > Product Detail > Ticket PDP > Let's Pop!
No description (literal placeholder body) Ships as visible content when the artist hasn't filled description. Fall back to event summary from Event Info step. If truly empty: hide the section entirely; don't render the phrase. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F23
P0 · copy string
Storefront Copy Fans Portal
Ticket-type PDP — /product?id=… (Let's Pop!)
/product?id={ticketId}
Fans Portal > Product Detail > Ticket PDP > Let's Pop!
Collection : QR Code CJK fullwidth colon (:) leaks into English string. Also the word "Collection" reads like art-collection; user meant redemption. Redemption: QR Code (ASCII colon, space after). The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F24
P1 · copy string
Storefront Copy Fans Portal
Ticket-type PDP — /product?id=… (Let's Pop!)
/product?id={ticketId}
Fans Portal > Product Detail > Ticket PDP > Let's Pop!
Please present the QR Code on-site to enter the event. "Please" + passive; fine but can tighten. Show this QR code at the door to enter. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F25
P0 · copy + UI logic
Date, Time & Scheduling Fans Portal
Ticket-type PDP — /product?id=… (Let's Pop!)
/product?id={ticketId}
Fans Portal > Product Detail > Ticket PDP > Let's Pop!
Event Date & Time value shows - Literal dash when the SKU has no date configured. If no date: hide the label, show warning chip "Date TBA — you'll be notified before the show." The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F26
P1 · copy string
Accessibility & Metadata Fans Portal
Ticket-type PDP — /product?id=… (Let's Pop!)
/product?id={ticketId}
Fans Portal > Product Detail > Ticket PDP > Let's Pop!
Up to 3052 Loyalty Points No thousands separator; "Up to" is marketing-y and vague. Earn up to 3,052 loyalty points The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F27
P1 · copy string
Accessibility & Metadata Fans Portal
Ticket-type PDP — /product?id=… (Let's Pop!)
/product?id={ticketId}
Fans Portal > Product Detail > Ticket PDP > Let's Pop!
Early bird purchase gets extra rewards Awkward phrasing. Buy early to earn bonus loyalty points The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F28
P1 · copy string
Storefront Copy Fans Portal
Ticket-type PDP — /product?id=… (Let's Pop!)
/product?id={ticketId}
Fans Portal > Product Detail > Ticket PDP > Let's Pop!
View Ticket Options button Slightly enterprise-y; "Options" hides that it's a BUY button. Select tickets. Use this even when there is one tier so the modal flow stays consistent. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F29
P0 · copy string
Commerce, Currency & Revenue Fans Portal
Ticket-type PDP — /product?id=… (Let's Pop!)
/product?id={ticketId}
Fans Portal > Product Detail > Ticket PDP > Let's Pop!
Ticket modal header price range USD 100.00 - USD 100.00 If min price equals max price, show one value: USD 100.00. Only show a range when values differ: USD 80.00–120.00. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F30
P0 · copy string
Storefront Copy Fans Portal
Ticket-type PDP — /product?id=… (Let's Pop!)
/product?id={ticketId}
Fans Portal > Product Detail > Ticket PDP > Let's Pop!
Modal button pair Add to Cart / Buy Now Keep buttons as Add to Cart and Buy Now. If disabled, show the F31 helper directly above the buttons. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F31
P0 · copy string
Date, Time & Scheduling Fans Portal
Ticket-type PDP — /product?id=… (Let's Pop!)
/product?id={ticketId}
Fans Portal > Product Detail > Ticket PDP > Let's Pop!
Disabled state Buttons silently disabled until date picked. When date or required option is missing, keep buttons disabled and show: Select a date or ticket option to continue. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only

Fans Portal — Fundraising Product Detail Page 13 requirements · 5 P0

ID / Priority Category Portal / Surface URL / Breadcrumb Current Copy Issue Required Copy Acceptance Criteria Evidence
FAN-F32
P1 · copy string
Navigation & Section Labels Fans Portal
Fundraising PDP — /product/fundraising?id=… (Pat's Special)
/product/fundraising?id={projectId}
Fans Portal > Product Detail > Fundraising PDP > Pat's Special
Tabs: Overview / Updates / About Page tips claim FAQ tab exists but not rendered. "About" duplicates artist info already on hero. Overview · Updates · FAQ (drop About; info already on store). The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F33
P1 · copy string
Navigation & Section Labels Fans Portal
Fundraising PDP — /product/fundraising?id=… (Pat's Special)
/product/fundraising?id={projectId}
Fans Portal > Product Detail > Fundraising PDP > Pat's Special
Fan Support Journey Nice tone but abstract — not clear what's inside. How it works (section heading) — describes the pledge → milestone → delivery flow. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F34
P0 · copy + i18n logic
CTA, State & Status Copy Fans Portal
Fundraising PDP — /product/fundraising?id=… (Pat's Special)
/product/fundraising?id={projectId}
Fans Portal > Product Detail > Fundraising PDP > Pat's Special
Goal not Reached Mixed case; reads as status badge but rendered as plain text. Goal: not yet reached while live. After deadline use Goal met or Funding closed according to actual state. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F35
P0 · copy + i18n logic
Inventory, Counts & Pluralization Fans Portal
Fundraising PDP — /product/fundraising?id=… (Pat's Special)
/product/fundraising?id={projectId}
Fans Portal > Product Detail > Fundraising PDP > Pat's Special
Thanks to 0 Fanvestors Thanking zero fans reads sarcastic / sad. Be the first Fanvestor when count = 0. Backed by {N} Fanvestors when count > 0. Copy renders dynamically with correct count/state/currency. Edge cases are covered for zero, one, and many where applicable. URL/breadcrumb only
FAN-F36
P1 · copy + i18n logic
Inventory, Counts & Pluralization Fans Portal
Fundraising PDP — /product/fundraising?id=… (Pat's Special)
/product/fundraising?id={projectId}
Fans Portal > Product Detail > Fundraising PDP > Pat's Special
Section Leslie Cheung's Fanvestor (on store tile) Singular. Live Crowdfunding · sub-label "Back a project from {Artist}". Copy renders dynamically with correct count/state/currency. Edge cases are covered for zero, one, and many where applicable. URL/breadcrumb only
FAN-F37
P0 · copy string
Accessibility & Metadata Fans Portal
Fundraising PDP — /product/fundraising?id=… (Pat's Special)
/product/fundraising?id={projectId}
Fans Portal > Product Detail > Fundraising PDP > Pat's Special
Payment Methods / VISA / JCB / MasterCard / American Express Slash list with brand names looks like a URL path. Replace with row of brand logos + ARIA label "Accepted: Visa, Mastercard, American Express, JCB." The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F38
P1 · copy string
Terms, Policy & Legal Copy Fans Portal
Fundraising PDP — /product/fundraising?id=… (Pat's Special)
/product/fundraising?id={projectId}
Fans Portal > Product Detail > Fundraising PDP > Pat's Special
Location: Singapore Unclear — is this the artist, the event, or the funding entity? Funded from: Singapore · tooltip "The artist's legal-entity jurisdiction. Payments may be subject to SG terms." The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F39
P0 · copy string
Seed Data, Empty States & Placeholders Fans Portal
Fundraising PDP — /product/fundraising?id=… (Pat's Special)
/product/fundraising?id={projectId}
Fans Portal > Product Detail > Fundraising PDP > Pat's Special
Description heading followed by Test / Test test / Looks right / Feels right / Test test Test content on a public UAT. Seed-data gate (global). The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F40
P2 · copy string
Storefront Copy Fans Portal
Fundraising PDP — /product/fundraising?id=… (Pat's Special)
/product/fundraising?id={projectId}
Fans Portal > Product Detail > Fundraising PDP > Pat's Special
Show More button Title Case verb; inconsistent with lower-case used elsewhere. Show more / Show less (sentence case toggle). The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F41
P1 · copy string
Storefront Copy Fans Portal
Fundraising PDP — /product/fundraising?id=… (Pat's Special)
/product/fundraising?id={projectId}
Fans Portal > Product Detail > Fundraising PDP > Pat's Special
Choose your plan OK. Keep. Pair with sub-label "Pick a reward tier to back this project." The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F42
P1 · copy string
Inventory, Counts & Pluralization Fans Portal
Fundraising PDP — /product/fundraising?id=… (Pat's Special)
/product/fundraising?id={projectId}
Fans Portal > Product Detail > Fundraising PDP > Pat's Special
The project will move forward only if we reach a minimum of 100 slots. "Slots" (see F18). Also negative construction — lead with the positive. This project launches when 100 fans back it. (Currently 0.) The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F43
P1 · copy string
Storefront Copy Fans Portal
Fundraising PDP — /product/fundraising?id=… (Pat's Special)
/product/fundraising?id={projectId}
Fans Portal > Product Detail > Fundraising PDP > Pat's Special
Unlocked Now / Basic on plan card "Unlocked Now" is unclear — unlocked for whom, and why Now? Available now (chip) · tier name Basic below. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F44
P0 · copy + UI logic
Terms, Policy & Legal Copy Fans Portal
Fundraising PDP — /product/fundraising?id=… (Pat's Special)
/product/fundraising?id={projectId}
Fans Portal > Product Detail > Fundraising PDP > Pat's Special
Disclaimer body (long SG Securities-Act text) Dense wall of legalese shown inline — no toggle. Collapse behind Legal disclaimer (Singapore Securities and Futures Act) accordion. Open by default on first visit; remember after close. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only

Fans Portal — Cart, Checkout, Account, Orders, Login 16 requirements · 7 P0

ID / Priority Category Portal / Surface URL / Breadcrumb Current Copy Issue Required Copy Acceptance Criteria Evidence
FAN-F45
P1 · copy string
Storefront Copy Fans Portal
/cart
/cart
Fans Portal > /cart
Cart (0) OK but count without label is terse. Your Cart (0 items) The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F46
P0 · copy string
Commerce, Currency & Revenue Fans Portal
/cart
/cart
Fans Portal > /cart
Total 0.00 (two spaces, no currency) Missing currency prefix; double space is a layout bug. Total · USD 0.00 (en-space before amount, single prefix). The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F47
P1 · copy + i18n logic
Seed Data, Empty States & Placeholders Fans Portal
/cart
/cart
Fans Portal > /cart
Checkout button OK when cart has items; should be disabled with helper when empty. Empty state button text: Cart is empty (disabled) + link Browse stores →. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F48
P0 · copy string
Seed Data, Empty States & Placeholders Fans Portal
/checkout
/checkout
Fans Portal > /checkout
Delivery Address / Please select delivery address "Please" + repeats the heading as its own helper. Heading Delivery address · placeholder Add or choose an address. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F49
P0 · copy string
Seed Data, Empty States & Placeholders Fans Portal
/checkout
/checkout
Fans Portal > /checkout
Payment method / Choose your payment method Same repetition pattern. Heading Payment method · placeholder Add a card or select a saved method. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F50
P0 · copy string
Commerce, Currency & Revenue Fans Portal
/checkout
/checkout
Fans Portal > /checkout
USDTotal (no space between currency and label) Concatenation / i18n bug. Total (USD) — label; value right-aligned. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F51
P0 · copy string
Commerce, Currency & Revenue Fans Portal
/checkout
/checkout
Fans Portal > /checkout
USD $ 0.00 Double currency prefix + space before value. USD 0.00 (single prefix, no $). The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F52
P1 · copy string
Storefront Copy Fans Portal
/checkout
/checkout
Fans Portal > /checkout
Place Order Fine but enterprise-flavoured. Place order (sentence case; platform convention). The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F53
P1 · copy + i18n logic
Seed Data, Empty States & Placeholders Fans Portal
/account
/account
Fans Portal > /account
Recent Events Good. Keep. Empty state: "Events you've bought tickets to will show here." The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F54
P1 · copy string
Inventory, Counts & Pluralization Fans Portal
/account
/account
Fans Portal > /account
Your Favorite (singular) + section body has one item Singular noun for a plural list. Artists you follow The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F55
P1 · copy + i18n logic
Inventory, Counts & Pluralization Fans Portal
/account
/account
Fans Portal > /account
My Orders / My Fanvestments "Fanvestments" is a new-coin. OK if intentional, but inconsistent with Fanvestor singular elsewhere. Keep "Fanvestments" as feature noun; fix plural consistency across tiles: Fanvestors (people) / Fanvestments (your backings). Lock a glossary. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F56
P1 · copy string
Navigation & Section Labels Fans Portal
/orders/list
/orders/list
Fans Portal > /orders/list
Tabs Active / History "Active" ambiguous (active-tense or active-subscription?). In progress · Completed The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F57
P0 · copy string
Storefront Copy Fans Portal
/orders/list
/orders/list
Fans Portal > /orders/list
Row: 1 x Let's Pop! …then x1 again at right Quantity rendered twice in the same row. Keep quantity only on the right: × 1. Remove the 1 x prefix from title. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F58
P1 · copy string
CTA, State & Status Copy Fans Portal
/orders/list
/orders/list
Fans Portal > /orders/list
Status Processing (chip) OK. Consider full lifecycle language. Processing → Confirmed → Ready for pickup / Shipped → Complete (map to statuses). The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F59
P1 · copy string
Seed Data, Empty States & Placeholders Fans Portal
/login
/login
Fans Portal > /login
Placeholders Please enter email / Please enter password "Please" + field-name. Email / Password (labels above fields, placeholders empty or showing format name@domain.com). The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only
FAN-F60
P0 · copy string
Accessibility & Metadata Fans Portal
/login
/login
Fans Portal > /login
Primary button ships pre-disabled without visible validation text Accessibility + confusion. Keep disabled until both fields valid, show "Enter email and password to continue." below button. The current copy is replaced everywhere on this route/surface with the required copy, matching case, punctuation, and spacing exactly. URL/breadcrumb only

Fans Portal — Cross-Store Inconsistencies 10 requirements · 5 P0

ID / Priority Category Portal / Surface URL / Breadcrumb Current Copy Issue Required Copy Acceptance Criteria Evidence
FAN-I1
P1 · copy + i18n logic
CTA, State & Status Copy Fans Portal
Pre-follow vs post-follow CTA
/store/lesliecheung
Fans Portal > Storefront > Leslie Cheung
Join the Community (pre-follow on HowZ) / You are fan of Artist (post-follow, buggy) Pre-follow vs post-follow CTA Follow / Following / Unfollow are the only follow-state strings. HowZ and Leslie Cheung stores render the same wording pattern and state behavior for this concept. S1, S2
FAN-I2
P0 · copy string
Commerce, Currency & Revenue Fans Portal
Demo / seed content quality
/store/lesliecheung
Fans Portal > Storefront > Leslie Cheung
test test, test test test, Chinese-only product blurb alongside USD pricing / Real copy + real photos Demo / seed content quality Enforce English-only seed data on UAT-public stores, or mark HowZ internal-only. HowZ and Leslie Cheung stores render the same wording pattern and state behavior for this concept. S1, S2
FAN-I3
P1 · copy string
Inventory, Counts & Pluralization Fans Portal
Section headings
/store/lesliecheung
Fans Portal > Storefront > Leslie Cheung
HowZ's Event / HowZ's Product / Leslie Cheung's Fanvestor / Leslie Cheung's Product Section headings Upcoming Events, Shop, Crowdfunding Projects. Do not include artist possessives in section headings. HowZ and Leslie Cheung stores render the same wording pattern and state behavior for this concept. S1, S2
FAN-I4
P1 · copy string
Inventory, Counts & Pluralization Fans Portal
Stock-noun vocabulary
/store/lesliecheung
Fans Portal > Storefront > Leslie Cheung
BUNDLE LIMITED chip / FANS DISC. chip, 9 left, 9 Spot left, 100 slots Stock-noun vocabulary Pick one noun per concept; see F18 standardization table. HowZ and Leslie Cheung stores render the same wording pattern and state behavior for this concept. S1, S2
FAN-I5
P0 · copy string
Storefront Copy Fans Portal
Event card linkage
/store/lesliecheung
Fans Portal > Storefront > Leslie Cheung
Event tile is a dead div (no route) / Same — /eventDetail route exists but nothing links to it Event card linkage Either wire event cards to /eventDetail?id=… or remove the tile's hover affordance / cursor-pointer styling. HowZ and Leslie Cheung stores render the same wording pattern and state behavior for this concept. S1, S2
FAN-I6
P1 · copy string
Storefront Copy Fans Portal
Leaderboard rank rendering
/store/lesliecheung
Fans Portal > Storefront > Leslie Cheung
Top 3 \= avatar only, 4+ \= number / Same (bug symmetrical) Leaderboard rank rendering Always show both rank number and avatar; use medal icon for 1–3. HowZ and Leslie Cheung stores render the same wording pattern and state behavior for this concept. S1, S2
FAN-I7
P1 · copy string
Storefront Copy Fans Portal
Hero-subtitle truncation
/store/lesliecheung
Fans Portal > Storefront > Leslie Cheung
HowZ shows full tagline / Leslie truncates with … after \~160 chars, no toggle Hero-subtitle truncation Add Show more on both when content exceeds 2 lines. HowZ and Leslie Cheung stores render the same wording pattern and state behavior for this concept. S1, S2
FAN-I8
P0 · copy string
Navigation & Section Labels Fans Portal
About tab
/store/lesliecheung
Fans Portal > Storefront > Leslie Cheung
Click does not change content / Same — renders last-active tab About tab Fix the About tab routing. If content is not ready, remove About from the tab row. HowZ and Leslie Cheung stores render the same wording pattern and state behavior for this concept. S1, S2
FAN-I9
P0 · copy string
Commerce, Currency & Revenue Fans Portal
Product price display
/store/lesliecheung
Fans Portal > Storefront > Leslie Cheung
USD 1.65 card with CN bundle copy / USD 100.00 consistent Product price display Lock one currency per store; raise an inline warning when artist mixes. HowZ and Leslie Cheung stores render the same wording pattern and state behavior for this concept. S1, S2
FAN-I10
P0 · copy string
Storefront Copy Fans Portal
Grammar apostrophe handling
/store/lesliecheung
Fans Portal > Storefront > Leslie Cheung
HowZ's OK / Leslie Cheung's OK but upstream audit flagged Lullaboys` with a backtick Grammar apostrophe handling Normalize all apostrophes to straight ASCII ' at ingest; don't trust rich-text paste. HowZ and Leslie Cheung stores render the same wording pattern and state behavior for this concept. S1, S2

Fans Portal — Universal Copy Rules 10 requirements · 6 P0

ID / Priority Category Portal / Surface URL / Breadcrumb Current Copy Issue Required Copy Acceptance Criteria Evidence
FAN-RULE-1
P0 · copy + i18n logic
Commerce, Currency & Revenue Fans Portal
Fans Portal universal copy rule
/store/*, /product*, /cart, /checkout, /account, /orders/list, /login
/store/lesliecheung
Fans Portal > All routes
Multiple inconsistent patterns Global standard to lock Currency format: USD 100.00 — one ISO code, no $, one space, no trailing code. Applies in cart, checkout, PDP, modal range, summary. Never USD $, never $ USD, never USDTotal. All matching Fans Portal surfaces follow this rule. No conflicting English copy pattern remains in UAT. S1, S2
FAN-RULE-2
P0 · copy + i18n logic
Inventory, Counts & Pluralization Fans Portal
Fans Portal universal copy rule
/store/*, /product*, /cart, /checkout, /account, /orders/list, /login
/store/lesliecheung
Fans Portal > All routes
Multiple inconsistent patterns Global standard to lock Pluralization: count-dependent — 1 spot left, 9 spots left, 0 spots left. Never fix to singular. All matching Fans Portal surfaces follow this rule. No conflicting English copy pattern remains in UAT. S1, S2
FAN-RULE-3
P0 · copy + i18n logic
Storefront Copy Fans Portal
Fans Portal universal copy rule
/store/*, /product*, /cart, /checkout, /account, /orders/list, /login
/store/lesliecheung
Fans Portal > All routes
Multiple inconsistent patterns Global standard to lock Punctuation: ASCII colon : + single space after. Never . Em dash — for asides, en dash – for ranges. All matching Fans Portal surfaces follow this rule. No conflicting English copy pattern remains in UAT. S1, S2
FAN-RULE-4
P1 · copy + i18n logic
Seed Data, Empty States & Placeholders Fans Portal
Fans Portal universal copy rule
/store/*, /product*, /cart, /checkout, /account, /orders/list, /login
/store/lesliecheung
Fans Portal > All routes
Multiple inconsistent patterns Global standard to lock Case: Sentence case for buttons, helper, empty-state lines. Title Case only for headings, tab labels, proper nouns. All matching Fans Portal surfaces follow this rule. No conflicting English copy pattern remains in UAT. S1, S2
FAN-RULE-5
P1 · copy + i18n logic
Seed Data, Empty States & Placeholders Fans Portal
Fans Portal universal copy rule
/store/*, /product*, /cart, /checkout, /account, /orders/list, /login
/store/lesliecheung
Fans Portal > All routes
Multiple inconsistent patterns Global standard to lock Placeholders: never start with "Please". Pattern: {Verb} {object}Enter email, Add address, Select date. All matching Fans Portal surfaces follow this rule. No conflicting English copy pattern remains in UAT. S1, S2
FAN-RULE-6
P0 · copy + i18n logic
Seed Data, Empty States & Placeholders Fans Portal
Fans Portal universal copy rule
/store/*, /product*, /cart, /checkout, /account, /orders/list, /login
/store/lesliecheung
Fans Portal > All routes
Multiple inconsistent patterns Global standard to lock Empty-state text: always action-oriented, never shows -, never shows the placeholder No description. All matching Fans Portal surfaces follow this rule. No conflicting English copy pattern remains in UAT. S1, S2
FAN-RULE-7
P1 · copy + i18n logic
CTA, State & Status Copy Fans Portal
Fans Portal universal copy rule
/store/*, /product*, /cart, /checkout, /account, /orders/list, /login
/store/lesliecheung
Fans Portal > All routes
Multiple inconsistent patterns Global standard to lock Follow state: two states only — Follow / Following ✓. No third wording. All matching Fans Portal surfaces follow this rule. No conflicting English copy pattern remains in UAT. S1, S2
FAN-RULE-8
P1 · copy + i18n logic
Inventory, Counts & Pluralization Fans Portal
Fans Portal universal copy rule
/store/*, /product*, /cart, /checkout, /account, /orders/list, /login
/store/lesliecheung
Fans Portal > All routes
Multiple inconsistent patterns Global standard to lock Glossary (lock): Fan (user), Fanvestor (user who backs a crowdfund), Fanvestment (their backing), Event (ticketed thing), Drop (new product release), Bundle (multi-item package). No new coinages without updating the glossary. All matching Fans Portal surfaces follow this rule. No conflicting English copy pattern remains in UAT. S1, S2
FAN-RULE-9
P0 · copy + i18n logic
Accessibility & Metadata Fans Portal
Fans Portal universal copy rule
/store/*, /product*, /cart, /checkout, /account, /orders/list, /login
/store/lesliecheung
Fans Portal > All routes
Multiple inconsistent patterns Global standard to lock Browser title: {Context} · Beamco on every route. No more Store - Beamco across every SPA state. All matching Fans Portal surfaces follow this rule. No conflicting English copy pattern remains in UAT. S1, S2
FAN-RULE-10
P0 · copy + i18n logic
Accessibility & Metadata Fans Portal
Fans Portal universal copy rule
/store/*, /product*, /cart, /checkout, /account, /orders/list, /login
/store/lesliecheung
Fans Portal > All routes
Multiple inconsistent patterns Global standard to lock Accessibility: every product / hero image gets alt; all interactive divs on the fundraising PDP get role="button", tabindex="0", keyboard Enter/Space handlers — currently none, per page tips. All matching Fans Portal surfaces follow this rule. No conflicting English copy pattern remains in UAT. S1, S2