hệ thống thiết kế 1thay

trang này đang được xây dựng — nội dung chưa hoàn thiện

1thay là một hệ thống thiết kế code-first dành cho bảng điều khiển SaaS và giao diện giàu dữ liệu. Nó phục vụ hai bề mặt công khai và một công cụ riêng tư:

1thay.com

Trang tài liệu Astro — foundations, patterns, guidelines. Được xây từ src/pages/.

design.1thay.com

Xưởng component Storybook — bản xem trước trực tiếp, tài liệu MDX và kiểm tra tương tác.

Figma

Tài liệu tham khảo trực quan — phản ánh token code để so sánh thiết kế. Không phải nguồn chân lý.

kiến trúc

Hệ thống tuân theo quy trình tuyến tính: storybook → tokens → astro → figma.

1

storybook

Mọi component được xây dựng và kiểm tra độc lập trong Storybook trước khi được sử dụng ở bất kỳ đâu khác. Story đóng vai trò vừa là tài liệu vừa là môi trường phát triển.

s@1thay/core/components/Name/
├── name.css
├── Name.tsx
├── Name.stories.tsx
├── name.docs.mdx
└── Name.test.tsx
2

tokens.css

Tất cả design token là thuộc tính tùy chỉnh CSS trong src/tokens/tokens.css. Đây là nguồn chân lý duy nhất cho màu sắc, khoảng cách, kiểu chữ, đổ bóng, bo góc và z-index. Cả Astro và Storybook đều import file này.

3

astro

Trang tài liệu được xây dựng với Astro 5. Trang nằm trong src/pages/ và sử dụng hai bố cục: BaseLayout (gốc với thanh điều hướng) và DocsLayout (với thanh bên điều hướng).

4

figma

Figma phản ánh token code để so sánh trực quan. Hướng đồng bộ là code → figma, không bao giờ ngược lại. Để biết về tương tác MCP, xem tích hợp figma.

phân loại component

component được tổ chức thành 4 nhóm kỹ thuật trong storybook:

NhómBản chấtComponent
COREfoundational primitivesLogo, LogoSocial, BrandSwitch, Icon, IconFill, Divider
DASHBOARDapp shell + dataTable, StatCard, Progress, Badge, Card, Avatar, Skeleton, Alert, EmptyState, Sidebar, TopNav, Tabs, Breadcrumbs, Modal, Toast, WipBanner
LANDINGform controlsButton, Input, Select, Checkbox, Switch, Radio, Textarea
PATTERNSexamples (khong co API)Examples, Floorplans, Installation

hệ thống thương hiệu

4 chế độ thương hiệu — mỗi thương hiệu có bảng màu 10 sắc độ và font hiển thị riêng. Chuyển đổi qua thuộc tính data-brand hoặc component BrandSwitch.

Thương hiệuCơ bảnFont hiển thịTính cách
reputa-blue#064BAEHanken Groteskchuyên nghiệp, tài chính
reputa-premier#A10B2EHanken Groteskxa xỉ, thương mại
tramnghe#044f44Merriweathertự nhiên, chăm sóc sức khỏe
1thay#FBC000Space Grotesknăng động, sáng tạo
<!-- mặc định (reputa-blue) -->
<Button>save</Button>

<!-- chuyển thương hiệu -->
<div data-brand="reputa-premier">
  <Button>delete</Button>
</div>

quy ước đặt tên

cấu trúc dự án

src/
├── tokens/           # tokens.css + tokens.js (nguồn chân lý duy nhất)
├── components/       # react components — storybook quan ly inventory
├── layouts/          # BaseLayout.astro, DocsLayout.astro
├── pages/            # trang astro (foundations, patterns, guidelines)
├── overview/         # story onboarding stories
├── floorplans/       # mẫu trang storybook
└── styles/           # global.css

lệnh chính

npm run storybook       # storybook dev (port 6006)
npm run dev             # astro dev (port 4321)
npm run build-storybook # storybook production build
npm run build           # astro production build
npm test                # vitest unit tests
npm run lint            # astro type check
npm run check-tokens    # xác minh snapshot token
npm run chromatic       # regression trực quan (chỉ PR)