Skip to content

feat: Semantic Color Token 추가#19

Merged
RookieAND merged 2 commits intomainfrom
feature/semantic-color-token
Jan 21, 2026
Merged

feat: Semantic Color Token 추가#19
RookieAND merged 2 commits intomainfrom
feature/semantic-color-token

Conversation

@youngminss
Copy link
Member

@youngminss youngminss commented Jan 20, 2026

🎯 Semantic Color Token 추가

Figma 디자인 시스템에서 정의된 Semantic Color Token을 프로젝트에 추가하고, CSS 변수를 TypeScript에서 타입 안전하게 사용할 수 있도록 Color Token Generator 스크립트를 구현했습니다.

📑 작업 상세 내역

1. Semantic Color Token 정의 (src/styles/color.css)

기존 Palette 토큰을 참조하는 Semantic 토큰을 추가했습니다.

카테고리 토큰 수 설명
Background 3개 white, gray, dim
Surface 6개 white, lightgray, gray, primary, disabled, secondary
Text 7개 primary, secondary, disabled, inverse, inverse-secondary, placeholder, interactive
Border 5개 default, strong, primary, primary-opacity, secondary
Icon 3개 default, disabled, inverse
Button 9개 primary/hover/disabled, secondary/hover/disabled, tertiary/hover/disabled

2. Color Token Generator 스크립트 (scripts/colors/)

CSS 변수를 TypeScript 상수로 자동 변환하는 스크립트를 추가했습니다.

pnpm generate:colors
  • 입력: src/styles/color.css (CSS 변수 정의)
  • 출력: src/constants/color.ts (TypeScript 상수 및 타입)

주요 기능

  • CSS 변수 파싱 및 중첩 객체 구조로 변환
  • Semantic 토큰의 Primitive 참조를 실제 hex 값으로 해석
  • TypeScript 타입 자동 생성 (as const)

🙏 리뷰 요청 사항

  • Semantic 토큰 네이밍 컨벤션 확인 부탁드립니다.
  • scripts/colors/generate.js 스크립트 로직 검토 부탁드립니다.

📃 참고 자료

  • ./scripts/colors/README.md - Color Token Generator 사용 가이드

🖼️ 작업 결과물

파일 구조

scripts/colors/
├── generate.js # 생성 스크립트
└── README.md # 사용 가이드

src/styles/
└── color.css # CSS 변수 정의 (Palette + Semantic)

src/constants/
└── color.ts # 자동 생성된 TypeScript 상수

- Figma 디자인 시스템 기반 semantic color token 정의
- Background, Surface, Text, Border, Icon, Button 카테고리 추가
- Primitive 컬러를 참조하여 semantic 토큰 구성
- page.tsx에서 primitive 컬러를 semantic 컬러로 마이그레이션

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@github-actions github-actions bot requested a review from RookieAND January 20, 2026 16:57
@github-actions github-actions bot added ☑️ Need Review 작업이 완료되어 리뷰를 기다리고 있는 PR 입니다 ✨ Feature 기능 개발 labels Jan 20, 2026
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @youngminss, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

이 PR은 UI의 색상 시스템을 개선하기 위해 의미론적 색상 토큰을 도입합니다. 이는 디자인 시스템의 일관성과 유지보수성을 향상시키는 것을 목표로 합니다. 기존의 직접적인 색상 팔레트 사용을 추상화된 의미론적 토큰으로 전환하여, 향후 색상 변경이나 테마 적용이 용이해지도록 기반을 마련합니다.

Highlights

  • 의미론적 색상 토큰 추가: 배경, 표면, 텍스트, 테두리, 아이콘, 버튼 등 UI 요소에 대한 새로운 의미론적 색상 토큰이 src/styles/color.css 파일에 정의되었습니다.
  • 색상 적용 업데이트: app/page.tsx 파일에서 기존의 팔레트 기반 색상 클래스가 새로 정의된 의미론적 색상 토큰으로 대체되었습니다.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

이 PR은 시맨틱 컬러 토큰을 도입하여 디자인 시스템의 일관성과 유지보수성을 향상시키는 좋은 변경입니다. color.css에 새로운 시맨틱 변수들이 추가되었고, app/page.tsx에서 이를 사용하는 예시를 보여주고 있습니다. 리뷰 결과, 몇 가지 개선점을 발견했습니다. CSS 변수 참조 시 불필요한 접두사가 사용되어 색상이 올바르게 적용되지 않을 수 있는 심각한 문제가 있습니다. 또한, 비활성화된 버튼의 상태에 대한 일관성을 검토해볼 필요가 있습니다. 자세한 내용은 각 파일의 주석을 참고해주세요.

