Skip to content

Commit c4ae6a5

Browse files
committed
refactor: 코드 포맷팅
1 parent d4ff69a commit c4ae6a5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+3129
-2025
lines changed

.github/workflows/deploy.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,4 @@ jobs:
3838
-d -p 80:80 -p 443:443 \
3939
--name ${{secrets.DOCKERHUB_REPO}} \
4040
${{secrets.DOCKERHUB_USERNAME}}/${{secrets.DOCKERHUB_REPO}}:latest
41-
sudo docker image prune -f
41+
sudo docker image prune -f

README.md

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,56 @@
11
# CS25
2+
23
### [📨 CS25 구독하러 가기](https://cs25.co.kr)
34

45
## 🔗 **AI가 생성하고 해설하는 CS지식 메일 구독 서비스**
6+
57
<img width="1080" alt="스크린샷 2025-06-27 오후 7 08 33" src="https://github.com/user-attachments/assets/a2dcb64d-c2a8-41b1-ae0c-918b07f019fe" />
68
<img width="1080" alt="스크린샷 2025-06-27 오후 7 09 22" src="https://github.com/user-attachments/assets/bd04f051-2d72-4454-bdf2-87983266f86b" />
79
<img width="1080" alt="스크린샷 2025-06-27 오후 7 08 50" src="https://github.com/user-attachments/assets/b6180f87-c9e0-4314-9fb4-fe1d2bfc4c0d" />
810
<br>
911

1012
## CS25는
13+
1114
매일 오전에 무작위의 CS 면접 질문을 이메일로 보내드리는 서비스입니다.
1215

1316
문항은 객관식, 주관식, 서술형으로 구성됩니다.
1417

1518
**서술형 문제의 경우**, 직접 답변을 작성하면 AI 해설도 함께 받아보실 수 있어요!!
19+
1620
> 이 서비스는 수익 창출을 목적으로 하지 않으며, 많은 분께 도움이 되길 바라는 마음으로 운영됩니다!
1721
1822
하루 5분!
1923

2024
이메일만 등록해두시면, 꾸준히 CS 지식을 쌓아갈 수 있어요.
2125

22-
23-
2426
## 기술 스택
2527

2628
### **Frontend With `ClaudeCode🚀`**
29+
2730
- **React, TypeScript, Vite, Tailwind CSS**
2831

2932
### **State Management**
33+
3034
- **React Query** - 서버 상태 관리
3135
- **React Router** - 클라이언트 사이드 라우팅
3236
- **Custom Hooks** - 재사용 가능한 로직 분리
3337

3438
### **Authentication**
39+
3540
- **HttpOnly Cookies** - 보안성 강화된 토큰 관리
3641
- **Automatic Token Refresh** - 무중단 인증 유지
3742
- **Social Login Integration** - 간편한 소셜 로그인
3843

3944
### **Development Tools**
45+
4046
- **ESLint + Prettier** - 코드 품질 관리
4147
- **Docker** - 컨테이너화된 개발 환경
4248
- **GitHub Actions** - 자동화된 CI/CD
4349

4450
## 시작하기
4551

4652
### **Prerequisites**
53+
4754
- Node.js 20.0 이상
4855
- npm 또는 yarn
4956
- Docker (선택사항)

docker-compose.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
version: '3.8'
1+
version: "3.8"
22

33
services:
44
frontend:
@@ -10,4 +10,4 @@ services:
1010

1111
networks:
1212
app-network:
13-
driver: bridge
13+
driver: bridge

index.html

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<!DOCTYPE html>
1+
<!doctype html>
22
<html lang="ko">
33
<head>
44
<meta charset="UTF-8" />
@@ -11,10 +11,18 @@
1111
/>
1212
<link rel="apple-touch-icon" href="/cs25.png" />
1313
<link rel="manifest" href="/manifest.json" />
14-
<link rel="preconnect" href="https://fonts.googleapis.com">
15-
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
16-
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700&display=swap" rel="stylesheet">
17-
<link rel="stylesheet" as="style" crossorigin href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/variable/pretendardvariable.min.css" />
14+
<link rel="preconnect" href="https://fonts.googleapis.com" />
15+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
16+
<link
17+
href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700&display=swap"
18+
rel="stylesheet"
19+
/>
20+
<link
21+
rel="stylesheet"
22+
as="style"
23+
crossorigin
24+
href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/variable/pretendardvariable.min.css"
25+
/>
1826
<title>CS25 - 해설과 함께하는 CS 학습</title>
1927
</head>
2028
<body>

package-lock.json

