Thaimart: One system, after four versions without one.ระบบกลาง หลังสี่เวอร์ชันที่ไม่มี
The central design system for version 5 of Thaimart, a Thai marketplace on the web and in an app. I built it alone: fifteen colour scales, a type scale made for Thai, spacing, corners, depth and a grid, and components with every state.ดีไซน์ซิสเต็มกลางของไทยมาร์ทเวอร์ชัน 5 มาร์เก็ตเพลสสัญชาติไทยทั้งบนเว็บและแอป ผมสร้างคนเดียว ทั้งชุดสี 15 ชุด ขนาดตัวอักษรที่ทำมาเพื่อภาษาไทย ระยะห่าง มุมโค้ง ความลึก และกริด พร้อมคอมโพเนนต์ครบทุกสถานะ
Design systemดีไซน์ซิสเต็ม · 7 Solutions
- Toolsเครื่องมือ
- Screensหน้าจอที่ออกแบบ
- Design system
- Figma
The system, liveระบบตัวจริง
Design system V.5.0ดีไซน์ซิสเต็ม V.5.0
Filledกรอกแล้ว
- 15colour scales, 010 → 975ชุดสี ไล่ 010 → 975
- 480button variantsรูปแบบปุ่ม
- 21input variantsรูปแบบช่องกรอก
- 19spacing stepsขั้นระยะห่าง
Drawn live from the file's own tokens, not a screenshot. Set in this site's Thai font; the app itself uses Sukhumvit Tadmai.วาดสดจาก token ในไฟล์ ไม่ใช่ภาพแคป ใช้ฟอนต์ไทยของเว็บนี้ ส่วนในแอปจริงใช้ Sukhumvit Tadmai
How I workedผมทำงานยังไง
Who did what, step by step. The highlighted lane is mine.ใครทำอะไร ในแต่ละขั้น เลนที่ไฮไลต์คือส่วนของผม
Who did what, a step a card: swipe through. The highlighted rows are mine.ใครทำอะไร ขั้นละการ์ด ปัดดูได้ แถวที่ไฮไลต์คือส่วนของผม
01The briefโจทย์
- The team at 7 Solutionsทีมที่ 7 SolutionsFour versions, no system: assigns version 5สี่เวอร์ชันยังไม่มีระบบ มอบหมายเวอร์ชัน 5
- MeผมBuild it as the whole project's system, aloneสร้างเป็นระบบกลางของทั้งโปรเจกต์ คนเดียว
02Foundationsพื้นฐาน
- MeผมLogo, colour, Thai type, spacingโลโก้ สี ตัวอักษรไทย ระยะห่าง
03Componentsคอมโพเนนต์
- MeผมButtons and inputs, in every stateปุ่มและช่องกรอก ครบทุกสถานะ
04Supportซัพพอร์ต
- MeผมHelp the team on some featuresช่วยซัพพอร์ตทีมในบางฟีเจอร์
The whole pictureภาพรวมงานทั้งหมด
Everything I did on this project, one row each. Tap a row for the detail.ทุกอย่างที่ผมทำในโปรเจกต์นี้ แถวละเรื่อง กดเพื่ออ่านรายละเอียด
Everything I did on this project. Swipe through, tap one for the detail.ทุกอย่างที่ผมทำในโปรเจกต์นี้ ปัดดูทีละเรื่อง แตะเพื่ออ่านรายละเอียด
- Four versions, no systemสี่เวอร์ชัน ไม่มีระบบProblemปัญหาVersions 1 to 4: parts used wrongly, mixed, everyone making their ownเวอร์ชัน 1 ถึง 4 ใช้ผิด ใช้ปน ต่างคนต่างทำของตัวเองWhat I didสิ่งที่ทำGiven version 5 to build as the whole project's central system, and built it aloneได้รับมอบหมายให้สร้างเวอร์ชัน 5 เป็นระบบกลางของทั้งโปรเจกต์ และทำคนเดียวResultผลลัพธ์One source for colour, type, space and componentsต้นทางเดียวสำหรับสี ตัวอักษร ระยะห่าง และคอมโพเนนต์
- The logo, as a componentโลโก้ ที่เป็นคอมโพเนนต์ProblemปัญหาA logo copied around as loose files drifts in size and colourโลโก้ที่ก๊อปไปมาเป็นไฟล์ลอย ๆ จะเพี้ยนทั้งขนาดและสีWhat I didสิ่งที่ทำOne Logo component: 3 layouts × 4 colours × 10 sizes, from 48 down to 12คอมโพเนนต์โลโก้ตัวเดียว: 3 รูปแบบ × 4 สี × 10 ขนาด ตั้งแต่ 48 ถึง 12Resultผลลัพธ์120 variants; every screen picks the logo by name120 แบบ ทุกหน้าจอเลือกโลโก้จากชื่อ
- Colour that means somethingสีที่มีความหมายProblemปัญหาRaw colours picked by eye, one screen at a timeสีดิบที่เลือกด้วยตา ทีละหน้าWhat I didสิ่งที่ทำFifteen scales, 010 → 975, each with see-through steps; the brand red and navy on topสีครบ 15 ชุด ไล่ 010 → 975 พร้อมแบบโปร่งแสง สีแดงและน้ำเงินแบรนด์อยู่บนสุดResultผลลัพธ์Every colour on screen comes from one named stepทุกสีบนจอมาจากขั้นสีที่มีชื่อ
- Type that holds Thaiตัวอักษรที่รองรับภาษาไทยProblemปัญหาThai needs more line height than Latin, or its marks collideภาษาไทยต้องการระยะบรรทัดมากกว่าอังกฤษ ไม่งั้นสระและวรรณยุกต์ชนกันWhat I didสิ่งที่ทำA scale from display to caption, with generous line heightsสเกลตั้งแต่ display ถึง caption พร้อมระยะบรรทัดที่เผื่อพอResultผลลัพธ์Headlines and body text that read in both languagesหัวข้อและเนื้อความที่อ่านได้ดีทั้งสองภาษา
- Space, corners and depthระยะห่าง มุมโค้ง และความลึกProblemปัญหาSpacing and corners decided by feel drift between screensระยะห่างและมุมที่กะเอา จะค่อย ๆ ต่างกันในแต่ละหน้าWhat I didสิ่งที่ทำ19 spacing steps, 12 radii, 4 elevations and a grid for mobile and desktopระยะห่าง 19 ขั้น มุมโค้ง 12 ค่า เงา 4 ระดับ และกริดสำหรับมือถือและเดสก์ท็อปResultผลลัพธ์Layouts that line up without measuringเลย์เอาต์ที่ตรงกันโดยไม่ต้องวัด
- Components with every stateคอมโพเนนต์ ครบทุกสถานะProblemปัญหาA component with a missing state gets improvised in codeคอมโพเนนต์ที่ขาดสถานะ จะถูกด้นเอาเองในโค้ดWhat I didสิ่งที่ทำButton: 8 types × 3 icon layouts × 4 sizes × 5 states; Input: 7 states × 3 sizes, 7 hintsปุ่ม: 8 ประเภท × 3 แบบไอคอน × 4 ขนาด × 5 สถานะ · ช่องกรอก: 7 สถานะ × 3 ขนาด และ hint 7 แบบResultผลลัพธ์480 button variants and 21 inputs, each bound to the colours aboveปุ่ม 480 แบบ และช่องกรอก 21 แบบ ทุกแบบผูกกับสีด้านบน
Part 1ตอนที่ 1
Four versions, no systemสี่เวอร์ชัน ไม่มีระบบ
Contextบริบท
Thaimart is 7 Solutions' own marketplace for Thai brands, OTOP goods, food, herbs and fashion, on the web and in an app, with checked sellers and a ranking that rewards quality and reviews over ad spend. Its first four versions had no system to speak of: parts were used wrongly and mixed together, and each designer made their own. For version 5 I was given the job of building one design system for the whole project, and I built it alone. It carried version 5 until the product was later redesigned.ไทยมาร์ทคือมาร์เก็ตเพลสของ 7 Solutions เอง สำหรับแบรนด์ไทย สินค้า OTOP อาหาร สมุนไพร และแฟชั่น มีทั้งเว็บและแอป ร้านค้าผ่านการยืนยันตัวตน และการจัดอันดับให้น้ำหนักกับคุณภาพและรีวิวมากกว่าเงินโฆษณา สี่เวอร์ชันแรกไม่มีระบบที่เป็นระเบียบ ใช้ผิด ใช้ปนกันไปหมด ต่างคนต่างทำของตัวเอง ในเวอร์ชัน 5 ผมได้รับมอบหมายให้สร้างดีไซน์ซิสเต็มกลางของทั้งโปรเจกต์ และทำคนเดียว ระบบนี้ใช้กับเวอร์ชัน 5 จนภายหลังโปรดักต์ถูกรีดีไซน์ใหม่
- 4
versions before it, without a systemเวอร์ชันก่อนหน้า ที่ไม่มีระบบ
- 1
designer on the system: meคนทำระบบ คือผม
- 15
colour scales in one sourceชุดสีในต้นทางเดียว
- 4
Part 2ตอนที่ 2
The logo, as a componentโลโก้ ที่เป็นคอมโพเนนต์
Contextบริบท
The logo is the system's first page: one component with three layouts (the name to the right, the name below, the badge alone), four colours (default, black, white and mono) for light, red and dark backgrounds, and ten sizes from 48 down to 12.โลโก้คือหน้าแรกของระบบ เป็นคอมโพเนนต์ตัวเดียวที่มี 3 รูปแบบ (ชื่ออยู่ขวา ชื่ออยู่ล่าง และสัญลักษณ์อย่างเดียว) 4 สี (default, black, white และ mono) สำหรับพื้นสว่าง พื้นแดง และพื้นมืด และ 10 ขนาด ตั้งแต่ 48 ลงไปถึง 12
The system, liveระบบตัวจริง
Layoutรูปแบบ
text-right
text-bottom
logo-only
Colourสี
default
black
white
mono
Size, 48 to 12ขนาด 48 ถึง 12
48
44
40
36
32
28
24
20
16
12
Part 3ตอนที่ 3
Colour that means somethingสีที่มีความหมาย
Contextบริบท
Two brand colours (Thaimart red and navy), then twelve hues and a neutral, each as a scale from 010 to 975, each with six see-through steps for hovers and overlays. On top of them sit semantic colours named for what they do: surface, content, border, and for every state a control can be in.สองสีแบรนด์ คือแดง Thaimart และน้ำเงิน ตามด้วยอีก 12 เฉดและสีกลาง แต่ละชุดไล่จาก 010 ถึง 975 และมีแบบโปร่งแสงอีก 6 ขั้นสำหรับ hover และ overlay ชั้นบนเป็นสีตามความหมาย ตั้งชื่อตามหน้าที่ ได้แก่ พื้นผิว เนื้อหา เส้นขอบ และครบทุกสถานะของคอนโทรล
The system, liveระบบตัวจริง
palette/primary/500#E32321Tap a colour for its valueแตะสีเพื่อดูค่า
primarysecondaryredorangeyellowlimegreentealskyblueindigovioletpurplepinknevada
Part 4ตอนที่ 4
Type that holds Thaiตัวอักษรที่รองรับภาษาไทย
Contextบริบท
Display, heading, body and caption, each with its size and line height: 58 on 96 down to 12 on 20. The lines run about 1.6 to 1.8 times the size, so Thai above- and below-line marks never touch the next line.display, heading, body และ caption แต่ละขนาดมีระยะบรรทัดของตัวเอง ตั้งแต่ 58/96 ถึง 12/20 ระยะบรรทัดราว 1.6–1.8 เท่าของขนาดตัวอักษร สระบนล่างของภาษาไทยจึงไม่ชนบรรทัดถัดไป
The system, liveระบบตัวจริง
- Every screen, one systemทุกหน้าจอ ระบบเดียว
- Every screen, one systemทุกหน้าจอ ระบบเดียว
- Every screen, one systemทุกหน้าจอ ระบบเดียว
- Every screen, one systemทุกหน้าจอ ระบบเดียว
- Every screen, one systemทุกหน้าจอ ระบบเดียว
- Every screen, one systemทุกหน้าจอ ระบบเดียว
- Every screen, one systemทุกหน้าจอ ระบบเดียว
- Every screen, one systemทุกหน้าจอ ระบบเดียว
- Every screen, one systemทุกหน้าจอ ระบบเดียว
- Every screen, one systemทุกหน้าจอ ระบบเดียว
- Every screen, one systemทุกหน้าจอ ระบบเดียว
Part 5ตอนที่ 5
Space, corners and depthระยะห่าง มุมโค้ง และความลึก
Contextบริบท
Spacing from 0 to 80 in small steps for components and large ones for layouts; radius from none to fully rounded, with small for forms and buttons, medium for menus, large for popups; four elevations, each a hairline edge and a soft drop; and a grid of 2 columns on mobile, 12 on desktop.ระยะห่างตั้งแต่ 0 ถึง 80 ขั้นเล็กสำหรับคอมโพเนนต์ ขั้นใหญ่สำหรับเลย์เอาต์ มุมโค้งตั้งแต่ไม่โค้งจนโค้งเต็ม เล็กสำหรับฟอร์มและปุ่ม กลางสำหรับเมนู ใหญ่สำหรับป๊อปอัป เงา 4 ระดับ แต่ละระดับมีเส้นขอบบางกับเงานุ่ม และกริด 2 คอลัมน์บนมือถือ 12 คอลัมน์บนเดสก์ท็อป
The system, liveระบบตัวจริง
Spacing
- 0
- 2
- 4
- 6
- 8
- 10
- 12
- 16
- 20
- 24
- 28
- 32
- 36
- 40
- 44
- 48
- 56
- 64
- 80
Radius
- none0px
- 2-extra-small1px
- extra-small2px
- small4px
- small-nudge6px
- medium8px
- medium-nudge10px
- large12px
- large-nudge16px
- extra-large20px
- extra-large-nudge24px
- rounded9999px
Shadow
- shadow-xs
- shadow-sm
- shadow-md
- shadow-lg
Grid
- Breakpointขนาดจอ
- mobile
- Viewportความกว้าง
- 375–479
- Columnsคอลัมน์
- 2
- Gutterช่องไฟ
- 12
- Marginขอบ
- 16
- Breakpointขนาดจอ
- desktop
- Viewportความกว้าง
- 864+
- Columnsคอลัมน์
- 12
- Gutterช่องไฟ
- 16
- Marginขอบ
- 32
Part 6ตอนที่ 6
Components with every stateคอมโพเนนต์ ครบทุกสถานะ
Contextบริบท
Every Button and Input state is drawn and bound to a semantic colour, so hover, focus, pressed and disabled are designed, not guessed: the focus ring, the error border, the disabled fill. Play with them below: they're drawn from the same values as the file.ทุกสถานะของปุ่มและช่องกรอกถูกวาดไว้และผูกกับสีตามความหมาย ทั้ง hover, focus, กด และปิดใช้งาน จึงเป็นสิ่งที่ออกแบบแล้ว ไม่ใช่เดา ทั้งวงโฟกัส เส้นขอบตอนผิดพลาด และพื้นตอนปิดใช้งาน ลองเล่นด้านล่างได้ วาดจากค่าเดียวกับในไฟล์
The system, liveระบบตัวจริง
primary · lg · Defaultปกติ
TypeประเภทSizeขนาดStateสถานะIconไอคอนFilledกรอกแล้ว
Stateสถานะ