Comment on lines +75 to +118
/* Background */
--color-bg-white: var(--ygi-color-palette-common-white);
--color-bg-gray: var(--ygi-color-palette-gray-100);
--color-bg-dim: var(--ygi-color-palette-opacity-gray-16);

/* Surface */
--color-surface-white: var(--ygi-color-palette-common-white);
--color-surface-lightgray: var(--ygi-color-palette-gray-50);
--color-surface-gray: var(--ygi-color-palette-gray-100);
--color-surface-primary: var(--ygi-color-palette-primary-50);
--color-surface-disabled: var(--ygi-color-palette-gray-100);
--color-surface-secondary: var(--ygi-color-palette-secondary-50);

/* Text */
--color-text-primary: var(--ygi-color-palette-gray-900);
--color-text-secondary: var(--ygi-color-palette-gray-500);
--color-text-disabled: var(--ygi-color-palette-gray-400);
--color-text-inverse: var(--ygi-color-palette-common-white);
--color-text-inverse-secondary: var(--ygi-color-palette-gray-50);
--color-text-placeholder: var(--ygi-color-palette-gray-400);
--color-text-interactive: var(--ygi-color-palette-primary-500);

/* Border */
--color-border-default: var(--ygi-color-palette-gray-200);
--color-border-strong: var(--ygi-color-palette-gray-800);
--color-border-primary: var(--ygi-color-palette-primary-500);
--color-border-primary-opacity: var(--ygi-color-palette-opacity-primary-80);
--color-border-secondary: var(--ygi-color-palette-secondary-500);

/* Icon */
--color-icon-default: var(--ygi-color-palette-gray-500);
--color-icon-disabled: var(--ygi-color-palette-gray-400);
--color-icon-inverse: var(--ygi-color-palette-common-white);

/* Button */
--color-button-primary: var(--ygi-color-palette-gray-800);
--color-button-primary-hover: var(--ygi-color-palette-gray-900);
--color-button-primary-disabled: var(--ygi-color-palette-gray-400);
--color-button-secondary: var(--ygi-color-palette-primary-500);
--color-button-secondary-hover: var(--ygi-color-palette-primary-600);
--color-button-secondary-disabled: var(--ygi-color-palette-primary-200);
--color-button-tertiary: var(--ygi-color-palette-gray-100);
--color-button-tertiary-hover: var(--ygi-color-palette-gray-200);
--color-button-tertiary-disabled: var(--ygi-color-palette-gray-100);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

새로 추가된 시맨틱 컬러 토큰에서 palette 컬러 변수를 참조할 때 var(--ygi-color-palette-...)와 같이 --ygi- 접두사를 사용하고 있습니다. 하지만 color.css 파일 내에서 변수들은 --color-palette-...와 같이 ygi- 접두사 없이 선언되어 있습니다. Tailwind CSS의 prefix 설정은 유틸리티 클래스에 적용되며, CSS 변수 선언 자체를 변경하지 않습니다. 따라서 var() 함수 내에서 --ygi- 접두사를 제거해야 색상이 올바르게 적용됩니다. 이 수정이 이루어지지 않으면 모든 시맨틱 컬러가 적용되지 않는 문제가 발생할 수 있습니다.

  /* Background */
  --color-bg-white: var(--color-palette-common-white);
  --color-bg-gray: var(--color-palette-gray-100);
  --color-bg-dim: var(--color-palette-opacity-gray-16);

  /* Surface */
  --color-surface-white: var(--color-palette-common-white);
  --color-surface-lightgray: var(--color-palette-gray-50);
  --color-surface-gray: var(--color-palette-gray-100);
  --color-surface-primary: var(--color-palette-primary-50);
  --color-surface-disabled: var(--color-palette-gray-100);
  --color-surface-secondary: var(--color-palette-secondary-50);

  /* Text */
  --color-text-primary: var(--color-palette-gray-900);
  --color-text-secondary: var(--color-palette-gray-500);
  --color-text-disabled: var(--color-palette-gray-400);
  --color-text-inverse: var(--color-palette-common-white);
  --color-text-inverse-secondary: var(--color-palette-gray-50);
  --color-text-placeholder: var(--color-palette-gray-400);
  --color-text-interactive: var(--color-palette-primary-500);

  /* Border */
  --color-border-default: var(--color-palette-gray-200);
  --color-border-strong: var(--color-palette-gray-800);
  --color-border-primary: var(--color-palette-primary-500);
  --color-border-primary-opacity: var(--color-palette-opacity-primary-80);
  --color-border-secondary: var(--color-palette-secondary-500);

  /* Icon */
  --color-icon-default: var(--color-palette-gray-500);
  --color-icon-disabled: var(--color-palette-gray-400);
  --color-icon-inverse: var(--color-palette-common-white);

  /* Button */
  --color-button-primary: var(--color-palette-gray-800);
  --color-button-primary-hover: var(--color-palette-gray-900);
  --color-button-primary-disabled: var(--color-palette-gray-400);
  --color-button-secondary: var(--color-palette-primary-500);
  --color-button-secondary-hover: var(--color-palette-primary-600);
  --color-button-secondary-disabled: var(--color-palette-primary-200);
  --color-button-tertiary: var(--color-palette-gray-100);
  --color-button-tertiary-hover: var(--color-palette-gray-200);
  --color-button-tertiary-disabled: var(--color-palette-gray-100);

