oh-my-design-cli 1.6.0 → 1.6.2
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.
- package/AGENTS.md +1 -1
- package/README.ko.md +12 -0
- package/README.md +49 -0
- package/data/reference-fingerprints.json +957 -2
- package/dist/bin/oh-my-design.js +4 -3
- package/dist/bin/oh-my-design.js.map +1 -1
- package/dist/{install-skills-IETT2TBJ.js → install-skills-6QFSN5BN.js} +108 -42
- package/dist/install-skills-6QFSN5BN.js.map +1 -0
- package/package.json +9 -3
- package/scripts/postinstall.cjs +6 -6
- package/skills/claude-design/SKILL.md +385 -0
- package/skills/claude-design/references/claude-design-flow.md +425 -0
- package/skills/claude-design/references/codebase-analysis.md +373 -0
- package/skills/claude-design/scripts/analyze_codebase.py +1369 -0
- package/skills/claude-design/scripts/clickable_link.sh +48 -0
- package/skills/claude-design/scripts/collect_source.py +178 -0
- package/skills/claude-design/scripts/drive_claude_design.cjs +378 -0
- package/skills/claude-design/scripts/gather_references.py +437 -0
- package/web/references/91app/DESIGN.md +151 -0
- package/web/references/airtable/DESIGN.md +16 -2
- package/web/references/bithumb/DESIGN.md +170 -0
- package/web/references/bunjang/DESIGN.md +20 -1
- package/web/references/cakeresume/DESIGN.md +162 -0
- package/web/references/catchtable/DESIGN.md +19 -0
- package/web/references/classting/DESIGN.md +251 -0
- package/web/references/classum/DESIGN.md +19 -0
- package/web/references/coinone/DESIGN.md +218 -0
- package/web/references/dabang/DESIGN.md +19 -0
- package/web/references/devsisters/DESIGN.md +253 -0
- package/web/references/dji/DESIGN.md +0 -1
- package/web/references/drnow/DESIGN.md +331 -0
- package/web/references/fastcampus/DESIGN.md +19 -0
- package/web/references/flex/DESIGN.md +19 -0
- package/web/references/flo/DESIGN.md +306 -0
- package/web/references/fugle/DESIGN.md +250 -0
- package/web/references/gmarket/DESIGN.md +19 -0
- package/web/references/gogolook/DESIGN.md +131 -0
- package/web/references/grip/DESIGN.md +250 -0
- package/web/references/hahow/DESIGN.md +158 -0
- package/web/references/hogangnono/DESIGN.md +308 -0
- package/web/references/hyundaicard/DESIGN.md +177 -0
- package/web/references/inflearn/DESIGN.md +19 -0
- package/web/references/jkopay/DESIGN.md +249 -0
- package/web/references/jobkorea/DESIGN.md +310 -0
- package/web/references/kbank/DESIGN.md +18 -0
- package/web/references/kdan/DESIGN.md +160 -0
- package/web/references/kkbox/DESIGN.md +114 -0
- package/web/references/krafton/DESIGN.md +230 -0
- package/web/references/kream/DESIGN.md +18 -0
- package/web/references/laftel/DESIGN.md +253 -0
- package/web/references/lezhin/DESIGN.md +301 -0
- package/web/references/lunit/DESIGN.md +19 -0
- package/web/references/melon/DESIGN.md +153 -0
- package/web/references/momoshop/DESIGN.md +279 -0
- package/web/references/mustit/DESIGN.md +282 -0
- package/web/references/nhncloud/DESIGN.md +174 -0
- package/web/references/oliveyoung/DESIGN.md +19 -0
- package/web/references/payco/DESIGN.md +227 -0
- package/web/references/piccollage/DESIGN.md +277 -0
- package/web/references/rayark/DESIGN.md +132 -0
- package/web/references/riiid/DESIGN.md +228 -0
- package/web/references/sendbird/DESIGN.md +285 -0
- package/web/references/socar/DESIGN.md +18 -0
- package/web/references/toss-securities/DESIGN.md +19 -0
- package/web/references/trenbe/DESIGN.md +252 -0
- package/web/references/tving/DESIGN.md +18 -0
- package/web/references/upbit/DESIGN.md +19 -0
- package/web/references/upstage/DESIGN.md +18 -0
- package/web/references/velog/DESIGN.md +168 -0
- package/web/references/voicetube/DESIGN.md +227 -0
- package/web/references/wadiz/DESIGN.md +19 -0
- package/web/references/webflow/DESIGN.md +16 -2
- package/web/references/yeogiotte/DESIGN.md +19 -0
- package/data/architecture-proposals/2026-05-13-thin-install-fresh-fetch.md +0 -189
- package/data/issues/2026-05-13-multi-surface-schema-rfc.md +0 -67
- package/data/reference-audits/2026-05-13-kr10.md +0 -132
- package/data/reference-audits/2026-05-14-kr10.md +0 -72
- package/data/reference-audits/2026-05-15-kr10.md +0 -124
- package/data/research/2026-05-18-agent-landscape.md +0 -69
- package/data/research/2026-05-18-kr-style-presets.md +0 -572
- package/dist/install-skills-IETT2TBJ.js.map +0 -1
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: jkopay
|
|
3
|
+
name: "JKOPay"
|
|
4
|
+
country: TW
|
|
5
|
+
category: fintech
|
|
6
|
+
homepage: "https://www.jkopay.com"
|
|
7
|
+
primary_color: "#C9191D"
|
|
8
|
+
logo:
|
|
9
|
+
type: favicon
|
|
10
|
+
slug: "https://www.google.com/s2/favicons?domain=jkopay.com&sz=256"
|
|
11
|
+
verified: "2026-06-03"
|
|
12
|
+
omd: "0.1"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# JKOPay
|
|
16
|
+
|
|
17
|
+
Taiwan's most widely used electronic payment platform, positioning itself as a full-spectrum fintech lifestyle companion — not just a wallet, but the infrastructure for daily life.
|
|
18
|
+
|
|
19
|
+
## 1. Visual Theme & Atmosphere
|
|
20
|
+
|
|
21
|
+
JKOPay's visual language is built around approachable confidence: a bold JKO red on a clean white-to-light-gray canvas that reads as modern and trustworthy without the austerity of traditional banking. The interface uses a clear typographic hierarchy with PingFang TC at its core, prioritising readability for Chinese-speaking users across age groups. Card surfaces carry a subtle gradient from pure white to a warm gray (#F4F4F6), with a barely-there shadow (0 15px 30px -25px rgba(0,0,0,0.12)) that lifts them off the page without theatrical depth. Navigation adopts a frosted-glass treatment (rgba(255,255,255,0.80)) that anchors the interface without competing with content. The overall atmosphere is warm, civic, and frictionless — built for the street-level simplicity of scanning and paying in seconds.
|
|
22
|
+
|
|
23
|
+
## 2. Color Palette & Roles
|
|
24
|
+
|
|
25
|
+
- **Brand Red (Primary):** `#C9191D` — primary action color; CTAs, brand highlights, active states, icon fills
|
|
26
|
+
- **Brand Red Hover:** `#D51B1F` — button hover state on primary CTAs
|
|
27
|
+
- **Brand Red Dark:** `#851113` — pressed/active state on primary interactive elements
|
|
28
|
+
- **Body Text:** `#42434A` — default text (rgb 66 67 74); high contrast on white surfaces
|
|
29
|
+
- **Dark Background:** `#171718` — footer, dark-mode panel backgrounds
|
|
30
|
+
- **Gray 900 / Dark Nav:** `#292F40` — section headings, heavy text on dark panels
|
|
31
|
+
- **Surface / Card:** `#F4F4F6` — card backgrounds, input fill, tag backgrounds
|
|
32
|
+
- **Border / Divider:** `#EDEDF1` — horizontal rules, card edges, list separators
|
|
33
|
+
- **Placeholder Text:** `#B7B8C4` — input placeholder, disabled labels
|
|
34
|
+
- **Blue Accent:** `#2E7DD9` — informational links, secondary highlights
|
|
35
|
+
|
|
36
|
+
## 3. Typography Rules
|
|
37
|
+
|
|
38
|
+
JKOPay uses a CJK-first font stack led by PingFang TC, falling back through Apple system fonts and then the Noto/Source Han family for cross-platform consistency.
|
|
39
|
+
|
|
40
|
+
**Font stack:** `PingFang TC, apple-system, system-ui, BlinkMacSystemFont, pingfang-tc, aktiv-grotesk, source-han-sans-traditional, Segoe UI, Roboto, Helvetica Neue, 微軟正黑體, sans-serif`
|
|
41
|
+
|
|
42
|
+
**Scale:**
|
|
43
|
+
- Display / Hero: 56px (mobile) → desktop responsive
|
|
44
|
+
- Heading LG-1: 50px
|
|
45
|
+
- Heading LG-2: 42px
|
|
46
|
+
- Heading LG-3: 36px
|
|
47
|
+
- Body MD: 21.4px (custom class `text-body-md`)
|
|
48
|
+
- Body SM: 18px (custom class `text-body-sm`)
|
|
49
|
+
- Body SM-2: 14px
|
|
50
|
+
- Body SM-1 / Caption: 13px
|
|
51
|
+
- Base UI: 16px
|
|
52
|
+
- Button: 17px / `font-medium` (weight 500)
|
|
53
|
+
|
|
54
|
+
**Weights:** 500 (medium) for UI elements and buttons; 600 for section labels; 700 for display headlines.
|
|
55
|
+
**Line-height:** `1.5` base; custom leading classes (`leading-body-sm-1`) for dense CJK text.
|
|
56
|
+
|
|
57
|
+
## 4. Component Stylings
|
|
58
|
+
|
|
59
|
+
### Primary CTA Button
|
|
60
|
+
|
|
61
|
+
**Solid Red (Primary)**
|
|
62
|
+
- Background: `#C9191D`
|
|
63
|
+
- Text: `#FFFFFF`
|
|
64
|
+
- Border: none
|
|
65
|
+
- Radius: 12px
|
|
66
|
+
- Padding: 12px 29px
|
|
67
|
+
- Font: 17px / 500
|
|
68
|
+
- Hover Background: `#D51B1F`
|
|
69
|
+
|
|
70
|
+
**Ghost / Secondary**
|
|
71
|
+
- Background: `rgba(255,255,255,0.30)`
|
|
72
|
+
- Text: `#C9191D`
|
|
73
|
+
- Border: 1px solid `#C9191D`
|
|
74
|
+
- Radius: 9px
|
|
75
|
+
- Padding: 12px 24px
|
|
76
|
+
- Font: 17px / 500
|
|
77
|
+
- Hover Background: `rgba(134,134,134,0.063)`
|
|
78
|
+
|
|
79
|
+
### Navigation Bar
|
|
80
|
+
|
|
81
|
+
**Top Nav**
|
|
82
|
+
- Background: `rgba(255,255,255,0.80)`
|
|
83
|
+
- Height: 64px
|
|
84
|
+
- Border: 0 solid `rgba(0,0,0,0.10)`
|
|
85
|
+
- Font: 16px / 500
|
|
86
|
+
- Text: `#42434A`
|
|
87
|
+
|
|
88
|
+
### Card
|
|
89
|
+
|
|
90
|
+
**Standard Card**
|
|
91
|
+
- Background: `#F4F4F6`
|
|
92
|
+
- Border: 1px solid `rgba(244,244,246,0)`
|
|
93
|
+
- Radius: 20px
|
|
94
|
+
- Shadow: `0 15px 30px -25px rgba(0,0,0,0.12)`
|
|
95
|
+
- Padding: 16px
|
|
96
|
+
|
|
97
|
+
### Tag / Badge
|
|
98
|
+
|
|
99
|
+
**Brand Tag**
|
|
100
|
+
- Background: `#F4F4F6`
|
|
101
|
+
- Text: `#C9191D`
|
|
102
|
+
- Radius: 40px
|
|
103
|
+
- Padding: 2px 12px
|
|
104
|
+
- Font: 13px / 500
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
**Verified:** 2026-06-03
|
|
108
|
+
**Tier 1 sources:** https://www.jkopay.com/application (homepage HTML + Next.js CSS bundle); https://www.jkopay.com/application/_next/static/css/6d42544b8623d735.css (main CSS bundle, 68 KB); https://img.jkos.com.tw/official_jkos_image/logo-red-square.svg (official brand logo SVG); https://www.jkos.com/press.html (press/brand page); https://www.jkos.com/download_app.html (download page)
|
|
109
|
+
**Tier 2 sources:** getdesign.md/jkopay — NOT LISTED ("No designs found for 'jkopay'"). refero — no result for JKOPay (TW brand, not indexed).
|
|
110
|
+
**Conflicts unresolved:** none
|
|
111
|
+
|
|
112
|
+
## 5. Layout Principles
|
|
113
|
+
|
|
114
|
+
JKOPay's homepage uses a single-column, full-bleed section layout on mobile, expanding to a constrained max-width container (≈1280px) on desktop with generous horizontal padding (4vw on large screens). Content sections alternate between white and light-gray (#F4F4F6) backgrounds, creating a visual rhythm without hard borders. The hero section stacks headline, subtext, and dual CTAs vertically, with a background photo covering the viewport. Feature cards are arranged in a 1-column (mobile) → 2–3-column (tablet/desktop) responsive grid. CTA buttons maintain a minimum width of 194px and are centered on mobile, left-aligned on desktop.
|
|
115
|
+
|
|
116
|
+
## 6. Depth & Elevation
|
|
117
|
+
|
|
118
|
+
JKOPay uses a restrained, two-tier shadow system:
|
|
119
|
+
|
|
120
|
+
- **Tier 0 – Flat:** No shadow; used for inline text links, tags, navigation items.
|
|
121
|
+
- **Tier 1 – Card:** `0 5px 40px -20px rgba(0,0,0,0.078)` — subtle lift for brand-wrapper cards and icon containers.
|
|
122
|
+
- **Tier 2 – Modal / Floating:** `0 8px 16px 0 rgba(0,0,0,0.20)` — dialogs, dropdown panels, toast notifications.
|
|
123
|
+
|
|
124
|
+
The frosted-glass nav (`rgba(255,255,255,0.80)`) adds implicit elevation through translucency rather than shadow. Dark overlays use `rgba(0,0,0,0.50)` for modals and `rgba(0,0,0,0.80)` for full-screen drawers.
|
|
125
|
+
|
|
126
|
+
## 7. Do's and Don'ts
|
|
127
|
+
|
|
128
|
+
### Do
|
|
129
|
+
- Use `#C9191D` as the sole primary action color; keep all CTAs visually consistent.
|
|
130
|
+
- Apply PingFang TC as the first font in the stack for CJK content rendering.
|
|
131
|
+
- Maintain 12px border-radius on primary buttons and 20px on cards for brand consistency.
|
|
132
|
+
- Use the frosted-glass pattern (`rgba(255,255,255,0.80)`) for sticky navigation.
|
|
133
|
+
- Keep button text at 17px / 500 weight regardless of container size.
|
|
134
|
+
- Use the #F4F4F6 surface for card backgrounds; never use pure white cards on white pages.
|
|
135
|
+
- Maintain a minimum button width of 194px for standalone CTAs.
|
|
136
|
+
- Reserve `#2E7DD9` blue strictly for informational/link contexts, not actions.
|
|
137
|
+
|
|
138
|
+
### Don't
|
|
139
|
+
- Never mix multiple accent colors within a single CTA row — one primary, one ghost maximum.
|
|
140
|
+
- Don't use font-weight 700 for body copy; reserve bold for hero headlines only.
|
|
141
|
+
- Avoid hard drop shadows deeper than Tier 2; JKOPay uses soft, spread shadows.
|
|
142
|
+
- Don't change button radius per breakpoint — 12px on desktop, 9px on mobile only for the ghost variant.
|
|
143
|
+
- Never use the brand red (`#C9191D`) for error states — keep error semantically distinct.
|
|
144
|
+
- Avoid placing content text below 13px to maintain CJK legibility standards.
|
|
145
|
+
|
|
146
|
+
## 8. Responsive Behavior
|
|
147
|
+
|
|
148
|
+
JKOPay is built with Tailwind CSS and uses the breakpoints `sm` (640px), `md` (768px), `lg` (1024px), `xl` (1280px). Key responsive rules:
|
|
149
|
+
|
|
150
|
+
- **Hero headline:** 36px mobile → 42px sm → 50px lg
|
|
151
|
+
- **Primary button padding:** `py-[12px] px-[24px]` mobile → `py-[15px] px-[86px]` sm+
|
|
152
|
+
- **Card radius:** 20px mobile → 30px sm → consistent 20–24px on cards
|
|
153
|
+
- **Section padding:** 16px mobile → 25px md → 40–60px sm+
|
|
154
|
+
- **Grid columns:** 1-col mobile → 2-col md → 3-col lg for feature grids
|
|
155
|
+
- **Nav height:** fixed `4rem` (64px) with `calc(4rem + 2px)` on sm+ for hairline border
|
|
156
|
+
|
|
157
|
+
## 9. Agent Prompt Guide
|
|
158
|
+
|
|
159
|
+
When building JKOPay-style UI:
|
|
160
|
+
- Start with a white or `#F4F4F6` background; use `#C9191D` for all primary interactive elements.
|
|
161
|
+
- Font stack must lead with `PingFang TC` for correct CJK rendering.
|
|
162
|
+
- Buttons: solid red (`#C9191D`) primary + ghost (`border: #C9191D, bg: transparent`) secondary; radius 12px desktop / 9px mobile ghost.
|
|
163
|
+
- Cards: `#F4F4F6` background, `20px` radius, subtle shadow `0 15px 30px -25px rgba(0,0,0,0.12)`.
|
|
164
|
+
- Navigation: sticky, `rgba(255,255,255,0.80)` backdrop, 64px tall, brand-red active links.
|
|
165
|
+
- Typography: 16px base, 17px buttons (medium 500), 21.4px body section text, 42–56px hero.
|
|
166
|
+
- Avoid deep shadows, loud gradients, or competing accent colors — the interface stays warm and uncluttered.
|
|
167
|
+
- Use `transition-timing-function: cubic-bezier(0.4,0,0.2,1)` (Tailwind's default easing) for interactive transitions.
|
|
168
|
+
|
|
169
|
+
## 10. Voice & Tone
|
|
170
|
+
|
|
171
|
+
**Adjectives:** Approachable, empowering, matter-of-fact.
|
|
172
|
+
|
|
173
|
+
| Do | Don't |
|
|
174
|
+
|---|---|
|
|
175
|
+
| Use everyday Mandarin; keep sentences short and action-oriented | Use banking jargon or formal register |
|
|
176
|
+
| Lead with user benefit ("解鎖生活" — unlock life) | Lead with product features or technical specs |
|
|
177
|
+
| Use "你" (you) to address users directly | Use passive constructions or impersonal phrasing |
|
|
178
|
+
| Be warm but efficient — one idea per sentence | Over-explain or add hedging language |
|
|
179
|
+
|
|
180
|
+
**Voice samples (illustrative):**
|
|
181
|
+
- *Illustrative:* "不止支付,用手機聰明解鎖生活每一刻。" (More than payment — smartly unlock every moment of life with your phone.)
|
|
182
|
+
- *Illustrative:* "結帳只要出示個人條碼,輕鬆完成付款。" (Just show your barcode to complete payment — done in seconds.)
|
|
183
|
+
- *Illustrative:* "從早餐到晚餐,從捷運到便利商店,街口陪你走過每一個生活場景。" (From breakfast to dinner, from the MRT to the convenience store — JKO is with you at every moment of life.)
|
|
184
|
+
|
|
185
|
+
## 11. Brand Narrative
|
|
186
|
+
|
|
187
|
+
JKOPay (街口支付) was born from a simple frustration: in 2015, cash still dominated Taiwan's street economy despite the country's technological sophistication. Kevin Hu, returning from Wall Street where he had worked as a hedge fund analyst, saw what mobile-first payment infrastructure had done in China and believed Taiwan deserved the same. With backing from the JKO Network ecosystem his family had built, he launched JKOPay with a mandate not of profit maximisation but of societal utility — "For me, the value of entrepreneurship lies in whether it makes people's lives more convenient."
|
|
188
|
+
|
|
189
|
+
The name itself — 街口 (jiē kǒu), meaning "street corner" or "intersection" — embeds the brand's core promise into its identity. JKOPay is not a bank app or a tech platform; it is the infrastructure of the everyday corner, the moment where daily life meets commerce. The brand grew by befriending the merchants others ignored: night market vendors, small-town convenience stores, neighbourhood restaurants. By 2023, JKOPay had become Taiwan's largest e-wallet by both user count and transaction volume, handling everything from QR-code payments and P2P transfers to insurance, investment, and hospital registration.
|
|
190
|
+
|
|
191
|
+
The brand's evolution reflects this ambition. The tagline shifted from the utilitarian "掃碼行動支付" (scan-code mobile payment) to the expansive "不止支付" (more than payment) — acknowledging that the product had outgrown any single category. JKOPay envisions itself as Taiwan's answer to an integrated fintech super-app: accessible enough for a grandmother at the wet market, sophisticated enough for the daily investor checking their Tuofu Bao savings account.
|
|
192
|
+
|
|
193
|
+
## 12. Principles
|
|
194
|
+
|
|
195
|
+
1. **Convenience is the product.** The interface must remove friction at every touchpoint — one tap to pay, one scan to complete. *UI implication:* Primary CTA is always above the fold; payment codes load instantly with no intermediate loading state displayed to the user.
|
|
196
|
+
|
|
197
|
+
2. **Inclusive by design.** Taiwan's market spans every age and digital literacy level. Design must work for both the tech-native university student and the sixty-year-old market vendor. *UI implication:* Minimum touch targets of 48px; large body text (18–21px) for key transactional content; avoid icon-only navigation labels.
|
|
198
|
+
|
|
199
|
+
3. **Trust is earned through transparency.** The brand grew in a conservative financial culture; clarity and directness are non-negotiable. *UI implication:* All fees, limits, and state changes must be surfaced proactively; no buried fine print. Success and error states are unambiguous.
|
|
200
|
+
|
|
201
|
+
4. **The street corner, not the boardroom.** JKOPay's voice and visual language stay close to street-level Taiwan, not aspirational finance. *UI implication:* Photography shows real urban Taiwan — convenience stores, wet markets, MRT stations, not abstract lifestyle imagery. Typography favors clarity over elegance.
|
|
202
|
+
|
|
203
|
+
5. **Ecosystem over transaction.** Every payment is an entry point to a broader financial life. *UI implication:* Post-payment screens offer relevant next actions (savings, cashback, merchant discovery) rather than a dead-end confirmation.
|
|
204
|
+
|
|
205
|
+
## 13. Personas
|
|
206
|
+
|
|
207
|
+
*Illustrative — representative archetypes based on JKOPay's stated market position and public user research.*
|
|
208
|
+
|
|
209
|
+
**Illustrative Persona 1 — The Urban Commuter (小美, 28)**
|
|
210
|
+
A Taipei office worker who uses JKOPay for her morning coffee, MRT top-up, lunch delivery, and monthly utility bills. She values speed above all — she wants to pay and move on. She checks her cashback balance weekly and responds to in-app promotions for brands she already uses.
|
|
211
|
+
|
|
212
|
+
**Illustrative Persona 2 — The Night Market Merchant (阿伯, 55)**
|
|
213
|
+
A second-generation stall owner who adopted JKOPay when his regular customers started asking. He only needs the merchant QR code scan flow and weekly withdrawal. His design requirement: no clutter, large text, and a reliable receipt confirmation he can show customers.
|
|
214
|
+
|
|
215
|
+
**Illustrative Persona 3 — The Student Saver (志豪, 22)**
|
|
216
|
+
A university student who uses JKOPay for peer transfers ("找錢"), splitting meals with friends, and exploring JKOPay's Tuofu Bao micro-savings. He discovered the app because it offered the best cashback at FamilyMart. He is price-sensitive and motivated by gamified rewards.
|
|
217
|
+
|
|
218
|
+
**Illustrative Persona 4 — The SME Owner (雅雯, 42)**
|
|
219
|
+
A small business owner who integrated JKOPay for her e-commerce checkout and physical pop-up stalls. She needs the merchant dashboard for reconciliation and values JKOPay's broad customer reach (6 million+ users) as a marketing channel.
|
|
220
|
+
|
|
221
|
+
## 14. States
|
|
222
|
+
|
|
223
|
+
- **Empty:** Illustration of a QR code scanner with the prompt "尚無交易記錄" (No transactions yet) and a single primary CTA to make the first payment.
|
|
224
|
+
- **Loading — Scan:** Animated concentric red rings pulse from the QR code centre; no spinner, motion stays within the barcode boundary.
|
|
225
|
+
- **Loading — Page:** Full-page skeleton with `#F4F4F6` shimmer bars replacing content blocks; nav and footer remain visible.
|
|
226
|
+
- **Error — Payment Failed:** Red-bordered inline alert banner (`#C9191D` left border, `#FFEEEB` background) with clear message and a retry CTA.
|
|
227
|
+
- **Error — Network:** Toast notification with `rgba(0,0,0,0.80)` dark background, white text, auto-dismisses after 4 seconds.
|
|
228
|
+
- **Success — Payment:** Full-screen confirmation with a bold checkmark icon in `#C9191D`, transaction amount, merchant name, and a "返回首頁" (Back to home) secondary link.
|
|
229
|
+
- **Skeleton:** Card skeletons use `#F4F4F6` base with a linear-gradient shimmer; maintains same height and radius as real cards.
|
|
230
|
+
- **Disabled:** Buttons drop to `rgba(201,25,29,0.40)` (60% opacity red) and `cursor: not-allowed`; text remains white for legibility.
|
|
231
|
+
|
|
232
|
+
## 15. Motion & Easing
|
|
233
|
+
|
|
234
|
+
**Duration scale:**
|
|
235
|
+
- Micro (hover, focus ring): 150ms
|
|
236
|
+
- Standard (page transitions, modals): 250ms
|
|
237
|
+
- Expressive (QR scan animation, hero entrance): 800ms
|
|
238
|
+
|
|
239
|
+
**Easing:**
|
|
240
|
+
- Default interactive: `cubic-bezier(0.4, 0, 0.2, 1)` (Tailwind `ease-in-out` / Material standard)
|
|
241
|
+
- Entry (elements appearing): `ease-in` — `cubic-bezier(0.0, 0, 0.2, 1)`
|
|
242
|
+
- Exit (elements disappearing): `ease-out` 150ms
|
|
243
|
+
|
|
244
|
+
**Rules:**
|
|
245
|
+
- All interactive state changes (hover, focus, active) use the 150–200ms micro duration.
|
|
246
|
+
- Modal overlays fade in at 250ms `ease-in`; fade out at 250ms with visibility transition at 100ms `ease-in` offset.
|
|
247
|
+
- Page-level transforms (scroll-triggered reveals) use 800ms with AOS (animate-on-scroll) library.
|
|
248
|
+
- Never animate layout shifts — only opacity and transform changes.
|
|
249
|
+
- QR code scan pulse uses `transition: transform 0.8s` on concentric circles.
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: jobkorea
|
|
3
|
+
name: "JobKorea"
|
|
4
|
+
country: KR
|
|
5
|
+
category: consumer-tech
|
|
6
|
+
homepage: "https://www.jobkorea.co.kr"
|
|
7
|
+
primary_color: "#083ccc"
|
|
8
|
+
logo:
|
|
9
|
+
type: favicon
|
|
10
|
+
slug: "https://www.jobkorea.co.kr/display/images/favicon.png"
|
|
11
|
+
verified: "2026-06-03"
|
|
12
|
+
omd: "0.1"
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# JobKorea
|
|
16
|
+
|
|
17
|
+
South Korea's leading AI career platform connecting 9+ million active job seekers with employers through personalized matching, salary intelligence, and community-driven career guidance.
|
|
18
|
+
|
|
19
|
+
## 1. Visual Theme & Atmosphere
|
|
20
|
+
|
|
21
|
+
JobKorea's visual language is confident and data-forward — the UI is built around a deep royal blue (`#083ccc`, JK Blue 600) that signals authority and trust in a crowded recruitment market. Surfaces stay crisp white with an understated gray-scale hierarchy (`#f6f7f8` background through `#1a1a1e` near-black) so that job listings and CTA buttons read at a glance without fatigue. An accent orange (`#ff6d12`, AM Orange 500) is reserved sparingly for urgency cues — deadline badges, highlighted pay rates — creating a clear urgency hierarchy without overwhelming the functional tone. Since the 2023 "Dreammark" brand refresh the product has leaned into a more youthful, mobile-first energy with pill-radius search bars (border-radius: 999px), gradient-glowing AI search inputs, and subtle card elevation — moving away from its legacy portal feel toward a modern career-management platform.
|
|
22
|
+
|
|
23
|
+
## 2. Color Palette & Roles
|
|
24
|
+
|
|
25
|
+
- **JK Blue 600 (Primary):** `#083ccc` — primary CTAs, active states, links, focus rings
|
|
26
|
+
- **JK Blue 500:** `#1b55f6` — hover surfaces, secondary brand tint
|
|
27
|
+
- **JK Blue 400:** `#4c7afb` — lighter interactive states, selected chip backgrounds
|
|
28
|
+
- **JK Blue 50:** `#f0f2fa` — brand-tinted backgrounds, pill tag fills
|
|
29
|
+
- **AM Orange 500 (Point):** `#ff6d12` — urgency badges, deadline labels, job-ad highlights
|
|
30
|
+
- **Gray 950 (Near-Black):** `#1a1a1e` — primary body text, headings
|
|
31
|
+
- **Gray 900:** `#292c32` — secondary text, card content
|
|
32
|
+
- **Gray 700:** `#575f6c` — tertiary labels, meta information
|
|
33
|
+
- **Gray 500:** `#949ba8` — placeholder text, disabled labels
|
|
34
|
+
- **Gray 100:** `#e6e8ea` — dividers, default input borders
|
|
35
|
+
- **Gray 50:** `#f6f7f8` — page background, search bar fill
|
|
36
|
+
- **Red 500 (Error):** `#fc3b3b` — form errors, destructive indicators
|
|
37
|
+
- **Green 500 (Success):** `#0dbc7c` — application success, offer received
|
|
38
|
+
- **Base White:** `#ffffff` — card surfaces, modal backgrounds
|
|
39
|
+
|
|
40
|
+
## 3. Typography Rules
|
|
41
|
+
|
|
42
|
+
JobKorea's UI type is set exclusively in **Pretendard**, with Korean fallbacks to Apple SD Gothic Neo and Malgun Gothic. The type scale is named by variant with an embedded px size.
|
|
43
|
+
|
|
44
|
+
| Role | Token | Size / Line-height | Weight |
|
|
45
|
+
|---|---|---|---|
|
|
46
|
+
| Display 1 | d1-48 | 48px / 64px | 700 |
|
|
47
|
+
| Display 2 | d2-36 | 36px / 48px | 700 |
|
|
48
|
+
| H1 | h1-32 | 32px / 42px | 700 |
|
|
49
|
+
| H2 | h2-28 | 28px / 34px | 700 |
|
|
50
|
+
| H3 | h3-24 | 24px / 32px | 700 |
|
|
51
|
+
| H4 | h4-20 | 20px / 28px | 600 |
|
|
52
|
+
| H5 | h5-18 | 18px / 24px | 600 |
|
|
53
|
+
| Body 1 | b1-17 | 17px / 25px | 400 |
|
|
54
|
+
| Body 2 | b2-16 | 16px / 24px | 400 |
|
|
55
|
+
| Body 3 | b3-15 | 15px / 22px | 400 |
|
|
56
|
+
| Body 4 | b4-14 | 14px / 20px | 400 |
|
|
57
|
+
| Caption 1 | c1-13 | 13px / 18px | 400 |
|
|
58
|
+
| Caption 2 | c2-12 | 12px / 17px | 400 |
|
|
59
|
+
| Caption 3 | c3-11 | 11px / 15px | 400 |
|
|
60
|
+
|
|
61
|
+
Heading tokens carry `letter-spacing: -0.5` for tighter display. Body and caption tokens use `letter-spacing: 0`.
|
|
62
|
+
|
|
63
|
+
## 4. Component Stylings
|
|
64
|
+
|
|
65
|
+
### Buttons
|
|
66
|
+
|
|
67
|
+
**Primary (size-48)**
|
|
68
|
+
- Background: `#083ccc`
|
|
69
|
+
- Text: `#ffffff`
|
|
70
|
+
- Height: 48px
|
|
71
|
+
- Radius: 10px
|
|
72
|
+
- Font: 16px / 700
|
|
73
|
+
- Padding: 0 16px
|
|
74
|
+
|
|
75
|
+
**Primary Hover**
|
|
76
|
+
- Background: `#012ca2`
|
|
77
|
+
- Text: `#ffffff`
|
|
78
|
+
- Height: 48px
|
|
79
|
+
- Radius: 10px
|
|
80
|
+
- Font: 16px / 700
|
|
81
|
+
|
|
82
|
+
**Secondary Outlined (size-48)**
|
|
83
|
+
- Background: `#ffffff`
|
|
84
|
+
- Text: `#1a1a1e`
|
|
85
|
+
- Border: 1px solid `#d5d8dc`
|
|
86
|
+
- Height: 48px
|
|
87
|
+
- Radius: 10px
|
|
88
|
+
- Font: 16px / 400
|
|
89
|
+
|
|
90
|
+
**Disabled Filled**
|
|
91
|
+
- Background: `#d5d8dc`
|
|
92
|
+
- Text: `#949ba8`
|
|
93
|
+
- Height: 48px
|
|
94
|
+
- Radius: 10px
|
|
95
|
+
- Font: 16px / 400
|
|
96
|
+
|
|
97
|
+
**Small (size-40)**
|
|
98
|
+
- Background: `#083ccc`
|
|
99
|
+
- Text: `#ffffff`
|
|
100
|
+
- Height: 40px
|
|
101
|
+
- Radius: 10px
|
|
102
|
+
- Font: 14px / 700
|
|
103
|
+
|
|
104
|
+
**Ghost Text Button**
|
|
105
|
+
- Background: `#f6f7f8`
|
|
106
|
+
- Text: `#083ccc`
|
|
107
|
+
- Height: 40px
|
|
108
|
+
- Radius: 10px
|
|
109
|
+
- Font: 14px / 500
|
|
110
|
+
|
|
111
|
+
### Text Fields
|
|
112
|
+
|
|
113
|
+
**Default (size-52)**
|
|
114
|
+
- Background: `#ffffff`
|
|
115
|
+
- Border: 1px solid `#e6e8ea`
|
|
116
|
+
- Radius: 10px
|
|
117
|
+
- Padding: 0 16px
|
|
118
|
+
- Height: 52px
|
|
119
|
+
- Font: 15px / 400
|
|
120
|
+
|
|
121
|
+
**Focused**
|
|
122
|
+
- Background: `#ffffff`
|
|
123
|
+
- Border: 1px solid `#1a1a1e`
|
|
124
|
+
- Radius: 10px
|
|
125
|
+
- Height: 52px
|
|
126
|
+
- Font: 15px / 400
|
|
127
|
+
|
|
128
|
+
**Error**
|
|
129
|
+
- Background: `#ffffff`
|
|
130
|
+
- Border: 1px solid `#f11e1e`
|
|
131
|
+
- Radius: 10px
|
|
132
|
+
- Height: 52px
|
|
133
|
+
- Font: 15px / 400
|
|
134
|
+
|
|
135
|
+
**Disabled**
|
|
136
|
+
- Background: `#f6f7f8`
|
|
137
|
+
- Border: 1px solid `#e6e8ea`
|
|
138
|
+
- Radius: 10px
|
|
139
|
+
- Height: 52px
|
|
140
|
+
- Font: 15px / 400
|
|
141
|
+
|
|
142
|
+
### Search Bar
|
|
143
|
+
|
|
144
|
+
**AI Search (pill)**
|
|
145
|
+
- Background: `#f6f7f8`
|
|
146
|
+
- Border: 1px solid gradient (animated pink → amber → blue)
|
|
147
|
+
- Radius: 999px
|
|
148
|
+
- Height: 48px
|
|
149
|
+
- Padding: 0 16px
|
|
150
|
+
- Font: 15px / 400
|
|
151
|
+
|
|
152
|
+
**Standard Search**
|
|
153
|
+
- Background: `#f6f7f8`
|
|
154
|
+
- Radius: 999px
|
|
155
|
+
- Height: 48px
|
|
156
|
+
- Padding: 0 16px
|
|
157
|
+
- Font: 15px / 400
|
|
158
|
+
|
|
159
|
+
### Job Cards
|
|
160
|
+
|
|
161
|
+
**Default Card**
|
|
162
|
+
- Background: `#ffffff`
|
|
163
|
+
- Border: 1px solid `#e6e8ea`
|
|
164
|
+
- Radius: 10px
|
|
165
|
+
- Padding: 16px
|
|
166
|
+
|
|
167
|
+
**Elevated Card**
|
|
168
|
+
- Background: `#ffffff`
|
|
169
|
+
- Radius: 12px
|
|
170
|
+
- Padding: 16px
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
**Verified:** 2026-06-03
|
|
174
|
+
**Tier 1 sources:** https://www.jobkorea.co.kr (homepage HTML), https://fe-static-cdn.jobkorea.co.kr/display/web/_next/static/css/ff9addcaa74e70a7.css (main CSS bundle with full token system), https://fe-static-cdn.jobkorea.co.kr/display/web/_next/static/css/fd29aacb4b8b02e0.css, https://fe-static-cdn.jobkorea.co.kr/display/web/_next/static/css/fa90ad3a5df82bc3.css, https://www.jobkorea.co.kr/company/1517115 (Worxphere/JobKorea company page)
|
|
175
|
+
**Tier 2 sources:** getdesign.md/jobkorea — NOT LISTED (no data). refero — no results for JobKorea.
|
|
176
|
+
**Conflicts unresolved:** The 2023 Sodiumpartners rebrand narrative describes "JOBKOREA Black" as the primary brand color, but the live CSS token system (`data-brand-theme=jk`) clearly maps `--themecolor-brand-primary` to `--color-jkblue-600` (#083ccc). The deep blue is used for all primary buttons and interactive states in the current production build; the near-black (#1a1a1e) functions as the primary text color, not the brand color.
|
|
177
|
+
|
|
178
|
+
## 5. Layout Principles
|
|
179
|
+
|
|
180
|
+
JobKorea uses a single max-width content container of **1024px** on desktop, centering all content with full-bleed section backgrounds. The page has two primary breakpoints: mobile-first (≤600px) and desktop (≥1024px), with no intermediate tablet breakpoint declared. Job listing grids use CSS grid or flex with 8px base spacing unit (multiples: 4, 8, 12, 16, 20, 24, 32, 40, 48px). Navigation is sticky with a white background and bottom divider. The GNB maintains a fixed height and collapses into a hamburger on mobile.
|
|
181
|
+
|
|
182
|
+
## 6. Depth & Elevation
|
|
183
|
+
|
|
184
|
+
JobKorea's elevation system has four named shadow levels:
|
|
185
|
+
|
|
186
|
+
- **List shadow** (subtle rows): `0 4px 8px rgba(0,0,0,0.02)` — used on list items
|
|
187
|
+
- **Secondary shadow** (card rest): `0 4px 16px rgba(0,0,0,0.07)` — default card state
|
|
188
|
+
- **Default shadow** (interactive card): `0 4px 16px rgba(0,0,0,0.12)` — hovered cards, modals
|
|
189
|
+
- **Up shadow** (bottom sheet): `0 -2px 12px rgba(0,0,0,0.12)` — bottom sheet, sticky CTAs
|
|
190
|
+
- **Button Big shadow**: `0 0 12px rgba(0,0,0,0.20)` — large floating action buttons
|
|
191
|
+
|
|
192
|
+
Modals use a `rgba(0,0,0,0.6)` dimmer overlay. Tooltips use `#1a1a1ed9` (85% near-black) background.
|
|
193
|
+
|
|
194
|
+
## 7. Do's and Don'ts
|
|
195
|
+
|
|
196
|
+
### Do
|
|
197
|
+
- Use JK Blue 600 (`#083ccc`) for all primary interactive elements — buttons, active tabs, checked states
|
|
198
|
+
- Apply Pretendard at the specified weight/size tokens; never mix ad-hoc font sizes outside the named scale
|
|
199
|
+
- Use pill-radius (999px) for search inputs and tag chips; use 10px radius for cards and form controls
|
|
200
|
+
- Reserve AM Orange (`#ff6d12`) strictly for urgency signals — deadline countdowns, urgent-hire badges
|
|
201
|
+
- Keep body copy at Gray 950 (`#1a1a1e`) on white; use Gray 700 (`#575f6c`) for secondary metadata
|
|
202
|
+
- Use `0 4px 16px rgba(0,0,0,0.12)` elevation for interactive cards; flat (no shadow) for static content
|
|
203
|
+
- Provide skeleton loaders matching the exact card height/radius before content loads
|
|
204
|
+
|
|
205
|
+
### Don't
|
|
206
|
+
- Don't use AM Orange for primary buttons or general interactive states — it belongs to AlbaMon's brand
|
|
207
|
+
- Don't apply the gradient search border animation to non-AI-powered inputs; it signals AI capability
|
|
208
|
+
- Don't use border-radius values outside the token set (avoid ad-hoc 5px, 15px, 20px)
|
|
209
|
+
- Don't place body text below Gray 700 (`#575f6c`) on white — fails WCAG AA at small sizes
|
|
210
|
+
- Don't stack more than two elevation levels in the same scroll context (list + modal is fine; list + card + modal is not)
|
|
211
|
+
- Don't use the gray-950 near-black (#1a1a1e) as a button background except for the "inverse" button variant
|
|
212
|
+
|
|
213
|
+
## 8. Responsive Behavior
|
|
214
|
+
|
|
215
|
+
JobKorea is a mobile-first Next.js application (React server components). Below 600px the layout shifts to single-column with full-width cards; the search bar transitions from 600px fixed-width to fluid 100%. Navigation collapses from a full horizontal GNB to a bottom tab bar on mobile. The 1024px container clamps on desktop. Font sizes scale down one step at mobile: Display tokens are avoided; H3 (24px) is the largest practical heading. Button heights prefer the 48px variant on desktop, 40px on mobile for comfortable touch targets.
|
|
216
|
+
|
|
217
|
+
## 9. Agent Prompt Guide
|
|
218
|
+
|
|
219
|
+
When building JobKorea-style UI:
|
|
220
|
+
- Scaffold the layout with a max-width 1024px centered container, background `#f6f7f8`
|
|
221
|
+
- Primary button: background `#083ccc`, text `#ffffff`, height 48px, border-radius 10px, font-weight 700, font-size 16px (Pretendard)
|
|
222
|
+
- Secondary button: border 1px solid `#d5d8dc`, background `#ffffff`, same radius/height
|
|
223
|
+
- Input field: border 1px solid `#e6e8ea`, background `#ffffff`, height 52px, radius 10px, 16px padding, placeholder color `#949ba8`
|
|
224
|
+
- Search pill: background `#f6f7f8`, radius 999px, height 48px
|
|
225
|
+
- Card: background `#ffffff`, border 1px solid `#e6e8ea`, radius 10px, padding 16px, shadow `0 4px 16px rgba(0,0,0,0.12)` on hover
|
|
226
|
+
- Body text: `#1a1a1e` (primary), `#575f6c` (secondary), `#949ba8` (placeholder)
|
|
227
|
+
- Error text/border: `#fc3b3b`; Success: `#0dbc7c`; Urgency badge: `#ff6d12` background
|
|
228
|
+
|
|
229
|
+
## 10. Voice & Tone
|
|
230
|
+
|
|
231
|
+
JobKorea's voice is **direct, encouraging, and data-grounded** — it speaks like a well-informed career advisor who respects the user's time.
|
|
232
|
+
|
|
233
|
+
| Do | Don't |
|
|
234
|
+
|---|---|
|
|
235
|
+
| Lead with concrete benefit ("AI가 맞춤 공고 5개를 찾았어요") | Vague aspiration without specificity ("당신의 꿈을 펼치세요") |
|
|
236
|
+
| Use short, active sentences in informal Korean (-해요 register) | Jargon-heavy HR speak ("핵심 역량 기반 매칭 알고리즘") |
|
|
237
|
+
| Acknowledge the user's current situation before offering next step | Jump straight to a CTA without context |
|
|
238
|
+
| State numbers — application rates, salary percentiles, recruiter views | Use superlatives without proof ("최고의", "가장 좋은") |
|
|
239
|
+
|
|
240
|
+
Voice samples (illustrative):
|
|
241
|
+
- *"지난주보다 지원자가 30% 늘었어요. 지금 지원하면 더 눈에 띌 수 있어요."*
|
|
242
|
+
- *"딱 맞는 공고 3개가 생겼어요. 한번 확인해볼까요?"*
|
|
243
|
+
- *"이력서를 업데이트하면 채용담당자에게 더 잘 보여요. 5분이면 충분해요."*
|
|
244
|
+
|
|
245
|
+
## 11. Brand Narrative
|
|
246
|
+
|
|
247
|
+
JobKorea was established in 1996 and launched its employment portal in 1998 as one of Korea's first dedicated online job boards. Over nearly three decades it grew into the nation's largest HR platform — now part of the Worxphere group — hosting 9.32 million active resumes and connecting approximately one million monthly active job seekers with employers across every industry and region.
|
|
248
|
+
|
|
249
|
+
In 2023, JobKorea unveiled its "Dreammark" brand identity, created by branding agency Sodiumpartners. The refresh moved the platform's narrative from a utilitarian job-listing site toward a personalized career manager, with a bold JK Blue identity system and a new brand mascot "Jobko" that embodies the mission: guiding people toward jobs that fit their real selves. The company articulates its purpose as making "people's dreams become jobs, and companies' jobs become dreams," with a social-responsibility dimension — donating 100 KRW per submitted resume and per job posting to welfare programs for people with disabilities and economically marginalized youth.
|
|
250
|
+
|
|
251
|
+
Today, Worxphere operates JobKorea alongside AlbaMon (part-time), GameJob, NineHire (ATS), and JobPlanet (employer reviews), building toward a full-stack AI HR tech platform. The platform has ranked #1 in Korean employment portal brand power (K-BPI) for three consecutive years (2023–2025), and its AI-powered "LOOP AI" recommendation engine now powers the core job-discovery experience on both web and mobile.
|
|
252
|
+
|
|
253
|
+
## 12. Principles
|
|
254
|
+
|
|
255
|
+
1. **Personalization over volume.** JobKorea surfaces fewer, better-matched opportunities rather than an overwhelming list. *UI implication:* The default job feed shows AI-ranked picks, not raw chronological listings; chip filters and saved preferences shape what the user sees from the first visit.*
|
|
256
|
+
|
|
257
|
+
2. **Transparency builds trust.** Salary data, recruiter view counts, application-to-hire ratios, and company reviews are surfaced inline on job cards — not behind a paywall. *UI implication:* Job cards include a salary indicator and a "N명 지원" (N applied) count next to the title.*
|
|
258
|
+
|
|
259
|
+
3. **Speed respects the user.** A resume can be submitted in two taps from a job card; the full application flow targets under 60 seconds. *UI implication:* Destructive or multi-step actions require confirmation, but forward-direction actions — apply, save, share — are single-tap with immediate feedback.*
|
|
260
|
+
|
|
261
|
+
4. **Data earns the right to advise.** JobKorea uses behavioral signals (viewed jobs, resume completeness, location) before making AI recommendations, never cold. *UI implication:* Empty states prompt profile completion rather than showing random content; progress indicators show how close the user is to unlocking personalized matches.*
|
|
262
|
+
|
|
263
|
+
5. **Inclusive access.** The platform serves job seekers at every career stage — new graduates, mid-career transitioners, seniors, and part-timers — with differentiated content lanes rather than a one-size feed. *UI implication:* Specialized channels (IT, Design, Senior, Startup) are surfaced in persistent GNB tabs and not buried in filter menus.*
|
|
264
|
+
|
|
265
|
+
## 13. Personas
|
|
266
|
+
|
|
267
|
+
*Illustrative — not based on published JobKorea research.*
|
|
268
|
+
|
|
269
|
+
**신입 취준생 (First-time Graduate)** — 24, finishes university in February, applying to large conglomerates and IT firms. Checks the app daily on commute; motivated by application counters and peer benchmarks. Needs resume templates, accepted cover letter examples, and aptitude test prep links within one tap.
|
|
270
|
+
|
|
271
|
+
*Illustrative — not based on published JobKorea research.*
|
|
272
|
+
|
|
273
|
+
**경력 이직자 (Mid-Career Switcher)** — 33, 8 years in marketing, wants to move from agency to in-house. Has a complete profile but is selective; visits weekly, not daily. Values salary benchmarking, company culture reviews, and recruiter contact over raw listing volume.
|
|
274
|
+
|
|
275
|
+
*Illustrative — not based on published JobKorea research.*
|
|
276
|
+
|
|
277
|
+
**채용담당자 (HR Manager)** — 40, in-house recruiter at a 300-person tech company. Uses the employer dashboard to post jobs, review applicants, and send messages. Needs fast bulk-action tools, applicant status tracking, and analytics on listing performance.
|
|
278
|
+
|
|
279
|
+
*Illustrative — not based on published JobKorea research.*
|
|
280
|
+
|
|
281
|
+
**긱 워커 (Gig / Part-time Seeker)** — 28, freelancer top-up income via AlbaMon integration. Wants quick-apply shifts near their location, hourly rate transparency, and immediate availability confirmation.
|
|
282
|
+
|
|
283
|
+
## 14. States
|
|
284
|
+
|
|
285
|
+
- **Empty (no results):** Illustrated character (Jobko mascot) with headline "맞는 공고가 없어요" + sub-copy suggesting filter adjustment and a ghost CTA to reset filters; never a blank white box
|
|
286
|
+
- **Loading skeleton:** Cards render as gray shimmer blocks matching the exact height and border-radius of the real card (radius 10px, height ~120px); page background remains `#f6f7f8`
|
|
287
|
+
- **Error — network:** Inline banner alert with Red 50 (`#fbf5f5`) background, red border, and retry button; page content beneath is not unmounted
|
|
288
|
+
- **Error — form validation:** Input border shifts to `#f11e1e`, an error message in Red 500 (`#fc3b3b`) at 13px appears below the field; focus moves to the first error field
|
|
289
|
+
- **Success — application submitted:** Full-bleed success toast (Green 500 `#0dbc7c` left-border snackbar) with "지원 완료!" message; job card gains a "지원완료" gray badge and the apply button becomes disabled
|
|
290
|
+
- **Skeleton (list):** Job listing rows show as stacked shimmer bars (title 16px height, company 12px height) with 8px gap; no spinner overlay
|
|
291
|
+
- **Disabled:** Buttons use Gray 200 background (`#d5d8dc`) with Gray 500 text (`#949ba8`); inputs use Gray 50 background (`#f6f7f8`) with normal border; cursor: not-allowed
|
|
292
|
+
- **Hover (card):** Card elevates from flat border to `0 4px 16px rgba(0,0,0,0.12)` shadow; transition 200ms cubic-bezier(0.4, 0, 0.2, 1)
|
|
293
|
+
|
|
294
|
+
## 15. Motion & Easing
|
|
295
|
+
|
|
296
|
+
**Duration scale:**
|
|
297
|
+
- 150ms — micro interactions (button press ripple, checkbox check, tab underline shift)
|
|
298
|
+
- 200ms — component state changes (card hover elevation, input focus ring)
|
|
299
|
+
- 300ms — panel transitions (filter drawer slide, dropdown open)
|
|
300
|
+
- 6s — AI search gradient animation (continuous loop, `ease-in-out`)
|
|
301
|
+
|
|
302
|
+
**Easing:**
|
|
303
|
+
- Standard: `cubic-bezier(0.4, 0, 0.2, 1)` (Material "standard" / ease-in-out) — used for virtually all UI transitions
|
|
304
|
+
- Decelerate: `cubic-bezier(0, 0, 0.2, 1)` — elements entering the screen (drawer slide-in, toast appear)
|
|
305
|
+
|
|
306
|
+
**Rules:**
|
|
307
|
+
- All color, background-color, border-color, box-shadow, opacity, and transform transitions use the standard easing
|
|
308
|
+
- The AI search bar gradient (`animation: gradient-flow-dynamic 6s ease-in-out infinite`) is the only always-on animation; all other motion is user-triggered
|
|
309
|
+
- Respect `prefers-reduced-motion`: disable the gradient animation and reduce all durations to ≤50ms
|
|
310
|
+
- Skeleton shimmers use a CSS `animation: shimmer` keyframe (opacity 0.4→1→0.4), 1.5s linear infinite
|
|
@@ -193,3 +193,21 @@ Overall: meaningful effort on focus order and language tagging; structural seman
|
|
|
193
193
|
- Brand assets (logo, name, navy `#0114A7`) referenced for inspiration only — not redistributed.
|
|
194
194
|
- No verbatim taglines or copy lifted from kbanknow.com. §9 voice paragraph is a fresh analyst paraphrase of register and structure, not transcription.
|
|
195
195
|
- Token values are facts (CSS custom property values) and not protectable expression; they are reproduced here for engineering reference under fair-use analytical purpose.
|
|
196
|
+
|
|
197
|
+
## 14. Do's and Don'ts
|
|
198
|
+
|
|
199
|
+
### Do
|
|
200
|
+
- Anchor the brand on the single signature navy #0114A7 as the sole positive primary across skip-link, CTAs, and key labels
|
|
201
|
+
- Reserve the lime accent #B6F23D for sparing energetic activation states only, keeping it off body text and form chrome
|
|
202
|
+
- Keep surfaces sharp and orthogonal at 0px radius and apply the 12px radius exclusively to the 56px CTA
|
|
203
|
+
- Set CTAs in Pretendard K Edition at 18px / 500 medium weight with white text on navy fill, not the 600/700 most KR finance peers default to
|
|
204
|
+
- Convey elevation through 1px borders and cool-tinted g200/g300 fills instead of drop-shadows, using the blue-leaning neutral ramp to stay coherent with the navy
|
|
205
|
+
- Lead the page with dated notices (YYYY.MM.DD) above promotion and write formal ~합니다 noun-phrase headers with one supporting sentence
|
|
206
|
+
|
|
207
|
+
### Don't
|
|
208
|
+
- Spread the lime #B6F23D accent across large areas or place it on body text and form chrome
|
|
209
|
+
- Round corners broadly the way K bank reads dated with 0px everywhere except CTA — adopt the sharpness only when deliberately signalling a regulated institution
|
|
210
|
+
- Lock layouts to the fixed 1280px canvas, which blocks responsive zoom and is not viable for modern surfaces
|
|
211
|
+
- Build chrome out of bare <div> elements — use real <header>, <nav>, <main>, and <footer> landmarks
|
|
212
|
+
- Hide the logo with the font-size: 0 image-replacement trick on the H1 — use inline SVG with an explicit aria-label
|
|
213
|
+
- Write chatty contractions, emoji, or second-person imperatives, or swap the formal ~합니다 register for colloquial ~해요
|