Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
d8cd312
feat: storybook 설치 및 설정 (#12)
Ospac Aug 31, 2025
26d0d1f
feat: twMerge, clsx를 쓰기위한 cn util 함수 추가 (#12)
Ospac Aug 31, 2025
b06fdc6
feat: button 완료(#12)
Ospac Sep 1, 2025
63d6f83
docs: storybook 설치 설정(#12)
Ospac Sep 1, 2025
4e0e93d
feat(공통): chip-state, chip-tag 완료 (#12)
Ospac Sep 1, 2025
6374029
feat(공통): chip-profile, tag, state 완료 (#12)
Ospac Sep 1, 2025
6dccaf3
feat:랜딩페이지 ui 구현
kevin123753 Sep 1, 2025
54d6b2a
feat:랜딩페이지 반응형 구현
kevin123753 Sep 1, 2025
3fc8bf1
feat: 로그인페이지 및 회원가입페이지 반응형 구현
kevin123753 Sep 1, 2025
0129508
chore: visibility변경 및 auth페이지 폴더 및 파일 정리
kevin123753 Sep 1, 2025
ac55efe
feat: auth페이지 모달창 구현
kevin123753 Sep 1, 2025
e70b025
chore: develop 브랜치 최신 이력 반영
kevin123753 Sep 1, 2025
fe7d5df
feat: api 및 토큰 기능 구현
kevin123753 Sep 1, 2025
e79437f
fix: eslint error 수정 및 eslint.config 업데이트 (#12)
Ospac Sep 2, 2025
82f0949
feat: dashboard-header ui 완료 + svgr 세팅 (#12)
Ospac Sep 2, 2025
99e2aa6
feat: dashboard-header story 추가, font 및 color 수정 (#12)
Ospac Sep 2, 2025
a8d1cec
feat: side-menu ui 완료, story 추가 (#12)
Ospac Sep 2, 2025
5d83855
fix: webpack/svgr 삭제(svg 컴포넌트화 형식으로 변경), 버그 수정 (#12)
Ospac Sep 2, 2025
f321d3e
feat: dashbaord-layout 추가 + 모든 button active, hover 효과 추가 (#12)
Ospac Sep 2, 2025
b773c2c
fix: side-bar padding 변경(#12)
Ospac Sep 2, 2025
b40e377
feat: 미들웨어 쿠기 기능 구현
kevin123753 Sep 2, 2025
90a2c39
merge: common-components와 merge
kevin123753 Sep 2, 2025
16960a8
feat:계정관리 페이지 ui및 기능 일부 구현
kevin123753 Sep 2, 2025
53786a0
fix: 무한렌더링,회원가입페이지 오류 정정
kevin123753 Sep 3, 2025
931bfcc
fix: eslint, 컴포넌트 분해
kevin123753 Sep 3, 2025
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
6 changes: 3 additions & 3 deletions .github/ISSUE_TEMPLATE/bug-report.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
---
name: 버그 리포트
about: 버그 리포트
title: "[페이지이름 or 공통]: "
labels: "Fix"
assignees: ""
title: '[페이지이름 or 공통]: '
labels: 'Fix'
assignees: ''
---

## #️⃣ Related Issue
Expand Down
6 changes: 3 additions & 3 deletions .github/ISSUE_TEMPLATE/feature.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
---
name: 기능 구현 및 제안 이슈
about: 기능 구현 및 제안 이슈
title: "[페이지이름 or 공통]: "
labels: "Feature"
assignees: ""
title: '[페이지이름 or 공통]: '
labels: 'Feature'
assignees: ''
---

## #️⃣ Related Issue
Expand Down
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -75,4 +75,6 @@ sketch
.LSOverride

#
# End of https://www.toptal.com/developers/gitignore/api/nextjs,react,git
# End of https://www.toptal.com/developers/gitignore/api/nextjs,react,git
*storybook.log
storybook-static
9 changes: 9 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"javascript.preferences.importModuleSpecifier": "non-relative",
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"eslint.format.enable": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
}
}
10 changes: 7 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
# Taskify
> [!NOTE]
> 프로젝트 소개
>

> [!NOTE] 프로젝트 소개

# 기여자

# 주요 기능

### 유저 플로우 차트

<img width="4104" height="3432" alt="Taskify_ User Flow" src="https://github.com/user-attachments/assets/d1ca38ae-f5ff-464d-8b2a-62b5c349d44a" />

# 기술 스택

## 프로젝트 구조
12 changes: 6 additions & 6 deletions eslint.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@ const sheriffOptions: SheriffSettings = {
export default tseslint.config(sheriff(sheriffOptions), {
languageOptions: {
parserOptions: {
projectService: true,
project: './tsconfig.json',
tsconfigRootDir: __dirname,
tsconfigRootDir: import.meta.dirname,
},
},
rules: {
// https://typescript-eslint.io/rules/no-misused-promises/#checksvoidreturn
'@typescript-eslint/no-misused-promises': [
'error',
{
Expand All @@ -38,10 +38,10 @@ export default tseslint.config(sheriff(sheriffOptions), {
'@typescript-eslint/no-floating-promises': 'off',
'react-refresh/only-export-components': 'off',
'react/jsx-no-useless-fragment': 'off',
'react/jsx-boolean-value': 'off',
'@typescript-eslint/no-misused-spread': 'off',
'fsecond/prefer-destructured-optionals': 'off',
'unicorn/consistent-function-scoping': 'off',
'@typescript-eslint/naming-convention': 'off',
'jsdoc/require-description-complete-sentence': 'off',
'func-style': 'off',
'no-negated-condition': 'off',
'unicorn/consistent-function-scoping': 'off',
},
});
52 changes: 52 additions & 0 deletions middleware.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import { type NextRequest, NextResponse } from 'next/server';

const LOGIN_PATH = '/login';
const DASHBOARD_PATH = '/dashboard';
const MYDASHBOARD_PATH = '/mydashboard';

export function middleware(request: NextRequest): NextResponse {
const { pathname } = request.nextUrl;

// 보호된 경로들
const protectedPaths = [MYDASHBOARD_PATH, '/mypage', DASHBOARD_PATH];
// 인증 페이지들(로그인/회원가입)
const authPages = [LOGIN_PATH, '/signup'];

// 현재 경로가 보호된 경로인지 확인
const isProtectedPath = protectedPaths.some((path) =>
pathname.startsWith(path)
);

const accessToken = request.cookies.get('access_token');

// 이미 로그인된 사용자가 로그인/회원가입 페이지 접근 시 대시보드로 보냄
const isAuthPage = authPages.some((path) => pathname.startsWith(path));

if (isAuthPage && accessToken) {
const dashUrl = new URL(MYDASHBOARD_PATH, request.url);

return NextResponse.redirect(dashUrl);
}

if (isProtectedPath && !accessToken) {
// 쿠키가 없으면 로그인 페이지로 리다이렉트 (next 파라미터 없이)
const loginUrl = new URL(LOGIN_PATH, request.url);

return NextResponse.redirect(loginUrl);
}

return NextResponse.next();
}

export const config = {
matcher: [
MYDASHBOARD_PATH,
`${MYDASHBOARD_PATH}/:path*`,
'/mypage',
'/mypage/:path*',
DASHBOARD_PATH,
`${DASHBOARD_PATH}/:path*`,
LOGIN_PATH,
'/signup',
],
};
12 changes: 11 additions & 1 deletion next.config.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,18 @@
import type { NextConfig } from "next";
import type { NextConfig } from 'next';

const nextConfig: NextConfig = {
/* config options here */
reactStrictMode: true,
images: {
remotePatterns: [
{
protocol: 'https',
hostname: 'sprint-fe-project.s3.ap-northeast-2.amazonaws.com',
port: '',
pathname: '/taskify/**',
},
],
},
};

export default nextConfig;
Loading