Skip to content

Commit d84fd50

Browse files
committed
chore: 푸터, 예시메일 등 디자인 수정 및 빌드 에러 수정
1 parent 5516eb2 commit d84fd50

File tree

7 files changed

+89
-44
lines changed

7 files changed

+89
-44
lines changed

src/components/common/Container.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ interface ContainerProps {
77

88
const Container: React.FC<ContainerProps> = ({ children, className = '' }) => {
99
return (
10-
<div className={`max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 ${className}`}>
10+
<div className={`max-w-5xl mx-auto px-4 sm:px-6 lg:px-8 ${className}`}>
1111
{children}
1212
</div>
1313
);

src/components/common/EmailTemplate.tsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,16 @@ interface EmailTemplateProps {
99
const EmailTemplate: React.FC<EmailTemplateProps> = ({ toEmail, quizLink }) => {
1010
const navigate = useNavigate();
1111
return (
12-
<div className="font-pretendard p-4 sm:p-6 lg:p-10">
12+
<div className="font-pretendard py-4 sm:p-6 lg:p-10">
1313
<div className="max-w-2xl mx-auto bg-white rounded-xl sm:rounded-2xl shadow-lg overflow-hidden">
1414
{/* Header with Logo */}
1515
<div className="bg-gradient-to-r from-brand-500 to-brand-600 p-6 sm:p-8 text-center">
1616
<div className="flex items-center justify-center space-x-2 mb-3 sm:mb-4">
17-
<span className="text-2xl sm:text-3xl font-bold text-white">CS</span>
18-
<span className="text-2xl sm:text-3xl font-bold text-blue-100">25</span>
17+
<img
18+
src="/cs25.png"
19+
alt="CS25"
20+
className="h-6 sm:h-8 w-auto"
21+
/>
1922
</div>
2023
<h1 className="text-xl sm:text-2xl font-bold text-white">오늘의 CS 문제</h1>
2124
<p className="text-sm sm:text-base text-brand-100 mt-2">AI가 준비한 맞춤형 문제를 확인하세요</p>
@@ -32,7 +35,7 @@ const EmailTemplate: React.FC<EmailTemplateProps> = ({ toEmail, quizLink }) => {
3235
<h2 className="text-xl sm:text-2xl font-bold text-gray-900 mb-3 sm:mb-4">오늘의 문제를 풀어보세요!</h2>
3336
<p className="text-sm sm:text-base text-gray-600 leading-relaxed mb-4 sm:mb-6 px-2 sm:px-0">
3437
안녕하세요! CS25에서 오늘의 맞춤형 CS 문제를 보내드립니다.<br className="hidden sm:block" />
35-
<span className="block sm:inline">AI가 생성한 문제와 상세한 해설로 CS 지식을 향상시켜보세요.</span>
38+
<span className="block sm:inline">데일리 문제와 상세한 AI 해설로 CS 지식을 향상시켜보세요.</span>
3639
</p>
3740
</div>
3841

src/components/common/Footer.tsx

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,43 @@ import Container from './Container';
33

44
const Footer: React.FC = () => {
55
return (
6-
<footer className="bg-gray-800 text-white text-center py-10 font-pretendard">
6+
<footer className="bg-gray-800 text-white py-10 font-pretendard">
77
<Container>
8-
<p>&copy; 2025 CS25. All rights reserved.</p>
8+
<div className="flex flex-col items-center space-y-4">
9+
{/* 연락처 정보 */}
10+
<div className="flex flex-col sm:flex-row items-center gap-4 sm:gap-8">
11+
{/* GitHub 링크 */}
12+
<div className="flex items-center space-x-2">
13+
<svg className="w-5 h-5" fill="currentColor" viewBox="0 0 24 24">
14+
<path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
15+
</svg>
16+
<a
17+
href="https://github.com/NBC-finalProject"
18+
target="_blank"
19+
rel="noopener noreferrer"
20+
className="text-gray-300 hover:text-white transition-colors duration-300 text-sm font-medium"
21+
>
22+
CS25 Github
23+
</a>
24+
</div>
25+
26+
{/* 이메일 */}
27+
<div className="flex items-center space-x-2">
28+
<svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
29+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M3 8l7.89 4.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" />
30+
</svg>
31+
<a
32+
href="mailto:noreplycs25@gmail.com"
33+
className="text-gray-300 hover:text-white transition-colors duration-300 text-sm font-medium"
34+
>
35+
noreplycs25@gmail.com
36+
</a>
37+
</div>
38+
</div>
39+
40+
{/* 저작권 */}
41+
<p className="text-gray-400 text-sm">&copy; 2025 CS25. All rights reserved.</p>
42+
</div>
943
</Container>
1044
</footer>
1145
);

src/components/sections/FeaturesSection.tsx

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ const FeaturesSection: React.FC = () => {
1818
},
1919
{
2020
icon: (
21-
<div className="w-12 h-12 bg-navy-100 rounded-xl flex items-center justify-center">
22-
<svg className="w-6 h-6 text-navy-600" fill="none" stroke="currentColor" viewBox="0 0 24 24">
21+
<div className="w-12 h-12 bg-brand-100 rounded-xl flex items-center justify-center">
22+
<svg className="w-6 h-6 text-brand-600" fill="none" stroke="currentColor" viewBox="0 0 24 24">
2323
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M13 10V3L4 14h7v7l9-11h-7z" />
2424
</svg>
2525
</div>
@@ -47,10 +47,18 @@ const FeaturesSection: React.FC = () => {
4747
<Container>
4848
<div className="text-center max-w-3xl mx-auto mb-12 sm:mb-16 px-4 sm:px-0">
4949
<h2 className="text-2xl sm:text-3xl md:text-4xl lg:text-5xl font-bold mb-4 sm:mb-6 text-gray-900">
50-
AI 기반 CS 학습의 혁신
50+
AI 기반 CS 학습의{' '}
51+
<span className="bg-gradient-to-r from-brand-600 via-purple-600 to-blue-600 bg-clip-text text-transparent animate-pulse">
52+
혁신
53+
</span>
5154
</h2>
5255
<p className="text-base sm:text-lg md:text-xl text-gray-600 leading-relaxed">
53-
AI가 생성하고 해설하는 개인화된 CS 지식 학습 경험
56+
AI가 생성하고 해설하는{' '}
57+
<span className="font-semibold text-brand-600 hover:scale-105 transition-transform inline-block cursor-default">
58+
개인화된
59+
</span>{' '}
60+
CS 지식 학습 경험{' '}
61+
<span className="inline-block animate-bounce delay-100"></span>
5462
</p>
5563
</div>
5664

@@ -59,21 +67,24 @@ const FeaturesSection: React.FC = () => {
5967
<div
6068
key={index}
6169
className="bg-white rounded-xl sm:rounded-2xl p-6 sm:p-8 shadow-sm border border-gray-100 hover:shadow-lg transition-all duration-300 hover:-translate-y-1 group"
70+
style={{
71+
animationDelay: `${index * 200}ms`
72+
}}
6273
>
63-
<div className="mb-4 sm:mb-6">
74+
<div className="mb-4 sm:mb-6 group-hover:scale-110 transition-transform duration-300">
6475
{feature.icon}
6576
</div>
6677

67-
<h3 className="text-lg sm:text-xl font-bold text-gray-900 mb-3 sm:mb-4 group-hover:text-navy-700 transition-colors">
68-
{feature.title}
78+
<h3 className="text-lg sm:text-xl font-bold text-gray-900 mb-3 sm:mb-4 group-hover:text-brand-600 transition-colors">
79+
<span className="hover:animate-pulse">{feature.title}</span>
6980
</h3>
7081

71-
<p className="text-sm sm:text-base text-gray-600 mb-2 sm:mb-3 leading-relaxed">
82+
<p className="text-sm sm:text-base text-gray-600 mb-2 sm:mb-3 leading-relaxed break-keep group-hover:text-gray-700 transition-colors">
7283
{feature.description}
7384
</p>
7485

75-
<p className="text-xs sm:text-sm text-gray-500">
76-
{feature.details}
86+
<p className="text-xs sm:text-sm text-gray-500 group-hover:text-gray-600 transition-colors">
87+
<span className="inline-block group-hover:animate-bounce">💡</span> {feature.details}
7788
</p>
7889
</div>
7990
))}

src/components/sections/HeroSection.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,7 @@ const HeroSection: React.FC<HeroSectionProps> = ({ onSubscribeClick }) => {
3434
className="bg-gradient-to-r from-brand-500 to-brand-600 text-white px-6 sm:px-8 py-3 sm:py-4 rounded-full font-semibold text-base sm:text-lg transition-all duration-300 hover:from-brand-600 hover:to-brand-700 hover:scale-105 hover:shadow-xl group w-full sm:w-auto max-w-xs"
3535
>
3636
<span className="flex items-center justify-center">
37-
무료로 구독하기
38-
<svg className="w-4 h-4 sm:w-5 sm:h-5 ml-2 group-hover:translate-x-1 transition-transform" fill="none" stroke="currentColor" viewBox="0 0 24 24">
39-
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M17 8l4 4m0 0l-4 4m4-4H3" />
40-
</svg>
37+
무료 구독하기
4138
</span>
4239
</button>
4340

src/hooks/useUser.ts

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -35,29 +35,29 @@ export const useUserProfileSubscription = (enabled: boolean = true) => {
3535
});
3636
};
3737

38-
// 사용자 퀴즈 히스토리 조회
39-
export const useUserQuizHistory = (page: number = 0, size: number = 10, enabled: boolean = true) => {
40-
return useQuery({
41-
queryKey: userKeys.quizHistory(page, size),
42-
queryFn: async () => {
43-
const response = await userAPI.getQuizHistory(page, size);
44-
return (response as any).data;
45-
},
46-
enabled,
47-
});
48-
};
38+
// 사용자 퀴즈 히스토리 조회 (미구현으로 주석 처리)
39+
// export const useUserQuizHistory = (page: number = 0, size: number = 10, enabled: boolean = true) => {
40+
// return useQuery({
41+
// queryKey: userKeys.quizHistory(page, size),
42+
// queryFn: async () => {
43+
// const response = await userAPI.getQuizHistory(page, size);
44+
// return (response as any).data;
45+
// },
46+
// enabled,
47+
// });
48+
// };
4949

50-
// 사용자 랭킹 조회
51-
export const useUserRanking = (page: number = 0, size: number = 10, enabled: boolean = true) => {
52-
return useQuery({
53-
queryKey: userKeys.ranking(page, size),
54-
queryFn: async () => {
55-
const response = await userAPI.getRanking(page, size);
56-
return (response as any).data;
57-
},
58-
enabled,
59-
});
60-
};
50+
// 사용자 랭킹 조회 (미구현으로 주석 처리)
51+
// export const useUserRanking = (page: number = 0, size: number = 10, enabled: boolean = true) => {
52+
// return useQuery({
53+
// queryKey: userKeys.ranking(page, size),
54+
// queryFn: async () => {
55+
// const response = await userAPI.getRanking(page, size);
56+
// return (response as any).data;
57+
// },
58+
// enabled,
59+
// });
60+
// };
6161

6262
// 사용자 틀린 문제 조회
6363
export const useUserWrongQuiz = (enabled: boolean = true) => {

src/utils/tokenManager.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class CookieTokenManager implements TokenManager {
6565
const response = await authAPI.checkAuthStatus();
6666

6767
// 응답 구조: {"httpCode":200,"data":boolean}
68-
const isAuthenticated = response?.data === true;
68+
const isAuthenticated = (response as any)?.data === true;
6969

7070
return isAuthenticated;
7171
} catch (error) {

0 commit comments

Comments
 (0)