--color-button-secondary-disabled: var(--ygi-color-palette-primary-200);
--color-button-tertiary: var(--ygi-color-palette-gray-100);
--color-button-tertiary-hover: var(--ygi-color-palette-gray-200);
--color-button-tertiary-disabled: var(--ygi-color-palette-gray-100);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

--color-button-tertiary-disabled--color-button-tertiary와 동일한 값을 참조하고 있습니다. 이 때문에 비활성화된 tertiary 버튼이 활성화된 버튼과 시각적으로 동일하게 보일 수 있습니다. Primary 및 secondary 버튼의 비활성화 상태는 배경색이 뚜렷하게 변경되는 반면, tertiary 버튼은 그렇지 않아 일관성이 부족해 보입니다. 비활성화 상태를 명확히 구분하기 위해 다른 색상 토큰을 사용하는 것을 고려해 보세요. 예를 들어, --color-palette-gray-50을 사용하면 다른 버튼들의 비활성화 상태와 일관성을 맞출 수 있습니다.

Suggested change
--color-button-tertiary-disabled: var(--ygi-color-palette-gray-100);
--color-button-tertiary-disabled: var(--color-palette-gray-50);

- scripts/colors/generate.js: CSS 변수를 TypeScript로 변환하는 스크립트
- scripts/colors/README.md: 사용 가이드 문서
- src/constants/color.ts: 자동 생성된 색상 토큰 (hex 값)
- package.json에 generate:colors 명령어 추가
- page.tsx에 colors 변수 사용 예시 추가

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@github-actions github-actions bot added ✨ Feature 기능 개발 and removed ☑️ Need Review 작업이 완료되어 리뷰를 기다리고 있는 PR 입니다 ✨ Feature 기능 개발 labels Jan 20, 2026
@RookieAND RookieAND added 📤 In Progress 현재 작업 중인 PR 입니다. ✅ In Review 현재 리뷰를 진행하여 수정 사항을 반영 중인 PR 입니다. and removed 📤 In Progress 현재 작업 중인 PR 입니다. labels Jan 21, 2026
Copy link
Collaborator

@RookieAND RookieAND left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

스크립트까지! 좋은 구조인 거 같아. 시안 상의 차이도 없어 보여서 이대로 가면 될 거 같어!

@RookieAND RookieAND merged commit fcaedaf into main Jan 21, 2026
6 of 7 checks passed
@github-actions github-actions bot removed the ✅ In Review 현재 리뷰를 진행하여 수정 사항을 반영 중인 PR 입니다. label Jan 21, 2026
RookieAND pushed a commit that referenced this pull request Feb 16, 2026
* feat: Semantic Color Token 추가

- Figma 디자인 시스템 기반 semantic color token 정의
- Background, Surface, Text, Border, Icon, Button 카테고리 추가
- Primitive 컬러를 참조하여 semantic 토큰 구성
- page.tsx에서 primitive 컬러를 semantic 컬러로 마이그레이션

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat: Color Token Generator 스크립트 추가

