Skip to content

Commit 4d3a8fa

Browse files
authored
배포 최신화 (#14)
* chore: issue template 설정 * [IMPROVE] 공통 UI 컴포넌트 packages로 분리 (#13) * chore: packages ui에 있던 components, utils, hooks 분리 * fix: extension build 안되는 오류 해결 * chore: tailwind config 패키지로 분리 후 사용할 수 있도록 구현 * feat: packages/components에서 Button 컴포넌트 사용하도록 구현 * style: format 적용 * feat: packages/components에서 Card 컴포넌트 사용하도록 구현 * feat: packages/components에서 Input 컴포넌트 사용하도록 구현 * feat: packages/components에서 Toast, Tooltip 컴포넌트 사용하도록 구현 * feat: packages/utils에서 toast 함수 사용하도록 구현 * style: format 적용 * chore: 사용하지 않는 라이브러리 제거 * chore: PR 템플릿 추가
1 parent 771fa3f commit 4d3a8fa

121 files changed

Lines changed: 2584 additions & 2886 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
name: "🐞 Bug Report"
2+
description: "버그를 발견했을 때 사용하세요"
3+
title: "[BUG] "
4+
labels: ["bug"]
5+
body:
6+
- type: textarea
7+
id: desc
8+
attributes:
9+
label: 버그 설명
10+
description: 어떤 문제가 발생했는지 간단히 설명해주세요.
11+
placeholder: 예) 로그인 버튼을 눌렀는데 동작하지 않습니다.
12+
validations:
13+
required: true
14+
- type: textarea
15+
id: steps
16+
attributes:
17+
label: 재현 방법
18+
description: 버그를 재현하는 단계별 방법을 작성해주세요.
19+
placeholder: |
20+
1) 로그인 페이지로 이동
21+
2) 아이디 입력
22+
3) 로그인 버튼 클릭
23+
4) 에러 발생
24+
validations:
25+
required: true
26+
- type: textarea
27+
id: expected
28+
attributes:
29+
label: 예상 동작
30+
description: 원래 기대한 동작을 적어주세요.
31+
- type: dropdown
32+
id: severity
33+
attributes:
34+
label: 심각도
35+
options: ["S1-크리티컬", "S2-높음", "S3-보통", "S4-낮음"]
36+
default: 2
37+
- type: input
38+
id: env
39+
attributes:
40+
label: 환경 정보
41+
description: OS, 브라우저/버전, 실행 환경 등
42+
placeholder: ex) macOS 14 / Chrome 137
43+
- type: textarea
44+
id: logs
45+
attributes:
46+
label: 로그/스크린샷
47+
description: 콘솔 로그, 네트워크 응답, 스크린샷 등을 첨부해주세요.
48+
- type: checkboxes
49+
id: checklist
50+
attributes:
51+
label: 체크리스트
52+
options:
53+
- label: 최신 브랜치/버전에서 재현되는지 확인함
54+
- label: 중복 이슈 검색 완료
55+
- label: 재현 단계/환경 정보를 충분히 기입함

