feat(app): premium immersive entry ui 적용
This commit is contained in:
122
docs/foundation/08_premium_uiux_guideline.md
Normal file
122
docs/foundation/08_premium_uiux_guideline.md
Normal file
@@ -0,0 +1,122 @@
|
||||
# Premium Immersive UI/UX Guidelines (VibeRoom Core)
|
||||
|
||||
이 문서는 VibeRoom 프로젝트가 LifeAt, Portal, Focusmate 등 **세계 최고급의 프리미엄 UI/UX 경험**을 일관되게 유지하기 위해 작성된 절대적인 디자인 헌장입니다.
|
||||
어떤 에이전트, 어떤 개발자가 코드를 작성하든 화면을 추가하거나 수정할 때 이 가이드라인을 반드시 숙지하고 엄격하게 준수해야 합니다.
|
||||
|
||||
---
|
||||
|
||||
## 1. 핵심 철학 (Core Philosophy)
|
||||
|
||||
### 1-1. 무대 우선주의 (Stage-first & Immersive)
|
||||
- **절대 원칙:** 사용자가 선택한 **배경(Atmosphere/Scene) 자체가 곧 앱의 정체성이자 무대**입니다.
|
||||
- 배경을 가리거나 시야를 방해하는 거대한 대시보드 형태의 레이아웃(Split-screen, 거대한 Solid Card Grid)은 절대 금지합니다.
|
||||
- UI는 무대 위에 떠 있는 얇고 투명한 유리 조각(Glass)처럼 존재해야 하며, 화면의 여백(White Space)을 극대화하여 공간감을 제공해야 합니다.
|
||||
|
||||
### 1-2. 중앙 집중의 의식 (Minimal Central Ritual)
|
||||
- 사용자가 수행해야 할 가장 중요한 단 하나의 핵심 액션(예: "무엇에 집중할 것인가?")은 **항상 화면의 정중앙에 거대하고 우아하게 배치**합니다.
|
||||
- 텍스트 입력창은 투명하게(`bg-transparent`), 폰트는 크고 얇게(`text-4xl font-light tracking-tight`) 유지하여 단순한 '입력'이 아닌 '의식(Ritual)'처럼 느껴지게 합니다.
|
||||
|
||||
### 1-3. 압도적인 글래스모피즘 (Premium Glassmorphism)
|
||||
- 단순히 투명도를 낮추는 것이 아닙니다. 뒤의 빛과 배경이 은은하게 굴절되는 진짜 유리의 질감을 구현해야 합니다.
|
||||
- **필수 속성:** `backdrop-blur-xl` 또는 `backdrop-blur-2xl`을 반드시 사용합니다.
|
||||
- **테두리와 명암:** 투박한 solid border 대신, `border-white/5` ~ `border-white/10` 수준의 매우 얇고 투명한 테두리를 사용합니다. 깊이감을 위해 다중 그림자(`shadow-2xl` 등)와 미세한 그라데이션(`bg-[linear-gradient(...)]`)을 조합합니다.
|
||||
|
||||
---
|
||||
|
||||
## 2. 레이아웃 & 컴포넌트 배치 원칙 (Layout & Placement)
|
||||
|
||||
### 2-1. 절대 위치(Absolute) 사용의 엄격한 제한
|
||||
- UI 요소가 창 크기 조절(Resizing) 시 중앙의 핵심 컨텐츠(Main Ritual)를 가리거나 겹치는 현상(Overlap)은 치명적인 결함입니다.
|
||||
- **해결책:** 좌/우측에 둥둥 떠 있는(Floating) 위젯 형태를 구현할 때, 단순히 `absolute top-x left-y`로 띄워두지 마십시오. 창이 작아져도 겹치지 않게 하려면 중앙 컨테이너의 흐름(Inline Flex) 내부에 배치하거나, 화면 크기에 따른 철저한 미디어 쿼리 제어를 통해 **어떤 해상도에서도 메인 텍스트 영역을 침범하지 않도록 보장**해야 합니다.
|
||||
|
||||
### 2-2. 보조 위젯의 극단적 미니멀리즘 (Subtle Accessories)
|
||||
- 메인 액션이 아닌 모든 정보(예: Weekly Review, Error Message, 힌트 등)는 **크기를 최소화하고 시각적 대비를 낮춥니다.**
|
||||
- 정보 텍스트는 `text-[12px]` 또는 `text-[13px]`, 라벨이나 뱃지는 `text-[9px] ~ text-[10px]`에 두꺼운 자간(`tracking-[0.25em]`)과 대문자(`uppercase`) 조합을 사용하여 명품 브랜드의 타이포그래피처럼 디자인합니다.
|
||||
- 예: 투박한 'Weekly Review' 카드 ❌ -> 한 줄의 세련된 'Smart Hint Pill' 형태 ⭕
|
||||
|
||||
### 2-3. 가장자리 도킹 (Edge Docking)
|
||||
- 선택형 리스트(Atmosphere 선택 등)는 화면을 덮는 Grid 대신 **화면 최하단에 스와이프 가능한 가로 독(Carousel Dock)** 형태로 배치합니다.
|
||||
- 독 내부의 아이템이 확대(Scale)되거나 애니메이션 될 때, 스크롤 컨테이너의 영역이 좁아 카드가 잘려 보이는 현상(Clipping)이 발생하지 않도록 **컨테이너 자체에 충분한 상하 여백(`py-8` 등)**을 확보해야 합니다.
|
||||
|
||||
---
|
||||
|
||||
## 3. 애니메이션 및 상호작용 (Motion & Interaction)
|
||||
|
||||
### 3-1. 부드럽고 웅장한 진입 (Stately Entrance)
|
||||
- 뚝 떨어지거나 딱딱하게 나타나는 화면 전환은 금지합니다.
|
||||
- 프리미엄 서비스 특유의 '서서히 떠오르는' 모션을 위해 커스텀 Keyframe(`fade-in-up`, `fade-in`)과 섬세한 이징 커브(`cubic-bezier(0.16, 1, 0.3, 1)`)를 적용합니다.
|
||||
- `animation-delay`를 활용하여 헤더 -> 중앙 텍스트 -> 하단 독 순서로 물결치듯 순차적으로 나타나는 시퀀스를 구성합니다.
|
||||
|
||||
### 3-2. Hover 및 포커스 상태 (Fluid Feedback)
|
||||
- 카드 호버 시 단순히 색만 변하는 것이 아니라, 부드러운 스케일 업(`hover:scale-105 ~ 110`)과 함께 그림자가 깊어지고(`hover:shadow-2xl`) 내부 텍스트 및 오버레이의 명도가 미세하게 조절되어야 합니다.
|
||||
- 버튼의 경우 누를 때 미세하게 작아지는 햅틱 피드백(`active:scale-[0.98]`)을 적용하여 쫀득한 터치감을 줍니다.
|
||||
|
||||
---
|
||||
|
||||
## 4. 타이포그래피 및 카피 (Typography & Copy)
|
||||
|
||||
### 4-1. 소음 줄이기 (Reduce Visual Noise)
|
||||
- 중요하지 않은 부가 설명(Helper Text)은 `text-white/40` ~ `text-white/60` 정도로 투명도를 과감히 낮춰 시야에서 멀어지게 합니다.
|
||||
- 강렬한 Primary Color(파란색, 빨간색 등)는 에러나 꼭 필요한 CTA에만 극도로 제한적으로 사용하고, 기본적으로는 **무채색(흰색, 검은색)의 투명도 조절만으로 위계를 표현**합니다.
|
||||
|
||||
### 4-2. 프리미엄 카피라이팅 (Tone & Manner)
|
||||
- 기능적인 설명보다 감성적이고 몰입을 돕는 문구를 사용합니다.
|
||||
- "시간을 입력하세요" ❌ -> "What will you focus on?" / "의식을 시작합니다" ⭕
|
||||
- 업그레이드 등 상업적 CTA도 "결제하기"보다 작고 섬세한 캡슐 버튼(`Upgrade →`)으로 디자인하여 브랜드의 우아함을 지킵니다.
|
||||
|
||||
## 5. AI 에이전트를 위한 Tailwind CSS 프롬프팅 & 코드 패턴 (Crucial for AI)
|
||||
|
||||
AI 에이전트(Codex, Cursor, Cline 등)는 "프리미엄하게 만들어줘"라는 추상적인 지시를 이해하지 못하고 평범한 UI(`bg-gray-100 rounded-md` 등)를 생성하는 경향이 있습니다. AI에게 작업을 지시할 때는 아래의 **명확한 Tailwind 유틸리티 패턴(Snippet)** 을 그대로 복사해서 사용하라고 지시해야 합니다.
|
||||
|
||||
### 5-1. Floating Smart Pill (보조 정보 위젯)
|
||||
AI가 투박한 Card를 만들지 못하게 하고, 이 코드를 복사하라고 지시하세요.
|
||||
```tsx
|
||||
// DO: 아주 작고 은은하게 떠 있는 스마트 필
|
||||
<div className="inline-flex items-center gap-3 rounded-full border border-white/5 bg-white/5 py-2 pl-4 pr-3 backdrop-blur-md transition-all hover:bg-white/10 hover:border-white/10">
|
||||
<span className="flex h-1.5 w-1.5 rounded-full bg-white/40 group-hover:bg-white/60 transition-colors" />
|
||||
<span className="text-[13px] font-medium text-white/70 group-hover:text-white/90">
|
||||
내용 텍스트
|
||||
</span>
|
||||
</div>
|
||||
|
||||
// DON'T: AI가 자주 실수하는 투박한 솔리드 카드
|
||||
<div className="bg-white rounded-lg p-4 shadow-md">내용 텍스트</div>
|
||||
```
|
||||
|
||||
### 5-2. 메인 입력창 (Ritual Input)
|
||||
AI가 흔한 폼 인풋(`border rounded px-4`)을 만들지 못하게 하세요.
|
||||
```tsx
|
||||
// DO: 거대하고 얇고 투명한 의식적 텍스트
|
||||
<input
|
||||
className="w-full bg-transparent text-center text-4xl font-light tracking-tight text-white outline-none placeholder:text-white/20 md:text-5xl lg:text-[4.5rem] lg:leading-[1.1]"
|
||||
/>
|
||||
|
||||
// DON'T: 일반적인 대시보드 폼
|
||||
<input className="border border-gray-300 rounded px-4 py-2 w-full" />
|
||||
```
|
||||
|
||||
### 5-3. 프리미엄 버튼 (Primary Action)
|
||||
```tsx
|
||||
// DO: 빛나는 투명 테두리와 쫀득한 햅틱 모션을 가진 버튼
|
||||
<button className="group relative flex h-16 items-center justify-center overflow-hidden rounded-full border border-white/20 bg-white/10 px-12 text-lg font-medium tracking-wide text-white shadow-2xl backdrop-blur-md transition-all duration-300 hover:bg-white/20 hover:scale-[1.02] active:scale-[0.98]">
|
||||
시작하기
|
||||
</button>
|
||||
```
|
||||
|
||||
### 5-4. 그라데이션 오버레이 (배경 어둡게 하기)
|
||||
이미지 위에서 글씨가 잘 보이게 하려면 단순 `bg-black/50` 대신 깊이감 있는 그라데이션을 써야 합니다.
|
||||
```tsx
|
||||
// DO: 복합 그라데이션 (중앙은 비우고 테두리만 어둡게)
|
||||
<div className="absolute inset-0 bg-[radial-gradient(circle_at_center,transparent_0%,rgba(0,0,0,0.6)_100%)] mix-blend-multiply pointer-events-none" />
|
||||
<div className="absolute inset-0 bg-black/10 pointer-events-none" />
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. QA 체크리스트 (커밋 전 반드시 확인)
|
||||
|
||||
1. **Overlap Check:** 브라우저 창을 최소 크기(모바일/작은 데스크탑)로 줄였을 때 위젯이나 텍스트가 겹치거나 잘리는 곳이 단 한 곳이라도 있는가? (있다면 즉시 수정)
|
||||
2. **Clipping Check:** 리스트 내의 아이템에 마우스를 올렸을 때(hover:scale) 아이템의 상하좌우 테두리가 부모 컨테이너에 의해 잘려 나가는 현상이 없는가?
|
||||
3. **Hierarchy Check:** 화면 내에서 가장 눈에 띄는 것이 "현재 사용자가 해야 할 단 하나의 액션"인가? 부가 정보가 너무 커서 메인 액션을 압도하지 않는가?
|
||||
4. **Motion Check:** 화면 진입 시 모든 요소가 우아하고 부드럽게 등장하는가? 깜빡이거나 투박하게 나타나는 요소는 없는가?
|
||||
5. **Glass Check:** 모든 팝오버, 시트, 위젯이 뒷 배경을 우아하게 투영(backdrop-blur)하고 있으며, 테두리가 지나치게 두껍지 않은가?
|
||||
Reference in New Issue
Block a user