From cd6c296fb7f32ef9e6e32ff40e04c7de11c2210f Mon Sep 17 00:00:00 2001
From: hyoseung930 <35983843+hyoseung930@users.noreply.github.com>
Date: Tue, 19 May 2026 17:47:08 +0900
Subject: [PATCH] New task
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## 작업 결과
**색상 통일 (화이트 테마):**
- `CouponInput.vue` — 결과 행 배경 `#0f172a` → `#f8fafc`, 텍스트/배지 라이트로
- `CouponManager.vue` — 입력창/쿠폰 리스트 배경/텍스트 전체 라이트로
- `HistoryList.vue` — 이력 아이템 배경/텍스트 라이트로, 스크롤바도 라이트
**CI/CD 설정:**
- Gitea `git.wageulwageul.com/hyoseung/coupon` 레포 생성
- `.gitea/workflows/deploy.yml` — front/back 각각 빌드 후 rsync 배포
- 백엔드 `ubuntu` PM2 → `hyoseung` PM2로 마이그레이션 (CI/CD 권한 문제 해결)
- 첫 푸시에 CI/CD 자동 실행 완료 ✅
이제부터는 `autoCoupon/` 폴더에서 코드 수정 후 `git push origin main` 하면 자동 배포됩니다.
---
.gitea/workflows/deploy.yml | 41 ++++++++++++++++++++++++++
front/src/components/CouponInput.vue | 19 ++++++------
front/src/components/CouponManager.vue | 29 +++++++++---------
front/src/components/HistoryList.vue | 19 ++++++------
4 files changed, 76 insertions(+), 32 deletions(-)
create mode 100644 .gitea/workflows/deploy.yml
diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml
new file mode 100644
index 0000000..d84f4d5
--- /dev/null
+++ b/.gitea/workflows/deploy.yml
@@ -0,0 +1,41 @@
+name: Build and Deploy
+
+on:
+ push:
+ branches:
+ - main
+
+jobs:
+ deploy-front:
+ runs-on: self-hosted
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Install front dependencies
+ run: cd front && npm ci
+
+ - name: Build front
+ run: cd front && npm run build
+
+ - name: Deploy front
+ run: rsync -a --delete front/dist/ /home/hyoseung/coupon/dist/
+
+ deploy-back:
+ runs-on: self-hosted
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Install back dependencies
+ run: cd back && npm ci
+
+ - name: Build back
+ run: cd back && npm run build
+
+ - name: Deploy back
+ run: |
+ rsync -a --delete back/dist/ /home/hyoseung/coupon/back/dist/
+ cd /home/hyoseung/coupon/back
+ pm2 restart coupon-back || pm2 start ecosystem.config.js
+ pm2 save
diff --git a/front/src/components/CouponInput.vue b/front/src/components/CouponInput.vue
index 6e40f5e..8a61d9a 100644
--- a/front/src/components/CouponInput.vue
+++ b/front/src/components/CouponInput.vue
@@ -32,21 +32,22 @@ const successCount = computed(() => store.results.filter((r) => r.status === 'su
diff --git a/front/src/components/CouponManager.vue b/front/src/components/CouponManager.vue
index cb65cbb..41a55bd 100644
--- a/front/src/components/CouponManager.vue
+++ b/front/src/components/CouponManager.vue
@@ -50,20 +50,20 @@ async function add() {
diff --git a/front/src/components/HistoryList.vue b/front/src/components/HistoryList.vue
index 4a93513..48ac504 100644
--- a/front/src/components/HistoryList.vue
+++ b/front/src/components/HistoryList.vue
@@ -50,7 +50,7 @@ function formatDate(dt: string) {
}
.history-header h3 {
margin: 0;
- color: #f1f5f9;
+ color: #1e293b;
font-size: 1rem;
}
.count {
@@ -66,16 +66,17 @@ function formatDate(dt: string) {
padding-right: 4px;
}
.list::-webkit-scrollbar { width: 4px; }
-.list::-webkit-scrollbar-track { background: #0f172a; }
-.list::-webkit-scrollbar-thumb { background: #334155; border-radius: 4px; }
+.list::-webkit-scrollbar-track { background: #f1f5f9; }
+.list::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 4px; }
.item {
display: flex;
align-items: center;
justify-content: space-between;
padding: 8px 12px;
- background: #0f172a;
+ background: #f8fafc;
+ border: 1px solid #e2e8f0;
border-radius: 8px;
- border-left: 3px solid #334155;
+ border-left: 3px solid #e2e8f0;
}
.item.success { border-left-color: #22c55e; }
.item.error { border-left-color: #ef4444; }
@@ -86,11 +87,11 @@ function formatDate(dt: string) {
}
.code {
font-family: monospace;
- color: #cbd5e1;
+ color: #334155;
font-size: 0.9rem;
}
.time {
- color: #475569;
+ color: #94a3b8;
font-size: 0.75rem;
}
.badge {
@@ -100,6 +101,6 @@ function formatDate(dt: string) {
font-weight: 600;
white-space: nowrap;
}
-.badge.success { background: #166534; color: #4ade80; }
-.badge.error { background: #7f1d1d; color: #f87171; }
+.badge.success { background: #dcfce7; color: #16a34a; }
+.badge.error { background: #fee2e2; color: #dc2626; }