Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
367 commits
Select commit Hold shift + click to select a range
e14112a
feat: 로그인 요청 정의 추가
seunga418 Jun 22, 2026
089c3c8
feat: 인증 인터셉터 설정 추가
seunga418 Jun 22, 2026
7a178e8
feat: 로그인시 이전 데이터 삭제
gangmin0716 Jun 23, 2026
6e3f35e
fix: 디자이너 아이디 저장 문제 해결
gangmin0716 Jun 23, 2026
3a70a7d
feat: 액세스 토큰 관리 기능 추가
seunga418 Jun 23, 2026
b8ab139
feat: 인증 인터셉터 초기화 추가
seunga418 Jun 23, 2026
9834320
feat: 로그인 훅 추가 및 로그인 처리 로직 구현
seunga418 Jun 23, 2026
3a3a5ab
feat: Vite 설정 envDir 추가
seunga418 Jun 23, 2026
83bd052
feat: 상태 관리 및 오류 메시지 추가
seunga418 Jun 23, 2026
8186191
fix: 최소 높이 제한 해제
Divanzo Jun 23, 2026
41f8544
feat: 예약 상세 내용 추기
Divanzo Jun 23, 2026
2152b07
Merge branch 'develop' into feat/hair-shop-api/#156
Divanzo Jun 23, 2026
070229e
feat: 직원 검색 및 계정 ID 기능 추가
seunga418 Jun 23, 2026
1b29ef8
feat: 불필요한 코드 제거
seunga418 Jun 23, 2026
fefd1fd
feat: QRresult 컴포넌트 리팩토링 및 useMemo 사용 성능 최적화
seunga418 Jun 23, 2026
6b40834
merge: feature/#182-로그인-서버-연결
hyxx-su Jun 23, 2026
996e82f
feat: Vite 설정 envDir 추가
seunga418 Jun 23, 2026
bb634d5
feat: 인증 인터셉터 추가
seunga418 Jun 23, 2026
ddeb7cb
feat: 인증 인터셉터 추가
seunga418 Jun 23, 2026
c11dd15
feat: 액세스 토큰 관리 기능 추가
seunga418 Jun 23, 2026
60c928d
feat: 예약 API 기능 추가
seunga418 Jun 23, 2026
6c9441b
feat: 사용자 정보 조회 API 추가
seunga418 Jun 23, 2026
55c63e1
feat: 예약 패널 로딩 및 오류 메시지 추가
seunga418 Jun 23, 2026
4f8c7f0
feat: 예약 상태 관리 및 사용자 정보 기능 추가
seunga418 Jun 23, 2026
1e146f1
feat: 예약 패널 로딩 및 오류 메시지 추가
seunga418 Jun 23, 2026
4bd1e73
feat: 예약 패널 로딩 및 오류 메시지 추가
seunga418 Jun 23, 2026
33b5b23
fix: 의도치 않은 주석문 제거
Divanzo Jun 23, 2026
3fb8760
Merge branch 'develop' of https://github.com/O2-DGSW/heddy-web into f…
seunga418 Jun 23, 2026
5aa1e4b
merge: feature/#188-예약-페이지-서버-연결
hyxx-su Jun 23, 2026
07a85dd
feat: 고객 API 추가
seunga418 Jun 23, 2026
387b7f7
feat: customerId 및 daysSinceLastVisit 추가
seunga418 Jun 23, 2026
47d25e9
feat: CustomerRow 및 CustomerTableProps에 customerId, daysSinceLastVisi…
seunga418 Jun 23, 2026
c663651
feat: 고객 데이터 기능 추가
seunga418 Jun 23, 2026
4243f61
feat: CustomerTable 로딩 상태 및 메시지 처리 추가
seunga418 Jun 23, 2026
8acd6d7
feat: CustomerPage 상태 처리 추가
seunga418 Jun 23, 2026
a617a39
feat: emptyMessage 수정
seunga418 Jun 23, 2026
3a18eb6
feat: 예약 상태 성공 여부 반환 추가
seunga418 Jun 23, 2026
fce7ac7
merge: feature/#191-고객-페이지-서버-연결
hyxx-su Jun 23, 2026
c241f21
feat: 직원 API 기능 추가
seunga418 Jun 23, 2026
f58ab93
feat: EmployeeRow에 designerId 추가 및 EmployeeTableProps에 isLoading과 emp…
seunga418 Jun 23, 2026
2c67aff
feat: 직원 정보 로딩 및 오류 처리 추가
seunga418 Jun 23, 2026
d12c2cb
feat: 직원 테이블 로딩 상태 추가
seunga418 Jun 23, 2026
34658a4
feat: 등록 모드 필드 비활성화
hyxx-su Jun 23, 2026
7530547
feat: 필드 비활성화 기능 추가
hyxx-su Jun 23, 2026
507323a
feat: loginId 표시
hyxx-su Jun 23, 2026
5c4bae0
feat: notes 상태 동기화
hyxx-su Jun 23, 2026
e692c3b
feat: notes 계산 방식 개선
hyxx-su Jun 23, 2026
edef43d
fix: QR 발급 언마운트 상태 업데이트 방지
hyxx-su Jun 23, 2026
40be6b5
merge: feature/#193-직원-페이지-서버-연결
hyxx-su Jun 23, 2026
e1aa6af
feat: 대시보드드 api 연결
hyxx-su Jun 24, 2026
24fd812
feat: 예측 api 연결
hyxx-su Jun 24, 2026
91dec08
feat: 더미데이터 제거
hyxx-su Jun 24, 2026
4a3932e
feat: 홈 페이지 서버 연결
hyxx-su Jun 24, 2026
9c6dc07
feat: 고객 예약 없을 때 표시 추가
hyxx-su Jun 24, 2026
85ca557
feat: 고객 등급 현황 연결
hyxx-su Jun 24, 2026
a44d981
feat: 차트 더미 제거 및 연결
hyxx-su Jun 24, 2026
70ab9ff
feat: 서버 연결에 따른 차트 수정
hyxx-su Jun 24, 2026
da9688d
feat: SummaryCard 개선
hyxx-su Jun 24, 2026
b658bcb
feat: 대시보드 처리 계산 개선
hyxx-su Jun 24, 2026
d654092
fix: 콘텐츠 길이와 무관하게 하단 탭바가 뷰포트 하단에 고정되도록 수정
gangmin0716 Jun 24, 2026
7640fe0
feat: 홈 화면 프로모션 배너 캐러셀 추가
gangmin0716 Jun 24, 2026
aa92dd4
feat: 홈 화면 퀵메뉴 및 퀵액션 카드 추가
gangmin0716 Jun 24, 2026
e80c7db
feat: 홈 화면 AI 스타일 추천 섹션 추가 및 전체 레이아웃 조립 AI 추천은 API 연결 전 임시 목업 데이터 사용.
gangmin0716 Jun 24, 2026
fcbd1a9
fix: 리스폰스 반환 객체 수정
Divanzo Jun 24, 2026
2a2698b
fix: 타입 import 분리
Divanzo Jun 24, 2026
a0b2b02
fix: 의존성 배열로 분리
Divanzo Jun 24, 2026
f98dfb7
fix: null 반환 방지
Divanzo Jun 24, 2026
30c22e8
fix: 근무 일정 props 수정
Divanzo Jun 24, 2026
597327c
fix: 디자이너 아이디 지속적 상태동기화
Divanzo Jun 24, 2026
6b228ee
merge: feat/hair-shop-api/#156
gangmin0716 Jun 24, 2026
d736c54
fix: 액세스 토큰을 요청 헤더에 주입하는 인증 인터셉터 추가
gangmin0716 Jun 24, 2026
ef7d214
feat: AI 스타일 추천 API 연동
gangmin0716 Jun 24, 2026
e100d55
Merge remote-tracking branch 'origin/develop' into feat/mobile-home-u…
gangmin0716 Jun 24, 2026
6f70141
Merge branch 'develop' of https://github.com/O2-DGSW/heddy-web into f…
Divanzo Jun 24, 2026
985b2bd
refactor: 스네이크 케이스로 변경
gangmin0716 Jun 24, 2026
5100e81
feat: AI 스타일 추천 카드에 저장(북마크) 기능 추가
gangmin0716 Jun 25, 2026
1148d8d
feat: AI 스타일 추천 더보기/상세 페이지 추가
gangmin0716 Jun 25, 2026
898ee9b
feat: 홈 AI 스타일 추천을 가로 캐러셀로 변경
gangmin0716 Jun 25, 2026
e76bf86
feat: 런타임 에러 방지
hyxx-su Jun 25, 2026
428a757
feat: 에러 개선
hyxx-su Jun 25, 2026
2e16024
fix: 표시 오류 수정
hyxx-su Jun 25, 2026
129358e
refactor: ui, hooks 분리
Divanzo Jun 26, 2026
ae5ab9d
feat: 예약하기 api 베이스 코드 설정
Divanzo Jun 26, 2026
807a2db
fix: ui/ux 수정
Divanzo Jun 26, 2026
3226aa5
refactor: 세부 기능별 폴더 분리
Divanzo Jun 26, 2026
481796c
merge: feature/#185-홈-페이지-서버-연결
seunga418 Jun 27, 2026
331d799
fix: 초기 렌더링 슬라이드 길이 조정
gangmin0716 Jun 27, 2026
ceb8a9a
refactor: 상태 없을시 /ai-style-recommendation로 이동
gangmin0716 Jun 27, 2026
57268a2
merge: feat/mobile-home-ui/#149
hyxx-su Jun 27, 2026
427bac5
feat: API 환경 변수 예시 추가
hyxx-su Jun 27, 2026
bbbb256
feat: 회원가입 요청 타입 추가
hyxx-su Jun 27, 2026
958ca89
feat: 회원가입 API 연결
hyxx-su Jun 27, 2026
18aa670
fix: 회원가입 요청 토큰 제외
hyxx-su Jun 27, 2026
391533c
feat: 회원가입 검증 로직 추가
hyxx-su Jun 27, 2026
3d167e8
refactor: 회원가입 폼 공통 스타일 분리
hyxx-su Jun 27, 2026
f4cb77b
feat: 회원가입 폼 상태 타입 추가
hyxx-su Jun 27, 2026
4383ff0
feat: 회원가입 폼 상태 표시 추가
hyxx-su Jun 27, 2026
2afe52b
feat: 비밀번호 오류 표시 추가
hyxx-su Jun 27, 2026
ee79f7c
feat: 휴대폰 인증 기능 추가
hyxx-su Jun 27, 2026
85a0e9e
feat: 오너 계정 입력 검증 추가
hyxx-su Jun 27, 2026
0d5f6cb
feat: 오너 회원가입 제출 연결
hyxx-su Jun 27, 2026
e67c8fb
feat: 오너 회원가입 플로우 연결
hyxx-su Jun 27, 2026
0a4b533
refactor: 회원가입 공통 스타일 적용
hyxx-su Jun 27, 2026
ce506e0
refactor: 회원가입 공통 스타일 적용
hyxx-su Jun 27, 2026
200ff1b
feat: 토스트 라이브러리 추가
hyxx-su Jun 27, 2026
671c08a
feat: 회원가입 토스트 알림 적용
hyxx-su Jun 27, 2026
5b60d75
refactor: 회원가입 폼 상태 타입 정리
hyxx-su Jun 27, 2026
626a3d7
refactor: 계정 입력 경고 토스트 전환
hyxx-su Jun 27, 2026
ac3c8c3
refactor: 상점 입력 경고 토스트 전환
hyxx-su Jun 27, 2026
f5d1762
refactor: 비밀번호 인라인 경고 제거
hyxx-su Jun 27, 2026
2df9a37
refactor: 휴대폰 인증 경고 토스트 전환
hyxx-su Jun 27, 2026
d4842b8
refactor: 회원가입 폼 인라인 경고 제거
hyxx-su Jun 27, 2026
23c1b45
fix: 데스크톱 레이아웃 높이 계산 개선
hyxx-su Jun 27, 2026
ed24f41
fix: 인증 상단바 반응형 개선
hyxx-su Jun 27, 2026
4ddab11
fix: 회원가입 레이아웃 반응형 개선
hyxx-su Jun 27, 2026
0ec64cd
fix: 약관 페이지 반응형 개선
hyxx-su Jun 27, 2026
93b76c0
fix: 회원가입 입력 높이 반응형 개선
hyxx-su Jun 27, 2026
d53cb07
fix: 주소 입력 간격 반응형 개선
hyxx-su Jun 27, 2026
6551082
fix: 카테고리 입력 간격 반응형 개선
hyxx-su Jun 27, 2026
0a6ed13
fix: 토스트 유형별 노출 시간 조정
hyxx-su Jun 27, 2026
dfdbda9
refactor: 휴대폰 인증 메시지 props 제거
hyxx-su Jun 27, 2026
1d3af0b
refactor: 휴대폰 인증 인라인 메시지 제거
hyxx-su Jun 27, 2026
a2b0cea
refactor: 휴대폰 인증 메시지 타입 정리
hyxx-su Jun 27, 2026
7d757a2
feat: 나의 시술기록을 실제 API로 연동
gangmin0716 Jun 27, 2026
d27fcb5
fix: 코드리뷰 피드백 반영 (메모이제이션, 안전한 에러 처리)
gangmin0716 Jun 27, 2026
4741168
merge: feat/mobile-get-cuts-record/#196
Divanzo Jun 27, 2026
7add5c2
Merge branch 'develop' of https://github.com/O2-DGSW/heddy-web into f…
gangmin0716 Jun 27, 2026
cefe25f
feat: 프로필 화면 통계를 실제 GET /users/me 데이터로 연동
gangmin0716 Jun 27, 2026
7236e35
fix: 프로필 통계 카드 순서를 아이콘-라벨-수치 순으로 변경
gangmin0716 Jun 27, 2026
5c2f2c1
refactor: type 안정화
gangmin0716 Jun 27, 2026
e1d7016
fix: 프로필 데이터 로딩 중 빈 값(0, "") 노출 방지
gangmin0716 Jun 27, 2026
3da31f7
merge: feature/#186-mobile-프로필-api-연결
hyxx-su Jun 27, 2026
74e2cc5
feat: 의존성 제거
hyxx-su Jun 27, 2026
8e123e6
fix: 오너 회원가입 카테고리 전송 추가
hyxx-su Jun 27, 2026
c5923b8
refactor: 토스트 컨테이너 루트 배치
hyxx-su Jun 27, 2026
f489801
fix: 휴대폰 인증 응답 최신 상태 확인
hyxx-su Jun 27, 2026
715739b
feat: 비밀번호 표시/숨김 토글 PasswordInput 공통 컴포넌트 추가
gangmin0716 Jul 4, 2026
8fdca37
feat: 로그인·회원가입·비밀번호 찾기 비밀번호 input에 표시/숨김 토글 적용
gangmin0716 Jul 4, 2026
47d81cd
feat: 대시보드드 api 연결
hyxx-su Jun 24, 2026
ef45526
feat: 예측 api 연결
hyxx-su Jun 24, 2026
6c0df85
feat: 더미데이터 제거
hyxx-su Jun 24, 2026
4b7b30d
feat: 홈 페이지 서버 연결
hyxx-su Jun 24, 2026
468502f
feat: 고객 예약 없을 때 표시 추가
hyxx-su Jun 24, 2026
acca449
feat: 고객 등급 현황 연결
hyxx-su Jun 24, 2026
0438d39
feat: 차트 더미 제거 및 연결
hyxx-su Jun 24, 2026
5a8b2cd
feat: 서버 연결에 따른 차트 수정
hyxx-su Jun 24, 2026
910e9a1
feat: SummaryCard 개선
hyxx-su Jun 24, 2026
fe47ccb
feat: 대시보드 처리 계산 개선
hyxx-su Jun 24, 2026
1800edc
feat: 런타임 에러 방지
hyxx-su Jun 25, 2026
a31ed53
feat: 에러 개선
hyxx-su Jun 25, 2026
eaf0e1a
fix: 표시 오류 수정
hyxx-su Jun 25, 2026
de2d6db
feat: 필요 이미지 추가
Divanzo Jun 18, 2026
8814399
feat: 기본 탑 레이어 추가
Divanzo Jun 18, 2026
566297b
fix: 콘텐츠 길이와 무관하게 하단 탭바가 뷰포트 하단에 고정되도록 수정
gangmin0716 Jun 24, 2026
d1820d4
feat: 홈 화면 프로모션 배너 캐러셀 추가
gangmin0716 Jun 24, 2026
b78e5a7
feat: 홈 화면 퀵메뉴 및 퀵액션 카드 추가
gangmin0716 Jun 24, 2026
443434e
feat: 홈 화면 AI 스타일 추천 섹션 추가 및 전체 레이아웃 조립 AI 추천은 API 연결 전 임시 목업 데이터 사용.
gangmin0716 Jun 24, 2026
612115d
fix: 액세스 토큰을 요청 헤더에 주입하는 인증 인터셉터 추가
gangmin0716 Jun 24, 2026
f6baae6
feat: AI 스타일 추천 API 연동
gangmin0716 Jun 24, 2026
a4d00e2
refactor: 스네이크 케이스로 변경
gangmin0716 Jun 24, 2026
65a1ec4
feat: AI 스타일 추천 카드에 저장(북마크) 기능 추가
gangmin0716 Jun 25, 2026
a4d5b4c
feat: AI 스타일 추천 더보기/상세 페이지 추가
gangmin0716 Jun 25, 2026
7fa3e5a
feat: 홈 AI 스타일 추천을 가로 캐러셀로 변경
gangmin0716 Jun 25, 2026
16f1396
fix: 초기 렌더링 슬라이드 길이 조정
gangmin0716 Jun 27, 2026
4604322
refactor: 상태 없을시 /ai-style-recommendation로 이동
gangmin0716 Jun 27, 2026
ce88aa9
refactor: 세부 기능별 폴더 분리
Divanzo Jun 26, 2026
601e5db
feat: 나의 시술기록을 실제 API로 연동
gangmin0716 Jun 27, 2026
a111a32
fix: 코드리뷰 피드백 반영 (메모이제이션, 안전한 에러 처리)
gangmin0716 Jun 27, 2026
3c8cbad
feat: 프로필 화면 통계를 실제 GET /users/me 데이터로 연동
gangmin0716 Jun 27, 2026
b859c44
fix: 프로필 통계 카드 순서를 아이콘-라벨-수치 순으로 변경
gangmin0716 Jun 27, 2026
dedcfe7
refactor: type 안정화
gangmin0716 Jun 27, 2026
a71833f
fix: 프로필 데이터 로딩 중 빈 값(0, "") 노출 방지
gangmin0716 Jun 27, 2026
88062dd
feat: tabs 선택적 활성화 props 추가
Divanzo Jun 20, 2026
f134959
fix: MobileCalendar 충돌 수정
Divanzo Jun 20, 2026
ee3909c
fix: pull 충돌 해결
Divanzo Jun 20, 2026
93534e7
feat: input focus시 아이콘 나오게 설정
gangmin0716 Jul 4, 2026
19e2c92
fix: UI 변경
Divanzo Jul 6, 2026
300a5e3
fix: api 코드 수정
Divanzo Jul 6, 2026
7cc4911
refactor: 비즈니스로직 분리
Divanzo Jul 6, 2026
da105dc
feat: 예약하기 api 연동
Divanzo Jul 6, 2026
7fecc58
feat: 회원가입 API 연동 및 휴대폰 인증번호 발송/확인 연결
gangmin0716 Jul 6, 2026
7174628
fix: SMS 인증 purpose 값 수정 (OWNER_SIGNUP, PASSWORD_RESET)
gangmin0716 Jul 6, 2026
7fa440e
fix: 회원가입 다음으로 버튼 disabled 스타일 통일
gangmin0716 Jul 6, 2026
1cebad9
fix: 로그인 아이디 input 색상 label.normal로 통일
gangmin0716 Jul 6, 2026
68e79cd
fix: 비밀번호 입력값 있을 때만 눈 아이콘 표시 (focused 상태 제거)
gangmin0716 Jul 6, 2026
a7a22ce
fix: Gemini 코드 리뷰 반영 - SMS 인증 및 회원가입 폼 개선
gangmin0716 Jul 6, 2026
c77e773
fix: Vercel 빌드 오류 수정 - status.positive → success, 미사용 import 제거
gangmin0716 Jul 6, 2026
bd4ef04
merge: feature/#202-mobile-회원가입-api-연결
hyxx-su Jul 6, 2026
6c576c4
feat: 고객 계정 UI 제한 - 미용실 탭 및 시술기록 추가 버튼 숨김
gangmin0716 Jul 6, 2026
122f96e
merge: feature/#183-회원가입-서버-연결
Divanzo Jul 6, 2026
ac7d4db
feat: api req 타입 수정
Divanzo Jul 6, 2026
16aede4
fix: 비즈니스 로직 수정
Divanzo Jul 6, 2026
4c19377
docs: gitignore 내용 추가
hyxx-su Jul 6, 2026
cace781
feat: https로 변경
hyxx-su Jul 6, 2026
b331a28
fix: 시술기록 로드 실패 시 이미지와 텍스트 함께 표시
gangmin0716 Jul 6, 2026
e9f8496
feat: 시술기록 등록 폼 전화번호 입력으로 변경 및 API 연결
gangmin0716 Jul 6, 2026
e349161
docs: HTTPS 개발 서버 설정 추가
hyxx-su Jul 6, 2026
d709a58
fix: HTTPS 설정 및 로컬 서버 URL 변경
hyxx-su Jul 6, 2026
bde2120
fix: 데스크탑 API 기본 설정 및 인증 에러 처리 정리
hyxx-su Jul 6, 2026
de3c354
fix: 오너 회원가입 요청값 Swagger 스펙에 맞게 수정
hyxx-su Jul 6, 2026
4422f9e
feat: 예약 목록 API 스펙 및 화면 매핑 정리
hyxx-su Jul 6, 2026
c385a34
feat: 고객 화면 디자이너 목록을 매장 API로 연결
hyxx-su Jul 6, 2026
f8c3577
refactor: 직원 화면 샘플 데이터 제거
hyxx-su Jul 6, 2026
a5ae2a7
feat: 일정 화면 예약 API 기반으로 연결
hyxx-su Jul 6, 2026
50b0a01
feat: 시술 기록 등록 API 연결
hyxx-su Jul 6, 2026
dea353c
fix: 모바일 훅 lint 경고 정리
hyxx-su Jul 6, 2026
29a0deb
merge: feature/#184-데스크탑-서버-연결
gangmin0716 Jul 6, 2026
0775c2a
merge: develop 병합 및 충돌 해결 - 시술기록 에러 UI, 전화번호 입력 폼 유지
gangmin0716 Jul 6, 2026
f71252f
fix: 예약 목록 스크롤 적용
seunga418 Jul 6, 2026
948086f
fix: 예약 달력 패널 여백 조정
seunga418 Jul 6, 2026
c8ccac3
feat: 예약 관리 api 추가
Divanzo Jul 6, 2026
f80315f
feat: 예약 관리 api 연동
Divanzo Jul 6, 2026
8170a05
Merge branch 'develop' of https://github.com/O2-DGSW/heddy-web into f…
Divanzo Jul 6, 2026
39ede59
merge: feature/#206-데스크탑-반응형-개선
hyxx-su Jul 6, 2026
ce54ae5
fix: 좁은 화면(A34 등) 대응 - 뷰포트 기반 폰트 스케일링 및 캐리어 선택 간격 조정
gangmin0716 Jul 6, 2026
e3d2280
fix: 인증번호 버튼 및 입력창 크기 축소 (py-4 → py-3)
gangmin0716 Jul 6, 2026
18620ba
fix: 선택한 날짜와 같은 날이 있는 예약건이 있다면 ScheduleBox 렌더
Divanzo Jul 6, 2026
437ca37
fix: input+버튼 행 overflow 방지 - min-w-0, overflow-hidden 추가
gangmin0716 Jul 6, 2026
8a63e3c
fix: 현재 있는 근무일정 예약건 로직 수정
Divanzo Jul 6, 2026
0e8f775
feat: 전화번호·인증번호 입력 시 숫자 키패드 표시 (inputMode)
gangmin0716 Jul 6, 2026
a5f2430
fix: iOS full display navbar safe area 대응 및 HashRouter 전환
gangmin0716 Jul 6, 2026
4c02297
fix: iOS input focus 시 자동 확대 방지 - maximum-scale=1, font-size 16px 강제
gangmin0716 Jul 6, 2026
405ede2
feat: 회원정보 수정 API 연결 - 전화번호(SMS 인증) 및 비밀번호 변경
gangmin0716 Jul 6, 2026
e25c5de
fix: 예약에 대한 기본 상태 수정
Divanzo Jul 6, 2026
5bf92df
feat: 비밀번호 변경 → 비밀번호 찾기 페이지 이동, 전화번호 입력 UI 개선
gangmin0716 Jul 6, 2026
3bbe36c
fix: 드롭다운 수정
Divanzo Jul 6, 2026
732b201
fix: 성공 메세지 토스트 수정
Divanzo Jul 6, 2026
935ebd5
feat: 뒤로가기 버튼 추가 및 비밀번호 찾기/변경 페이지 분리
gangmin0716 Jul 6, 2026
b634462
fix: 아이디/비번 찾기 폼 버튼 overflow 수정
gangmin0716 Jul 6, 2026
37389de
fix: Gemini 코드리뷰 반영
gangmin0716 Jul 6, 2026
4318394
merge: refactor/#204-앱-실행이-일어나는-문제점-해결
hyxx-su Jul 6, 2026
d61d30b
feat: 로그아웃 기능 및 홈 프로필 이동 추가
gangmin0716 Jul 6, 2026
c9c785c
refactor: Gemini 리뷰 반영 - logoutApi 응답 검증 및 설정 네비게이션 alt 기반 리팩토링
gangmin0716 Jul 6, 2026
e6c95f6
merge: feature/#209-모바일-기능-api-연결
Divanzo Jul 6, 2026
c85d498
refactor: 상수 분리
Divanzo Jul 6, 2026
95225c1
fix: iOS input focus zoom 방지 - @layer 외부로 font-size 규칙 이동
gangmin0716 Jul 6, 2026
04a7f80
fix: 상태분기 추가
Divanzo Jul 6, 2026
1263482
merge: refactor/#212-input-focus시-확대-되는-현상
hyxx-su Jul 7, 2026
5a8c616
fix: 비즈니스 로직 및 상수 분리
Divanzo Jul 7, 2026
c872160
merge: feat/mobile-reservation-api/#145
gangmin0716 Jul 7, 2026
5962aa6
feat: 상단바 모달 추가 수정
hyxx-su Jul 7, 2026
e7715ba
Merge branch 'develop' of https://github.com/O2-DGSW/heddy-web into f…
hyxx-su Jul 7, 2026
58fcd31
feat: API 오류 처리 로직 추가
hyxx-su Jul 7, 2026
d1d1d15
feat: 데스크탑 에러 처리 및 라우팅 권한 정리
hyxx-su Jul 7, 2026
ab5a73d
feat: 인증 토큰이 있을 때만 로그인 리다이렉트 추가
hyxx-su Jul 7, 2026
30344b5
feat: getQuarterlySalesPredict 메서드에서 POST를 GET으로 변경
hyxx-su Jul 7, 2026
defd415
feat: showErrorToast로 오류 처리 방식 변경
hyxx-su Jul 7, 2026
02e0317
feat: getQuarterlySalesPredict 메서드를 추가하여 대시보드 데이터 처리 개선
hyxx-su Jul 7, 2026
7926321
feat: 프로필 편집 다이얼로그에서 프로필 값 초기화 및 저장 기능 추가
hyxx-su Jul 7, 2026
3b1ae71
merge: feature/#184-데스크탑-서버-연결
seunga418 Jul 7, 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
1 change: 1 addition & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
VITE_API_BASE_URL=https://api.heddy.site
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ lerna-debug.log*
!.env.example
!.env.*.example

