oh-my-design-cli 1.8.7 → 1.9.0
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/.claude/hooks/lib/preferences-parser.cjs +1 -0
- package/.claude/hooks/lib/preferences-writer.cjs +1 -0
- package/.claude/hooks/post-edit-watch.cjs +1 -0
- package/.claude/hooks/session-end-foldin.cjs +1 -0
- package/.claude/hooks/session-state-loader.cjs +1 -0
- package/.claude/hooks/skill-activation.cjs +1 -0
- package/.claude/settings.json +10 -1
- package/.github/assets/logo-bg.png +0 -0
- package/AGENTS.md +20 -1
- package/CHANGELOG.md +482 -0
- package/MIGRATION.md +103 -0
- package/README.ja.md +56 -19
- package/README.ko.md +47 -30
- package/README.md +48 -30
- package/README.zh-TW.md +59 -22
- package/agents/AGENT.md +8 -7
- package/agents/omd-codex-image.md +1 -1
- package/agents/omd-critic.md +6 -7
- package/agents/omd-designer-review.md +1 -1
- package/agents/omd-final-qa.md +1 -1
- package/agents/omd-humanizer.md +38 -0
- package/agents/omd-kr-writer.md +3 -4
- package/agents/omd-locale-adapter.md +12 -16
- package/agents/omd-master.md +24 -19
- package/agents/omd-microcopy.md +1 -1
- package/agents/omd-orchestrator.md +7 -8
- package/agents/omd-slop-auditor.md +31 -0
- package/agents/omd-ux-researcher.md +1 -1
- package/data/reference-fingerprints.json +1995 -38
- package/dist/bin/oh-my-design.js +16 -8
- package/dist/bin/oh-my-design.js.map +1 -1
- package/dist/chunk-UJIHCEYF.js +99 -0
- package/dist/chunk-UJIHCEYF.js.map +1 -0
- package/dist/doctor-LDWSFM3I.js +763 -0
- package/dist/doctor-LDWSFM3I.js.map +1 -0
- package/dist/install-skills-ZZFNJ2II.js +1120 -0
- package/dist/install-skills-ZZFNJ2II.js.map +1 -0
- package/docs/CLI_QUICKSTART.md +157 -0
- package/package.json +25 -4
- package/scripts/postinstall.cjs +5 -4
- package/skills/claude-design/SKILL.md +38 -14
- package/skills/claude-design/references/claude-design-flow.md +11 -11
- package/skills/claude-design/references/codebase-analysis.md +5 -4
- package/skills/omd-final-qa/SKILL.md +1 -1
- package/skills/omd-harness/SKILL.md +51 -50
- package/skills/omd-humanize/SKILL.md +116 -0
- package/skills/omd-humanize/agents/openai.yaml +4 -0
- package/skills/omd-humanize/references/locale-playbooks.md +102 -0
- package/skills/omd-humanize/references/sources.md +11 -0
- package/skills/omd-init/SKILL.md +18 -12
- package/skills/omd-locale-adapter/SKILL.md +58 -91
- package/skills/omd-orchestrator/SKILL.md +11 -5
- package/skills/omd-reference-capture/SKILL.md +80 -26
- package/skills/omd-reference-capture/scripts/PLAYWRIGHT-LICENSE.txt +202 -0
- package/skills/omd-reference-capture/scripts/PLAYWRIGHT-NOTICE.txt +5 -0
- package/skills/omd-reference-capture/scripts/THIRD_PARTY_NOTICES.md +3 -0
- package/skills/omd-reference-capture/scripts/capture-reference-evidence.mjs +159906 -0
- package/skills/omd-slop-audit/SKILL.md +110 -0
- package/skills/omd-slop-audit/agents/openai.yaml +4 -0
- package/skills/omd-slop-audit/references/pattern-catalog.md +96 -0
- package/skills/omd-slop-audit/references/sources.md +24 -0
- package/web/references/104/DESIGN.md +354 -0
- package/web/references/11st/DESIGN.md +197 -316
- package/web/references/29cm/DESIGN.md +297 -393
- package/web/references/42dot/DESIGN.md +390 -0
- package/web/references/8percent/DESIGN.md +438 -0
- package/web/references/ably/DESIGN.md +267 -572
- package/web/references/acer/DESIGN.md +329 -0
- package/web/references/airbnb/DESIGN.md +219 -557
- package/web/references/alipay/DESIGN.md +179 -420
- package/web/references/apple/DESIGN.md +224 -498
- package/web/references/asleep/DESIGN.md +402 -0
- package/web/references/au/DESIGN.md +334 -0
- package/web/references/autopedia/DESIGN.md +382 -0
- package/web/references/aws-cloudscape/DESIGN.md +241 -0
- package/web/references/baemin/DESIGN.md +332 -491
- package/web/references/banksalad/DESIGN.md +269 -180
- package/web/references/barogo/DESIGN.md +416 -0
- package/web/references/beusable/DESIGN.md +464 -0
- package/web/references/bilibili/DESIGN.md +206 -374
- package/web/references/bmw/DESIGN.md +162 -276
- package/web/references/brandi/DESIGN.md +184 -325
- package/web/references/catchtable/DESIGN.md +219 -264
- package/web/references/cgv/DESIGN.md +317 -0
- package/web/references/channeltalk/DESIGN.md +210 -336
- package/web/references/china-airlines/DESIGN.md +291 -0
- package/web/references/cjonstyle/DESIGN.md +453 -0
- package/web/references/class101/DESIGN.md +168 -387
- package/web/references/classum/DESIGN.md +228 -203
- package/web/references/claude/DESIGN.md +242 -479
- package/web/references/clay/DESIGN.md +179 -377
- package/web/references/clickhouse/DESIGN.md +254 -343
- package/web/references/cohere/DESIGN.md +214 -324
- package/web/references/coinone/DESIGN.md +199 -179
- package/web/references/corca/DESIGN.md +414 -0
- package/web/references/coupang/DESIGN.md +205 -475
- package/web/references/cursor/DESIGN.md +240 -381
- package/web/references/dabang/DESIGN.md +248 -213
- package/web/references/dable/DESIGN.md +431 -0
- package/web/references/datarize/DESIGN.md +217 -330
- package/web/references/dealicious/DESIGN.md +402 -0
- package/web/references/drdiary/DESIGN.md +404 -0
- package/web/references/elastic/DESIGN.md +238 -0
- package/web/references/elevenlabs/DESIGN.md +183 -321
- package/web/references/eslite/DESIGN.md +257 -0
- package/web/references/evaair/DESIGN.md +338 -0
- package/web/references/expo/DESIGN.md +238 -331
- package/web/references/familymart-tw/DESIGN.md +254 -0
- package/web/references/ferrari/DESIGN.md +160 -377
- package/web/references/figma/DESIGN.md +197 -451
- package/web/references/fitpet/DESIGN.md +445 -0
- package/web/references/flex/DESIGN.md +170 -253
- package/web/references/framer/DESIGN.md +197 -340
- package/web/references/freee/DESIGN.md +211 -533
- package/web/references/friendliai/DESIGN.md +431 -0
- package/web/references/frip/DESIGN.md +440 -0
- package/web/references/gangnamunni/DESIGN.md +154 -591
- package/web/references/gaudiolab/DESIGN.md +414 -0
- package/web/references/google/DESIGN.md +290 -398
- package/web/references/hashicorp/DESIGN.md +273 -318
- package/web/references/heydealer/DESIGN.md +429 -0
- package/web/references/humanscape/DESIGN.md +433 -0
- package/web/references/hyundai/DESIGN.md +158 -368
- package/web/references/hyundaicard/DESIGN.md +171 -121
- package/web/references/ibm/DESIGN.md +227 -378
- package/web/references/idus/DESIGN.md +450 -0
- package/web/references/igaworks/DESIGN.md +437 -0
- package/web/references/inflearn/DESIGN.md +221 -366
- package/web/references/intuit/DESIGN.md +244 -0
- package/web/references/jandi/DESIGN.md +191 -291
- package/web/references/jobplanet/DESIGN.md +415 -0
- package/web/references/kakao/DESIGN.md +287 -475
- package/web/references/kakaobank/DESIGN.md +220 -521
- package/web/references/kakaogames/DESIGN.md +220 -0
- package/web/references/kakaopay/DESIGN.md +207 -526
- package/web/references/karrot/DESIGN.md +227 -251
- package/web/references/kb-kookmin/DESIGN.md +308 -0
- package/web/references/kbank/DESIGN.md +220 -175
- package/web/references/kmong/DESIGN.md +281 -356
- package/web/references/krds/DESIGN.md +245 -19
- package/web/references/kream/DESIGN.md +224 -359
- package/web/references/kurly/DESIGN.md +211 -533
- package/web/references/lamborghini/DESIGN.md +198 -360
- package/web/references/lguplus/DESIGN.md +259 -0
- package/web/references/likelion/DESIGN.md +283 -0
- package/web/references/line/DESIGN.md +396 -355
- package/web/references/linear.app/DESIGN.md +209 -562
- package/web/references/lotteon/DESIGN.md +386 -0
- package/web/references/lovable/DESIGN.md +255 -349
- package/web/references/makinarocks/DESIGN.md +149 -349
- package/web/references/maum-ai/DESIGN.md +423 -0
- package/web/references/medibloc/DESIGN.md +425 -0
- package/web/references/megabox/DESIGN.md +232 -0
- package/web/references/mercari/DESIGN.md +217 -434
- package/web/references/microsoft/DESIGN.md +234 -388
- package/web/references/mildang/DESIGN.md +411 -0
- package/web/references/millie/DESIGN.md +183 -504
- package/web/references/minimax/DESIGN.md +264 -322
- package/web/references/miricanvas/DESIGN.md +182 -355
- package/web/references/miro/DESIGN.md +234 -232
- package/web/references/mistral.ai/DESIGN.md +231 -314
- package/web/references/mixi/DESIGN.md +234 -0
- package/web/references/moin/DESIGN.md +445 -0
- package/web/references/mongodb/DESIGN.md +219 -316
- package/web/references/musinsa/DESIGN.md +184 -510
- package/web/references/mynavi/DESIGN.md +242 -0
- package/web/references/myrealtrip/DESIGN.md +169 -406
- package/web/references/naver/DESIGN.md +328 -499
- package/web/references/naverwebtoon/DESIGN.md +172 -395
- package/web/references/nhn/DESIGN.md +169 -346
- package/web/references/nhncloud/DESIGN.md +185 -123
- package/web/references/notion/DESIGN.md +271 -475
- package/web/references/nrise/DESIGN.md +417 -0
- package/web/references/ohouse/DESIGN.md +210 -549
- package/web/references/oliveyoung/DESIGN.md +217 -326
- package/web/references/ollama/DESIGN.md +241 -308
- package/web/references/onestore/DESIGN.md +248 -0
- package/web/references/palantir/DESIGN.md +256 -0
- package/web/references/panasonic/DESIGN.md +276 -0
- package/web/references/patternfly/DESIGN.md +259 -0
- package/web/references/payhere/DESIGN.md +438 -0
- package/web/references/pega/DESIGN.md +262 -0
- package/web/references/peoplefund/DESIGN.md +431 -0
- package/web/references/petfriends/DESIGN.md +428 -0
- package/web/references/pinkfong/DESIGN.md +199 -367
- package/web/references/pinterest/DESIGN.md +258 -308
- package/web/references/poya/DESIGN.md +286 -0
- package/web/references/pozalabs/DESIGN.md +438 -0
- package/web/references/protopie/DESIGN.md +419 -0
- package/web/references/qraft/DESIGN.md +448 -0
- package/web/references/quotabook/DESIGN.md +449 -0
- package/web/references/recruit/DESIGN.md +247 -0
- package/web/references/remember/DESIGN.md +202 -396
- package/web/references/resend/DESIGN.md +274 -348
- package/web/references/sakura-internet/DESIGN.md +269 -0
- package/web/references/samsung/DESIGN.md +157 -359
- package/web/references/sandoll/DESIGN.md +445 -0
- package/web/references/sanity/DESIGN.md +241 -375
- package/web/references/scatterlab/DESIGN.md +412 -0
- package/web/references/selectstar/DESIGN.md +439 -0
- package/web/references/servicenow/DESIGN.md +289 -0
- package/web/references/shinhanbank/DESIGN.md +161 -341
- package/web/references/shinhancard/DESIGN.md +208 -319
- package/web/references/sionic/DESIGN.md +454 -0
- package/web/references/sktelecom/DESIGN.md +310 -0
- package/web/references/socar/DESIGN.md +125 -32
- package/web/references/softbank/DESIGN.md +231 -0
- package/web/references/sony/DESIGN.md +234 -0
- package/web/references/soop/DESIGN.md +261 -0
- package/web/references/spacex/DESIGN.md +184 -323
- package/web/references/spotify/DESIGN.md +253 -394
- package/web/references/squeezebits/DESIGN.md +441 -0
- package/web/references/stayfolio/DESIGN.md +422 -0
- package/web/references/stripe/DESIGN.md +212 -491
- package/web/references/supabase/DESIGN.md +244 -316
- package/web/references/tabling/DESIGN.md +415 -0
- package/web/references/taishinbank/DESIGN.md +243 -0
- package/web/references/teamlab/DESIGN.md +240 -0
- package/web/references/teamsparta/DESIGN.md +472 -0
- package/web/references/tellingme/DESIGN.md +392 -0
- package/web/references/tesla/DESIGN.md +244 -427
- package/web/references/thsr/DESIGN.md +284 -0
- package/web/references/thumbtack/DESIGN.md +302 -0
- package/web/references/together.ai/DESIGN.md +257 -304
- package/web/references/toss/DESIGN.md +251 -593
- package/web/references/toss-securities/DESIGN.md +255 -178
- package/web/references/tossbank/DESIGN.md +195 -491
- package/web/references/toyota/DESIGN.md +238 -0
- package/web/references/tving/DESIGN.md +197 -245
- package/web/references/typed/DESIGN.md +413 -0
- package/web/references/uber/DESIGN.md +256 -333
- package/web/references/udn/DESIGN.md +250 -0
- package/web/references/upbit/DESIGN.md +145 -256
- package/web/references/upstage/DESIGN.md +211 -204
- package/web/references/uswds/DESIGN.md +287 -0
- package/web/references/vercel/DESIGN.md +236 -440
- package/web/references/wanted/DESIGN.md +215 -487
- package/web/references/wise/DESIGN.md +223 -231
- package/web/references/wisetracker/DESIGN.md +462 -0
- package/web/references/wooribank/DESIGN.md +245 -0
- package/web/references/yanolja/DESIGN.md +250 -419
- package/web/references/yeogiotte/DESIGN.md +235 -418
- package/web/references/zapier/DESIGN.md +256 -377
- package/web/references/zendesk/DESIGN.md +288 -0
- package/web/references/zigzag/DESIGN.md +200 -621
- package/dist/install-skills-7UUDOLG2.js +0 -734
- package/dist/install-skills-7UUDOLG2.js.map +0 -1
|
@@ -8,446 +8,301 @@ primary_color: "#00c471"
|
|
|
8
8
|
logo:
|
|
9
9
|
type: favicon
|
|
10
10
|
slug: "https://www.google.com/s2/favicons?domain=inflearn.com&sz=256"
|
|
11
|
-
verified: "2026-
|
|
11
|
+
verified: "2026-07-13"
|
|
12
12
|
omd: "0.1"
|
|
13
|
+
verification_v2:
|
|
14
|
+
schema: 2
|
|
15
|
+
checked: "2026-07-13"
|
|
16
|
+
surfaces:
|
|
17
|
+
- { id: product-home, kind: product-home, url: "https://www.inflearn.com/", inspected: "2026-07-13" }
|
|
18
|
+
- { id: product-courses, kind: product-catalog, url: "https://www.inflearn.com/courses", inspected: "2026-07-13" }
|
|
19
|
+
- { id: engineering-documentation, kind: documentation-chrome, url: "https://tech.inflab.com/20260305-new-header/", inspected: "2026-07-13" }
|
|
20
|
+
sources:
|
|
21
|
+
- { id: home-capture, kind: product-surface, url: "https://www.inflearn.com/", captured: "2026-07-13" }
|
|
22
|
+
- { id: courses-capture, kind: product-surface, url: "https://www.inflearn.com/courses", captured: "2026-07-13" }
|
|
23
|
+
- { id: engineering-context, kind: official-doc, url: "https://tech.inflab.com/20260305-new-header/", captured: "2026-07-13" }
|
|
24
|
+
- { id: design-system-context, kind: official-doc, url: "https://tech.inflab.com/20240224-design-system/", captured: "2026-07-13" }
|
|
25
|
+
- { id: company-context, kind: official-doc, url: "https://story.inflab.com/main/%ED%9A%8C%EC%82%AC%EC%86%8C%EA%B0%9C/", captured: "2026-07-13" }
|
|
26
|
+
- { id: font-design, kind: official-doc, url: "https://github.com/orioncactus/pretendard/blob/main/packages/pretendard/docs/en/README.md", captured: "2026-07-13" }
|
|
27
|
+
- { id: font-license, kind: license, url: "https://github.com/orioncactus/pretendard/blob/main/LICENSE", captured: "2026-07-13" }
|
|
28
|
+
conflicts: []
|
|
29
|
+
claims:
|
|
30
|
+
"tokens.colors.canvas": &product { surface_id: product-home, source_id: home-capture, method: computed-style, captured: "2026-07-13" }
|
|
31
|
+
"tokens.colors.ink": *product
|
|
32
|
+
"tokens.colors.text": *product
|
|
33
|
+
"tokens.colors.neutral": *product
|
|
34
|
+
"tokens.colors.subtle": *product
|
|
35
|
+
"tokens.colors.hairline": *product
|
|
36
|
+
"tokens.colors.primary": *product
|
|
37
|
+
"tokens.colors.primary-hover": *product
|
|
38
|
+
"tokens.colors.info-surface": *product
|
|
39
|
+
"tokens.colors.info": *product
|
|
40
|
+
"tokens.colors.cyan-tag-surface": *product
|
|
41
|
+
"tokens.colors.cyan-tag": *product
|
|
42
|
+
"tokens.typography.family.ui": *product
|
|
43
|
+
"tokens.typography.product-body.size": *product
|
|
44
|
+
"tokens.typography.product-body.weight": *product
|
|
45
|
+
"tokens.typography.product-body.lineHeight": *product
|
|
46
|
+
"tokens.typography.product-body.use": *product
|
|
47
|
+
"tokens.typography.product-control.size": *product
|
|
48
|
+
"tokens.typography.product-control.weight": *product
|
|
49
|
+
"tokens.typography.product-control.lineHeight": *product
|
|
50
|
+
"tokens.typography.product-control.use": *product
|
|
51
|
+
"tokens.typography.course-badge.size": *product
|
|
52
|
+
"tokens.typography.course-badge.weight": *product
|
|
53
|
+
"tokens.typography.course-badge.lineHeight": *product
|
|
54
|
+
"tokens.typography.course-badge.use": *product
|
|
55
|
+
"tokens.spacing.xs": *product
|
|
56
|
+
"tokens.spacing.sm": *product
|
|
57
|
+
"tokens.spacing.md": *product
|
|
58
|
+
"tokens.spacing.lg": *product
|
|
59
|
+
"tokens.rounded.badge": *product
|
|
60
|
+
"tokens.rounded.input": *product
|
|
61
|
+
"tokens.rounded.pill": *product
|
|
62
|
+
"tokens.rounded.full": *product
|
|
63
|
+
"tokens.shadow.flat": *product
|
|
64
|
+
"tokens.components.product-search-submit.type": *product
|
|
65
|
+
"tokens.components.product-search-submit.bg": *product
|
|
66
|
+
"tokens.components.product-search-submit.fg": *product
|
|
67
|
+
"tokens.components.product-search-submit.radius": *product
|
|
68
|
+
"tokens.components.product-search-submit.font": *product
|
|
69
|
+
"tokens.components.product-search-submit.states": *product
|
|
70
|
+
"tokens.components.product-search-submit.use": *product
|
|
71
|
+
"tokens.components.product-nav-action.type": *product
|
|
72
|
+
"tokens.components.product-nav-action.bg": *product
|
|
73
|
+
"tokens.components.product-nav-action.fg": *product
|
|
74
|
+
"tokens.components.product-nav-action.radius": *product
|
|
75
|
+
"tokens.components.product-nav-action.padding": *product
|
|
76
|
+
"tokens.components.product-nav-action.font": *product
|
|
77
|
+
"tokens.components.product-nav-action.states": *product
|
|
78
|
+
"tokens.components.product-nav-action.use": *product
|
|
79
|
+
"tokens.components.product-course-card.type": *product
|
|
80
|
+
"tokens.components.product-course-card.radius": *product
|
|
81
|
+
"tokens.components.product-course-card.font": *product
|
|
82
|
+
"tokens.components.product-course-card.states": *product
|
|
83
|
+
"tokens.components.product-course-card.use": *product
|
|
84
|
+
"tokens.components.product-content-tab.type": *product
|
|
85
|
+
"tokens.components.product-content-tab.bg": *product
|
|
86
|
+
"tokens.components.product-content-tab.fg": *product
|
|
87
|
+
"tokens.components.product-content-tab.radius": *product
|
|
88
|
+
"tokens.components.product-content-tab.padding": *product
|
|
89
|
+
"tokens.components.product-content-tab.font": *product
|
|
90
|
+
"tokens.components.product-content-tab.states": *product
|
|
91
|
+
"tokens.components.product-content-tab.use": *product
|
|
92
|
+
"tokens.components.product-dialog-overlay.type": *product
|
|
93
|
+
"tokens.components.product-dialog-overlay.bg": *product
|
|
94
|
+
"tokens.components.product-dialog-overlay.font": *product
|
|
95
|
+
"tokens.components.product-dialog-overlay.states": *product
|
|
96
|
+
"tokens.components.product-dialog-overlay.use": *product
|
|
13
97
|
tokens:
|
|
14
|
-
source:
|
|
15
|
-
extracted: "2026-
|
|
98
|
+
source: reconciled
|
|
99
|
+
extracted: "2026-07-13"
|
|
100
|
+
note: "Selector-backed tokens are limited to the supplied Inflearn product-home and course-catalog capture. The Inflab engineering article is documentation chrome and official context, not a product-token source."
|
|
16
101
|
colors:
|
|
17
|
-
primary: "#00c471"
|
|
18
|
-
primary-pressed: "#00a760"
|
|
19
|
-
heading: "#212529"
|
|
20
|
-
body: "#495057"
|
|
21
|
-
muted: "#868e96"
|
|
22
102
|
canvas: "#ffffff"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
103
|
+
ink: "#212529"
|
|
104
|
+
text: "#495057"
|
|
105
|
+
neutral: "#f8f9fa"
|
|
106
|
+
subtle: "#f1f3f5"
|
|
107
|
+
hairline: "#dee2e6"
|
|
108
|
+
primary: "#00c471"
|
|
109
|
+
primary-hover: "#00a760"
|
|
110
|
+
info-surface: "#e7f5ff"
|
|
28
111
|
info: "#228be6"
|
|
29
|
-
|
|
30
|
-
|
|
112
|
+
cyan-tag-surface: "#e3fafc"
|
|
113
|
+
cyan-tag: "#1098ad"
|
|
31
114
|
typography:
|
|
32
|
-
family: {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
spacing: { xs: 4, sm: 8, md: 12, base: 16, lg: 24, xl: 32, xxl: 48, section: 64 }
|
|
39
|
-
rounded: { sm: 4, md: 8, lg: 32, full: 9999 }
|
|
115
|
+
family: { ui: "Pretendard" }
|
|
116
|
+
product-body: { size: 16, weight: 400, lineHeight: 1.50, use: "Repeated product-home and course-catalog text/card sample" }
|
|
117
|
+
product-control: { size: 16, weight: 400, lineHeight: 1.00, use: "Product GNB and control sample" }
|
|
118
|
+
course-badge: { size: 11, weight: 700, lineHeight: 1.64, use: "Course badge wrapper on product home and catalog" }
|
|
119
|
+
spacing: { xs: 4, sm: 8, md: 10, lg: 16 }
|
|
120
|
+
rounded: { badge: 4, input: 8, pill: 32, full: 999 }
|
|
40
121
|
shadow:
|
|
41
122
|
flat: "none"
|
|
42
123
|
components:
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
pagination-active: { type: button, bg: "#00c471", fg: "#ffffff", radius: 8, font: "14px weight 400", use: "Selected page" }
|
|
49
|
-
button-disabled: { type: button, bg: "#f1f3f5", fg: "#adb5bd", radius: 8, use: "Form-incomplete state" }
|
|
124
|
+
product-search-submit: { type: button, bg: "#00c471", fg: "#ffffff", radius: "999px", font: "16px / 400 Pretendard", states: "hover observed: #00a760", use: "Product GNB search submit; home::[data-omd-capture=8]" }
|
|
125
|
+
product-nav-action: { type: button, bg: "#f8f9fa", fg: "#495057", radius: "32px", padding: "0px 22px", font: "16px / 600 Pretendard", states: "hover observed: rgba(241,243,245,0.65)", use: "Product GNB navigation action; home::[data-omd-capture=12]" }
|
|
126
|
+
product-course-card: { type: card, radius: "8px", font: "16px / 400 Pretendard", states: "default only; no card interaction state captured", use: "Product course article shell; home::article" }
|
|
127
|
+
product-content-tab: { type: tab, bg: "#25262b", fg: "#ffffff", radius: "9999px", padding: "10px 16px", font: "14px / 700 system sans-serif", states: "selected observed", use: "Product-home selected content tab; home::[data-omd-capture=19]" }
|
|
128
|
+
product-dialog-overlay: { type: dialog, bg: "rgba(0,0,0,0.6)", font: "16px / 400 Pretendard", states: "dialog-open observed", use: "Product dialog backdrop; home::[data-omd-interaction-capture=dialog-2-8]" }
|
|
50
129
|
components_harvested: true
|
|
51
130
|
---
|
|
52
131
|
|
|
53
|
-
# Design System Inspiration of Inflearn
|
|
132
|
+
# Design System Inspiration of Inflearn (인프런)
|
|
54
133
|
|
|
55
134
|
## 1. Visual Theme & Atmosphere
|
|
56
135
|
|
|
57
|
-
Inflearn
|
|
58
|
-
|
|
59
|
-
The page furniture is unmistakably **Mantine-built**: 162 `--mantine-color-*` CSS variables are exposed at runtime, plus the full `--mantine-radius-{xs,sm,md,lg,xl}` and `--mantine-spacing-*` scale. Inflearn has effectively adopted Mantine's theme primitives wholesale and overridden them with a brand green. This means the **radius vocabulary is mostly 8px (`md`)** for cards, inputs, and pagination — neither aggressive flat-2px (Banksalad's data-tool register) nor consumer-app plump-16px (Toss). Two exceptions tell the story: navigation pills round to **32px** (extra-soft, "browse-don't-task" feel) and the **search-submit and tag chips go full-pill at `999px`** — the green circle search button is the one decisive, on-brand moment in a deliberately calm GNB.
|
|
136
|
+
Inflearn is Inflab’s career-learning platform: its official company introduction describes a space where people can learn and share knowledge without economic or time constraints, while its public product routes organize that promise as a dense course catalogue. The supplied home and course-list captures use a white field, dark neutral text, a precise green action color, compact rounded navigation controls, and image-led course articles. The expression is practical rather than decorative: the emphasis is on finding, comparing, and entering learning content.
|
|
60
137
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
**Key Characteristics:**
|
|
64
|
-
- Pretendard-first system font stack (no bundled web-font; OS fallback handles Korean coverage)
|
|
65
|
-
- Signature mint-green `#00C471` for all primary action; brighter and more yellow than Toss/Banksalad mints
|
|
66
|
-
- Mantine theme primitives exposed live (`--mantine-radius-md = 0.5rem`, `--mantine-color-*`)
|
|
67
|
-
- Two radius families: cards/inputs at `8px`, nav pills at `32px`, decisive CTAs full-pill `999px`
|
|
68
|
-
- Sticky white GNB at 65px — no shadow, no border — the green search button is the only visual accent
|
|
69
|
-
- Course tiles are borderless transparent cards (`article.mantine-Card-root`, radius 8px, ~230×310px) — thumbnail does the visual work
|
|
70
|
-
- Pagination uses solid-green active page on white surroundings — the same green as the CTA, no second accent hue
|
|
71
|
-
- No theatrical shadow / no gradient — Inflearn is "calm catalog, friendly green"
|
|
138
|
+
The current product shell should not be confused with every Inflearn-owned page. The supplied third route is an Inflab engineering article with separate documentation chrome; it is recorded as first-party context only. Inflab’s own engineering writing says the service has accumulated multiple systems and that its newer shared GNB serves courses, challenges, mentoring, clips, and community across multiple front-end environments. That is useful evidence for the header’s product importance, not authorization to turn documentation styles into product tokens.
|
|
72
139
|
|
|
73
140
|
## 2. Color Palette & Roles
|
|
74
141
|
|
|
75
|
-
###
|
|
76
|
-
- **Inflearn Green** (`#00C471`): Primary brand color. Search submit, primary CTA, active pagination page, "starter / free" course tag fills, link accents.
|
|
77
|
-
- **Inflearn Green Pressed** (`#00A760`): Pressed / focused / visited state. Observed as the high-frequency near-shade on the home palette histogram (450 instances) — likely the `:hover` / `:active` token paired with the primary.
|
|
78
|
-
|
|
79
|
-
### Text
|
|
80
|
-
- **Heading** (`#212529`): Mantine dark-9 equivalent. H1/H2/H3, course tile titles.
|
|
81
|
-
- **Body** (`#495057`): Default reading text and nav link colour.
|
|
82
|
-
- **Muted / Caption** (`#868E96`): Metadata, instructor sublabels, view counts.
|
|
83
|
-
- **On-Green** (`#FFFFFF`): Text colour on every green surface (search submit, primary CTA, active pagination).
|
|
84
|
-
|
|
85
|
-
### Surface
|
|
86
|
-
- **Page** (`#FFFFFF`): Default canvas.
|
|
87
|
-
- **Surface Neutral** (`#F8F9FA`): GNB pill button rest state, soft section dividers, secondary chip fills.
|
|
88
|
-
- **Border / Divider Inferred** (`#DEE2E6`): Mantine gray-3 — implied separator hue (not directly captured but consistent with the Mantine system that Inflearn theme-extends).
|
|
142
|
+
### Color tokens
|
|
89
143
|
|
|
90
|
-
|
|
91
|
-
-
|
|
92
|
-
-
|
|
93
|
-
-
|
|
94
|
-
-
|
|
144
|
+
- `#FFFFFF` — observed product canvas and control background.
|
|
145
|
+
- `#212529` — repeatedly observed product ink.
|
|
146
|
+
- `#495057` — repeatedly observed product control and secondary text.
|
|
147
|
+
- `#F8F9FA` — observed GNB action background and product tab hover background.
|
|
148
|
+
- `#F1F3F5` — observed hover/disabled neutral treatment; the source-specific alpha is retained in the component record below.
|
|
149
|
+
- `#DEE2E6` — observed product control border.
|
|
150
|
+
- `#00C471` — observed product GNB search-submit and selected control background.
|
|
151
|
+
- `#00A760` — observed hover treatment for the GNB search-submit and an observed course-badge background.
|
|
152
|
+
- `#E7F5FF` / `#228BE6` — observed blue course-badge wrapper/text pair.
|
|
153
|
+
- `#E3FAFC` / `#1098AD` — observed cyan course-badge wrapper/text pair.
|
|
95
154
|
|
|
96
|
-
|
|
155
|
+
These values are product-route observations, not a claim that every public Inflab site has the same palette.
|
|
97
156
|
|
|
98
|
-
## 3. Typography
|
|
157
|
+
## 3. Typography & Layout Evidence
|
|
99
158
|
|
|
100
|
-
###
|
|
101
|
-
- **Primary**: `Pretendard, -apple-system, BlinkMacSystemFont, system-ui, Roboto, "Helvetica Neue", "Segoe UI", "Apple SD Gothic Neo", "Noto Sans KR", "Malgun Gothic", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", sans-serif`
|
|
102
|
-
- **Mono**: `ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace` (carried from Mantine default — surfaces inside code-snippet course previews and dev-tools-style screenshots)
|
|
103
|
-
- No custom display face. Headings use the same Pretendard stack; differentiation comes from weight and size only.
|
|
104
|
-
- No bundled web-font on `/`. Korean glyphs render through the OS fallback chain.
|
|
159
|
+
### Typography evidence classes
|
|
105
160
|
|
|
106
|
-
|
|
161
|
+
- **Live product computed use:** `Pretendard` is the sole promoted UI family. It has 1,278 visible computed uses across the home and course catalog, and the supplied collector reports a loaded FontFaceSet match with high confidence. The artifact supplies no font-file URL for that loaded face, so the web-source location remains unresolved rather than invented.
|
|
162
|
+
- **System fallbacks:** `sans-serif` is a high-confidence system resolution in 153 observed product elements; `Arial` and `Roboto` each occur once in the full bundle. They remain system evidence, not Inflearn brand families.
|
|
163
|
+
- **Declared-only assets:** Fira Code, Font Awesome 6 Pro, KaTeX faces, and Source Serif 4 have zero visible use in this capture. Fira Code, Font Awesome, and Source Serif 4 include declared source URLs; the KaTeX declarations do not. None are promoted to UI tokens or rendered as substitutes.
|
|
164
|
+
- **Official distribution and licence boundary:** Pretendard’s upstream README documents static and variable webfont distribution, while its upstream project publishes the font software under SIL Open Font License 1.1. These identify the asset and licence only; the product-use claim comes from computed use plus the loaded FontFaceSet observation.
|
|
107
165
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
| H2 (section title) | 20px | 700 | 27px (1.35) | "0원으로 부담없이 시작하기" — section openers |
|
|
112
|
-
| H3 (sub-section / card cluster head) | 18px (inferred) | 700 | 1.4 | Course-tile section labels |
|
|
113
|
-
| Body | 16px | 400 | 1.5 | Default running text, nav default |
|
|
114
|
-
| Nav label | 16px | 600 | 1.5 | "지식공유" / "로그인" / "카테고리" pills |
|
|
115
|
-
| Button label (filled) | 16px | 600 | 1.0 | Primary CTA text |
|
|
116
|
-
| Caption / Metadata | 13–14px (inferred) | 400 | 1.4 | Instructor name, view count, price subtext |
|
|
166
|
+
- The captured product surfaces expose repeated 4px, 8px, 10px, and 16px spacing values. They form the conservative observed spacing set in frontmatter.
|
|
167
|
+
- The product home and catalog both include course `article` shells at 8px radius with zero padding and no shadow. The capture does not establish a universal course-grid column count, image ratio, responsive breakpoint, course-detail layout, or checkout layout.
|
|
168
|
+
- Product navigation actions are route-level controls, not evidence for a universal page container or an application-wide 65px header rule.
|
|
117
169
|
|
|
118
|
-
|
|
119
|
-
- **Pretendard everywhere.** No serif, no rounded display face. Discipline is part of the calm-catalog feel.
|
|
120
|
-
- **700 = heading. 600 = nav and labelled button. 400 = body, icon-only button, input.** There is no 500 — the weight scale is intentionally binary-ish.
|
|
121
|
-
- Numerals (course price, ratings) inherit body weight 400 — Inflearn does not embolden prices the way fintech does. The decision to enrol should feel low-pressure.
|
|
122
|
-
- Korean punctuation: full-width quotes `「」` / `『』` are avoided in UI; straight quotes only.
|
|
170
|
+
## 4. Components
|
|
123
171
|
|
|
124
|
-
|
|
172
|
+
### Product GNB search submit
|
|
125
173
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
**Primary CTA — Pill Search Submit**
|
|
129
|
-
- Background: `#00C471`
|
|
130
|
-
- Text: `#FFFFFF`
|
|
131
|
-
- Border: 1px solid transparent
|
|
132
|
-
- Radius: 999px
|
|
133
|
-
- Padding: 0 (icon-only)
|
|
134
|
-
- Height: 42px
|
|
135
|
-
- Width: 42px
|
|
136
|
-
- Font: 16px / 400 / Pretendard
|
|
137
|
-
- Shadow: none
|
|
138
|
-
- Use: The signature green circle search-submit button in the GNB — the single most-recognisable component on the site.
|
|
139
|
-
|
|
140
|
-
**Primary CTA — Filled Label (Inferred)**
|
|
174
|
+
**Default**
|
|
141
175
|
- Background: `#00C471`
|
|
142
176
|
- Text: `#FFFFFF`
|
|
143
|
-
-
|
|
144
|
-
-
|
|
145
|
-
- Padding: 0 16px (icon-button observed); 0 24px for labelled
|
|
146
|
-
- Height: 42px
|
|
147
|
-
- Font: 16px / 600 / Pretendard
|
|
177
|
+
- Radius: `999px`
|
|
178
|
+
- Font: `16px / 400 Pretendard`
|
|
148
179
|
- Hover: background `#00A760`
|
|
149
|
-
- Use: "
|
|
180
|
+
- Use: Product GNB search-submit; `home::[data-omd-capture="8"]`. Hover provenance is `home::[data-omd-capture="8"]::state-hover` and is also present on the catalog surface.
|
|
181
|
+
|
|
182
|
+
### Product GNB navigation action
|
|
150
183
|
|
|
151
|
-
**
|
|
184
|
+
**Default**
|
|
152
185
|
- Background: `#F8F9FA`
|
|
153
186
|
- Text: `#495057`
|
|
154
|
-
-
|
|
155
|
-
-
|
|
156
|
-
-
|
|
157
|
-
-
|
|
158
|
-
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
-
|
|
164
|
-
-
|
|
165
|
-
-
|
|
166
|
-
- Padding: 0 12px
|
|
167
|
-
- Height: 42px
|
|
168
|
-
- Font: 16px / 600 / Pretendard
|
|
169
|
-
- Use: Active top-level nav section ("지식공유" when on /knowledge etc.).
|
|
170
|
-
|
|
171
|
-
**Ghost / Text Link Button**
|
|
172
|
-
- Background: transparent
|
|
173
|
-
- Text: `#495057`
|
|
174
|
-
- Border: 1px solid transparent
|
|
175
|
-
- Radius: 32px
|
|
176
|
-
- Padding: 0 12px
|
|
177
|
-
- Font: 16px / 600 / Pretendard
|
|
178
|
-
- Hover: background `#F8F9FA`
|
|
179
|
-
- Use: Inline secondary GNB items ("지식공유"), category-row navigation.
|
|
180
|
-
|
|
181
|
-
**Pagination — Default**
|
|
182
|
-
- Background: `#FFFFFF`
|
|
183
|
-
- Text: `#212529`
|
|
184
|
-
- Border: 1px solid `#DEE2E6` (Mantine gray-3, inferred)
|
|
185
|
-
- Radius: 8px
|
|
186
|
-
- Padding: 0 12px
|
|
187
|
-
- Height: 38px
|
|
188
|
-
- Font: 14px / 400 / Pretendard
|
|
189
|
-
- Use: Page number buttons on /courses listing.
|
|
190
|
-
|
|
191
|
-
**Pagination — Active**
|
|
192
|
-
- Background: `#00C471`
|
|
193
|
-
- Text: `#FFFFFF`
|
|
194
|
-
- Border: none
|
|
195
|
-
- Radius: 8px
|
|
196
|
-
- Padding: 0 12px
|
|
197
|
-
- Height: 38px
|
|
198
|
-
- Font: 14px / 400 / Pretendard
|
|
199
|
-
- Use: Currently selected page in the /courses pagination cluster.
|
|
200
|
-
|
|
201
|
-
**Disabled (Inferred from Mantine default)**
|
|
202
|
-
- Background: `#F1F3F5`
|
|
203
|
-
- Text: `#ADB5BD`
|
|
204
|
-
- Border: none
|
|
205
|
-
- Radius: 8px
|
|
206
|
-
- Padding: 12px 24px
|
|
207
|
-
- Font: 16px / 600 / Pretendard
|
|
208
|
-
- Use: Form-incomplete state on enrol / payment flows.
|
|
209
|
-
|
|
210
|
-
### Inputs & Forms
|
|
211
|
-
|
|
212
|
-
**Text Input — Default (Search)**
|
|
213
|
-
- Background: `#FFFFFF`
|
|
214
|
-
- Text: `#212529`
|
|
215
|
-
- Placeholder: `#868E96` (inferred)
|
|
216
|
-
- Border: 1px solid `#DEE2E6` (inferred — captured border was `0px none` on the inner input element; outer wrapper carries the border per Mantine pattern)
|
|
217
|
-
- Radius: 8px
|
|
218
|
-
- Padding: 0 12px
|
|
219
|
-
- Height: 36px
|
|
220
|
-
- Font: 16px / 400 / Pretendard
|
|
221
|
-
- Use: GNB search field — paired with the green pill submit on its right.
|
|
222
|
-
|
|
223
|
-
**Text Input — Focus (Inferred)**
|
|
224
|
-
- Background: `#FFFFFF`
|
|
225
|
-
- Border: 1px solid `#00C471`
|
|
226
|
-
- Use: All form fields on focus.
|
|
227
|
-
|
|
228
|
-
### Cards & Containers
|
|
229
|
-
|
|
230
|
-
**Course Tile (Default)**
|
|
231
|
-
- Background: transparent
|
|
232
|
-
- Border: none
|
|
233
|
-
- Radius: 8px
|
|
234
|
-
- Padding: 0 (thumbnail is the visual container; metadata sits below in flow)
|
|
235
|
-
- Width × Height: ~230 × 310px (home) / ~230 × 325px (/courses)
|
|
236
|
-
- Shadow: none
|
|
237
|
-
- Use: The dominant content unit. A `article.mantine-Card-root` wrapper with a thumbnail image (radius 8px), title in `#212529` 700, instructor in `#868E96`, price in `#212529` 400, optional green starter / red discount tags.
|
|
238
|
-
|
|
239
|
-
**Course Tile — Featured / Highlighted (Inferred)**
|
|
240
|
-
- Background: `#FFFFFF`
|
|
241
|
-
- Border: 1px solid `#DEE2E6` (Mantine gray-3)
|
|
242
|
-
- Radius: 8px
|
|
243
|
-
- Padding: 16px
|
|
244
|
-
- Shadow: `0 1px 3px rgba(0, 0, 0, 0.05)` (Mantine `--mantine-shadow-xs` equivalent)
|
|
245
|
-
- Use: "추천" / promoted course slot on home rails.
|
|
246
|
-
|
|
247
|
-
**Tag — Free / Starter**
|
|
248
|
-
- Background: `rgba(0, 196, 113, 0.12)`
|
|
249
|
-
- Text: `#00C471`
|
|
250
|
-
- Radius: 999px
|
|
251
|
-
- Padding: 2px 10px
|
|
252
|
-
- Font: 12px / 600 / Pretendard
|
|
253
|
-
- Use: "무료" / starter-course indicator on course tiles.
|
|
254
|
-
|
|
255
|
-
**Tag — Category (Cyan-Teal)**
|
|
256
|
-
- Background: `rgba(16, 152, 173, 0.1)`
|
|
257
|
-
- Text: `#1098AD`
|
|
258
|
-
- Radius: 999px
|
|
259
|
-
- Padding: 2px 10px
|
|
260
|
-
- Font: 12px / 600 / Pretendard
|
|
261
|
-
- Use: Category / lecture-type tags on tiles.
|
|
262
|
-
|
|
263
|
-
### Navigation
|
|
264
|
-
|
|
265
|
-
**Global Nav (GNB)**
|
|
266
|
-
- Background: `#FFFFFF`
|
|
267
|
-
- Text: `#495057` (default) / `#212529` (heading & emphasized)
|
|
268
|
-
- Border-bottom: none
|
|
187
|
+
- Radius: `32px`
|
|
188
|
+
- Padding: `0px 22px`
|
|
189
|
+
- Font: `16px / 600 Pretendard`
|
|
190
|
+
- Hover: background `rgba(241, 243, 245, 0.65)`
|
|
191
|
+
- Use: Product GNB navigation action; `home::[data-omd-capture="12"]`. The observed hover selector is `home::[data-omd-capture="12"]::state-hover`.
|
|
192
|
+
|
|
193
|
+
### Product course card
|
|
194
|
+
|
|
195
|
+
**Default**
|
|
196
|
+
- Radius: `8px`
|
|
197
|
+
- Padding: `0px`
|
|
198
|
+
- Font: `16px / 400 Pretendard`
|
|
269
199
|
- Shadow: none
|
|
270
|
-
-
|
|
271
|
-
- Height: 65px
|
|
272
|
-
- Layout: [logo] · [primary nav pills] · [search input + green pill submit] · [right-side icon pills + 로그인]
|
|
273
|
-
- Use: The single GNB pattern; persists across home, courses, detail.
|
|
200
|
+
- Use: Product course article shell on home and course catalog; `home::article` and `surface-2::article`.
|
|
274
201
|
|
|
275
|
-
|
|
276
|
-
- Background: `#F8F9FA` (Mantine gray-0)
|
|
277
|
-
- Text: `#495057` / `#868E96` for secondary lines
|
|
278
|
-
- Padding: 48px 0 (block) — Mantine spacing-xl × 2
|
|
279
|
-
- Use: Standard 4-column link list + company-info row.
|
|
202
|
+
### Product content tab
|
|
280
203
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
-
|
|
286
|
-
- `
|
|
287
|
-
-
|
|
288
|
-
|
|
289
|
-
**Tier 2 sources:**
|
|
290
|
-
- `https://getdesign.md/inflearn` — empty (verified 2026-05-14: "No designs found for 'inflearn'")
|
|
291
|
-
- `https://styles.refero.design/?q=inflearn` — empty (verified 2026-05-14: no result cards returned)
|
|
204
|
+
**Selected**
|
|
205
|
+
- Background: `#25262B`
|
|
206
|
+
- Text: `#FFFFFF`
|
|
207
|
+
- Radius: `9999px`
|
|
208
|
+
- Padding: `10px 16px`
|
|
209
|
+
- Font: `14px / 700 system sans-serif`
|
|
210
|
+
- Use: Selected product-home content tab; `home::[data-omd-capture="19"]` and interaction capture `home::[data-omd-interaction-capture="tab-3-3"]`.
|
|
292
211
|
|
|
293
|
-
**
|
|
212
|
+
**Hover**
|
|
213
|
+
- Background: `#F8F9FA`
|
|
214
|
+
- Text: `#212529`
|
|
215
|
+
- Radius: `9999px`
|
|
216
|
+
- Padding: `10px 16px`
|
|
217
|
+
- Font: `14px / 400 system sans-serif`
|
|
218
|
+
- Use: Product-home content-tab hover sample; `home::[data-omd-capture="20"]::state-hover`.
|
|
294
219
|
|
|
295
|
-
|
|
220
|
+
### Product dialog overlay
|
|
296
221
|
|
|
297
|
-
|
|
222
|
+
**Open**
|
|
223
|
+
- Background: `rgba(0, 0, 0, 0.6)`
|
|
224
|
+
- Font: `16px / 400 Pretendard`
|
|
225
|
+
- Use: Dialog backdrop expanded by the collector on home and catalog; `home::[data-omd-interaction-capture="dialog-2-8"]`.
|
|
298
226
|
|
|
299
|
-
|
|
227
|
+
The supplied bundle records menu, dialog, and tab interactions (nine interaction expansions in total). Only the selectors and states listed above are reusable claims. No checkout, payment, error, toast, skeleton, course-card-hover, or responsive variant is inferred.
|
|
300
228
|
|
|
301
|
-
|
|
302
|
-
|---|---|---|
|
|
303
|
-
| `--mantine-spacing-xs` | `0.625rem` (10px) | Tight chip/tag padding, inline icon gaps |
|
|
304
|
-
| `--mantine-spacing-sm` | `0.75rem` (12px) | Button horizontal padding, list-item gutters |
|
|
305
|
-
| `--mantine-spacing-md` | `1rem` (16px) | Default card padding, form field gap |
|
|
306
|
-
| `--mantine-spacing-lg` | `1.25rem` (20px) | Section content gutter |
|
|
307
|
-
| `--mantine-spacing-xl` | `1.5rem` (24px) | Section block separator, footer column gap |
|
|
229
|
+
---
|
|
308
230
|
|
|
309
|
-
|
|
231
|
+
**Verified:** 2026-07-13
|
|
232
|
+
**Tier 1 sources:** `https://www.inflearn.com/` (product home), `https://www.inflearn.com/courses` (product catalog), `https://tech.inflab.com/20260305-new-header/` (first-party engineering documentation/context), `https://tech.inflab.com/20240224-design-system/` (first-party design-system context), `https://story.inflab.com/main/%ED%9A%8C%EC%82%AC%EC%86%8C%EA%B0%9C/` (first-party company context), `https://github.com/orioncactus/pretendard/blob/main/packages/pretendard/docs/en/README.md` (upstream font distribution), and `https://github.com/orioncactus/pretendard/blob/main/LICENSE` (upstream font licence boundary)
|
|
233
|
+
**Tier 2 sources:** `https://getdesign.md/inflearn` (attempted; built-in web open returned an internal safe-open failure), `https://styles.refero.design/?q=inflearn` (attempted; built-in web open returned an internal safe-open failure); no usable Inflearn record was returned by the required cross-check attempts.
|
|
234
|
+
**Conflicts unresolved:** none
|
|
310
235
|
|
|
311
|
-
|
|
236
|
+
Legacy claims about a universal Mantine token sheet, a named 65px sticky GNB contract, course-detail/cart/payment CTAs, input outlines, footer geometry, card motion, empty/error/success states, and unmeasured course-grid rules were removed because the supplied 2026 evidence does not establish them.
|
|
312
237
|
|
|
313
|
-
##
|
|
238
|
+
## 5. Iconography & Imagery
|
|
314
239
|
|
|
315
|
-
|
|
316
|
-
- **Course thumbnail style**: 16:9 photographic or illustrative — wide stylistic range because covers are author-submitted. Inflearn standardizes the radius (8px) and aspect ratio, not the art direction.
|
|
317
|
-
- **Hero illustrations**: When used, soft flat-vector with a single mint-green accent so they read as "Inflearn-coloured" without dominating.
|
|
318
|
-
- **Photography**: Sparse on product surfaces; reserved for instructor profile portraits in course detail.
|
|
240
|
+
The product surfaces include course articles and standard controls, but the supplied evidence does not identify a named icon library, SVG stroke rule, image aspect-ratio contract, or universal thumbnail treatment. Course imagery and any inline icon implementation remain route content rather than promoted system tokens.
|
|
319
241
|
|
|
320
|
-
##
|
|
242
|
+
## 6. Shape & Elevation
|
|
321
243
|
|
|
322
|
-
|
|
323
|
-
-
|
|
324
|
-
- Card hover: thumbnail scale `1.0 → 1.02`, `200ms ease-out`, paired with a subtle elevation increase (shadow `xs` → `sm`).
|
|
325
|
-
- Page transitions: no client-side animated transitions — full SSR navigation on link click; the perceived motion budget is spent on the in-place hover affordances.
|
|
326
|
-
- Loading: Mantine `Loader` (rotating dot ring) in `#00C471`.
|
|
244
|
+
- Product evidence includes 4px badge wrappers, 8px course-card/input shells, 32px GNB actions, and `999px`/`9999px` pill controls. These are distinct observed shapes, not a mandate to round unrelated interfaces.
|
|
245
|
+
- The selector-backed GNB controls, search submit, course article, and dialog backdrop have `box-shadow: none`. A separate course-catalog control has a local shadow observation, but the bundle does not establish a reusable elevation scale.
|
|
327
246
|
|
|
328
|
-
|
|
247
|
+
## 7. Content & Voice
|
|
329
248
|
|
|
330
|
-
|
|
249
|
+
Inflab’s official company page frames the service around career learning, knowledge sharing, fair access to growth opportunities, transparent course/review information, and content rather than inflated marketing. Treat this as brand context: it supports clear, learner-respecting copy but does not establish fictional UI slogans, exact CTA wording, or a product-wide Korean grammatical style guide.
|
|
331
250
|
|
|
332
|
-
|
|
333
|
-
- **Focus**: 2px outline `#00C471` at 2px offset on keyboard focus; input border swaps to `#00C471`.
|
|
334
|
-
- **Active / Pressed**: CTA bg `#00A760`; pagination active page solid `#00C471` on white.
|
|
335
|
-
- **Disabled**: Mantine default — `#F1F3F5` background, `#ADB5BD` text, `cursor: not-allowed`.
|
|
336
|
-
- **Loading**: Mantine `Loader` in primary green; CTA can swap label for inline spinner.
|
|
337
|
-
- **Empty**: Centered illustration + headline (`아직 수강 중인 강의가 없어요`) + secondary outlined CTA (`강의 둘러보기`).
|
|
338
|
-
- **Error**: Inline `#FA5252` 14px text below the offending field; field border swaps to `#FA5252`.
|
|
339
|
-
- **Success**: One-line confirmation in `#00C471` 14px, no toast theatre.
|
|
340
|
-
- **Skeleton**: `#F1F3F5` block, shimmer `1.5s` linear (Mantine `Skeleton` default).
|
|
251
|
+
### Do
|
|
341
252
|
|
|
342
|
-
|
|
253
|
+
- Keep learner and knowledge-sharing context tied to the official company narrative.
|
|
254
|
+
- Preserve source-domain boundaries when referring to product, documentation, or company-story content.
|
|
343
255
|
|
|
344
|
-
|
|
345
|
-
- **Pretendard** is a Korean-display-first font — supports the full Hangul block plus extended Latin; English text reads naturally without a separate Latin font.
|
|
346
|
-
- **Color contrast**: Heading `#212529` on `#FFFFFF` = 16.0:1 (AAA). Body `#495057` on `#FFFFFF` = 8.6:1 (AAA). Primary green `#00C471` on `#FFFFFF` = 2.45:1 — **fails AA for body text**; Inflearn correctly uses it only on white-on-green CTAs (where contrast is 4.4:1, passes AA), as accent fills, and for >18pt heading-scale text. Designers should not use `#00C471` for body-text links without a darker variant — use `#00A760` (3.5:1, still borderline AA for body) and prefer underline + bold.
|
|
347
|
-
- **Keyboard nav**: Mantine `focusRing="auto"` — visible 2px green ring on Tab navigation.
|
|
348
|
-
- **Screen reader**: GNB icon-only buttons carry `aria-label` (`search-menu`, `service-menu` observed). Course tiles use semantic `<article>`.
|
|
256
|
+
### Don't
|
|
349
257
|
|
|
258
|
+
- Turn a company mission statement into an unobserved product microcopy template.
|
|
259
|
+
- Present declared-only or system fonts as loaded Inflearn UI fonts.
|
|
350
260
|
|
|
351
|
-
##
|
|
261
|
+
## 8. Accessibility & States
|
|
352
262
|
|
|
353
|
-
|
|
354
|
-
-
|
|
355
|
-
-
|
|
356
|
-
-
|
|
357
|
-
- Render the GNB as a sticky 65px white bar with no shadow and no border, letting the green circular search button be the only visual accent
|
|
358
|
-
- Keep course tiles borderless and transparent (~230x310px, 8px thumbnail radius) so the thumbnail does the visual work, with title in #212529, instructor in #868E96, and price in #212529 weight 400
|
|
359
|
-
- Inherit the Mantine semantic palette for non-brand needs — red #FA5252 for errors, blue #228BE6 for info, cyan-teal #1098AD for category tags — and reach for it instead of inventing new hues
|
|
263
|
+
- The captured search-submit is white text on `#00C471`; the source records its observed hover background as `#00A760`.
|
|
264
|
+
- The captured dialog backdrop is `rgba(0, 0, 0, 0.6)`. The bundle confirms that a dialog-open state exists but does not provide a general dialog-panel accessibility specification.
|
|
265
|
+
- The home capture includes one disabled button with `#F1F3F5` background, `#ADB5BD` text, a `#DEE2E6` border, and 32px radius. It is a selector-specific observation, not a universal disabled-state token because the catalog’s disabled sample differs.
|
|
266
|
+
- No accessibility conformance, focus-visible outline, keyboard order, error message, loading, empty, success, or responsive behavior is claimed beyond the recorded interaction states.
|
|
360
267
|
|
|
361
|
-
|
|
362
|
-
- Introduce a second brand accent hue for a sub-product — tint the existing #00C471 (e.g. rgba(0,196,113,0.1)) or fall back to the Mantine red/blue/yellow/cyan scales instead
|
|
363
|
-
- Use #00C471 for body-text links or small text — it scores only 2.45:1 on white and fails AA, so reserve it for white-on-green CTAs and >18pt headings
|
|
364
|
-
- Embolden prices in red or add strikethrough discount callouts outside intentional sale rails — keep price in body weight 400 as a fact, not a flag
|
|
365
|
-
- Add campaign drama like rotating banner carousels, parallax, or auto-advancing home rails — show ~24 calm catalog tiles above the fold and make card thumbnail scale (1.0 to 1.02) the only ambient motion
|
|
366
|
-
- Use pressure or hype microcopy such as 지금 바로!, 놓치지 마세요, 최저가, 최고의 강의, Oops!, or 오류가 발생했습니다 — write agency-on-the-learner copy in casual-polite ~해요 instead
|
|
367
|
-
- Call instructors 강사 or 교수 or pit them against each other with ranking labels — use the brand term 지식공유자님 and neutral counts like 수강생 12,400명
|
|
268
|
+
## 9. Source Boundaries
|
|
368
269
|
|
|
369
|
-
|
|
270
|
+
The product home and course catalog are the only sources of product tokens and component claims in this reference. The Inflab engineering article is documentation chrome and describes the 2025 GNB redesign, its MFE/App Shell context, and the product’s core service navigation; it must not populate product CSS tokens. The company introduction supplies factual narrative about career learning and knowledge sharing. No separate public marketing surface was captured, and no login, course-detail, cart, payment, or learning-room flow was treated as observed.
|
|
370
271
|
|
|
371
272
|
## 10. Voice & Tone
|
|
372
273
|
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
Korean is the dominant register; English appears only for technical course titles (where the technology has an English name — "React", "Spring", "Kubernetes") and for the `/en` mirror. The voice avoids the formal `~합니다` ending in product surfaces (it survives in legal / refund / receipt screens) and uses the casual-polite `~해요` everywhere users are choosing what to learn.
|
|
274
|
+
The first-party company introduction addresses people who build careers and dreams, describes expert knowledge sharing, and frames Inflearn as a career-learning platform. It also explicitly values transparent course information, opportunities to learn despite cost or time constraints, and good content over inflated marketing. Together those statements support a grounded, learner-respecting brand voice: clarity about what is being learned and who is sharing the knowledge is more defensible than pressure or spectacle.
|
|
376
275
|
|
|
377
|
-
|
|
378
|
-
|---|---|
|
|
379
|
-
| CTAs | Imperative + concrete outcome, no exclamation. `수강신청 하기`, `결제하기`, `장바구니에 담기`. Never `지금 바로!`. |
|
|
380
|
-
| Section headlines | A friendly invitation, not a sales hook. `0원으로 부담없이 시작하기` rather than `무료 강의 BEST 100!`. |
|
|
381
|
-
| Course tile metadata | Bare facts. Instructor name, run time, rating, price. No promotional copy on the tile itself. |
|
|
382
|
-
| Free tag | Two characters: `무료`. Green pill on white tile. No "FREE!" / "Limited time!" framing. |
|
|
383
|
-
| Empty states | Why empty + one next step. `아직 수강 중인 강의가 없어요. 관심 분야의 강의를 둘러보세요.` |
|
|
384
|
-
| Error / validation | Specific cause + action. `이메일 형식이 올바르지 않아요. 다시 확인해주세요.` Never `오류가 발생했습니다`. |
|
|
385
|
-
| Success | One line, no celebration. `수강신청이 완료되었어요. 내 강의실에서 확인할 수 있어요.` |
|
|
386
|
-
| Instructor surfaces | Respectful 2nd-person `~님`. `지식공유자님` is the brand term for instructor — never `강사`, which would feel one-way. |
|
|
387
|
-
|
|
388
|
-
**Forbidden phrases (illustrative — not from a published Inflearn guide; derived from observed restraint on `/` and `/courses`)**: `오류가 발생했습니다`, `놓치지 마세요`, `Oops!`, `지금 바로!`, `최저가`, exclamation marks on routine CTAs, emoji on price or enrolment surfaces, superlatives on course recommendations (`최고의 강의`, `이번 주 1등`). Where ranking matters, Inflearn uses neutral counts (`수강생 12,400명`) instead of editorialized rank labels.
|
|
276
|
+
They are not a published UI copy manual. The product capture confirms controls and course content but does not prove an exact CTA vocabulary, a required Korean sentence ending, a particular error-message formulation, or a campaign-copy rule. Preserve the company’s stated commitments as context and leave specific product strings unclaimed unless a product surface directly supplies them.
|
|
389
277
|
|
|
390
278
|
## 11. Brand Narrative
|
|
391
279
|
|
|
392
|
-
|
|
280
|
+
Inflab’s own introduction describes Inflearn as a career-learning platform for people who pursue work and dreams. It says the service aims to let people learn and share knowledge without being prevented by economic or time constraints, and it presents knowledge sharers with substantial professional experience as a source of expertise. The company also frames transparent course information and a long-term growth ecosystem as part of its purpose.
|
|
393
281
|
|
|
394
|
-
|
|
282
|
+
Its engineering writing gives that public product a current operational context. A 2024 design-system retrospective says historical systems coexisted, while the 2026 GNB account explains how a new shared header made the core services—courses, challenges, mentoring, clips, and community—more legible across multiple front-end environments. This is an evolution in product infrastructure and navigation, not evidence that every public surface shares a single stylesheet or component library.
|
|
395
283
|
|
|
396
|
-
|
|
284
|
+
The reference therefore keeps the official service and evolution story, but does not invent founder history, customer metrics, a uniform visual system, or a quantified design outcome beyond what those sources state.
|
|
397
285
|
|
|
398
286
|
## 12. Principles
|
|
399
287
|
|
|
400
|
-
1. **
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
3. **One green, used decisively.** A single brand colour for every interaction. *UI implication:* never introduce a secondary brand colour for a sub-product; tint the existing green or fall back to the Mantine semantic palette (red/blue/yellow/cyan).
|
|
405
|
-
|
|
406
|
-
4. **The instructor is `지식공유자님`.** Knowledge-sharer, not lecturer. *UI implication:* avoid hierarchy language (`강사` / `교수`) and avoid star/rating language that pits instructors against each other on the same screen.
|
|
407
|
-
|
|
408
|
-
5. **Price is a fact, not a flag.** Course prices appear in body weight 400, not bold red, not strikethrough-with-discount-callout (except on intentional sale rails). *UI implication:* a course tile is a content card first, a commerce card second.
|
|
409
|
-
|
|
410
|
-
## 13. Personas
|
|
288
|
+
1. **Career learning and knowledge sharing.** The company describes a platform for people to learn and share expertise. *UI implication:* do not replace that service context with unsupported commerce or credential claims.
|
|
289
|
+
2. **Transparent information.** The company says it publishes learner counts and course evaluations without selection or manipulation. *UI implication:* where such data is presented, distinguish actual product evidence from marketing interpretation.
|
|
290
|
+
3. **Opportunity through accessibility.** The company describes reducing economic and time barriers to learning. *UI implication:* do not turn that narrative into unobserved pricing, promotion, or eligibility UI.
|
|
411
291
|
|
|
412
|
-
|
|
292
|
+
## 13. Stakeholder Groups
|
|
413
293
|
|
|
414
|
-
|
|
294
|
+
The official company page identifies learners seeking career development and experts who share knowledge. The product’s current GNB article additionally names courses, challenges, mentoring, clips, and community as core services. These are stakeholder/service facts, not synthetic personas; no age, task frequency, conversion behavior, or preference is inferred.
|
|
415
295
|
|
|
416
|
-
|
|
296
|
+
## 14. Observed Interaction States
|
|
417
297
|
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
|
425
|
-
|---|---|
|
|
426
|
-
| **Empty — My Courses** | Center-aligned illustration; `아직 수강 중인 강의가 없어요`; secondary outlined CTA `강의 둘러보기` linking to `/courses`. |
|
|
427
|
-
| **Empty — Wishlist** | `위시리스트가 비어 있어요. 마음에 드는 강의를 담아두세요.` + secondary CTA. |
|
|
428
|
-
| **Empty — Search results** | `'<query>'에 대한 결과가 없어요.` + 3 chip suggestions from related categories. |
|
|
429
|
-
| **Loading — page** | Mantine `Skeleton` placeholders for course tiles (6 tiles per row, 230×310). |
|
|
430
|
-
| **Loading — submit** | Inline 16px spinner replaces CTA label; CTA remains green; pointer disabled. |
|
|
431
|
-
| **Error — Network** | Inline banner `네트워크 연결을 확인해주세요. 다시 시도하시면 정상적으로 이용하실 수 있어요.` `다시 시도` outlined button. |
|
|
432
|
-
| **Error — Validation** | 14px `#FA5252` text below field; field border `#FA5252`; field icon-side error icon. |
|
|
433
|
-
| **Error — Payment** | Modal with specific cause line + `다른 결제 수단으로 시도하기` primary button. |
|
|
434
|
-
| **Success — Enrolment** | Inline `수강신청이 완료되었어요.` `내 강의실로 가기` primary CTA. |
|
|
435
|
-
| **Skeleton — Card** | `#F1F3F5` blocks for thumbnail (16:9) + 2 text lines; shimmer 1.5s linear. |
|
|
436
|
-
| **Disabled — Form** | `#F1F3F5` bg, `#ADB5BD` text, `cursor: not-allowed`. Tooltip on hover explaining what is missing. |
|
|
298
|
+
| State | Selector-backed observation | Boundary |
|
|
299
|
+
|---|---|---|
|
|
300
|
+
| Hover | GNB search submit changes to `#00A760`; GNB action has `rgba(241,243,245,0.65)` background. | Only the listed selectors are promoted. |
|
|
301
|
+
| Selected | Product content tab has `#25262B` background, white 14px/700 text, and full pill radius. | Product-home tab only. |
|
|
302
|
+
| Menu open | Collector expanded a product menu; a 14px Pretendard option at 8px radius and `10px 12px` padding was recorded. | No general menu token is inferred. |
|
|
303
|
+
| Dialog open | Collector recorded a `rgba(0,0,0,0.6)` product backdrop. | No dialog-panel, validation, or checkout state is inferred. |
|
|
304
|
+
| Disabled | Home selector records a neutral 32px button; catalog selector records a different 8px control. | Keep them selector-local; do not create a universal token. |
|
|
437
305
|
|
|
438
306
|
## 15. Motion & Easing
|
|
439
307
|
|
|
440
|
-
|
|
441
|
-
|---|---|---|
|
|
442
|
-
| `motion-fast` | 150ms | Hover bg fade, focus ring appear |
|
|
443
|
-
| `motion-base` | 200ms | Card thumbnail scale, nav pill bg, button colour |
|
|
444
|
-
| `motion-slow` | 300ms | Modal open, drawer slide |
|
|
445
|
-
| `easing-default` | `ease` | All hover / focus transitions (Mantine default — `--mantine-transition-timing-function`) |
|
|
446
|
-
| `easing-emphasized` | `cubic-bezier(0.4, 0, 0.2, 1)` | Modal / drawer enter — material-style emphasized easing |
|
|
447
|
-
| `easing-decelerate` | `cubic-bezier(0, 0, 0.2, 1)` | Skeleton shimmer, page-content fade-in |
|
|
448
|
-
|
|
449
|
-
**Motion rules**:
|
|
450
|
-
- No carousel auto-advance on home rails (a deliberate departure from Korean commerce convention; Inflearn's audience is reading instructor names, not glancing at banners).
|
|
451
|
-
- No parallax. No scroll-triggered hero animation on the marketing surfaces.
|
|
452
|
-
- Card hover is the only ambient motion — every other animation requires explicit user input.
|
|
453
|
-
- Respect `prefers-reduced-motion: reduce` — fall back to instant transitions, keep colour fades only.
|
|
308
|
+
No duration, easing curve, card-scale, skeleton animation, page transition, or reduced-motion rule was captured in the supplied product evidence. The first-party GNB article discusses a shift from reflow-based scroll motion to composite-based scroll motion for the shared header, but it does not supply reusable animation tokens. No motion token is therefore promoted.
|