Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
2ca908b
style: 플랫폼별 비교 테이블 모바일 반응형 추가
Seojegyeong Aug 8, 2026
325cbae
fix: 랜딩페이지 날짜 균등분배로 변경하여 빈공간 제거
jjjsun Aug 8, 2026
20403a1
Merge pull request #418 from WhereYouAd/refactor/#417
Seojegyeong Aug 8, 2026
f6f128a
feat: 플랫폼 트래픽 차트 저장용 id·다운로드 items 추가
YermIm Aug 8, 2026
7923cec
feat: 플랫폼 트래픽 차트 저장용 id·다운로드 items 추가
YermIm Aug 8, 2026
4a55ce7
feat: 플랫폼 트래픽 차트 다운로드 메뉴 추가
YermIm Aug 8, 2026
c8a67d9
feat: 플랫폼 개별 트래픽 차트에 저장용 id 연결
YermIm Aug 8, 2026
bbc3f74
feat: 플랫폼 전체보기 트래픽 차트에 저장용 id 연결
YermIm Aug 8, 2026
564eb84
feat: 플랫폼 대시보드 트래픽 카드에 저장 메뉴 연결
YermIm Aug 8, 2026
0d102ba
style: 랜딩 타임라인 UI 바깥 border제거
jjjsun Aug 8, 2026
0c9bbeb
Merge pull request #421 from WhereYouAd/bugfix/#419
jjjsun Aug 8, 2026
742666b
feat: 플랫폼 대시보드 드롭다운을 연동된 플랫폼만 노출
YermIm Aug 8, 2026
f7ee2a0
fix: 워크스페이스 1개일 때 스위치 구분선 숨김
YermIm Aug 8, 2026
55a765f
fix: 플랫폼 전체보기 성과 부분 실패 시 성공분만 표시
YermIm Aug 9, 2026
926843a
refactor: 카카오 소셜 로그인 코드 제거
Seojegyeong Aug 9, 2026
592453d
refactor: 카카오 소셜 로그인 에셋 및 CSS 토큰 제거
Seojegyeong Aug 9, 2026
d311eec
feat: 구글 소셜 로그인 버튼 연동
Seojegyeong Aug 9, 2026
3ddce98
feat: 플랫폼 대시보드 선택을 URL provider와 동기화
YermIm Aug 9, 2026
545e248
Merge pull request #423 from WhereYouAd/refactor/#422
Seojegyeong Aug 9, 2026
7ae403a
Merge branch 'develop' into feature/#424
Seojegyeong Aug 9, 2026
d2eb514
fix: 연결 목록 성공 후에만 URL provider 검증
YermIm Aug 9, 2026
e9fc6eb
Merge pull request #426 from WhereYouAd/feature/#416
YermIm Aug 9, 2026
61fdf7e
Merge pull request #425 from WhereYouAd/feature/#424
Seojegyeong Aug 9, 2026
2d9ebbf
docs: npm → pnpm 패키지 매니저 통일
Seojegyeong Aug 9, 2026
0f2e549
docs: CI/CD 표에 Lighthouse CI · CloudFront Functions CSP 반영
Seojegyeong Aug 9, 2026
2499991
docs: 브랜치 네이밍 규칙을 실제 컨벤션에 맞게 수정
Seojegyeong Aug 9, 2026
fc0942b
docs: 커밋 메시지 예시 한글화
Seojegyeong Aug 9, 2026
97efc26
docs: Tech Stack 표에 Sentry 모니터링 항목 추가
Seojegyeong Aug 9, 2026
611f60b
docs: Scripts 표에 pnpm test:e2e 항목 추가
Seojegyeong Aug 9, 2026
50ded81
docs: Environment Variables 섹션 추가
Seojegyeong Aug 9, 2026
0489894
docs: CI/CD 목차 앵커 수정
Seojegyeong Aug 9, 2026
d472780
docs: PR 제목 형식을 브랜치 네이밍 규칙에 맞게 수정
Seojegyeong Aug 9, 2026
3c60548
docs: Scripts 표에 pnpm storybook 항목 추가
Seojegyeong Aug 9, 2026
5588001
Merge pull request #430 from WhereYouAd/docs/#429
Seojegyeong Aug 9, 2026
a62c4f4
feat: Google OAuth result 처리 훅 추가
YermIm Aug 9, 2026
7747cc2
feat: Google OAuth result 페이지 추가
YermIm Aug 9, 2026
a98c05a
feat: Google OAuth result 콜백 라우트·처리 추가
YermIm Aug 9, 2026
36e1c56
chore: integrations Google OAuth 쿼리 처리 훅 제거
YermIm Aug 9, 2026
286c0f0
fix: Google OAuth sync를 토큰 초기화 이후로 지연
YermIm Aug 9, 2026
8a55038
feat: 사이드바 접힘 시 연동 필요 ! 표시 추가
YermIm Aug 9, 2026
d20b289
refactor: 회원 탈퇴 에러 메세지 매핑 제거
jjjsun Aug 10, 2026
ed0c902
Merge pull request #432 from WhereYouAd/bugfix/#420
YermIm Aug 10, 2026
916bdcf
Merge pull request #433 from WhereYouAd/feature/#427
YermIm Aug 10, 2026
0361cef
feat: 타임라인 성과패널 내 KPI지표 한줄에 max 2개, 홀수개수는 마지막만 col-span-2로 한줄 다 차지하도록 수정
jjjsun Aug 10, 2026
b7126dc
Merge pull request #435 from WhereYouAd/refactor/#434
jjjsun Aug 10, 2026
921ef68
fix: 타임라인 바 드랍다운이 화면 밖으로 나가는 문제 해결
jjjsun Aug 10, 2026
76fbbea
refactor: XSS 방어를 위해 downloadAiSummaryPdf에 DOMPurify sanitize 적용
Seojegyeong Aug 10, 2026
eef4f2e
feat: 알림 모바일 반응형 진행, 켜짐 뱃지 삭제
jjjsun Aug 10, 2026
e9c35f0
feat: 멤버리스트 모바일 반응형 구현
jjjsun Aug 10, 2026
f65e3dd
feat: 권한 설정 모바일 반응형 설정
jjjsun Aug 10, 2026
02731a2
feat: Card 컴포넌트 모바일 반응형 구현
jjjsun Aug 10, 2026
7b8835e
feat: 모달 비대칭 제거
jjjsun Aug 10, 2026
a1f6bd9
refactor: 프로덕션 의존성 보안 취약점 패치 (axios, react-router, vite)
Seojegyeong Aug 10, 2026
9fa772a
feat: 조직 소유권 양도 모바일 반응형
jjjsun Aug 10, 2026
4b38eac
feat: 워크스페이스 세팅 모바일 반응형 구현
jjjsun Aug 10, 2026
3987dff
refactor: 워크스페이스 삭제 모달 컴포넌트로 분리
jjjsun Aug 10, 2026
e2c9133
Merge pull request #438 from WhereYouAd/refactor/#436
Seojegyeong Aug 10, 2026
e676e4f
Merge pull request #439 from WhereYouAd/refactor/#437
Seojegyeong Aug 10, 2026
38f4154
Merge pull request #442 from WhereYouAd/refactor/#440
jjjsun Aug 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 50 additions & 27 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ WhereYouAd Frontend는 Vite + React 기반의 2026 캡스톤 졸업 프로젝트
- [Scripts](#-scripts)
- [Environment Variables](#-environment-variables)
- [Project Structure](#-project-structure)
- [CI/CD](#-cicd)
- [CI/CD](#cicd)
- [Conventions](#-conventions)
- [Contributors](#-contributors)

Expand All @@ -72,6 +72,7 @@ WhereYouAd Frontend는 Vite + React 기반의 2026 캡스톤 졸업 프로젝트
| Markdown | react-markdown (AI 리포트 렌더링) |
| Test | Vitest (단위), Playwright (E2E) |
| Docs | Storybook 8 + Chromatic (시각 회귀) |
| Monitoring | Sentry (프로덕션 에러 수집) |
| Deploy | AWS S3 + CloudFront |
| Quality | ESLint v9 (flat config 4파일 분리), Prettier, Husky, lint-staged, Commitlint |

Expand All @@ -84,24 +85,27 @@ WhereYouAd Frontend는 Vite + React 기반의 2026 캡스톤 졸업 프로젝트
```bash
node -v
# v20.x.x

pnpm -v
# v10.x.x
```

### Installation

```bash
npm install
pnpm install
```

### Run Dev Server

```bash
npm run dev
pnpm dev
```

### Build

```bash
npm run build
pnpm build
```

<br>
Expand All @@ -110,13 +114,30 @@ npm run build

| Command | Description |
| -------------------- | --------------------------------------------------- |
| `npm run dev` | Vite 개발 서버를 실행합니다. |
| `npm run build` | TypeScript 빌드 후 Vite 프로덕션 빌드를 생성합니다. |
| `npm run lint` | ESLint로 전체 코드를 검사합니다. |
| `npm run preview` | 빌드 결과를 로컬에서 미리 확인합니다. |
| `npm run prepare` | Husky Git hook을 설치합니다. |
| `npm run test` | Vitest로 단위 테스트를 실행합니다. |
| `npm run test:watch` | Vitest watch 모드로 실행합니다. |
| `pnpm dev` | Vite 개발 서버를 실행합니다. |
| `pnpm build` | TypeScript 빌드 후 Vite 프로덕션 빌드를 생성합니다. |
| `pnpm lint` | ESLint로 전체 코드를 검사합니다. |
| `pnpm preview` | 빌드 결과를 로컬에서 미리 확인합니다. |
| `pnpm prepare` | Husky Git hook을 설치합니다. |
| `pnpm test` | Vitest로 단위 테스트를 실행합니다. |
| `pnpm test:watch` | Vitest watch 모드로 실행합니다. |
| `pnpm test:e2e` | Playwright로 E2E 테스트를 실행합니다. |
| `pnpm storybook` | Storybook 개발 서버를 실행합니다. (port 6006) |

<br>

## 🔑 Environment Variables

`.env` 파일을 프로젝트 루트에 생성하고 아래 변수를 설정합니다.

| 변수 | 설명 |
| ---------------------- | ------------------------------------------------- |
| `VITE_API_BASE_URL` | 백엔드 API 베이스 URL |
| `VITE_NAVER_AES_SECRET`| Naver 광고 OAuth AES 암호화 키 |
| `VITE_NAVER_AES_IV` | Naver 광고 OAuth AES 초기화 벡터 |
| `VITE_SENTRY_DSN` | Sentry 프로젝트 DSN (미설정 시 Sentry 비활성화) |

> CI/CD 환경에서는 GitHub Secrets로 관리됩니다.

<br>

Expand Down Expand Up @@ -190,39 +211,41 @@ import { useCoreQuery } from "@/hooks/customQuery";

<br>

<a id="cicd"></a>

## ⚙️ CI/CD

| 워크플로 | 트리거 | 내용 |
| --------------- | ------------------- | ------------------------------------------------- |
| `ci.yaml` | PR → develop / main | ESLint lint → Vitest test → TypeScript build 검증 |
| `main.yaml` | push → main | S3 업로드 → CloudFront 캐시 무효화 → Discord 알림 |
| `chromatic.yml` | push → develop | Storybook 시각 회귀 테스트 (Chromatic) |
| 워크플로 | 트리거 | 내용 |
| --------------- | ------------------- | ------------------------------------------------------------------------------------- |
| `ci.yaml` | PR → develop / main | ESLint → Vitest → TypeScript build → Lighthouse CI (LCP / CLS / TBT 자동 검증) |
| `main.yaml` | push → main | S3 업로드 → CloudFront Functions (CSP 헤더) 자동 배포 → CloudFront 캐시 무효화 → Discord 알림 |
| `chromatic.yml` | push → develop | Storybook 시각 회귀 테스트 (Chromatic) |

<br>

## 🤝 Conventions

### Branch

- `feature/#1-description`
- `fix/#1-description`
- `style/#1-description`
- `docs/#1-description`
- `setting/#1-description`
- `refactor/#1-description`
- `feature/#이슈번호`
- `fix/#이슈번호`
- `style/#이슈번호`
- `docs/#이슈번호`
- `setting/#이슈번호`
- `refactor/#이슈번호`

### Commit

Conventional Commits 규칙을 따릅니다. commitlint로 자동 검증됩니다.

- `feat: add AI analysis report streaming`
- `fix: prevent duplicate token reissue on parallel 401`
- `refactor: consolidate metric format logic into METRIC_REGISTRY`
- `docs: update README`
- `feat: AI 분석 리포트 스트리밍 추가`
- `fix: 병렬 401 상황에서 토큰 재발급 중복 호출 방지`
- `refactor: 지표 포맷 로직을 METRIC_REGISTRY로 통합`
- `docs: README 업데이트`

### Pull Request

- PR 제목은 `[Feature/#1] 작업 내용` 형식을 권장합니다.
- PR 제목은 `[feat/#이슈번호] 작업 내용` 형식을 권장합니다.
- GitHub Issue를 먼저 등록하고 PR 본문에 `closes #이슈번호`를 포함합니다.
- 리뷰 기준은 `.cursor/rules/always.mdc`를 따릅니다.

Expand Down
7 changes: 4 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,9 @@
"@tailwindcss/vite": "^4.1.18",
"@tanstack/react-query": "^5.90.17",
"apexcharts": "^5.7.0",
"axios": "^1.13.4",
"axios": "^1.19.0",
"crypto-js": "^4.2.0",
"dompurify": "^3.4.13",
"framer-motion": "^12.38.0",
"react": "^19.2.0",
"react-apexcharts": "^2.0.1",
Expand All @@ -34,7 +35,7 @@
"react-joyride": "^3.2.0",
"react-markdown": "^10.1.0",
"react-remove-scroll": "^2.7.2",
"react-router-dom": "^7.12.0",
"react-router-dom": "^7.18.2",
"sonner": "^2.0.7",
"tailwind-merge": "^3.4.1",
"tailwindcss": "^4.1.18",
Expand Down Expand Up @@ -78,7 +79,7 @@
"storybook": "8.6.17",
"typescript": "~5.9.3",
"typescript-eslint": "^8.53.0",
"vite": "^6.4.1",
"vite": "^6.4.3",
"vite-plugin-svgr": "^4.5.0",
"vitest": "^4.1.10"
},
Expand Down
Loading
Loading