Kurly's design system uses #5f0080 as its primary color and Pretendard for typography, with 6px corner radius. Kurly's interface is the digital equivalent of a curator's grocer -- a quiet white-and-cream gallery wall where the only saturated thing in the room is one deep, editorial purple.
Kurly's interface is the digital equivalent of a curator's grocer -- a quiet white-and-cream gallery wall where the only saturated thing in the room is one deep, editorial purple. The page opens on a near-pure white canvas (#ffffff) with a soft cool-gray utility fill (#f2f5f8) and ink-black headings (#222), and the unmistakable Kurly Purple #5f0080 carries every brand moment that matters: the wordmark, the primary CTA, the 샛별배송 (dawn delivery) badge, the cart icon's active state. This is not a corporate purple of fintech dashboards or telco logos; it is closer to the deep aubergine of a high-end pâtisserie awning -- premium, restrained, slightly aristocratic.
The system, internally referenced in compiled CSS as KPDS (Kurly Product Design System), treats purple the way a fine-dining restaurant treats truffle: a small amount, deployed with intention. Typography is Pretendard -- Korea's de-facto product sans -- never a custom display face, because the photography of the food is the brand expression and the type's job is to step out of its way. The overall aesthetic is editorial-magazine-meets-grocery: dense product grids on cream/white, generous photographic real estate, restrained chrome, and the same purple repeated just often enough that the eye learns to associate it with "Kurly promised this."
Key Characteristics:
#5f0080) as the singular brand mark -- premium, editorial, never a tint#f2f5f8 (lightest) → #222 (deepest), 12 steps total샛별배송 badge as a recurring brand moment in purple#5f0080): KPDS purple-900. Primary CTA, brand wordmark, 샛별배송 (dawn delivery) badge, active states. The single defining color of the brand.#672091): Pressed/hover for purple CTAs, dark contexts.#7e3ab0): Mid-emphasis brand accent for editorial banners.#9a60ca): Tints used in hero gradients, lifestyle banners.#c19edf): Soft brand-tinted backgrounds, premium chips.#e8dbf3): Brand-weak background for ribbons, callouts.#f5effa): Whisper-tint for selected rows and subtle brand surfaces.#1c1c1c): KPDS gray-900. Reserved for highest-contrast headings.#222): Default heading and price color. Slightly softer than pure black -- the warmth that keeps the white pages from going clinical.#393d41): Body text on white.#464c52): Sub-body, descriptions.#565e67): Caption, metadata.#848f9a): Disabled labels, placeholder.#ffffff): Page background, card surface.#f2f5f8): KPDS gray-100. Section background, search bar fill, neutral chip fill.#eceff3): KPDS gray-200. Subtle separators.#dfe4eb): KPDS gray-300. Standard 1px borders.#cbd1d7): KPDS gray-400. Definitive borders, input outlines.#bcc4cc): KPDS gray-500. Pressed border on outline buttons.#e22d2e): KPDS red-700. Discount %, error foreground, 세일 badge.#d81b1c): Pressed sale-red.#fbe4e4): Discount ribbon background, error inline tint.#fa622f): KPDS orange-700. Limited-time offers, "오늘만" promotional color (used sparingly to avoid competing with purple).#feebe4): Promotional background.#029568): KPDS green-600. Success toasts, fresh/organic indicators.#216ba5): Hyperlinks, informational states.#bd76ff): KPDS purple-bright-300. Promotional accent (mobile pill highlights, "Beauty Kurly" sub-brand) -- distinct from #5f0080 by intent: deep purple = trust, bright purple = play.#f6edff): Promotional background tint.Pretendard, "Pretendard Variable", -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| Role | Size | Weight | Use |
|---|---|---|---|
| Display 72 | 72px | 700 | Hero magazine headlines (web only) |
| Display 44 | 44px | 700 | Editorial section headers |
| Headline 36 | 36px | 700 | Page titles, category banners |
| Headline 28 | 28px | 700 | Subsection headers |
| Title 24 | 24px | 600 | Card-cluster titles, dialog titles |
| Title 20 | 20px | 600 | Strong product titles, list section headers |
| Title 18 | 18px | 600 | Standard product titles, modal titles |
| Body 16 | 16px | 400 | Default reading text, button labels (lg) |
| Body 14 | 14px | 400 | Secondary body, button labels (md) |
| Caption 13 | 13px | 400 | Metadata, brand line on product card |
| Caption 12 | 12px | 400 | Timestamps, fine print |
| Micro 10 | 10px | 600 | Badge text (샛별배송, Kurly Only) |
Sale Red #e22d2e 18-20px / 700, original price in Ink 300 13px / 400 with strikethrough, final price in Ink 800 #222 18-20px / 700. The triple-stack repeats on every product card.Primary (Kurly Purple)
#5f0080#ffffff#672091#dfe4eb background, #848f9a text구매하기, 장바구니 담기, 주문하기)Secondary (Outline Purple)
#ffffff#5f0080#5f0080#f5effa background바로 구매, 옵션 변경)Neutral (Cream Fill)
#f2f5f8#222#dfe4eb#eceff3 background취소, 더보기, filter open)Ghost / Text Link
#5f0080전체보기 >, 더 알아보기 >)Critical (Sale / Destructive)
#e22d2e#ffffff#d81b1c삭제)Default
#ffffff#dfe4eb#222#848f9a#5f0080 (no glow ring -- editorial restraint)#f2f5f8 background, #a7b2bc textSearch Bar (Header)
#f2f5f8검색어를 입력해주세요 in #848f9a#5f0080 1px on bottom edgeQuantity Stepper
#ffffff#dfe4ebProduct Card (Grid)
#ffffff#f2f5f8 page or 16px gap on white)0px 0px 4px rgba(0,0,0,0.15) on hover (KPDS shadow-2)#222, max 2 lines with ellipsis#848f9a, max 1 line#e22d2e 16px / 700 + final price #222 16px / 700 + original price #a7b2bc 13px / 400 strikethrough샛별배송 purple chip top-left of image areaEditorial Banner Card
#ffffff or photographic full-bleedKurly's Pick, 오늘의 레시피)Modal / Dialog
#ffffff0px 0px 30px rgba(0,0,0,0.25) (KPDS shadow-elevated)#222, body: 14px / 400 / #393d41샛별배송 (Dawn Delivery)
#5f0080#ffffffKurly Only
#ffffff#5f0080#5f0080Sale (Discount)
#e22d2e#ffffffSoldout
#ffffff 14px / 700 centered (일시품절)Neutral Tag
#f2f5f8#393d41Filter Chip — Selected
#5f0080#ffffff#5f0080, nav links in #222 14px / 600. Underline-on-active in #5f0080 2px.#f2f5f8 background, hover state #eceff3, active row #f5effa with #5f0080 left bar 3px.#eceff3. Active tab icon + label #5f0080, inactive #848f9a.#f2f5f8 (rest sections, footers) and #ffffff (active product grids) so the eye gets pause between commerce density.Kurly's Pick editorial banner breathes at 64-96px vertical; a category grid tightens to 16-24px.| Level | Treatment | Use |
|---|---|---|
| Flat (Level 0) | No shadow | Default product cards, page sections |
| Subtle | 0px 2px 2px 0px rgba(0,0,0,0.03) | Sticky headers, gentle separation |
| Card-Hover | 0px 0px 4px 0px rgba(0,0,0,0.15) | Product card on hover |
| Floating | 2px 2px 10px 0px rgba(0,0,0,0.10) | Dropdown, popover, tooltip |
| Elevated | 0px 0px 30px 0px rgba(0,0,0,0.25) | Modal dialogs, full-screen sheet entries |
| Overlay-Heavy | 0px 4px 10px 0px rgba(0,0,0,0.40) | Image lightbox, full-takeover overlays |
Shadow Philosophy. Kurly shadows are pure black with low opacity — never purple-tinted. The brand wants the purple to feel like one warm, deliberate object on the page; tinting shadows would dilute that singular role. Default cards stay flat; elevation appears only at meaningful interaction (hover, modal entry). The system has 6 named shadows but 4 of them are reserved for floating/modal contexts — most surfaces are flat.
#5f0080) as the singular brand mark — wordmark, primary CTA, dawn-delivery badge#f2f5f8 and white #ffffff only — let photography supply the warmth#bd76ff for promotional sub-brand moments only (Beauty Kurly)샛별배송 + one)#000 for text — #222 (ink-800) keeps the page from going clinical| Name | Width | Key Changes |
|---|---|---|
| Mobile | <768px | 2-col product grid, 56px GNB, bottom tab bar |
| Tablet | 768-1024px | 3-col product grid, GNB compresses category dropdowns |
| Desktop | >1024px | 4-col grid, full GNB, 1050px content centered, editorial flanks |
#5f0080)#672091)#ffffff) / Cream (#f2f5f8)#222)#393d41)#565e67)#848f9a)#dfe4eb)#e22d2e)#029568)#bd76ff)샛별배송 purple badge top-left of image. Below image: brand line 12px #848f9a, title 14px #222 max 2 lines, price triple-stack (discount % #e22d2e 16px/700, final price #222 16px/700, original price #a7b2bc 13px/400 strikethrough). Card-hover shadow 0px 0px 4px rgba(0,0,0,0.15)."더 알아보기 > in #5f0080."#5f0080 — only this hex for brand mark and primary CTA#ffffff and cream #f2f5f8; never tint hero backgrounds purple샛별배송 purple badge is the brand's most repeated micro-component — recognize it as a brand momentKurly speaks like the friend who quietly knows the best butcher, the best baker, and the orchard that ships the strawberries before sunrise — confident without performing, warm without being chatty, and allergic to the gameshow shouting of mass e-commerce. The voice assumes a busy dual-income household at 10:47pm staring at an empty fridge: it does not exclaim, it does not gamify, it simply names the thing and confirms it will arrive while you sleep. Korean copy uses -요 and -습니다 registers fluidly — 장바구니에 담겼어요 for warmth, 주문이 완료되었습니다 for transactions — but never the playful -야/-지 of younger consumer apps. English microcopy on the brand surfaces stays at the same register: "Better Life for All", not "Get groceries fast!!!"
| Context | Tone |
|---|---|
| CTAs | Verb-first Korean (구매하기, 장바구니 담기, 샛별배송으로 받기) — never exclamatory, never Click here! |
| Empty states | One quiet sentence naming why it's empty + one low-key action. Never 데이터가 없습니다. |
| Error messages | Specific and blameless. 다시 시도해 주세요 over 오류가 발생했습니다. |
| Success toasts | Past-tense single sentence (장바구니에 담겼어요). No exclamation marks. |
| Product descriptions | Editorial — supplier name, region, harvest method first. Marketing claims (최고의, 프리미엄) only when sourced. |
| Promotional banners | Restrained even in sales. 오늘만 이 가격 rather than MEGA SALE!!!. |
| Trust & delivery copy | Calm and operational. 내일 아침 7시 전 도착 is more powerful than 초고속 배송. |
| Onboarding | One screen, one promise (dawn delivery), one CTA. No carousel of features. |
Forbidden phrases. 대박, 미친 가격, 초특가, 쇼킹, English boilerplate like Mind-blowing deals, Lightning fast, Don't miss out. Excessive emoji are banned in price chrome and trust copy; allowed sparingly in editorial recipe content. The voice never uses three exclamation marks; rarely uses one. 혁신적인 is banned — Kurly does not call itself innovative; it just delivers before sunrise.
Voice samples.
Better Life for All — corporate brand promise. 건강한 식재료부터 믿을 수 있는 뷰티, 라이프스타일 상품까지. 나와 내 가족이 사고 싶은 상품을 판매합니다. — homepage meta description. 내일 아침 문 앞에서 만나요! — dawn-delivery brand line, homepage meta. 샛별배송 — brand-defining badge for dawn delivery (delivered by 7am for orders by 11pm). 장바구니에 담겼어요 — illustrative success-toast pattern in Kurly register. 오늘만 이 가격 — illustrative restrained promotion line in Kurly register. 내일의 장보기, 오늘 끝. — illustrative tagline pattern in Kurly register (dawn-delivery promise). Kurly (컬리, parent of 마켓컬리/Market Kurly) was founded on December 21, 2014 by Sophie Kim (김슬아 / Kim Seul-ah), a Wellesley College political science graduate (2006, cum laude) who had spent her twenties at Goldman Sachs Hong Kong (2007, fixed income), McKinsey & Company (2010), Temasek Holdings (2012), and Bain & Company Korea (2013) — and who, at every stop, had been quietly frustrated that the produce in Korean grocery aisles never matched what her own family ate. The original company name was The Farmers; the consumer-facing service launched in 2015 with 30 SKUs. The company rebranded to Kurly Inc. in 2018 (Wikipedia: Sophie Kim, KED Global — Sophie Kim road less traveled).
The product is built around a single idea: 샛별배송 (saetbyeol-baesong, "morning star delivery") — order by 11pm, your fresh groceries arrive by 7am the next morning, full cold chain maintained from farm to apartment door. This was unprecedented in Korea when Kurly launched it; the entire e-grocery industry has since copied the model. Around that operational spine sits a deliberately editorial commerce surface: 1:1 product photography, magazine-style supplier features, restrained chrome, and one deep purple (#5f0080) repeated just often enough to brand the promise. The visual decision tracks the founder's positioning bet — Korean grocery shoppers (especially dual-income working couples in Seoul/Pangyo/Gangnam) would pay a premium if the product, the photography, and the trust narrative all signaled "curated." So everything signals curated, including the type-on-cream restraint and the absence of promotional carnival (KED Global — dawn delivery pioneer, Marketline — Kurly pioneering dawn delivery).
The financial trajectory mirrors the visual one — quiet, then loud. Series A (2015), Series B (2017), then a string of high-conviction global rounds: DST Global, Sequoia Capital China, Hillhouse, Aspex Management, Anchor Equity Partners, plus strategic investors CJ Logistics and SK Networks. December 2021 pre-IPO closed at $210M on a $3.3B valuation, total funding around $761M. Kurly passed Korea Exchange preliminary IPO screening in August 2022, then postponed the listing in January 2023 as global tech valuations cratered; a smaller pre-IPO round in May 2023 repriced the company at roughly 2.5 trillion KRW. The company has been re-targeting a KOSPI listing since early 2024 and posted its first quarterly profit in Q1 2025, reframing the IPO conversation around sustained profitability rather than growth-at-all-costs (TechCrunch — IPO scrapped, Korea Herald — Kurly opts for Korean market, KED Global — first quarterly profit).
What Kurly refuses: the gameshow ribbons of Coupang, the SuperSale carnival of 11st, the celebrity-endorsement pile-on of legacy home shopping, and the aggressive "타임딜" countdown psychology of generic Korean e-commerce. The brand's entire claim is that time-pressed working professionals would rather have one curated thing tomorrow at 7am than ten cheap things this afternoon — and the design system is the visible argument for that bet. Purple is scarce because trust has to be scarce to be legible; photography is generous because the product is the brand; chrome is quiet because the product is loud enough.
#5f0080 appears on the wordmark, primary CTA, 샛별배송 badge, and active states — and almost nowhere else. UI implication: at most one purple element per viewport in primary commerce flow; multiple purple CTAs competing on one screen must demote one to neutral or outline.#f2f5f8 (rest, footer, editorial breathers) and #ffffff (active product grids). UI implication: don't run three commerce-dense white sections in a row without a cream rest band; the eye fatigues.샛별배송 is sacred chrome. The dawn-delivery badge is the most-repeated brand component on the surface — it carries the operational promise that justifies the premium. UI implication: never restyle it for "balance"; it is intentionally the most purple thing on the card.오늘만 이 가격 rather than countdown timers and screen-shake animations. UI implication: no flashing, no screen-fill takeovers, no exclamation chains. If a promo design borrows Coupang's energy, it has betrayed the brand.Personas are fictional archetypes informed by publicly described Kurly customer segments (Korean dual-income working professionals, time-pressed parents, premium-grocery early adopters), not individual people.
서연 (Seoyeon), 34, 강남구. Marketing director at a Korean conglomerate, husband works in finance, one toddler in daycare. Opens Kurly between 10:30pm and 11:00pm three nights a week — past the cutoff and the morning is broken. Buys organic eggs, French butter, the Sunday roast, the pediatrician-recommended baby food. Doesn't comparison-shop on price; comparison-shops on supplier and harvest date. Will pay 30% premium for the right strawberries.
민준 (Minjun), 39, 판교. Senior software engineer, wife runs a design studio, two elementary-age kids. Treats Kurly as the "weekday dinner solution" — meal kits, pre-marinated proteins, salad bases. Reads the supplier story on every product at least once. Has zero patience for the marketing language of legacy home shopping; the editorial restraint is exactly why he stayed after a one-week trial in 2019.
지은 (Jieun), 28, 마포구. Single, works in tech PR, lives alone, cooks for one. Discovered Kurly through Beauty Kurly first — Korean K-beauty editorial commerce — then converted to grocery. Buys small portions, premium snacks, niche imported pantry items (Italian anchovies, Japanese soy sauce, French chocolate). The dawn-delivery promise matters less than the curation: she trusts the merchandiser more than she trusts herself.
Mr. & Mrs. Choi, 61, 잠실. Empty-nesters, both retired professionals. Daughter set up the account during COVID; they kept using it because the produce quality is consistent and the customer-service tone is calm. Order weekly, primarily fresh fish, hanwoo beef, premium fruit boxes for grandchildren visits. Don't engage with promotions — engage with reliability.
| State | Treatment |
|---|---|
| Empty (cart) | Single quiet line (장바구니가 비어있어요) + one secondary outline-purple CTA (상품 보러 가기). Never an illustration. Never 데이터가 없습니다. |
| Empty (search no results) | One line in #565e67 14px (검색 결과가 없어요). Single sub-line suggesting alternative searches. No button — user retypes themselves. |
| Empty (filter cleared) | One line of caption text. No button. The user resets the filter. |
| Loading (product grid first paint) | Skeleton blocks at #f2f5f8 matching the final card layout — 1:1 thumbnail, 12px brand line, 14px title (2 lines), price stack. Subtle shimmer at 1.2s with 4% white highlight. |
| Loading (PDP image) | Cream #f2f5f8 placeholder block with center-loading 24px purple #5f0080 spinner. Maintains 1:1 aspect ratio so layout doesn't reflow. |
| Loading (CTA in-flight) | Button text replaced with 16px white spinner; button background stays #5f0080. No disabled state. |
| Error (inline field) | Input border becomes #e22d2e 1px, helper text below in #e22d2e 12px / 400. One actionable sentence (주소를 다시 확인해 주세요). |
| Error (toast) | #222 background, #ffffff 14px / 400 text, 3s auto-dismiss. Bottom-of-screen with 24px inset above bottom tab. One sentence. No icon. |
| Error (network) | Full-screen centered message in #222 18px / 700, #393d41 14px / 400 sub-line, retry button in Kurly Purple. No illustration. |
| Success (cart add) | Inline 300ms flash of #f5effa (purple-50) behind the updated cart icon, then a bottom toast 장바구니에 담겼어요 for 2.5s. |
| Success (order complete) | Dedicated confirmation page — not a toast. Order number, dawn-delivery slot (내일 새벽 도착 예정), and a single primary CTA 주문 상세 보기. Quiet, not celebratory. |
| Skeleton | #f2f5f8 blocks at exact final dimensions matching the product card layout. Shimmer 1.2s. Brand-line and price slots stay blank until resolved — never imply a price that hasn't loaded. |
| Soldout | Full-image overlay rgba(0,0,0,0.5) with white 일시품절 14px / 700 centered. Card stays clickable for re-stock notification opt-in. |
| Disabled | Button background #dfe4eb, text #848f9a. No color inversion. Geometry stays identical so re-enable is frame-stable. |
Durations (named, not raw milliseconds):
| Token | Value | Use |
|---|---|---|
motion-instant | 0ms | Toggle flips, checkbox state, filter chip select |
motion-fast | 150ms | Hover lift, button press, inline cart-flash success |
motion-standard | 250ms | The default — card hover-shadow appearance, dropdown reveal, tab swap |
motion-slow | 350ms | Modal entry, full-sheet presentation, image lightbox |
motion-page | 300ms | Route transitions on PDP entry/exit |
Easings:
| Token | Curve | Use |
|---|---|---|
ease-enter | cubic-bezier(0.0, 0.0, 0.2, 1) | Sheets, modals, toasts, cards-on-hover |
ease-exit | cubic-bezier(0.4, 0.0, 1, 1) | Dismissals, modal close, toast auto-fade |
ease-standard | cubic-bezier(0.4, 0.0, 0.2, 1) | Two-way transitions — expandable accordion, tab content swap |
Spring stance. Spring and overshoot easings are forbidden across Kurly commerce surfaces. The brand sells trust and dawn-delivery reliability to time-pressed professionals; bouncy motion reads as toy-like and undermines the editorial restraint that justifies the premium price point. The licensed exceptions are (a) the native-platform pull-to-refresh on the mobile app (inherits OS spring) and (b) image carousel snap on PDP galleries (inherits browser-native scroll-snap). Every other transition uses ease-enter, ease-exit, or ease-standard.
Signature motions.
0px 0px 4px rgba(0,0,0,0.15) over motion-fast / ease-enter. No scale change — the photography stays exactly the same size; only the shadow appears. The restraint is the brand.#f5effa (purple-50) over motion-fast, then fades back to default. A bottom toast (장바구니에 담겼어요) rises with motion-standard / ease-enter and dismisses with motion-fast / ease-exit.y+16px to y+0 over motion-slow / ease-enter. Backdrop fades from rgba(0,0,0,0) to rgba(0,0,0,0.5) synchronized. Dismissal is lighter — motion-fast / ease-exit.prefers-reduced-motion: reduce, all motion-* tokens collapse to motion-instant. Hover lift becomes immediate shadow toggle; modal cross-fades replace y-rise; cart flash becomes a 1-frame highlight then default. The app stays fully usable; just less kinetic.Verified: 2026-05-08 (Tier 1 live + Tier 2 cross-check)
Tier 1 sources: kurly.com/main (homepage Next.js shell + KPDS compiled CSS at res.kurly.com — Kurly Purple #5f0080 6px / 16px·600 Primary CTA + cream #f2f5f8 neutral fill + Pretendard product font); kurly.com/shopping/categories/list (category surface — same Next.js shell, 4-col product grid pattern + 샛별배송 purple badge convention).
Tier 2 sources: getdesign.md/kurly — no record. styles.refero.design — not separately queried.
Tier 2 (Philosophy/founders): Wikipedia (Sophie Kim), KED Global (CEO profile, dawn delivery, Q1 2025 first profit), Marketline (dawn delivery pioneer framing), TechCrunch (2021 pre-IPO $210M @ $3.3B, 2023 IPO postponement), Korea Herald (KOSPI listing path).
Style ref: karrot (KR retail neighbor format, retained for §10-15 cadence).
Conflicts unresolved: none.
Kurly's interface is the digital equivalent of a curator's grocer -- a quiet white-and-cream gallery wall where the only saturated thing in the room is one deep, editorial purple. The page opens on a near-pure white canvas (#ffffff) with a soft cool-gray utility fill (#f2f5f8) and ink-black headings (#222), and the unmistakable **Kurly Purple #5f0080
Brand
Accent
Neutrals
Semantic
Type Scale
Rendered in system-ui to clearly show scale & weight.
Fonts
Spacing
| Purpose | Value | Preview |
|---|---|---|
| Density | compact | |
| Base unit | 4px | |
| Section gap | 16px | |
| Card padding | 12px | |
| Element gap | 8px |
Border Radius
| Element | Value | Preview |
|---|---|---|
| productSmall | 4px | |
| badgesSmall | 4px | |
| filterSmall | 4px | |
| searchSmall | 4px | |
| buttonsMedium | 6px | |
| inputsMedium | 6px | |
| quantityMedium | 6px | |
| editorialLarge | 8px | |
| contentLarge | 8px | |
| dialogsXL | 12px | |
| sheetsXL | 12px | |
| largeXL | 12px |
Elevation
Do and Don't guidelines parsed from DESIGN.md.
Do
Don't
Buttons
Cards