oh-my-design-cli 1.7.2 → 1.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/.claude/hooks/lib/preferences-parser.cjs +10 -1
  2. package/.claude/hooks/lib/preferences-writer.cjs +118 -0
  3. package/.claude/hooks/post-edit-watch.cjs +217 -29
  4. package/.claude/hooks/session-end-foldin.cjs +61 -5
  5. package/.claude/hooks/session-state-loader.cjs +49 -1
  6. package/README.ja.md +4 -4
  7. package/README.ko.md +7 -7
  8. package/README.md +7 -7
  9. package/README.zh-TW.md +4 -4
  10. package/agents/omd-master.md +8 -5
  11. package/agents/omd-ux-engineer.md +9 -7
  12. package/agents/omd-ux-writer.md +1 -1
  13. package/data/reference-fingerprints.json +6140 -5534
  14. package/dist/bin/oh-my-design.js +1 -1
  15. package/dist/{install-skills-KDW74C5K.js → install-skills-7UUDOLG2.js} +28 -24
  16. package/dist/install-skills-7UUDOLG2.js.map +1 -0
  17. package/package.json +2 -1
  18. package/skills/omd-designer-review/SKILL.md +34 -0
  19. package/skills/omd-final-qa/SKILL.md +29 -0
  20. package/skills/omd-harness/SKILL.md +8 -1
  21. package/skills/omd-init/SKILL.md +7 -11
  22. package/skills/omd-kr-writer/SKILL.md +73 -3
  23. package/skills/omd-learn/SKILL.md +20 -0
  24. package/skills/omd-reference-capture/SKILL.md +10 -6
  25. package/skills/omd-taste/SKILL.md +79 -0
  26. package/web/references/3o3/DESIGN.md +454 -0
  27. package/web/references/abema/DESIGN.md +535 -0
  28. package/web/references/accupass/DESIGN.md +494 -0
  29. package/web/references/adobe/DESIGN.md +458 -0
  30. package/web/references/danawa/DESIGN.md +477 -0
  31. package/web/references/dropbox/DESIGN.md +445 -0
  32. package/web/references/firstory/DESIGN.md +487 -0
  33. package/web/references/funnow/DESIGN.md +431 -0
  34. package/web/references/google/DESIGN.md +499 -0
  35. package/web/references/greenvines/DESIGN.md +454 -0
  36. package/web/references/greeting/DESIGN.md +462 -0
  37. package/web/references/imweb/DESIGN.md +460 -0
  38. package/web/references/laundrygo/DESIGN.md +434 -0
  39. package/web/references/microsoft/DESIGN.md +508 -0
  40. package/web/references/miricanvas/DESIGN.md +464 -0
  41. package/web/references/modusign/DESIGN.md +524 -0
  42. package/web/references/omnichat/DESIGN.md +499 -0
  43. package/web/references/postype/DESIGN.md +431 -0
  44. package/web/references/rakuten/DESIGN.md +440 -0
  45. package/web/references/ringle/DESIGN.md +444 -0
  46. package/web/references/salesforce/DESIGN.md +473 -0
  47. package/web/references/stores/DESIGN.md +447 -0
  48. package/web/references/teamblind/DESIGN.md +497 -0
  49. package/web/references/timee/DESIGN.md +444 -0
  50. package/web/references/wantedly/DESIGN.md +437 -0
  51. package/dist/install-skills-KDW74C5K.js.map +0 -1