.github/ISSUE_TEMPLATE/epic.yml

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
name: "📌 Epic"
2+
description: "큰 단위 목표(Epic, Milestone)를 정의할 때 사용하세요"
3+
title: "[EPIC] "
4+
labels: ["epic"]
5+
body:
6+
- type: textarea
7+
id: goal
8+
attributes:
9+
label: 목표 (Goal)
10+
description: 이번 Epic/Milestone의 최종 목표를 작성해주세요.
11+
placeholder: 예) 11월 1주 출시를 위한 크롬 확장 기능 완성
12+
validations:
13+
required: true
14+
15+
- type: textarea
16+
id: context
17+
attributes:
18+
label: 배경 (Background / Context)
19+
description: 왜 이 Epic이 필요한지, 어떤 문제를 해결하기 위함인지 설명해주세요.
20+
placeholder: 예) 베타 피드백에서 저장한 페이지 내용이 다시 표시되지 않는 문제가 반복됨
21+
22+
- type: textarea
23+
id: deliverables
24+
attributes:
25+
label: 주요 산출물 (Deliverables)
26+
description: Epic 완료 시 제공해야 하는 결과물 목록
27+
placeholder: |
28+
- 확장 프로그램에서 저장된 페이지 정보 표시
29+
- 태그 자동완성 기능 제공
30+
- UI 가이드 문서 업데이트
31+
32+
- type: textarea
33+
id: links
34+
attributes:
35+
label: 관련 작업 (Linked Issues)
36+
description: Epic을 구성하는 하위 이슈 목록 (#123 형식으로 링크)
37+
placeholder: |
38+
- #123 [FEATURE] 저장된 페이지 표시
39+
- #124 [FEATURE] 태그 자동완성
40+
- #125 [TASK] UI 가이드 문서화
41+
42+
- type: textarea
43+
id: success
44+
attributes:
45+
label: 성공 기준 (Success Criteria)
46+
description: Epic 성공 조건을 정량/정성 기준으로 작성
47+
placeholder: |
48+
- 크롬 확장 설치 후 저장된 페이지 확인 가능
49+
- 태그 자동완성 기능 정상 동작
50+
- 내부 QA 테스트 90% 이상 통과
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
name: "✨ Feature Request"
2+
description: "새로운 기능을 제안할 때 사용하세요"
3+
title: "[FEATURE] "
4+
labels: ["feature"]
5+
body:
6+
- type: textarea
7+
id: background
8+
attributes:
9+
label: 제안 배경
10+
description: 어떤 문제를 해결하기 위해 이 기능이 필요한지 설명해주세요.
11+
placeholder: 현재 어떤 불편함이 있나요?
12+
- type: textarea
13+
id: proposal
14+
attributes:
15+
label: 제안 내용
16+
description: 구현하고자 하는 기능을 구체적으로 설명해주세요.
17+
placeholder: 사용자가 ~~ 할 수 있도록 버튼을 추가한다.
18+
validations:
19+
required: true
20+
- type: textarea
21+
id: acceptance
22+
attributes:
23+
label: 완료 기준 (Acceptance Criteria)
24+
description: 기능이 완료되었다고 판단할 수 있는 테스트 가능한 기준을 써주세요.
25+
placeholder: |
26+
- 사용자는 저장된 페이지에서 태그 자동완성을 볼 수 있다
27+
- 3가지 시나리오에서 E2E 테스트 통과
28+
- type: textarea
29+
id: alternatives
30+
attributes:
31+
label: 대안
32+
description: 고려한 다른 해결책이 있나요?
33+
- type: dropdown
34+
id: priority
35+
attributes:
36+
label: 우선순위
37+
options: ["P0-가장 높음", "P1-높음", "P2-보통", "P3-낮음"]
38+
default: 2
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
name: "🛠 Improvement / Refactor"
2+
description: "코드 품질 개선, 최적화, 리팩토링 이슈"
3+
title: "[IMPROVE] "
4+
labels: ["improvement"]
5+
body:
6+
- type: textarea
7+
id: target
8+
attributes:
9+
label: 개선할 대상
10+
description: 어떤 코드/모듈/기능을 개선하려고 하나요?
11+
placeholder: ex) MenuService 클래스의 메소드 구조
12+
validations:
13+
required: true
14+
- type: textarea
15+
id: plan
16+
attributes:
17+
label: 개선 내용
18+
description: 어떤 방식으로 개선/리팩토링할 예정인가요?
19+
placeholder: ex) 중복 코드를 제거하고 공통 유틸로 분리
20+
validations:
21+
required: true
22+
- type: textarea
23+
id: risks
24+
attributes:
25+
label: 리스크/영향 범위
26+
description: 호환성, 성능 영향, 마이그레이션 필요 여부 등
27+
- type: textarea
28+
id: acceptance
29+
attributes:
30+
label: 완료 기준
31+
description: 개선 완료 판단 기준을 명시해주세요.
32+
placeholder: ex) 사이드 이펙트 없이 동일 테스트 케이스 100% 통과

