feat: 초기 커밋 — Pretendard 폰트 적용 및 Docker 배포 구성

- Pretendard Regular/Bold/Thin 폰트를 app/static/fonts/ 에 추가하고
  @font-face 로 등록하여 전체 페이지에 적용
- Dockerfile(python:3.12-slim + uvicorn --proxy-headers) 작성
- docker-compose.yml: NPM 뒤 운영 서버용 (포트 80)
- docker-compose.local.yml: 로컬 테스트용 (포트 8080)
- .env.local.example: 로컬 OAuth 설정 가이드 포함
- .dockerignore: 이미지 빌드 컨텍스트 최소화
- .gitignore: .env / .env.local 제외 명시
- README: Docker 빌드·배포·업데이트 절차 문서화

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-05-21 22:43:41 +09:00
commit c93e2be0a7
18 changed files with 722 additions and 0 deletions
+19
View File
@@ -0,0 +1,19 @@
<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>접속 불가</title>
<link rel="stylesheet" href="/static/styles.css" />
</head>
<body class="auth-page">
<main class="auth-shell">
<section class="auth-panel">
<p class="eyebrow">Access denied</p>
<h1>접속할 수 없습니다</h1>
<p class="lead">{{ reason }}</p>
<a class="primary-button" href="/login">다른 Google 계정으로 로그인</a>
</section>
</main>
</body>
</html>
+20
View File
@@ -0,0 +1,20 @@
<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>DBX 메인 페이지 로그인</title>
<link rel="stylesheet" href="/static/styles.css" />
</head>
<body class="auth-page">
<main class="auth-shell">
<section class="auth-panel">
<p class="eyebrow">DBX Workspace</p>
<h1>메인 페이지</h1>
<p class="lead">회사 Google Workspace 계정으로 로그인하세요.</p>
<a class="primary-button" href="/login">Google 계정으로 로그인</a>
<p class="note">허용된 계정만 접속할 수 있습니다.</p>
</section>
</main>
</body>
</html>
+36
View File
@@ -0,0 +1,36 @@
<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>DBX 메인 페이지</title>
<link rel="stylesheet" href="/static/styles.css" />
</head>
<body>
<header class="topbar">
<div>
<p class="eyebrow">DBX Workspace</p>
<h1>업무 메뉴</h1>
</div>
<div class="account">
{% if user.picture %}
<img src="{{ user.picture }}" alt="" />
{% endif %}
<div>
<strong>{{ user.name }}</strong>
<span>{{ user.email }}</span>
</div>
<a class="ghost-button" href="/logout">로그아웃</a>
</div>
</header>
<main class="menu-grid">
{% for item in menu_items %}
<a class="menu-card" href="{{ item.url }}">
<span>{{ item.title }}</span>
<small>{{ item.description }}</small>
</a>
{% endfor %}
</main>
</body>
</html>