@@ -0,0 +1,487 @@
1
+ ---
2
+ id: firstory
3
+ name: Firstory
4
+ country: TW
5
+ category: saas
6
+ homepage: "https://firstory.me"
7
+ primary_color: "#fb355e"
8
+ logo:
9
+ type: github
10
+ slug: Firstory
11
+ verified: "2026-06-10"
12
+ added: "2026-06-10"
13
+ omd: "0.1"
14
+ tokens:
15
+ source: live-extract
16
+ extracted: "2026-06-10"
17
+ note: "primary = raspberry-pink CTA (#fb355e) on a warm off-white canvas (#fbfaf9); Poppins 700 display over Open Sans body; flat shadcn/Tailwind-style system (oklch source tokens, hairline rings instead of shadows)."
18
+ colors:
19
+ primary: "#fb355e"
20
+ on-primary: "#fafafa"
21
+ ink: "#0d131c"
22
+ ink-soft: "#242a34"
23
+ muted: "#4f5661"
24
+ canvas: "#fbfaf9"
25
+ card: "#ffffff"
26
+ surface-cool: "#edf0f6"
27
+ pink-tint: "#ffe6e7"
28
+ pink-deep: "#962339"
29
+ beige: "#f6efe5"
30
+ hairline: "#e0e3e8"
31
+ success: "#00c950"
32
+ typography:
33
+ family: { display: "Poppins", body: "Open Sans" }
34
+ display-hero: { size: 72, weight: 700, lineHeight: 1.00, tracking: -1.8, use: "Hero headline, Poppins Bold" }
35
+ display-page: { size: 48, weight: 700, lineHeight: 1.00, tracking: -1.2, use: "Page titles (pricing hero)" }
36
+ section: { size: 36, weight: 700, lineHeight: 1.11, tracking: -0.9, use: "Section titles, Poppins" }
37
+ subsection: { size: 30, weight: 700, lineHeight: 1.20, tracking: -0.75, use: "Feature heads, CTA banner" }
38
+ card-title: { size: 18, weight: 600, lineHeight: 1.56, use: "Solution card titles, Poppins SemiBold" }
39
+ body: { size: 16, weight: 400, lineHeight: 1.50, use: "Standard reading text, Open Sans" }
40
+ nav: { size: 14, weight: 500, lineHeight: 1.43, use: "Nav items, buttons, Open Sans Medium" }
41
+ caption: { size: 12, weight: 600, lineHeight: 1.40, use: "Badge / pill labels" }
42
+ spacing: { xs: 4, sm: 8, md: 12, base: 16, lg: 24, xl: 32, section: 64 }
43
+ rounded: { sm: 10, md: 12, lg: 16, full: 9999 }
44
+ shadow:
45
+ none: "none"
46
+ components:
47
+ button-primary: { type: button, bg: "#fb355e", fg: "#fafafa", radius: "16px", padding: "0px 32px", height: "40px", font: "16px / 500 Open Sans", use: "Hero / banner CTA — Get started today" }
48
+ button-plan: { type: button, bg: "#fb355e", fg: "#fafafa", radius: "12px", padding: "0px 10px", height: "36px", font: "14px / 500 Open Sans", use: "Featured plan CTA — 14-Day Free Trial" }
49
+ button-quiet: { type: button, bg: "#fbfaf9", fg: "#0d131c", radius: "12px", padding: "0px 10px", height: "36px", font: "14px / 500 Open Sans", use: "Non-featured plan CTA — Start Free" }
50
+ nav-item: { type: button, fg: "#0d131c", radius: "10px", padding: "8px 16px", height: "36px", font: "14px / 500 Open Sans", use: "Transparent ghost nav menu item" }
51
+ billing-toggle: { type: tab, active: "bg #fb355e + text #fafafa", bg: "#f6efe5", fg: "#242a34", radius: "9999px", padding: "8px 20px", font: "14px / 500 Open Sans", use: "Monthly / Yearly segmented billing toggle" }
52
+ card-solution: { type: card, bg: "#ffffff", fg: "#0d131c", radius: "16px", padding: "32px", use: "Solution / feature card on warm canvas, 10% ink hairline ring" }
53
+ card-plan-featured: { type: card, bg: "#ffffff", border: "2px solid #fb355e", radius: "16px", use: "Recommended pricing plan card" }
54
+ badge-save: { type: badge, bg: "#ffe6e7", fg: "#962339", radius: "9999px", padding: "2px 8px", font: "12px / 600 Open Sans", use: "Save 22% pill on billing toggle" }
55
+ badge-recommend: { type: badge, bg: "#fb355e", fg: "#fafafa", radius: "9999px", padding: "4px 16px", font: "12px / 600 Open Sans", use: "Recommend pill on featured plan card" }
56
+ announcement-pill: { type: badge, bg: "#ffe6e7", fg: "#0d131c", border: "1px solid #ffe6e7", radius: "16px", font: "16px / 400 Open Sans", use: "Hero announcement banner pill" }
57
+ components_harvested: true
58
+ ---
59
+
60
+ # Design System Inspiration of Firstory
61
+
62
+ ## 1. Visual Theme & Atmosphere
63
+
64
+ Firstory is Taiwan's leading podcast-hosting SaaS, and its marketing surface reads like a warm, creator-friendly studio rather than an enterprise audio tool. The canvas is a warm off-white (`#fbfaf9`) — paper-toned, not clinical white — with pure-white cards (`#ffffff`) floating on top and a single saturated raspberry-pink (`#fb355e`) carrying every call to action. Text sits in a deep blue-black ink (`#0d131c`) with a slate muted tone (`#4f5661`) for secondary copy, giving the page calm editorial contrast against the energetic pink.
65
+
66
+ The typographic pairing defines the personality: **Poppins Bold (700)** owns every headline — a geometric, rounded sans that lands friendly and contemporary at the 72px hero size with tight `-1.8px` tracking — while **Open Sans** carries all body, navigation, and button text at 16px/400 and 14px/500. The geometric roundness of Poppins echoes the pill-and-rounded geometry of the components, so display type and UI chrome feel cut from the same cloth. Headlines in Traditional Chinese ("用 Podcast 開啟你的媒體事業") render with the same bold weight and tight rhythm, keeping the bilingual zh-TW/EN site visually unified.
67
+
68
+ Depth is almost entirely flat: live inspection found no rendered drop shadows on the nav, hero, cards, or buttons. Separation comes from the warm-canvas-versus-white-card contrast, 10%-ink hairline rings around cards, a cool grey tint (`#edf0f6`) and pink tints (`#ffe6e7`, plus a translucent `#fb355e` at low alpha) for feature illustration zones, and the `#e0e3e8` hairline. The system is built on a modern shadcn/Tailwind stack — colors are authored in oklch and radii step through 10px, 12px, and 16px — which gives the whole site the crisp, current feel of a 2020s developer-grade SaaS wearing a creator-warm palette.
69
+
70
+ **Key Characteristics:**
71
+ - Poppins Bold (700) for all display type — geometric, rounded, friendly authority
72
+ - Open Sans 400/500 for body and UI — neutral, highly legible workhorse
73
+ - One action color: raspberry-pink `#fb355e` for CTAs, active states, and the featured plan
74
+ - Warm off-white canvas (`#fbfaf9`) with pure-white cards (`#ffffff`) — paper-like, not sterile
75
+ - Flat depth: hairline rings and surface tints instead of drop shadows
76
+ - Pill geometry for toggles and badges; 10–16px rounding for buttons, cards, and nav
77
+ - Tight negative tracking on headlines (-1.8px at 72px, -0.9px at 36px)
78
+ - Pink tint family (`#ffe6e7` surface, `#962339` deep text) for announcement and savings accents
79
+ - Green `#00c950` reserved for checkmark/success semantics in pricing tables
80
+
81
+ ## 2. Color Palette & Roles
82
+
83
+ ### Primary
84
+ - **Firstory Pink** (`#fb355e`): The single action color — hero CTA, featured plan border, active billing toggle, Recommend badge, link accents on pricing. A raspberry-pink that reads creative and energetic rather than corporate.
85
+ - **On-Primary** (`#fafafa`): Near-white text on pink buttons and badges.
86
+ - **Ink** (`#0d131c`): Primary text color for headlines, body, and nav — a deep blue-black that stays soft against the warm canvas.
87
+
88
+ ### Surface & Neutral
89
+ - **Canvas** (`#fbfaf9`): The warm off-white page background — the system's defining surface.
90
+ - **Card White** (`#ffffff`): Solution cards, pricing plan cards, and content containers.
91
+ - **Cool Surface** (`#edf0f6`): Cool grey-blue tint for feature illustration zones and comparison-table stripes.
92
+ - **Beige** (`#f6efe5`): Warm beige for the inactive half of the billing toggle — a tactile, paper-like neutral.
93
+ - **Hairline** (`#e0e3e8`): Default border color for dividers and rings.
94
+
95
+ ### Pink Tint Family
96
+ - **Pink Tint** (`#ffe6e7`): Announcement pill background, Save-percentage badge background, and decorative tinted zones (often at 80% alpha).
97
+ - **Pink Deep** (`#962339`): Dark berry text on pink-tinted badges — the accessible companion to `#ffe6e7`.
98
+
99
+ ### Text Hierarchy & Semantic
100
+ - **Ink** (`#0d131c`): Headlines, primary copy, nav items.
101
+ - **Ink Soft** (`#242a34`): Inactive toggle label text.
102
+ - **Muted Slate** (`#4f5661`): Secondary body copy, footer links, captions.
103
+ - **Success Green** (`#00c950`): Feature checkmarks and positive indicators in pricing/compare tables.
104
+
105
+ ## 3. Typography Rules
106
+
107
+ ### Font Family
108
+ - **Display**: `Poppins` (with `Poppins Fallback`) — all h1/h2/h3 headlines, plan prices, FAQ items. Bold (700) at display sizes, SemiBold (600) at card-title sizes.
109
+ - **Body**: `Open Sans` (with `Open Sans Fallback`) — document default for body copy, nav, buttons, footer.
110
+
111
+ ### Hierarchy
112
+
113
+ | Role | Font | Size | Weight | Line Height | Letter Spacing | Notes |
114
+ |------|------|------|--------|-------------|----------------|-------|
115
+ | Display Hero | Poppins | 72px (4.50rem) | 700 | 1.00 (72px) | -1.8px | Homepage hero headline |
116
+ | Page Title | Poppins | 48px (3.00rem) | 700 | 1.00 (48px) | -1.2px | Pricing hero ("Simple, Transparent Pricing") |
117
+ | Section Heading | Poppins | 36px (2.25rem) | 700 | 1.11 (40px) | -0.9px | Section titles |
118
+ | Sub-section | Poppins | 30px (1.88rem) | 700 | 1.20 (36px) | -0.75px | Feature heads, CTA banner |
119
+ | Step Title | Poppins | 20px (1.25rem) | 600 | 1.40 (28px) | normal | Numbered step headings |
120
+ | Card Title | Poppins | 18px (1.13rem) | 600 | 1.56 (28px) | normal | Solution card titles, stat labels |
121
+ | FAQ Item | Poppins | 16px (1.00rem) | 500 | 1.50 | normal | Accordion triggers |
122
+ | Body | Open Sans | 16px (1.00rem) | 400 | 1.50 (24px) | normal | Standard reading text |
123
+ | Nav / Button | Open Sans | 14px (0.88rem) | 500 | 1.43 (20px) | normal | Nav items, button labels |
124
+ | Eyebrow Label | Open Sans | 14px (0.88rem) | 600 | 1.43 (20px) | normal | Small feature labels ("Distribution") |
125
+ | Badge | Open Sans | 12px (0.75rem) | 600 | 1.40 | normal | Save / Recommend pills |
126
+
127
+ ### Principles
128
+ - **Poppins persuades, Open Sans informs**: the geometric display face carries every emotional beat; the neutral body face carries every explanation. They never swap roles.
129
+ - **Tracking tightens with size**: -1.8px at 72px, -1.2px at 48px, -0.9px at 36px, -0.75px at 30px; normal at 20px and below.
130
+ - **Solid 1.0 line-height on display**: hero and page titles set line-height equal to font size — dense, poster-like blocks.
131
+ - **Prices are display type**: plan prices ($0 / $84 / $180) render in Poppins 36px/700, treated as headlines rather than data.
132
+ - **Bilingual parity**: zh-TW and EN copy share identical sizes, weights, and tracking — the system is locale-agnostic.
133
+
134
+ ## 4. Component Stylings
135
+
136
+ ### Buttons
137
+
138
+ **Primary CTA**
139
+ - Background: `#fb355e`
140
+ - Text: `#fafafa`
141
+ - Radius: 16px
142
+ - Padding: 0px 32px
143
+ - Height: 40px
144
+ - Font: 16px / 500 / Open Sans
145
+ - Use: Hero and banner CTAs ("Get started today", "Get Started for Free", "立即開始")
146
+
147
+ **Plan CTA (Featured)**
148
+ - Background: `#fb355e`
149
+ - Text: `#fafafa`
150
+ - Radius: 12px
151
+ - Padding: 0px 10px
152
+ - Height: 36px
153
+ - Font: 14px / 500 / Open Sans
154
+ - Use: CTA on the recommended pricing plan ("14-Day Free Trial", "免費試用 14 天")
155
+
156
+ **Plan CTA (Quiet)**
157
+ - Background: `#fbfaf9`
158
+ - Text: `#0d131c`
159
+ - Radius: 12px
160
+ - Padding: 0px 10px
161
+ - Height: 36px
162
+ - Font: 14px / 500 / Open Sans
163
+ - Use: CTA on non-featured plans ("Start Free", "免費開始")
164
+
165
+ **Nav Item (Ghost)**
166
+ - Background: transparent
167
+ - Text: `#0d131c`
168
+ - Radius: 10px
169
+ - Padding: 8px 16px
170
+ - Height: 36px
171
+ - Font: 14px / 500 / Open Sans
172
+ - Use: Top-nav menu items and links ("Features", "Pricing", "Blog")
173
+
174
+ ### Tabs
175
+
176
+ **Billing Toggle (Segmented)**
177
+ - Background: `#f6efe5` (inactive segment)
178
+ - Text: `#242a34` (inactive segment)
179
+ - Active: bg `#fb355e` + text `#fafafa`
180
+ - Radius: 9999px (full pill)
181
+ - Padding: 8px 20px
182
+ - Height: 36px
183
+ - Font: 14px / 500 / Open Sans
184
+ - Use: Monthly / Yearly billing period toggle on pricing
185
+
186
+ ### Cards & Containers
187
+
188
+ **Solution Card**
189
+ - Background: `#ffffff`
190
+ - Text: `#0d131c`
191
+ - Radius: 16px
192
+ - Padding: 32px
193
+ - Use: Solution / feature cards on the warm canvas ("AI Studio", "Data Analytics"), 10%-ink hairline ring, no shadow
194
+
195
+ **Pricing Plan Card**
196
+ - Background: `#ffffff`
197
+ - Radius: 16px
198
+ - Padding: 24px 0px
199
+ - Use: Standard pricing plan column
200
+
201
+ **Pricing Plan Card (Featured)**
202
+ - Background: `#ffffff`
203
+ - Border: 2px solid `#fb355e`
204
+ - Radius: 16px
205
+ - Padding: 24px 0px
206
+ - Use: Recommended plan, paired with the pink Recommend badge
207
+
208
+ ### Badges
209
+
210
+ **Save Badge**
211
+ - Background: `#ffe6e7`
212
+ - Text: `#962339`
213
+ - Radius: 9999px (full)
214
+ - Padding: 2px 8px
215
+ - Font: 12px / 600 / Open Sans
216
+ - Use: "Save 22%" pill attached to the Yearly toggle
217
+
218
+ **Recommend Badge**
219
+ - Background: `#fb355e`
220
+ - Text: `#fafafa`
221
+ - Radius: 9999px (full)
222
+ - Padding: 4px 16px
223
+ - Font: 12px / 600 / Open Sans
224
+ - Use: "Recommend" pill on the featured plan card
225
+
226
+ **Announcement Pill**
227
+ - Background: `#ffe6e7` (80% alpha)
228
+ - Text: `#0d131c`
229
+ - Border: 1px solid `#ffe6e7`
230
+ - Radius: 16px
231
+ - Height: 38px
232
+ - Font: 16px / 400 / Open Sans
233
+ - Use: Hero announcement banner ("First Wave in Asia-Pacific! …")
234
+
235
+ ### Navigation
236
+ - Background: transparent over `#fbfaf9` canvas
237
+ - Items: ghost buttons, 14px Open Sans weight 500, `#0d131c` text, 10px radius
238
+ - Height: 36px items in a slim top bar
239
+ - Use: Horizontal top nav (Features / Monetize / Compare / Pricing / Blog / For Advertisers) with language switcher
240
+
241
+ ### FAQ Accordion
242
+ - Background: transparent
243
+ - Text: `#0d131c`
244
+ - Padding: 20px 24px
245
+ - Height: 64px (collapsed trigger)
246
+ - Font: 16px / 500 / Poppins
247
+ - Use: FAQ section triggers ("How do I get started with Firstory?")
248
+
249
+ ### Footer
250
+ - Headings: `#0d131c`, 14px Open Sans weight 600 ("Product", "Resources", "Legal")
251
+ - Links: `#4f5661`, 14px Open Sans weight 400
252
+ - Use: Four-column sitemap footer with social links
253
+
254
+ ---
255
+ **Verified:** 2026-06-10
256
+ **Tier 1 sources:** https://firstory.me/en (homepage, live computed-style inspect); https://firstory.me/en/pricing (pricing surface, live computed-style inspect); https://firstory.me/zh (zh-TW homepage, live copy capture); https://firstory.blog (Firstory official blog — brand-owned); https://github.com/Firstory (official GitHub org — brand-owned)
257
+ **Tier 2 sources:** none available (getdesign.md/firstory → "No designs found"; styles.refero.design ?q=firstory search returns no Firstory listing)
258
+ **Conflicts unresolved:** none
259
+
260
+ ## 5. Layout Principles
261
+
262
+ ### Spacing System
263
+ - Base unit: 4px
264
+ - Scale: 4px, 8px, 12px, 16px, 20px, 24px, 32px, 64px
265
+ - Notable: solution cards use a generous 32px internal padding; nav items use compact 8px 16px; section rhythm runs at 64px+
266
+
267
+ ### Grid & Container
268
+ - Centered single-column hero with the 72px Poppins headline and one pink CTA as the anchor
269
+ - Solution cards in a 3-up grid of equal white cards (193px tall) on the warm canvas
270
+ - Pricing plans in a 4-up column grid; the recommended plan is slightly larger (2px pink border + badge)
271
+ - Feature sections alternate text and product-screenshot illustration zones on tinted surfaces
272
+ - Full-width sitemap footer in four columns
273
+
274
+ ### Whitespace Philosophy
275
+ - **Warm air, not empty space**: the off-white `#fbfaf9` canvas makes generous spacing feel cozy rather than stark.
276
+ - **Flat segmentation**: zones separate by surface tint (`#edf0f6` cool, `#ffe6e7` pink) and hairline rings — never by elevation.
277
+ - **One CTA per viewport**: each scroll position presents a single pink action; everything else stays ink-on-paper.
278
+
279
+ ### Border Radius Scale
280
+ - Small (10px): nav ghost items
281
+ - Medium (12px): plan CTAs, compact buttons
282
+ - Large (16px): cards, hero CTA, announcement pill — the workhorse
283
+ - Full (9999px): billing toggle, badges
284
+
285
+ ## 6. Depth & Elevation
286
+
287
+ | Level | Treatment | Use |
288
+ |-------|-----------|-----|
289
+ | Flat (Level 0) | No shadow | Page background, nav, text, buttons |
290
+ | Tint (Level 1) | `#edf0f6` / `#ffe6e7` background shift | Illustration zones, table stripes, announcement |
291
+ | Ring (Level 2) | 10%-ink hairline ring / `1px solid #e0e3e8` | Card outlines, dividers |
292
+ | Accent (Level 3) | `2px solid #fb355e` border | Featured plan card emphasis |
293
+
294
+ **Shadow Philosophy**: Firstory is a flat system. Live inspection found box-shadows declared only as fully transparent Tailwind ring placeholders — nothing visibly elevated on nav, hero, cards, or buttons. Hierarchy is communicated through the warm-canvas-versus-white-card value shift, tinted zones, hairline rings, and — for the single most important object on the pricing page — a 2px pink border. When the system wants attention, it reaches for the pink `#fb355e`, never for depth. This keeps the creator-facing product feeling light, fast, and contemporary.
295
+
296
+ ## 7. Do's and Don'ts
297
+
298
+ ### Do
299
+ - Use Poppins Bold (700) for every headline and plan price — it is the brand's display voice
300
+ - Use Open Sans 400/500 for body, nav, and button labels
301
+ - Reserve raspberry-pink (`#fb355e`) for actions, active states, and the featured plan only
302
+ - Set the page on warm off-white (`#fbfaf9`) with pure-white (`#ffffff`) cards
303
+ - Separate zones with surface tints (`#edf0f6`, `#ffe6e7`) and hairline rings, not shadows
304
+ - Use full-pill geometry for toggles and badges, 12–16px rounding for buttons and cards
305
+ - Track headlines tight (-1.8px at 72px) with 1.0 line-height
306
+ - Pair pink-tinted surfaces (`#ffe6e7`) with the deep berry text (`#962339`) for badges
307
+
308
+ ### Don't
309
+ - Use drop shadows for elevation — the system is flat by design
310
+ - Introduce a second saturated accent — pink is the only action color
311
+ - Set headlines in Open Sans or body copy in Poppins — the two faces never swap roles
312
+ - Use pure black for text — ink is `#0d131c`
313
+ - Put pink text on pink tint — tinted surfaces take `#962339` deep berry text
314
+ - Use sharp corners on interactive elements — nothing renders below 10px radius
315
+ - Shout with multiple CTAs per viewport — one pink action at a time
316
+ - Use green (`#00c950`) for anything other than checkmark/success semantics
317
+
318
+ ## 8. Responsive Behavior
319
+
320
+ ### Breakpoints
321
+ | Name | Width | Key Changes |
322
+ |------|-------|-------------|
323
+ | Mobile | <640px | Single column, hero compresses, nav collapses to menu |
324
+ | Tablet | 640-1024px | 2-up solution cards, stacked pricing plans |
325
+ | Desktop | 1024-1440px | Full layout, 3-up cards, 4-up pricing columns |
326
+
327
+ ### Touch Targets
328
+ - Buttons at 36–40px height with generous horizontal padding
329
+ - FAQ accordion triggers at a comfortable 64px height
330
+ - Billing toggle segments at 36px with 20px horizontal padding
331
+
332
+ ### Collapsing Strategy
333
+ - Hero: 72px Poppins headline scales down on mobile, weight 700 and tight tracking maintained
334
+ - Solution card grid: 3-up → 2-up → single column
335
+ - Pricing: 4 plan columns stack vertically; the featured plan keeps its 2px pink border and badge
336
+ - Footer: four columns stack into accordion-like groups
337
+
338
+ ### Image Behavior
339
+ - Product screenshots sit inside tinted illustration zones with 16px rounding and no shadow
340
+ - Player and waveform illustrations reuse the pink family at reduced alpha
341
+ - Cards maintain 16px radius across breakpoints
342
+
343
+ ## 9. Agent Prompt Guide
344
+
345
+ ### Quick Color Reference
346
+ - Primary CTA / active: Firstory Pink (`#fb355e`)
347
+ - CTA text: Near-White (`#fafafa`)
348
+ - Page background: Warm Canvas (`#fbfaf9`)
349
+ - Card background: Pure White (`#ffffff`)
350
+ - Headline / body text: Ink (`#0d131c`)
351
+ - Secondary text: Muted Slate (`#4f5661`)
352
+ - Cool tint zone: `#edf0f6`
353
+ - Pink tint zone / badge bg: `#ffe6e7`
354
+ - Badge text on pink tint: Deep Berry (`#962339`)
355
+ - Toggle inactive: Beige (`#f6efe5`) with `#242a34` text
356
+ - Hairline: `#e0e3e8`
357
+ - Success check: `#00c950`
358
+
359
+ ### Example Component Prompts
360
+ - "Create a hero on a warm off-white #fbfaf9 background. Headline at 72px Poppins weight 700, line-height 1.0, letter-spacing -1.8px, color #0d131c. Above it an announcement pill: #ffe6e7 background at 80% alpha, 1px solid #ffe6e7 border, 16px radius, 16px Open Sans #0d131c text. One CTA: #fb355e background, #fafafa text, 16px radius, 40px tall, 0 32px padding, 16px Open Sans weight 500."
361
+ - "Design a solution card: white #ffffff background, 16px radius, 32px padding, no shadow, subtle 10% ink hairline ring. Title 18px Poppins weight 600, #0d131c. Body 16px Open Sans weight 400, #4f5661."
362
+ - "Build a pricing section on #fbfaf9. Billing toggle: full-pill segmented control, inactive #f6efe5 with #242a34 text, active #fb355e with #fafafa text, 8px 20px padding; attach a 'Save 22%' pill (#ffe6e7 bg, #962339 text, 12px weight 600, 2px 8px padding). Plan cards: white, 16px radius; featured plan gets a 2px solid #fb355e border and a 'Recommend' pill (#fb355e bg, #fafafa text). Prices in 36px Poppins weight 700, #0d131c."
363
+ - "Create a top nav over #fbfaf9: ghost items at 14px Open Sans weight 500, #0d131c text, 10px radius, 8px 16px padding; pink #fb355e CTA right-aligned."
364
+
365
+ ### Iteration Guide
366
+ 1. Poppins 700 for every headline; Open Sans 400/500 for everything else
367
+ 2. Pink `#fb355e` is the single action color — never spread it to decoration
368
+ 3. No shadows — separate with the `#fbfaf9` vs `#ffffff` value shift, tints, and hairlines
369
+ 4. Radius ladder: 10px nav, 12px compact buttons, 16px cards/CTAs, pill toggles/badges
370
+ 5. Text is `#0d131c` ink and `#4f5661` muted — never pure black
371
+ 6. Tight negative tracking and 1.0 line-height on display type
372
+ 7. Pink tint `#ffe6e7` always pairs with `#962339` deep berry text
373
+ 8. Featured emphasis = 2px pink border, not shadow or scale
374
+
375
+ ---
376
+
377
+ ## 10. Voice & Tone
378
+
379
+ Firstory's voice is **encouraging, practical, and creator-first** — a knowledgeable studio partner who treats podcasting as a real media business, not a hobby. The hero line "用 Podcast 開啟你的媒體事業" ("Start Your Media Business with Podcasting") sets the register: ambitious on the creator's behalf, concrete about the path. Copy stays plain and benefit-led; feature names are friendly and capability-shaped ("AI 工作室", "會員訂閱", "節目推廣"), and every CTA lowers the barrier ("免費開始", "免費試用 14 天").
380
+
381
+ | Context | Tone |
382
+ |---|---|
383
+ | Hero headlines | Ambitious for the creator, business-framed. "用 Podcast 開啟你的媒體事業." |
384
+ | Feature descriptions | Capability + benefit in one line. "在任何地方嵌入播放器." |
385
+ | CTAs | Low-barrier, friendly imperatives. "立即開始", "免費開始", "Get started today". |
386
+ | Onboarding steps | Reassuringly simple. "3 步輕鬆開始 — 註冊帳號, 上傳你的 Podcast, 發佈與成長." |
387
+ | Social proof | Concrete numbers, global framing. "受到全球創作者的信賴." |
388
+ | FAQ | Direct first-person questions answered plainly. "Firstory 要多少錢?" |
389
+
390
+ **Voice samples (verbatim from live site):**
391
+ - "用 Podcast 開啟你的媒體事業" — zh-TW hero headline (business-framed ambition). *(verified live 2026-06-10)*
392
+ - "Start Your Media Business with Podcasting" — EN hero headline. *(verified live 2026-06-10)*
393
+ - "準備好開始你的 Podcast 之旅了嗎?" — pre-footer CTA banner (journey framing). *(verified live 2026-06-10)*
394
+ - "從核心功能到強大的進階特色" — feature section heading. *(verified live 2026-06-10)*
395
+
396
+ **Forbidden register**: hype superlatives, technical audio-engineering jargon left unexplained, pressure tactics ("limited time!"), and talking down to beginners — the brand assumes every listener can become a media business.
397
+
398
+ ## 11. Brand Narrative
399
+
400
+ Firstory was founded in Taipei in **2018** by three co-founders who started the company straight out of university — **于子軒 (Stanley Yu, CEO)**, **翁子皓 (CTO)**, and **劉德政 (COO)** (covered by INSIDE and Meet/Business Next startup media). The product began life as "Firstory Studio", a voice-based social app, before the team pivoted in 2019 into podcast hosting just as the Taiwanese podcast wave took off — a 180-degree turn that local tech media chronicled as one of Taiwan's defining creator-economy pivots. In October 2020 Firstory closed a seed round led by **KKBOX**, Taiwan's audio-streaming incumbent, aligning the scrappy hosting startup with the island's biggest sound platform.
401
+
402
+ The thesis stayed constant through the pivot: shorten the distance between making sound and being heard. Firstory built one-click distribution to every major podcast directory, then layered on the business stack — analytics, cross-promotion, the Flink smart-link, listener donations, member subscriptions, and an advertiser marketplace — and most recently AI tooling ("AI 工作室", AI content extraction) that turns episodes into shareable assets. The current homepage states the mission plainly: podcasting is a media business, and Firstory's job is to hand creators the whole toolkit, from hosting to monetization.
403
+
404
+ What Firstory refuses, visible in the design: enterprise-audio coldness, dashboard-grey utilitarianism, and gatekeeping complexity. What it embraces: a warm paper-like canvas, one optimistic pink, friendly geometric type, and copy that keeps telling an independent creator the same thing — you can start today, and it can become a business.
405
+
406
+ ## 12. Principles
407
+
408
+ 1. **Creator outcomes over platform features.** Every surface frames capability as creator benefit ("透過訂閱打造穩定收入"). *UI implication:* lead cards and sections with the benefit line; feature names stay short and human.
409
+ 2. **Lower the barrier, always.** From "3 步輕鬆開始" to free-tier CTAs, the system removes friction. *UI implication:* primary actions are always visible, always one per viewport, and always phrased as free starts.
410
+ 3. **One pink, one meaning.** `#fb355e` means "act" — CTA, active toggle, recommended plan. *UI implication:* never use the action pink decoratively; emphasis elsewhere uses tints and borders.
411
+ 4. **Warm and flat.** The paper-toned canvas and shadowless cards keep the tool approachable. *UI implication:* separate with surface value shifts and hairlines; reach for color, not elevation.
412
+ 5. **Bilingual by default.** zh-TW and EN are peer locales sharing one visual system. *UI implication:* type scale and components must hold up identically for CJK and Latin text.
413
+
414
+ ## 13. Personas
415
+
416
+ *Personas below are fictional archetypes informed by publicly observable Firstory user segments (independent Taiwanese podcasters, growing shows monetizing via subscriptions, advertisers), not individual people.*
417
+
418
+ **林佳穎, 27, 台北.** An office worker starting her first interview podcast on weekends. Picked Firstory because she could upload from her phone and be on Spotify and Apple Podcasts the same day. Reads the blog's beginner guides; the "免費開始" button is why she didn't postpone the first episode.
419
+
420
+ **陳威廷, 34, 台中.** Runs a finance commentary show with six-figure monthly plays. Uses member subscriptions and listener donations as core income, watches the analytics dashboard weekly, and upgraded to a paid plan for the advertiser marketplace. Wants the business tools without losing the indie feel.
421
+
422
+ **Sophie Chang, 41, 新加坡.** Marketing lead at a regional consumer brand buying podcast ads across Chinese-language shows. Enters through the "廣告主專區" surface; values transparent reach numbers and the curated network of creators in one place.
423
+
424
+ ## 14. States
425
+
426
+ | State | Treatment |
427
+ |---|---|
428
+ | **Empty (no episodes yet)** | Warm canvas (`#fbfaf9`), single Ink (`#0d131c`) line framing the start ("上傳你的 Podcast"), one pink CTA. Encouraging, not apologetic. *(illustrative, derived from system)* |
429
+ | **Empty (no analytics data)** | Muted Slate (`#4f5661`) explanation that data appears after the first published episode, with a link back to publishing. *(illustrative)* |
430
+ | **Loading (dashboard/list)** | Flat skeleton blocks in cool tint (`#edf0f6`) at final card dimensions, 16px radius — no shimmer shadows, consistent with the flat system. *(illustrative)* |
431
+ | **Loading (audio processing)** | Inline progress on the episode row; previous content stays visible. *(illustrative)* |
432
+ | **Error (upload failed)** | Inline message in Ink with plain-language cause and a retry action; never a bare error code. *(illustrative)* |
433
+ | **Error (form validation)** | Field-level message below the input; states what a valid value looks like. *(illustrative)* |
434
+ | **Success (episode published)** | Calm inline confirmation with the distribution status and a share link immediately below; check iconography in `#00c950`. *(illustrative)* |
435
+ | **Skeleton** | `#edf0f6` blocks, 16px radius, flat pulse. *(illustrative)* |
436
+ | **Disabled** | Reduced-opacity pink for primary actions (faded, not greyed) so the brand read survives; muted `#4f5661` labels elsewhere. *(illustrative)* |
437
+
438
+ ## 15. Motion & Easing
439
+
440
+ **Durations**:
441
+
442
+ | Token | Value | Use |
443
+ |---|---|---|
444
+ | `motion-fast` | 120ms | Hover, toggle press, nav item highlight |
445
+ | `motion-standard` | 200ms | Accordion expand, card reveal, dropdown |
446
+ | `motion-slow` | 300ms | Section transitions, hero entrance |
447
+
448
+ **Easings**:
449
+
450
+ | Token | Curve | Use |
451
+ |---|---|---|
452
+ | `ease-enter` | `cubic-bezier(0.2, 0.6, 0.25, 1)` | Arriving — accordions, cards |
453
+ | `ease-exit` | `cubic-bezier(0.4, 0.0, 1, 1)` | Dismissals |
454
+ | `ease-standard` | `cubic-bezier(0.25, 0.1, 0.25, 1)` | Two-way transitions (billing toggle) |
455
+
456
+ **Motion rules**: Motion stays quiet and functional, matching the flat aesthetic — the billing toggle slides its pink pill between segments at `motion-standard / ease-standard`; FAQ accordions expand without bounce; cards fade up subtly on scroll. No spring or overshoot — the product's promise is steadiness for creators' businesses. Under `prefers-reduced-motion: reduce`, transitions collapse to instant and scroll reveals render immediately. *(Motion tokens are illustrative, derived from the observed Tailwind/shadcn stack defaults and the system's flat character.)*
457
+
458
+ <!--
459
+ OmD v0.1 Sources — Philosophy Layer (sections 10–15)
460
+
461
+ Tier 1 live inspect (2026-06-10) via playwright getComputedStyle on
462
+ https://firstory.me/en, https://firstory.me/en/pricing, and copy capture on
463
+ https://firstory.me/zh. Token-level claims (§1–9) are sourced from this live
464
+ inspection; raw samples in web/references/firstory/.verification.md.
465
+
466
+ Voice samples (§10) are verbatim from the live zh-TW and EN homepages
467
+ (hero H1, section H2, CTA banner H2).
468
+
469
+ Brand narrative (§11): Firstory founded 2018 in Taipei by 于子軒 (CEO),
470
+ 翁子皓 (CTO), 劉德政 (COO); started as voice-social app "Firstory Studio",
471
+ pivoted to podcast hosting 2019; KKBOX-led seed round October 2020. These are
472
+ widely documented public facts covered by Taiwanese tech media (INSIDE
473
+ "從聲音交友 180 度變身大平台的創業物語", Meet/Business Next
474
+ "一畢業就創辦 Firstory", BusinessNext KKBOX investment coverage) — used here
475
+ for discovery; the brand's own surfaces (firstory.me, firstory.blog,
476
+ github.com/Firstory) are the cited Tier 1 sources for design claims.
477
+
478
+ Personas (§13) are fictional archetypes informed by publicly observable
479
+ Firstory user segments. Names are illustrative; they do not refer to real people.
480
+
481
+ States (§14) and motion tokens (§15) marked (illustrative) are derived from
482
+ the observed design system character, not measured app states.
483
+
484
+ Interpretive claims (e.g., "one pink, one meaning", "warm and flat as a
485
+ rejection of enterprise-audio coldness") are editorial readings connecting
486
+ Firstory's observed design to its positioning, not directly sourced statements.
487
+ -->