.github/ISSUE_TEMPLATE/task.yml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
name: "📋 Task / Chore"
2+
description: "기타 업무나 문서/환경 관련 작업"
3+
title: "[TASK] "
4+
labels: ["task"]
5+
body:
6+
- type: textarea
7+
id: summary
8+
attributes:
9+
label: 작업 설명
10+
description: 어떤 작업을 해야 하는지 간단히 작성해주세요.
11+
placeholder: ex) README에 설치 가이드 추가
12+
validations:
13+
required: true
14+
- type: textarea
15+
id: acceptance
16+
attributes:
17+
label: 완료 조건
18+
description: 이 작업이 완료되었다고 판단할 기준을 작성해주세요.
19+
placeholder: ex) 문서 PR 머지 및 배포 페이지에 반영 확인
20+
- type: dropdown
21+
id: priority
22+
attributes:
23+
label: 우선순위
24+
options: ["P0-가장 높음", "P1-높음", "P2-보통", "P3-낮음"]
25+
default: 3

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
## 설명
2+
3+
<!--
4+
해당 Pull Request에 대한 설명을 작성합니다.
5+
6+
ex)
7+
백엔드와 소셜 로그인을 연동하는 작업을 진행했습니다.
8+
-->
9+
10+
## 작업내용
11+
12+
<!--
13+
해당 Pull Request에서 진행했던 내용들을 작성합니다.
14+
15+
ex)
16+
- [x] 카카오 로그인
17+
- [x] 구글 로그인
18+
-->
19+
20+
## 참고(선택)
21+
22+
<!--
23+
리뷰어가 확인해주어야 하는 부분에 대해 작성합니다.
24+
25+
ex)
26+
- 카카오 로그인 정상 작동하는지 확인 후 코멘트 부탁드립니다.
27+
-->
28+
29+
## 스크린샷(선택)
30+
31+
<!--
32+
구현한 내용에 대한 스크린샷을 첨부합니다.
33+
-->
34+
35+
## 메모(선택)
36+
37+
<!--
38+
해당 Pull Request에 대한 메모를 작성합니다.
39+
40+
ex)
41+
- 추후 디벨롭 예정입니다.
42+
-->
43+
44+
## 연관 이슈
45+
46+
<!--
47+
진행했던 이슈의 번호를 입력합니다.
48+
49+
ex)
50+
resolved #1
51+
-->
52+
53+
resolved #{이슈넘버}

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ This Turborepo includes the following packages/apps:
1818

1919
- `docs`: a [Next.js](https://nextjs.org/) app
2020
- `web`: another [Next.js](https://nextjs.org/) app
21-
- `@repo/ui`: a stub React component library shared by both `web` and `docs` applications
22-
- `@repo/eslint-config`: `eslint` configurations (includes `eslint-config-next` and `eslint-config-prettier`)
23-
- `@repo/typescript-config`: `tsconfig.json`s used throughout the monorepo
21+
- `@linkyboard/components`: a stub React component library shared by both `web` and `docs` applications
22+
- `@linkyboard/eslint-config`: `eslint` configurations (includes `eslint-config-next` and `eslint-config-prettier`)
23+
- `@linkyboard/typescript-config`: `tsconfig.json`s used throughout the monorepo
2424

2525
Each package/app is 100% [TypeScript](https://www.typescriptlang.org/).
2626

Original file line numberDiff line numberDiff line change
@@ -1,26 +1,24 @@
11
import js from "@eslint/js";
2-
import { config as baseConfig } from "@repo/eslint-config/base";
2+
import { config as baseConfig } from "@linkyboard/eslint-config/base";
33

4+
import { globalIgnores } from "eslint/config";
45
import reactHooks from "eslint-plugin-react-hooks";
56
import reactRefresh from "eslint-plugin-react-refresh";
6-
import { globalIgnores } from "eslint/config";
77
import globals from "globals";
8-
import tseslint from "typescript-eslint";
98

10-
export default tseslint.config([
9+
const config = [
1110
...baseConfig,
1211
globalIgnores(["dist"]),
1312
{
1413
files: ["**/*.{ts,tsx}"],
15-
extends: [
16-
js.configs.recommended,
17-
tseslint.configs.recommended,
18-
reactHooks.configs["recommended-latest"],
19-
reactRefresh.configs.vite,
20-
],
14+
...js.configs.recommended,
15+
...reactHooks.configs["recommended-latest"],
16+
...reactRefresh.configs.vite,
2117
languageOptions: {
2218
ecmaVersion: 2020,
2319
globals: globals.browser,
2420
},
2521
},
26-
]);
22+
];
23+
24+
export default config;

apps/extension/package.json

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,33 +10,31 @@
1010
"preview": "vite preview"
1111
},
1212
"dependencies": {
13+
"@linkyboard/hooks": "workspace:*",
14+
"@linkyboard/utils": "workspace:*",
15+
"@linkyboard/components": "workspace:*",
1316
"@hookform/resolvers": "^5.2.1",
14-
"@radix-ui/react-slot": "^1.2.3",
15-
"@repo/ui": "workspace:*",
1617
"@tailwindcss/vite": "^4.1.11",
1718
"@tanstack/react-query": "^5.59.20",
18-
"class-variance-authority": "^0.7.1",
19-
"clsx": "^2.1.1",
2019
"ky": "^1.8.2",
2120
"lettercoder": "^0.1.1",
2221
"lucide-react": "^0.536.0",
23-
"next-themes": "^0.4.6",
2422
"react": "^19.1.0",
2523
"react-dom": "^19.1.0",
2624
"react-hook-form": "^7.62.0",
2725
"react-router-dom": "^6.28.0",
28-
"sonner": "^2.0.7",
29-
"tailwind-merge": "^3.3.1",
3026
"zod": "^4.0.15",
3127
"zustand": "^5.0.1"
3228
},
3329
"devDependencies": {
3430
"@eslint/js": "^9.30.1",
35-
"@repo/eslint-config": "workspace:*",
36-
"@repo/types": "workspace:*",
37-
"@repo/typescript-config": "workspace:*",
31+
"@linkyboard/eslint-config": "workspace:*",
32+
"@linkyboard/types": "workspace:*",
33+
"@linkyboard/typescript-config": "workspace:*",
34+
"@linkyboard/tailwind-config": "workspace:*",
3835
"@types/react": "^19.1.8",
3936
"@types/react-dom": "^19.1.6",
37+
"@typescript-eslint/eslint-plugin": "^8.44.1",
4038
"@vitejs/plugin-react-swc": "^3.10.2",
4139
"chrome-types": "^0.1.368",
4240
"eslint": "^9.30.1",

apps/extension/src/components/home/login-button.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,11 @@ import Google from "@/assets/google.svg?react";
44
import { useReplaceNavigate } from "@/hooks/use-replace-navigate";
55
import { useUserStore } from "@/lib/zustand/user";
66
import { setCookie } from "@/utils/cookie";
7-
import { errorToast } from "@/utils/toast";
7+
import { Button } from "@linkyboard/components";
8+
import { errorToast } from "@linkyboard/utils";
89

910
import { Loader2 } from "lucide-react";
1011

11-
import { Button } from "../ui/button";
12-
1312
const baseUrl = import.meta.env.VITE_API_BASE_URL;
1413
const googleLoginPage = baseUrl + "/auth/google?redirectType=extension";
1514

0 commit comments

Comments
 (0)