# Local HTTPS certificates
certs/

# Capacitor native platforms
ios/
android/
Expand Down
27 changes: 26 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
```

## 모바일 개발 환경 설정

```bash
# iOS 플랫폼 최초 추가
pnpm ios
Expand All @@ -37,6 +38,30 @@ pnpm dev:ios
pnpm dev:android
```

## HTTPS 개발 서버

데스크탑 개발 서버는 HTTPS로 실행됩니다.

```bash
pnpm dev:desktop
# https://localhost:5173
```

모바일 개발 서버와 Capacitor live reload는 WebView의 self-signed 인증서 차단을 피하기 위해 기본적으로 HTTP를 사용합니다. 모바일에서 HTTPS가 꼭 필요하면 환경 변수를 켜서 실행합니다.

```bash
ENABLE_HTTPS=true pnpm dev:mobile
# https://localhost:5174
```

첫 HTTPS 실행 시 로컬 self-signed 인증서가 `certs/`에 자동 생성됩니다. `openssl`이 없는 환경에서는 경고를 출력하고 HTTP로 폴백합니다.

Capacitor live reload URL을 직접 지정해야 하면 다음처럼 실행합니다.

```bash
CAPACITOR_SERVER_URL=http://<IP>:5174 pnpm dev:ios
```

## 빌드

```bash
Expand All @@ -58,4 +83,4 @@ pnpm build:android
```bash
pnpm preview:desktop
pnpm preview:mobile
```
```
15 changes: 8 additions & 7 deletions capacitor.config.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
/// <reference types="node" />
import type { CapacitorConfig } from '@capacitor/cli';
import type { CapacitorConfig } from "@capacitor/cli";

const isLive = process.env.CAPACITOR_LIVE === 'true';
const isLive = process.env.CAPACITOR_LIVE === "true";
const liveServerUrl = process.env.CAPACITOR_SERVER_URL ?? "http://localhost:5174";

const config: CapacitorConfig = {
appId: 'com.heddy.app',
appName: 'heddy',
webDir: 'dist/mobile',
appId: "com.heddy.app",
appName: "heddy",
webDir: "dist/mobile",
...(isLive && {
server: {
url: 'http://localhost:5174',
cleartext: true,
url: liveServerUrl,
cleartext: liveServerUrl.startsWith("http://"),
},
}),
};
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
"react": "^19.2.5",
"react-dom": "^19.2.5",
"react-router-dom": "^7.15.0",
"react-toastify": "^11.1.0",
"zustand": "^5.0.14"
},
"devDependencies": {
Expand Down
11 changes: 6 additions & 5 deletions pakages/api/axios.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import axios from 'axios'
import axios from "axios";

const baseURL = import.meta.env.VITE_API_BASE_URL ?? ''
const DEFAULT_API_BASE_URL = "https://api.heddy.site";
const baseURL = import.meta.env.VITE_API_BASE_URL?.trim() || DEFAULT_API_BASE_URL;

export const api = axios.create({
baseURL,
timeout: 10000,
withCredentials: true,
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
Accept: "application/json",
"Content-Type": "application/json",
},
})
});
22 changes: 12 additions & 10 deletions pakages/api/type.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
export type ApiError = {
code?: string;
message?: string;
} | null;

export interface ApiResponse<TData = unknown> {
data: TData
message?: string
success?: boolean
statusCode?: number
success: boolean;
message?: string;
data: TData;
error?: ApiError;
}

export interface ApiErrorResponse<TError = unknown> {
message: string
errors?: TError
statusCode?: number
message: string;
errors?: TError;
statusCode?: number;
}

export const ApiResponse = undefined
export const ApiErrorResponse = undefined
21 changes: 21 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 15 additions & 0 deletions src/main/global.css
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@
}

@layer base {
html {
/* 390px 기준 16px, 좁을수록 줄어들고 최소 14px */
font-size: clamp(14px, 4.1vw, 16px);
}

html,
body,
#root {
Expand Down Expand Up @@ -38,6 +43,16 @@
}
}

/*
iOS input focus zoom 방지
- @layer base 안에 두면 Tailwind utilities(text-[0.75rem] 등)에 덮어써짐
- @layer 밖에 두면 모든 레이어보다 우선순위가 높아 확실히 적용됨
- 16px 미만 font-size 입력창에 포커스 시 iOS Safari/WebKit이 자동 확대하는 동작 차단
*/
input, select, textarea {
font-size: 16px;
}

@layer utilities {
.scrollbar-thin {
scrollbar-color: #c1c2c3 transparent;
Expand Down
23 changes: 20 additions & 3 deletions src/renderer/desktop/src/app/App.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,29 @@
import { BrowserRouter } from "react-router-dom";
import { ToastContainer } from "react-toastify";
import "react-toastify/dist/ReactToastify.css";

import { AppRoutes } from "./routes";
import { setupAuthInterceptor } from "@/entities/auth/model/setupAuthInterceptor";

setupAuthInterceptor();

const App = () => {
return (
<BrowserRouter>
<AppRoutes />
</BrowserRouter>
<>
<BrowserRouter>
<AppRoutes />
</BrowserRouter>

<ToastContainer
position="top-right"
limit={1}
newestOnTop={false}
theme="light"
className="font-['Pretendard']"
toastClassName="rounded-[10px] text-sm font-medium leading-[140%] shadow-[0_8px_24px_rgba(0,0,0,0.16)]"
progressClassName="opacity-80"
/>
</>
);
};

Expand Down
4 changes: 2 additions & 2 deletions src/renderer/desktop/src/app/layouts/DesktopLayout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ const DesktopLayout = () => {

return (
<div
className="h-screen overflow-hidden"
className="flex h-screen flex-col overflow-hidden"
style={{ backgroundColor: lightTheme.background.alternative }}
>
<TopBar />
<div className="flex h-[calc(100vh-4.25rem)] overflow-hidden">
<div className="flex min-h-0 flex-1 overflow-hidden">
{!isAuthPage && <Sidebar />}
<main className="min-w-0 flex-1 overflow-hidden">
<Outlet />
Expand Down
54 changes: 54 additions & 0 deletions src/renderer/desktop/src/app/routeGuards.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import { useEffect } from "react";
import { Navigate, Outlet, useLocation } from "react-router-dom";

import { getAccessToken } from "@/entities/auth/model/token";
import { showErrorToast } from "@/lib/toast";

const LOGIN_REQUIRED_TOAST_ID = "desktop-login-required-toast";

const getSafeRedirectPath = (value: string | null) => {
if (!value || !value.startsWith("/") || value.startsWith("//")) {
return "/";
}

if (value.startsWith("/login") || value.startsWith("/signup")) {
return "/";
}

return value;
};

const useIsAuthenticated = () => Boolean(getAccessToken());

export const ProtectedRoute = () => {
const location = useLocation();
const isAuthenticated = useIsAuthenticated();

useEffect(() => {
if (isAuthenticated) {
return;
}
showErrorToast("로그인이 필요한 페이지입니다.", {
toastId: LOGIN_REQUIRED_TOAST_ID,
});
}, [isAuthenticated]);

if (!isAuthenticated) {
const redirectPath = `${location.pathname}${location.search}${location.hash}`;
return <Navigate to={`/login?redirect=${encodeURIComponent(redirectPath)}`} replace />;
}

return <Outlet />;
};

export const PublicOnlyRoute = () => {
const location = useLocation();
const isAuthenticated = useIsAuthenticated();
const redirectPath = getSafeRedirectPath(new URLSearchParams(location.search).get("redirect"));

if (isAuthenticated) {
return <Navigate to={redirectPath} replace />;
}

return <Outlet />;
};
24 changes: 15 additions & 9 deletions src/renderer/desktop/src/app/routes.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Route, Routes } from "react-router-dom";

import { DesktopLayout } from "./layouts";
import { ProtectedRoute, PublicOnlyRoute } from "./routeGuards";
import { LoginPage } from "@/pages/auth/login";
import { SignupTermsPage } from "@/pages/auth/signup";
import { CustomerPage } from "@/pages/customer";
Expand All @@ -14,15 +15,20 @@ const AppRoutes = () => {
return (
<Routes>
<Route element={<DesktopLayout />}>
<Route path="/" element={<HomePage />} />
<Route path="/reservation" element={<ReservationPage />} />
<Route path="/customer" element={<CustomerPage />} />
<Route path="/customers" element={<CustomerPage />} />
<Route path="/procedure" element={<ProcedurePage />} />
<Route path="/employee" element={<EmployeePage />} />
<Route path="/schedule" element={<SchedulePage />} />
<Route path="/login" element={<LoginPage />} />
<Route path="/signup" element={<SignupTermsPage />} />
<Route element={<ProtectedRoute />}>
<Route path="/" element={<HomePage />} />
<Route path="/reservation" element={<ReservationPage />} />
<Route path="/customer" element={<CustomerPage />} />
<Route path="/customers" element={<CustomerPage />} />
<Route path="/procedure" element={<ProcedurePage />} />
<Route path="/employee" element={<EmployeePage />} />
<Route path="/schedule" element={<SchedulePage />} />
</Route>

<Route element={<PublicOnlyRoute />}>
<Route path="/login" element={<LoginPage />} />
<Route path="/signup" element={<SignupTermsPage />} />
</Route>
</Route>
</Routes>
);
Expand Down
Loading