Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
91 commits
Select commit Hold shift + click to select a range
1ab8aab
feat: 라우팅시 모달 store reset
rtttr1 Nov 14, 2025
6339752
feat: 모달 내부 클릭시 close 이벤트 전파 방지
rtttr1 Nov 14, 2025
86b80bf
refactor: ModalProvider 위치 react router 내부로 변경
rtttr1 Nov 14, 2025
e21aec6
feat: esc 키로 모달 닫기 지원
rtttr1 Nov 14, 2025
681c1b8
feat: slice로 store 전체 구독 방지
rtttr1 Nov 14, 2025
639cc50
feat: 모달 FocuseTrap 적용 및 접근성 개선
rtttr1 Nov 14, 2025
51796ee
feat: slice된 openModal로 변환
rtttr1 Nov 14, 2025
c29e845
fix: useBlocker 적용 (#663)
KIMGEONHWI Dec 30, 2025
b33cd75
fix: popstate 개선
KIMGEONHWI Dec 30, 2025
20023f6
Merge branch 'main' into develop
KIMGEONHWI Dec 30, 2025
6918cac
chore: 번들 분석 script 추가 pnpm analyze
rtttr1 Jan 1, 2026
1cb107c
style: dialog border:none 전역 스타일로 지정
rtttr1 Jan 1, 2026
78f89d5
refactor: ModalLayout Modal과 분리하여 두개 이상의 모달 띄울시 배경색이 더 어두워지는 버그 해결
rtttr1 Jan 1, 2026
0841400
refactor: 포커스 가능한 첫요소 변수로 포커스주게 변경
rtttr1 Jan 1, 2026
8dd6981
fix: 빌드 에러 해결
rtttr1 Jan 1, 2026
82080be
style: home sprinkles 제거
rtttr1 Jan 2, 2026
74862ac
class 폴더 sprinkles 제거
rtttr1 Jan 2, 2026
211c6a5
style: dancer 폴더 sprinkles 제거
rtttr1 Jan 2, 2026
583af2e
style: instructor 폴더에서 sprinkles 제거
rtttr1 Jan 2, 2026
e0cfe15
style: instructorRegister에서 sprinkles 제거
rtttr1 Jan 2, 2026
267d9ed
style: InstructorRegisterCompletion 내부 sprinkles 제거
rtttr1 Jan 2, 2026
479f136
style: login 내부 sprinkles 제거
rtttr1 Jan 2, 2026
6ab3249
style: mypage 내부 sprinkles 제거
rtttr1 Jan 2, 2026
c35370b
style: search에서 sprinkles 제거
rtttr1 Jan 2, 2026
76170a0
style: shared 내부 sprinkles 제거
rtttr1 Jan 2, 2026
cb49e3e
style: search 내부 sprinkles 제거
rtttr1 Jan 2, 2026
c1efc5c
refactor: 구조 개선으로 탭 클릭시 상단 클래스 정보 랜더링 방지
rtttr1 Jan 7, 2026
d760562
style: style 수정
rtttr1 Jan 7, 2026
5fa5e8a
refactor: 수정버튼 분리
rtttr1 Jan 7, 2026
bb10234
feat: 코드리뷰 반영
rtttr1 Jan 23, 2026
979e5d5
Merge pull request #671 from team-da-sh/refactor/#670/mypage-classinfo
rtttr1 Jan 23, 2026
bef5180
Merge branch 'develop' into refactor/#666/bundle-refactor
rtttr1 Jan 23, 2026
474a2ff
Merge pull request #668 from team-da-sh/refactor/#666/bundle-refactor
rtttr1 Jan 23, 2026
05a1889
refactor: Flex 컴포넌트 삭제
rtttr1 Jan 27, 2026
ad83c16
refactor: 도메인과 상관없는 컴포넌트, hook common 폴더로 이동
rtttr1 Jan 27, 2026
a887e35
refactor: 시간 util 정리
rtttr1 Jan 27, 2026
0652784
fix: storybook 배포 에러 해결
rtttr1 Jan 27, 2026
a3ed8c5
Merge pull request #673 from team-da-sh/refactor/#672/folder-organize
rtttr1 Jan 27, 2026
6b5f37d
Merge branch 'develop' into refactor/#599/modal-rendering
rtttr1 Jan 29, 2026
11e0fa8
Merge pull request #667 from team-da-sh/refactor/#599/modal-rendering
rtttr1 Jan 29, 2026
25dcc4f
fix: 린트 fix
rtttr1 Jan 29, 2026
bb78691
Merge pull request #675 from team-da-sh/refactor/#674/lint
rtttr1 Jan 29, 2026
01b239e
setting: nextjs 기본 설정
rtttr1 Jan 30, 2026
f8b6094
feat: app router 변경
rtttr1 Jan 31, 2026
e92ba4b
fix: import 에러 수정:
rtttr1 Feb 3, 2026
2cbecbb
fix: import 오류 해결
rtttr1 Feb 3, 2026
7582f52
feat: 로그인 handler 구현
rtttr1 Feb 5, 2026
e8fea85
feat: 로그아웃 핸들러 구현
rtttr1 Feb 5, 2026
054e4bd
feat: BFF catch-all route handler 설정
rtttr1 Feb 5, 2026
384d4c2
feat: 로그인 body isOnboarded 추가
rtttr1 Feb 5, 2026
a54b487
refactor: BFF 패턴 코드 개선
rtttr1 Feb 5, 2026
4c959c5
feat: reissue api 구현
rtttr1 Feb 5, 2026
1dd23b9
fix: localStorage 토큰 관리 로직 삭제
rtttr1 Feb 5, 2026
1458325
fix: BFF 패턴 도입으로 프록시 설정 해제
rtttr1 Feb 5, 2026
a4d7153
fix: reservations -> classes 라우트 경로 변경 지점 라우팅 path 변경
rtttr1 Feb 5, 2026
81b55ff
feat: 라우트 가드 설정
rtttr1 Feb 5, 2026
2de5550
refactor: 온보딩 과정 변경
rtttr1 Feb 5, 2026
2009e55
refactor: 탈퇴 과정 변경
rtttr1 Feb 5, 2026
4a45475
refactor: 프록시 코드 경량화
rtttr1 Feb 6, 2026
e503d23
feat: auth쪽 fetch 공용화
rtttr1 Feb 6, 2026
d47a2d3
feat: 쿠키설정 route handler 구현
rtttr1 Feb 6, 2026
7ba2879
chore: 주석 제거
rtttr1 Feb 6, 2026
20e7aa9
refactor: 온보딩 과정에서 access token 관리 TEMP 쿠키로 관리하도록 변경
rtttr1 Feb 6, 2026
dcd0ddb
refactor: 온보딩 라우트 가드 개선
rtttr1 Feb 6, 2026
2a67257
refactor: 쿠키 옵션 SSOT
rtttr1 Feb 6, 2026
8c90c1f
fix: reissue 실패시 리다이렉트 url 수정
rtttr1 Feb 6, 2026
4985fbd
refactor: 스토리북 설정 next에 맞게 변경
rtttr1 Feb 7, 2026
98aaba7
Merge pull request #677 from team-da-sh/refactor/#676/nextjs-migration
rtttr1 Feb 7, 2026
56a96fc
refactor: 스토리북 설정 next에 맞게 변경
rtttr1 Feb 7, 2026
0030d21
fix: 토큰 인증 관련 로직 삭제
rtttr1 Feb 7, 2026
505dda6
fix: 온보딩 완료 페이지 예외 처리
rtttr1 Feb 7, 2026
699ecc1
refactor: 에러 경계 처리
rtttr1 Feb 7, 2026
d07101e
refactor: 헤더 조정
rtttr1 Feb 7, 2026
2e810ef
setting: 번들 분석 도구 설정
rtttr1 Feb 9, 2026
aa5edd3
refactor: IcError svg에서 png로 형식 변경
rtttr1 Feb 9, 2026
be56a8b
Merge pull request #679 from team-da-sh/refactor/#678/auth
rtttr1 Feb 9, 2026
e34d7e4
Merge pull request #681 from team-da-sh/refactor/#680/layout
rtttr1 Feb 9, 2026
48c1e2f
refactor: image 태그 쓰는 svg 정리
rtttr1 Feb 9, 2026
877435a
setting: pnpm start시 build 부터 수행하게 변경
rtttr1 Feb 10, 2026
f0a80c2
feat: 홈 상단 배너에 Next Image 컴포넌트 사용
rtttr1 Feb 10, 2026
06bf914
Merge pull request #683 from team-da-sh/refactor/#682/image-font-opti…
rtttr1 Feb 10, 2026
2f1ee85
refactor: fetch 옵션으로 홈 화면 ISR
rtttr1 Feb 11, 2026
14f7b15
refactor: axios -> ky 로 라이브러리 변경
rtttr1 Feb 12, 2026
e5a4dd7
refactor: 401 리이슈 플로우 정리
rtttr1 Feb 12, 2026
62941ce
refactor: 홈 화면 api 패칭 ky 인스턴스 활용
rtttr1 Feb 12, 2026
e40f84b
setting: output 폴더명 .next 기본설정
rtttr1 Feb 12, 2026
efd71c7
Merge pull request #685 from team-da-sh/refactor/#684/home-ssr
rtttr1 Feb 12, 2026
2611a4f
Update autoSync.yml
rtttr1 Feb 12, 2026
5121f33
Update autoSync.yml
rtttr1 Feb 12, 2026
2ae8d92
Update autoSync.yml
rtttr1 Feb 12, 2026
e9b4a8e
Merge branch 'main' into develop
rtttr1 Feb 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
28 changes: 7 additions & 21 deletions .github/workflows/autoSync.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,28 +5,14 @@ on:
branches: [main]

jobs:
build:
sync:
runs-on: ubuntu-latest
container: pandoc/latex
steps:
- uses: actions/checkout@v2
- name: Install mustache (to update the date)
run: apk add ruby && gem install mustache
- name: creates output
run: sh ./build.sh
- name: Pushes to another repository
if: github.event_name == 'push'
id: push_directory
uses: cpina/github-action-push-to-another-repository@main
env:
API_TOKEN_GITHUB: ${{ secrets.AUTO_SYNC }}
- uses: actions/checkout@v4
with:
source-directory: 'output'
destination-github-username: constantly-dev
destination-repository-name: 35-APPJAM-WEB-DASH
user-email: ${{ secrets.EMAIL }}
commit-message: ${{ github.event.commits[0].message }}
target-branch: main
fetch-depth: 0

- name: Test get variable exported by push-to-another-repository
run: echo $DESTINATION_CLONED_DIRECTORY
- name: Push to fork
run: |
git remote add fork https://x-access-token:${{ secrets.AUTO_SYNK }}@github.com/hongmac/dash-client.git
git push fork main
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,6 @@ dist-ssr
storybook-static/
# Sentry Config File
.env.sentry-build-plugin

.next
next-env.d.ts
20 changes: 10 additions & 10 deletions .storybook/main.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import type { StorybookConfig } from '@storybook/react-vite';
import type { StorybookConfig } from '@storybook/nextjs-vite';
import { vanillaExtractPlugin } from '@vanilla-extract/vite-plugin';

const config: StorybookConfig = {
stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'],
addons: [
'@storybook/addon-onboarding',
'@storybook/addon-essentials',
'@chromatic-com/storybook',
'@storybook/addon-interactions',
],
framework: {
name: '@storybook/react-vite',
options: {},
addons: ['@chromatic-com/storybook', '@storybook/addon-a11y', '@storybook/addon-docs'],
framework: '@storybook/nextjs-vite',
staticDirs: ['../public'],
async viteFinal(config) {
return {
...config,
plugins: [...(config.plugins ?? []), ...vanillaExtractPlugin({ identifiers: 'debug' })],
};
},
};
export default config;
62 changes: 62 additions & 0 deletions .storybook/next-navigation-mock.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
const noop = () => {};

const mockRouter = {
push: noop,
replace: noop,
refresh: noop,
back: noop,
forward: noop,
prefetch: noop,
};

export function useRouter() {
return mockRouter;
}

export function usePathname(): string {
return '/';
}

export function useSearchParams(): ReadonlyURLSearchParams | null {
return typeof window !== 'undefined' ? new ReadonlyURLSearchParams(window.location.search) : null;
}

class ReadonlyURLSearchParams {
private params: URLSearchParams;

constructor(init?: string | URLSearchParams) {
this.params = new URLSearchParams(init);
}

get(name: string): string | null {
return this.params.get(name);
}

getAll(name: string): string[] {
return this.params.getAll(name);
}

has(name: string): boolean {
return this.params.has(name);
}

keys(): IterableIterator<string> {
return this.params.keys();
}

values(): IterableIterator<string> {
return this.params.values();
}

entries(): IterableIterator<[string, string]> {
return this.params.entries();
}

forEach(callbackfn: (value: string, key: string, parent: URLSearchParams) => void): void {
this.params.forEach(callbackfn);
}

toString(): string {
return this.params.toString();
}
}
7 changes: 5 additions & 2 deletions .storybook/preview.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
import type { Preview } from '@storybook/react';
import type { Preview } from '@storybook/nextjs-vite';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import React from 'react';
import ModalProvider from '../src/shared/components/ModalProvider/ModalProvier';
import ModalProvider from '../src/common/components/Modal/ModalProvider';
import '../src/shared/styles/global.css';
import '../src/shared/styles/reset.css';

const preview: Preview = {
parameters: {
nextjs: {
appDirectory: true,
},
controls: {
matchers: {
color: /(background|color)$/i,
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -335,6 +335,6 @@ const InfoText = () => {

- button 태그에 **`type`**은 명시적으로 작성
- 비교 연산자는 **`===`**와 **`!==`**만을 사용
- axios 안에서 **`then/catch`** 대신 **`async/await`** 지향
- API 호출 시 **`then/catch`** 대신 **`async/await`** 지향

</details>
13 changes: 13 additions & 0 deletions custom.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,16 @@ declare module '*.svg?react' {
const src: string;
export default src;
}

/** vanilla-extract *.css.ts 모듈이 Next.js PagesPageConfig 검사에 걸리지 않도록 default 보강 */
declare module '*.css' {
import type { ComponentType } from 'react';
const styles: { default: ComponentType<any>; [key: string]: string | ComponentType<any> };
export = styles;
}

declare module '*.css.js' {
import type { ComponentType } from 'react';
const styles: { default: ComponentType<any>; [key: string]: string | ComponentType<any> };
export = styles;
}
37 changes: 0 additions & 37 deletions index.html

This file was deleted.

30 changes: 30 additions & 0 deletions next.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import bundleAnalyzer from '@next/bundle-analyzer';
import { createVanillaExtractPlugin } from '@vanilla-extract/next-plugin';
import path from 'path';
import { fileURLToPath } from 'url';

const __dirname = path.dirname(fileURLToPath(import.meta.url));

const withBundleAnalyzer = bundleAnalyzer({
enabled: process.env.ANALYZE === 'true',
});

const withVanillaExtract = createVanillaExtractPlugin({
identifiers: 'debug', // 기존 Vite 설정과 동일 (short | debug | custom)
});

/** @type {import('next').NextConfig} */
const nextConfig = {
// output: 'export', // Single-Page Application (SPA) 출력.
basePath: process.env.NEXT_PUBLIC_BASE_PATH || '',
// 상위 폴더 lockfile과 구분해 이 프로젝트를 루트로 사용 (경고 제거)
outputFileTracingRoot: __dirname,
// src/pages는 SPA(react-router) 컴포넌트이므로 Pages Router로 검증하지 않도록 비활성화
typedRoutes: false,
eslint: {
// 마이그레이션 단계에서 기존 a11y/훅 규칙으로 빌드 실패하지 않도록 무시 (추후 규칙 수정 후 제거 권장)
ignoreDuringBuilds: true,
},
};

export default withBundleAnalyzer(withVanillaExtract(nextConfig));
39 changes: 19 additions & 20 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite --host",
"build": "tsc -b && vite build",
"dev": "next dev",
"analyze": "ANALYZE=true next build",
"build": "next build",
"start": "next build && next start -p 8080",
"lint": "eslint .",
"preview": "vite preview",
"storybook": "storybook dev -p 6006",
"build-storybook": "storybook build",
"svgr": "npx @svgr/cli -d src/shared/assets/svg --no-prettier --ignore-existing --typescript --no-dimensions --no-index --jsx-runtime automatic public/svg"
Expand All @@ -23,33 +24,31 @@
"@vanilla-extract/css": "^1.17.0",
"@vanilla-extract/recipes": "^0.5.5",
"@vanilla-extract/sprinkles": "^1.6.3",
"@vanilla-extract/vite-plugin": "^4.0.19",
"@vitejs/plugin-react": "^4.3.4",
"axios": "^1.7.9",
"clsx": "^2.1.1",
"ky": "^1.14.3",
"motion": "^12.23.12",
"next": "15.5.7",
"react": "^18.3.1",
"react-calendar": "^5.1.0",
"react-dom": "^18.3.1",
"react-error-boundary": "^5.0.0",
"react-hook-form": "^7.56.1",
"react-hot-toast": "^2.5.1",
"react-image-file-resizer": "^0.4.8",
"react-router-dom": "^7.1.1",
"swiper": "^11.2.1",
"vite-tsconfig-paths": "^5.1.4",
"zod": "^3.24.3",
"zustand": "^5.0.7"
},
"devDependencies": {
"@chromatic-com/storybook": "^3.2.3",
"@chromatic-com/storybook": "^5.0.0",
"@eslint/js": "^9.17.0",
"@storybook/addon-essentials": "^8.4.7",
"@storybook/addon-interactions": "^8.4.7",
"@storybook/addon-onboarding": "^8.4.7",
"@next/bundle-analyzer": "^16.1.6",
"@storybook/addon-a11y": "^10.2.7",
"@storybook/addon-docs": "^10.2.7",
"@storybook/blocks": "^8.4.7",
"@storybook/react": "^8.4.7",
"@storybook/react-vite": "^8.4.7",
"@storybook/nextjs-vite": "^10.2.7",
"@storybook/react": "^10.2.7",
"@storybook/react-vite": "^10.2.7",
"@storybook/test": "^8.4.7",
"@storybook/testing-library": "^0.2.2",
"@testing-library/dom": "^10.4.0",
Expand All @@ -60,7 +59,9 @@
"@types/swiper": "^6.0.0",
"@typescript-eslint/eslint-plugin": "^8.19.1",
"@typescript-eslint/parser": "^8.19.1",
"@vitejs/plugin-react-swc": "^3.5.0",
"@vanilla-extract/next-plugin": "^2.4.10",
"@vanilla-extract/vite-plugin": "^5.1.4",
"@vitest/coverage-v8": "^4.0.18",
"chromatic": "^11.28.0",
"eslint": "^9.17.0",
"eslint-config-prettier": "^9.1.0",
Expand All @@ -73,13 +74,11 @@
"globals": "^15.14.0",
"install": "^0.13.0",
"msw": "^2.10.4",
"storybook": "^8.4.7",
"storybook": "^10.2.7",
"typescript": "~5.6.3",
"typescript-eslint": "^8.28.0",
"vite": "^6.0.5",
"vite-bundle-visualizer": "^1.2.1",
"vite-plugin-svgr": "^4.3.0",
"vite-tsconfig-paths": "^5.1.4"
"vite": "^7.3.1",
"vitest": "^4.0.18"
},
"eslintConfig": {
"extends": [
Expand Down
Loading
Loading