Lines changed: 97 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
"@vitejs/plugin-react": "^4.5.2",
3333
"autoprefixer": "^10.4.21",
3434
"postcss": "^8.5.4",
35+
"prettier": "^3.6.2",
36+
"prettier-plugin-tailwindcss": "^0.6.13",
3537
"tailwindcss": "^3.4.1",
3638
"vite": "^6.3.5"
3739
}

postcss.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ module.exports = {
33
tailwindcss: {},
44
autoprefixer: {},
55
},
6-
}
6+
};

public/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,4 @@
1818
"theme_color": "#4F46E5",
1919
"background_color": "#ffffff",
2020
"description": "CS 지식을 해설과 함께 전달하는 메일 서비스"
21-
}
21+
}

src/App.test.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import React from 'react';
2-
import { render, screen } from '@testing-library/react';
3-
import App from './App';
1+
import React from "react";
2+
import { render, screen } from "@testing-library/react";
3+
import App from "./App";
44

5-
test('renders learn react link', () => {
5+
test("renders learn react link", () => {
66
render(<App />);
77
const linkElement = screen.getByText(/learn react/i);
88
expect(linkElement).toBeInTheDocument();

src/App.tsx

Lines changed: 35 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
import { useState } from 'react';
2-
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
3-
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
4-
import LandingPage from './components/LandingPage';
5-
import QuizSection from './components/sections/QuizSection';
6-
import TodayEmailFormSection from './components/sections/TodayEmailFormSection';
7-
import VerificationEmailPage from './components/VerificationEmailPage';
8-
import TodayQuizPage from './components/sections/TodayQuizSection';
9-
import SubscriptionEditSection from './components/sections/SubscriptionEditSection';
10-
import Header from './components/common/Header';
11-
import Footer from './components/common/Footer';
12-
import SubscriptionModal from './components/common/SubscriptionModal';
13-
import { ModalProvider } from './contexts/ModalContext';
14-
import ModalManager from './components/common/ModalManager';
15-
import './App.css';
16-
import ProfileSection from './components/sections/ProfileSection';
1+
import { useState } from "react";
2+
import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
3+
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
4+
import LandingPage from "./components/LandingPage";
5+
import QuizSection from "./components/sections/QuizSection";
6+
import TodayEmailFormSection from "./components/sections/TodayEmailFormSection";
7+
import VerificationEmailPage from "./components/VerificationEmailPage";
8+
import TodayQuizPage from "./components/sections/TodayQuizSection";
9+
import SubscriptionEditSection from "./components/sections/SubscriptionEditSection";
10+
import Header from "./components/common/Header";
11+
import Footer from "./components/common/Footer";
12+
import SubscriptionModal from "./components/common/SubscriptionModal";
13+
import { ModalProvider } from "./contexts/ModalContext";
14+
import ModalManager from "./components/common/ModalManager";
15+
import "./App.css";
16+
import ProfileSection from "./components/sections/ProfileSection";
1717

1818
// React Query client 생성
1919
const queryClient = new QueryClient({
@@ -35,18 +35,31 @@ function App() {
3535
<Router>
3636
<Header />
3737
<Routes>
38-
<Route path="/" element={<LandingPage onSubscribeClick={() => setIsSubscriptionModalOpen(true)} />} />
38+
<Route
39+
path="/"
40+
element={
41+
<LandingPage
42+
onSubscribeClick={() => setIsSubscriptionModalOpen(true)}
43+
/>
44+
}
45+
/>
3946
<Route path="/todayQuiz" element={<TodayQuizPage />} />
4047
<Route path="/quiz" element={<QuizSection />} />
4148
<Route path="/mailform" element={<TodayEmailFormSection />} />
42-
<Route path="/verification-email" element={<VerificationEmailPage />} />
43-
<Route path="/subscriptions/:subscriptionId" element={<SubscriptionEditSection />} />
49+
<Route
50+
path="/verification-email"
51+
element={<VerificationEmailPage />}
52+
/>
53+
<Route
54+
path="/subscriptions/:subscriptionId"
55+
element={<SubscriptionEditSection />}
56+
/>
4457
<Route path="/profile" element={<ProfileSection />} />
4558
</Routes>
4659
<Footer />
47-
<SubscriptionModal
48-
isOpen={isSubscriptionModalOpen}
49-
onClose={() => setIsSubscriptionModalOpen(false)}
60+
<SubscriptionModal
61+
isOpen={isSubscriptionModalOpen}
62+
onClose={() => setIsSubscriptionModalOpen(false)}
5063
/>
5164
<ModalManager />
5265
</Router>

0 commit comments

Comments
 (0)