From c51471fd7ed4b93d3245417611c51b9d4b5b28cb Mon Sep 17 00:00:00 2001 From: Jaeho Date: Thu, 4 Jun 2026 02:41:28 +0900 Subject: [PATCH 1/3] =?UTF-8?q?fix(interview):=20=EB=A9=B4=EC=A0=91=20?= =?UTF-8?q?=EC=8A=A4=ED=85=8C=EC=9D=B4=EC=A7=80=20=EB=B0=B0=EA=B2=BD=20?= =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=EA=B0=80=20=EB=B3=B4=EC=9D=B4?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=98=A4=EB=B2=84=EB=A0=88=EC=9D=B4=20?= =?UTF-8?q?=EC=A1=B0=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 흰색 스크림이 너무 진해 배경 사진이 묻혀 안 보이던 문제. from-white/55..to-white/75 를 옅게 낮춰 사진을 드러내고, 가독성은 헤더·질문 카드·컴포저의 자체 배경으로 유지한다. Co-Authored-By: Claude Opus 4.8 --- frontend/src/features/interview/ui/live/InterviewStage.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frontend/src/features/interview/ui/live/InterviewStage.tsx b/frontend/src/features/interview/ui/live/InterviewStage.tsx index 3492b799..317a1cdd 100644 --- a/frontend/src/features/interview/ui/live/InterviewStage.tsx +++ b/frontend/src/features/interview/ui/live/InterviewStage.tsx @@ -73,9 +73,11 @@ export function InterviewStage({ className="absolute inset-0 bg-cover bg-center" style={{ backgroundImage: `url(${BG})` }} /> + {/* 배경 사진이 보이도록 옅은 스크림만. 텍스트 가독성은 헤더·질문 카드· + 컴포저가 각자 배경(반투명+blur / solid)으로 확보한다. */}
{/* 진행도 바 */} From 3f314b64da4e8e9a0fc56c19e5d18b78f907b80a Mon Sep 17 00:00:00 2001 From: Jaeho Date: Thu, 4 Jun 2026 02:41:37 +0900 Subject: [PATCH 2/3] =?UTF-8?q?feat(home):=20Get=20Started=20CTA=EB=A5=BC?= =?UTF-8?q?=20=EB=A1=9C=EA=B7=B8=EC=9D=B8/=EC=9B=8C=ED=81=AC=EC=8A=A4?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=8A=A4=EB=A1=9C=20=EB=B6=84=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 헤더와 동일하게, 로그인 상태면 /workspace, 아니면 /login 으로 이동. useGetStartedTarget 훅을 추가해 히어로·메인 CTA·푸터의 Get Started 버튼이 공유한다. 기존 #cta/#login(깨진 앵커) 정리. Co-Authored-By: Claude Opus 4.8 --- frontend/src/features/auth/index.ts | 1 + .../src/features/auth/model/useGetStartedTarget.ts | 9 +++++++++ frontend/src/widgets/home-cta/ui/HomeCta.tsx | 10 +++++++--- frontend/src/widgets/home-hero/ui/ScreenContent.tsx | 9 ++++++--- frontend/src/widgets/site-footer/ui/SiteFooter.tsx | 4 +++- 5 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 frontend/src/features/auth/model/useGetStartedTarget.ts diff --git a/frontend/src/features/auth/index.ts b/frontend/src/features/auth/index.ts index 25e8975f..2f08b46f 100644 --- a/frontend/src/features/auth/index.ts +++ b/frontend/src/features/auth/index.ts @@ -1,5 +1,6 @@ export { AuthProvider } from './model/AuthProvider' export { useAuth } from './model/useAuth' +export { useGetStartedTarget } from './model/useGetStartedTarget' export { useLogout } from './model/useLogout' export type { AuthContextValue, AuthStatus } from './model/AuthContext' export { GithubLoginButton } from './ui/GithubLoginButton' diff --git a/frontend/src/features/auth/model/useGetStartedTarget.ts b/frontend/src/features/auth/model/useGetStartedTarget.ts new file mode 100644 index 00000000..24c42ed0 --- /dev/null +++ b/frontend/src/features/auth/model/useGetStartedTarget.ts @@ -0,0 +1,9 @@ +import { useAuth } from './useAuth' + +// "Get Started" CTA 목적지. 헤더(SiteNav)와 동일한 분기: +// 로그인 상태면 워크스페이스, 아니면 로그인 페이지. +// (loading 중에도 로그인으로 — 로그인 페이지가 인증 사용자를 워크스페이스로 보낸다.) +export function useGetStartedTarget(): string { + const { status } = useAuth() + return status === 'authenticated' ? '/workspace' : '/login' +} diff --git a/frontend/src/widgets/home-cta/ui/HomeCta.tsx b/frontend/src/widgets/home-cta/ui/HomeCta.tsx index 953fca4f..226afca2 100644 --- a/frontend/src/widgets/home-cta/ui/HomeCta.tsx +++ b/frontend/src/widgets/home-cta/ui/HomeCta.tsx @@ -1,4 +1,8 @@ +import { Link } from 'react-router-dom' +import { useGetStartedTarget } from '@/features/auth' + export function HomeCta() { + const getStartedTo = useGetStartedTarget() return (
@@ -31,8 +35,8 @@ export function HomeCta() { 지금 GitHub 계정만 연결하면, 30초 안에 첫 모의면접이 시작됩니다.

- Get Started @@ -42,7 +46,7 @@ export function HomeCta() { > → - +
diff --git a/frontend/src/widgets/home-hero/ui/ScreenContent.tsx b/frontend/src/widgets/home-hero/ui/ScreenContent.tsx index 0d50d1fb..b2d37f94 100644 --- a/frontend/src/widgets/home-hero/ui/ScreenContent.tsx +++ b/frontend/src/widgets/home-hero/ui/ScreenContent.tsx @@ -1,3 +1,5 @@ +import { Link } from 'react-router-dom' +import { useGetStartedTarget } from '@/features/auth' import { useTypewriter } from '@/shared/hooks' const TYPED_TEXT = 'Stack Up' @@ -7,6 +9,7 @@ export function ScreenContent() { startDelayMs: 850, stepMs: 130, }) + const getStartedTo = useGetStartedTarget() return (
@@ -42,8 +45,8 @@ export function ScreenContent() {
- Get Started @@ -53,7 +56,7 @@ export function ScreenContent() { > → - +
) diff --git a/frontend/src/widgets/site-footer/ui/SiteFooter.tsx b/frontend/src/widgets/site-footer/ui/SiteFooter.tsx index 4bf93371..8e534aa7 100644 --- a/frontend/src/widgets/site-footer/ui/SiteFooter.tsx +++ b/frontend/src/widgets/site-footer/ui/SiteFooter.tsx @@ -1,4 +1,5 @@ import { Link } from 'react-router-dom' +import { useGetStartedTarget } from '@/features/auth' // 단순 뷰 섹션 widgets 에선 굳이 나누지 않는게 좋다고 판단했습니다. // 상수, 메세지 등 마찬가지 @@ -33,6 +34,7 @@ const columns: { title: string; links: FooterLink[] }[] = [ ] export function SiteFooter() { + const getStartedTo = useGetStartedTarget() return (