- scripts/colors/generate.js: CSS 변수를 TypeScript로 변환하는 스크립트
- scripts/colors/README.md: 사용 가이드 문서
- src/constants/color.ts: 자동 생성된 색상 토큰 (hex 값)
- package.json에 generate:colors 명령어 추가
- page.tsx에 colors 변수 사용 예시 추가

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
github-actions bot pushed a commit that referenced this pull request Feb 16, 2026
## 1.0.0-beta.1 (2026-02-16)

### Features

* [#70](#70) ([#72](#72)) ([b676e0e](b676e0e))
* [QA] 모임 생성 완료, 결과페이지 페이지 UI 개선 ([#66](#66)) ([f10225d](f10225d))
* [QA] 서비스 전체 배경색 및 Layout Root 그림자 효과 적용 ([#59](#59)) ([384b56f](384b56f))
* api client 모듈 생성 ([#37](#37)) ([a37b0a9](a37b0a9)), closes [#38](#38) [#39](#39) [#40](#40) [#41](#41)
* Button 컴포넌트 추가 ([#11](#11)) ([83b7607](83b7607))
* Chip Component 추가 ([#9](#9)) ([e9d8b8f](e9d8b8f))
* Color theme 초기화 ([#2](#2)) ([97f1dcc](97f1dcc))
* DotsLoader 컴포넌트 추가  ([#48](#48)) ([cfe4582](cfe4582)), closes [#49](#49)
* GA4 이벤트 트래킹 통합 ([#70](#70)) ([0c1b9fa](0c1b9fa))
* GTM(Google Tag Manager) 통합을 위한 Analytics 컴포넌트 추가 ([#57](#57)) ([87a6ded](87a6ded))
* IconBase 컴포넌트 및 아이콘 컴포넌트들 구축 ([#13](#13)) ([8557b75](8557b75)), closes [#FFCD00](https://github.com/Nexters/yogieat/issues/FFCD00) [#FFAD00](https://github.com/Nexters/yogieat/issues/FFAD00) [#15](#15) [#ff5a3c](https://github.com/Nexters/yogieat/issues/ff5a3c)
* InputField 컴포넌트 추가 ([#16](#16)) ([99b8aa2](99b8aa2))
* Landing / Opinion Form 페이지 분리 ([#61](#61)) ([0f11e71](0f11e71))
* Layout 컴포넌트 추가 ([#10](#10)) ([9efce6f](9efce6f))
* Semantic Color Token 추가 ([#19](#19)) ([fcaedaf](fcaedaf))
* Spacing utility 클래스 초기화 ([#8](#8)) ([2e38d7a](2e38d7a))
* Tag 컴포넌트 추가 ([#20](#20)) ([f69dd05](f69dd05))
* Toast 컴포넌트 추가 ([#21](#21)) ([76e84b0](76e84b0))
* 모임 생성 퍼널 Step 1 (인원 선택) 구현 ([#23](#23)) ([7fc01a1](7fc01a1)), closes [#24](#24) [#1f2933](https://github.com/Nexters/yogieat/issues/1f2933) [#ff5a3c](https://github.com/Nexters/yogieat/issues/ff5a3c) [#25](#25) [#26](#26) [#27](#27) [#28](#28) [#29](#29) [#30](#30) [#31](#31) [#32](#32) [#34](#34)
* 프로젝트 기초 세팅 진행 ([aa0ec20](aa0ec20))
* 프로젝트 폴더 구조 반영 ([e54962d](e54962d))

### Bug Fixes

* 1순위를 1개라도 선택했다면 바로 CTA 가 활성화 되도록 수정 ([#60](#60)) ([e5758b4](e5758b4))
* 1차 MVP 배포 이전 최종 QA 항목 반영 ([#58](#58)) ([6574231](6574231))
* Button/Chip type 속성 추가 및 의견 수렴 UX 개선 ([#50](#50)) ([7e86e4a](7e86e4a)), closes [#51](#51) [#52](#52) [#53](#53) [#54](#54) [#55](#55) [#56](#56)
* cat 에서 echo 로 env.production 파일을 생성하도록 수정 ([f15307d](f15307d))
* CI/CD health check 타이밍 개선 및 수동 배포 기능 추가 ([54fd2b8](54fd2b8))
* Docker build-args로 환경 변수 전달 방식 변경 ([#77](#77)) ([e5fa0b9](e5fa0b9))
* Docker 이미지 강제 pull 및 컨테이너 재생성 ([#79](#79)) ([c253ec1](c253ec1))
* Health check 전략 개선 및 curl 기반으로 변경 ([765d3da](765d3da))
* nginx http2 deprecated 경고 해결 ([2fd9c75](2fd9c75))
* PendingView 내에서 ShareButton 을 렌더링 하지 않도록 수정 ([7bc3e12](7bc3e12))
* 결과 페이지 맛집 이미지 기본 placeholder, 공유하기 toast 미노출 ([#68](#68)) ([3c80844](3c80844))
* 동시 배포 방지를 위한 concurrency 설정 추가 ([e9bfd52](e9bfd52))
* 모임 생성 퍼널 필드 상태 초기화 버그 수정 ([#64](#64)) ([3934066](3934066)), closes [#65](#65)
* 모임 생성 폼 필드명 변경 (meetingDate → scheduledDate, location → region) ([#35](#35)) ([e90beed](e90beed))
* 배포 워크플로우에 GA4 환경 변수 추가 ([#73](#73)) ([835ae1f](835ae1f))
* 의견 수렴 페이지 내 UI 수정 및 인터렉션 개선 ([#36](#36)) ([a74f7da](a74f7da))
* 의견 수합 Form Capacity 폴링 제거 및 ErrorCode 타입 시스템 추가 ([#67](#67)) ([d55dba1](d55dba1))
* 인원 수 선택 Grid 및 의견 수렴 QA 수정 사항 반영 ([f01626e](f01626e))
* 테스트 용으로 추가했던 페이지 제거 및 icons 폴더 추가 ([4116025](4116025))

### Code Refactoring

* Button 컴포넌트 스펙을 Figma 명세에 맞춰 수정 ([#14](#14)) ([2e27f17](2e27f17))

### Build System

* Docker 빌드 시 NEXT_PUBLIC 환경변수 주입 프로세스 추가 ([#47](#47)) ([88ba163](88ba163))

### Documentation

* 프로젝트 개발 가이드 문서 추가 ([#84](#84)) ([4313145](4313145))
github-actions bot pushed a commit that referenced this pull request Feb 16, 2026
## 1.0.0 (2026-02-16)

### Features

* [#70](#70) ([#72](#72)) ([b676e0e](b676e0e))
* [QA] 모임 생성 완료, 결과페이지 페이지 UI 개선 ([#66](#66)) ([f10225d](f10225d))
* [QA] 서비스 전체 배경색 및 Layout Root 그림자 효과 적용 ([#59](#59)) ([384b56f](384b56f))
* analytics 개선 및 네이버 서치 어드바이저 등록 ([#88](#88)) ([4372aa5](4372aa5))
* api client 모듈 생성 ([#37](#37)) ([a37b0a9](a37b0a9)), closes [#38](#38) [#39](#39) [#40](#40) [#41](#41)
* Button 컴포넌트 추가 ([#11](#11)) ([83b7607](83b7607))
* Chip Component 추가 ([#9](#9)) ([e9d8b8f](e9d8b8f))
* Color theme 초기화 ([#2](#2)) ([97f1dcc](97f1dcc))
* DotsLoader 컴포넌트 추가  ([#48](#48)) ([cfe4582](cfe4582)), closes [#49](#49)
* GA4 이벤트 트래킹 통합 ([#70](#70)) ([0c1b9fa](0c1b9fa))
* GTM(Google Tag Manager) 통합을 위한 Analytics 컴포넌트 추가 ([#57](#57)) ([87a6ded](87a6ded))
* IconBase 컴포넌트 및 아이콘 컴포넌트들 구축 ([#13](#13)) ([8557b75](8557b75)), closes [#FFCD00](https://github.com/Nexters/yogieat/issues/FFCD00) [#FFAD00](https://github.com/Nexters/yogieat/issues/FFAD00) [#15](#15) [#ff5a3c](https://github.com/Nexters/yogieat/issues/ff5a3c)
* InputField 컴포넌트 추가 ([#16](#16)) ([99b8aa2](99b8aa2))
* Landing / Opinion Form 페이지 분리 ([#61](#61)) ([0f11e71](0f11e71))
* Layout 컴포넌트 추가 ([#10](#10)) ([9efce6f](9efce6f))
* Semantic Color Token 추가 ([#19](#19)) ([fcaedaf](fcaedaf))
* Spacing utility 클래스 초기화 ([#8](#8)) ([2e38d7a](2e38d7a))
* Tag 컴포넌트 추가 ([#20](#20)) ([f69dd05](f69dd05))
* Toast 컴포넌트 추가 ([#21](#21)) ([76e84b0](76e84b0))
* 모임 생성 완료 페이지 UI 리뉴얼 ([#89](#89)) ([17a3fc1](17a3fc1))
* 모임 생성 퍼널 Step 1 (인원 선택) 구현 ([#23](#23)) ([7fc01a1](7fc01a1)), closes [#24](#24) [#1f2933](https://github.com/Nexters/yogieat/issues/1f2933) [#ff5a3c](https://github.com/Nexters/yogieat/issues/ff5a3c) [#25](#25) [#26](#26) [#27](#27) [#28](#28) [#29](#29) [#30](#30) [#31](#31) [#32](#32) [#34](#34)
* 프로젝트 기초 세팅 진행 ([aa0ec20](aa0ec20))
* 프로젝트 폴더 구조 반영 ([e54962d](e54962d))

### Bug Fixes

* 1순위를 1개라도 선택했다면 바로 CTA 가 활성화 되도록 수정 ([#60](#60)) ([e5758b4](e5758b4))
* 1차 MVP 배포 이전 최종 QA 항목 반영 ([#58](#58)) ([6574231](6574231))
* Button/Chip type 속성 추가 및 의견 수렴 UX 개선 ([#50](#50)) ([7e86e4a](7e86e4a)), closes [#51](#51) [#52](#52) [#53](#53) [#54](#54) [#55](#55) [#56](#56)
* cat 에서 echo 로 env.production 파일을 생성하도록 수정 ([f15307d](f15307d))
* CI/CD health check 타이밍 개선 및 수동 배포 기능 추가 ([54fd2b8](54fd2b8))
* Docker build-args로 환경 변수 전달 방식 변경 ([#77](#77)) ([e5fa0b9](e5fa0b9))
* Docker 이미지 강제 pull 및 컨테이너 재생성 ([#79](#79)) ([c253ec1](c253ec1))
* Health check 전략 개선 및 curl 기반으로 변경 ([765d3da](765d3da))
* nginx http2 deprecated 경고 해결 ([2fd9c75](2fd9c75))
* PendingView 내에서 ShareButton 을 렌더링 하지 않도록 수정 ([7bc3e12](7bc3e12))
* 결과 페이지 맛집 이미지 기본 placeholder, 공유하기 toast 미노출 ([#68](#68)) ([3c80844](3c80844))
* 동시 배포 방지를 위한 concurrency 설정 추가 ([e9bfd52](e9bfd52))
* 모임 생성 퍼널 필드 상태 초기화 버그 수정 ([#64](#64)) ([3934066](3934066)), closes [#65](#65)
* 모임 생성 폼 필드명 변경 (meetingDate → scheduledDate, location → region) ([#35](#35)) ([e90beed](e90beed))
* 배포 워크플로우에 GA4 환경 변수 추가 ([#73](#73)) ([835ae1f](835ae1f))
* 의견 수렴 페이지 내 UI 수정 및 인터렉션 개선 ([#36](#36)) ([a74f7da](a74f7da))
* 의견 수합 Form Capacity 폴링 제거 및 ErrorCode 타입 시스템 추가 ([#67](#67)) ([d55dba1](d55dba1))
* 인원 수 선택 Grid 및 의견 수렴 QA 수정 사항 반영 ([f01626e](f01626e))
* 테스트 용으로 추가했던 페이지 제거 및 icons 폴더 추가 ([4116025](4116025))

### Code Refactoring

* Button 컴포넌트 스펙을 Figma 명세에 맞춰 수정 ([#14](#14)) ([2e27f17](2e27f17))

### Build System

* Docker 빌드 시 NEXT_PUBLIC 환경변수 주입 프로세스 추가 ([#47](#47)) ([88ba163](88ba163))

### Documentation

* 프로젝트 개발 가이드 문서 추가 ([#84](#84)) ([4313145](4313145))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ Feature 기능 개발

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants