From b42599bd5608ef4799112ce3d46126334aa75889 Mon Sep 17 00:00:00 2001 From: Jaeho Date: Sat, 16 May 2026 21:57:06 +0900 Subject: [PATCH 1/5] =?UTF-8?q?docs(widgets):=20workspace=20widget=20?= =?UTF-8?q?=EB=AC=B8=EC=84=9C=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/widgets/CLAUDE.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frontend/src/widgets/CLAUDE.md b/frontend/src/widgets/CLAUDE.md index 8885e7b5..ad23c576 100644 --- a/frontend/src/widgets/CLAUDE.md +++ b/frontend/src/widgets/CLAUDE.md @@ -75,7 +75,7 @@ widgets/{X} → pages/*, app/* ✗ |---|---|---| | `site-*` | 사이트 전역 (여러 페이지 재사용) | `site-nav`, `site-footer` | | `home-*` | 홈페이지 전용 | `home-hero`, `home-services`, `home-faq` | -| `workspace-*` (예정) | 워크스페이스 페이지 전용 | `workspace-sidebar` | +| `workspace-*` | 워크스페이스 페이지 전용 | `workspace-profile-card`, `workspace-section` | | `interview-*` (예정) | 면접 페이지 전용 | `interview-control`, `interview-transcript` | > prefix 가 페이지 종속을 명시적으로 표현. 한 페이지에서만 쓰이는 widget 도 정상. @@ -93,6 +93,8 @@ widgets/{X} → pages/*, app/* ✗ | `home-quote` | 다크 그린 quote · 팀 크레딧 | `/` | | `home-faq` | FAQ 아코디언 (`
` 기반) | `/` | | `home-cta` | 풀-블리드 CTA 배너 | `/` | +| `workspace-profile-card` | `useAuth().user` 기반 프로필 카드 (avatar + 핸들 + email + 연결 상태) | `/workspace` | +| `workspace-section` | 타이틀·설명·우측 액션·children 슬롯 컨테이너 (도메인 무관) | `/workspace` | --- From 80bc4ef09da194093896e9c0935f22e91b009181 Mon Sep 17 00:00:00 2001 From: Jaeho Date: Sat, 16 May 2026 21:58:51 +0900 Subject: [PATCH 2/5] =?UTF-8?q?feat(widgets):=20WorkspaceProfileCard=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/WorkspaceProfileCard.tsx | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 frontend/src/widgets/workspace-profile-card/ui/WorkspaceProfileCard.tsx diff --git a/frontend/src/widgets/workspace-profile-card/ui/WorkspaceProfileCard.tsx b/frontend/src/widgets/workspace-profile-card/ui/WorkspaceProfileCard.tsx new file mode 100644 index 00000000..77754f28 --- /dev/null +++ b/frontend/src/widgets/workspace-profile-card/ui/WorkspaceProfileCard.tsx @@ -0,0 +1,79 @@ +import { useAuth } from '@/features/auth' + +export function WorkspaceProfileCard() { + const { status, user } = useAuth() + + if (status === 'loading') return + if (!user) return null + + return ( +
+ +
+

+ @{user.githubUsername} +

+

+ {user.email ?? '이메일 미공개'} +

+

+ + GitHub로 연결됨 +

+
+
+ ) +} + +function Avatar({ url, name }: { url: string | null; name: string }) { + if (url) { + return ( + {name} + ) + } + const initial = name.charAt(0).toUpperCase() || '?' + return ( +
+ {initial} +
+ ) +} + +function GithubMark() { + return ( + + + + ) +} + +function ProfileSkeleton() { + return ( +
+
+
+
+
+
+
+ ) +} From 555769aad5bd2f4d1e5c4b07a647c693b1621a82 Mon Sep 17 00:00:00 2001 From: Jaeho Date: Sat, 16 May 2026 21:59:08 +0900 Subject: [PATCH 3/5] =?UTF-8?q?feat(widgets):=20WorkspaceSection=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workspace-section/ui/WorkspaceSection.tsx | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 frontend/src/widgets/workspace-section/ui/WorkspaceSection.tsx diff --git a/frontend/src/widgets/workspace-section/ui/WorkspaceSection.tsx b/frontend/src/widgets/workspace-section/ui/WorkspaceSection.tsx new file mode 100644 index 00000000..83ea2af0 --- /dev/null +++ b/frontend/src/widgets/workspace-section/ui/WorkspaceSection.tsx @@ -0,0 +1,33 @@ +import type { ReactNode } from 'react' + +//단순 위젯 수준은 model분리를 추후에 분리를 고려합니다. +type Props = { + title: string + description?: string + action?: ReactNode + children: ReactNode +} + +export function WorkspaceSection({ + title, + description, + action, + children, +}: Props) { + return ( +
+
+
+

+ {title} +

+ {description ? ( +

{description}

+ ) : null} +
+ {action} +
+ {children} +
+ ) +} From 7469b7cb257d5ee5f91e8f1b40cf1a047c1176b6 Mon Sep 17 00:00:00 2001 From: Jaeho Date: Sat, 16 May 2026 21:59:26 +0900 Subject: [PATCH 4/5] =?UTF-8?q?feat(widgets):=20workspace=20widget=20?= =?UTF-8?q?=EC=9D=B8=EB=8D=B1=EC=8A=A4=20=ED=8C=8C=EC=9D=BC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/widgets/workspace-profile-card/index.ts | 1 + frontend/src/widgets/workspace-section/index.ts | 1 + 2 files changed, 2 insertions(+) create mode 100644 frontend/src/widgets/workspace-profile-card/index.ts create mode 100644 frontend/src/widgets/workspace-section/index.ts diff --git a/frontend/src/widgets/workspace-profile-card/index.ts b/frontend/src/widgets/workspace-profile-card/index.ts new file mode 100644 index 00000000..4f004789 --- /dev/null +++ b/frontend/src/widgets/workspace-profile-card/index.ts @@ -0,0 +1 @@ +export { WorkspaceProfileCard } from './ui/WorkspaceProfileCard' diff --git a/frontend/src/widgets/workspace-section/index.ts b/frontend/src/widgets/workspace-section/index.ts new file mode 100644 index 00000000..29ea2cc9 --- /dev/null +++ b/frontend/src/widgets/workspace-section/index.ts @@ -0,0 +1 @@ +export { WorkspaceSection } from './ui/WorkspaceSection' From e3567cc5ed8b9c3419d79c7cc12a53027ac0b40f Mon Sep 17 00:00:00 2001 From: Jaeho Date: Sat, 16 May 2026 22:00:39 +0900 Subject: [PATCH 5/5] =?UTF-8?q?feat(workspace):=20WorkspacePage=20?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=EC=95=84=EC=9B=83=20=EB=B0=8F=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EA=B5=AC=EC=A1=B0=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/pages/Workspace/ui/WorkspacePage.tsx | 88 ++++++++++--------- 1 file changed, 45 insertions(+), 43 deletions(-) diff --git a/frontend/src/pages/Workspace/ui/WorkspacePage.tsx b/frontend/src/pages/Workspace/ui/WorkspacePage.tsx index adb7dd89..3b964b3b 100644 --- a/frontend/src/pages/Workspace/ui/WorkspacePage.tsx +++ b/frontend/src/pages/Workspace/ui/WorkspacePage.tsx @@ -1,51 +1,53 @@ -import { useAuth, useLogout } from '@/features/auth' +import { SiteNav } from '@/widgets/site-nav' +import { SiteFooter } from '@/widgets/site-footer' +import { WorkspaceProfileCard } from '@/widgets/workspace-profile-card' +import { WorkspaceSection } from '@/widgets/workspace-section' +//이 컴포넌트는 아직 초기 프로토타입 입니다. export default function WorkspacePage() { - const { user } = useAuth() - const { logout, loggingOut } = useLogout() - return ( -
-

Workspace

-

이력서·레포 관리 화면이 들어갈 자리입니다.

+
+ +
+ + + + + - {user ? ( -
- {user.avatarUrl ? ( - {user.githubUsername} - ) : null} -
-
- @{user.githubUsername} -
-
- {user.email ?? 'email 없음'} -
-
-
- ) : null} + + +
+ +
+ ) +} -
- -
-
+function EmptyResumeSlot() { + return ( +
+

아직 등록된 이력서가 없습니다.

+

+ 다음 단계에서 PDF 업로드가 가능해집니다. +

+
+ ) +} + +function EmptyRepoSlot() { + return ( +
+

아직 등록된 레포지토리가 없습니다.

+

+ 다음 단계에서 GitHub 레포 가져오기가 가능해집니다. +

+
) }