Commit Graph

49 Commits

Author SHA1 Message Date
chpark 1ae4bad8f8 feat: 라이트 테마 전면 전환 (흰 배경 + 네이버그린 #03C75A)
- 전역 CSS를 다크 테마 → 화이트 테마로 재작성, legacy warm/ink/sage 토큰을 네이버그린 팔레트로 원사이트 리매핑
- 홈 페이지: 모바일 앱 스타일 카테고리 그리드(매장검색 大 / 매장등록 小), 네이버그린 그라데이션 CTA, 하이라이트 재구성
- Layout: 상단 네비/하단 푸터 흰색 리뉴얼 + 모바일 고정 탭바(홈/매장/매칭/지원금)
- 매장 검색 필터: 상태에 '거래 완료' (CLOSED) 추가, 상태별 컬러 배지
- 매물 상세: 직방/다방 스타일 사진 우선 레이아웃 (히어로 + 썸네일 스트립), 핵심 KPI 타일, 사이드바 액션
- 매칭/가격 정보 등 레거시 warm/ink 클래스는 CSS override로 라이트화
- 더미 매장 16건 + 매칭 요청 16건 시드 스크립트 추가 (seeds/demo-data.ts, pnpm prisma:seed:demo)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:32:34 +09:00
chpark eb28c6a719 feat: 사이트 전면 다크 리뉴얼 (invyone 스타일 레인보우 그라데이션)
Deploy Startover / deploy (push) Failing after 0s
- 메인 페이지(/)를 다크 네이비 + 인디고→바이올렛→로즈→탠저린
  그라데이션 시그니처로 전면 재구성:
  Hero(애니메이티드 그리드+글로우 오브+거대 타이포) / Marquee /
  For Who(그라데이션 보더 카드) / Process / Numbers / Categories /
  Benefits / Services / Journal / FAQ / CTA(3중 radial-gradient)
- 타이포그래피: Inter + Instrument Serif italic + JetBrains Mono
  + Noto Sans KR, 한글·숫자·영문 혼용 대응
- globals.css에 다크 테마 디자인 시스템 추가: gradient text 유틸,
  orb/grid/dot 배경, grad-border·glass·btn-grad·link-grad 컴포넌트,
  shimmer/pulse-glow/marquee/grid-drift 키프레임
- 레거시 페이지(stores/blog/auth/faq/contact/about/admin/subsidies
  /vendors/matching/contracts/privacy/terms) 일괄 다크 전환:
  warm-*/ink*/white/sage-* 클래스 전역 오버라이드로 코드 수정 없이 일괄화
- 폼 입력·체크박스·select·prose 본문 모두 다크 테마 적응
- 레이아웃: sticky top nav를 다크 글래스모피즘으로, 풋터도 다크+오브
  장식, auth-buttons 가입 CTA를 그라데이션 버튼으로
- color-scheme: dark 지정, prefers-reduced-motion 대응 포함
- Google AdSense(ads.txt, adsense-account meta, adsbygoogle 스크립트)는
  원본 그대로 유지
2026-04-20 16:52:56 +09:00
chpark b4e4b9f34f feat: 메인 페이지 콘텐츠 확장 (Stats/Process/Categories/Benefits/Blog/FAQ/CTA)
Deploy Startover / deploy (push) Failing after 0s
Hero + Features + Services 아래에 7개 섹션 추가:
- Stats 밴드 (4개 핵심 지표)
- How it works 3단계 프로세스
- 7개 업종 대분류 카드 그리드
- 역할별 혜택(매도인/매수인/업체)
- 최신 블로그 포스트 4개
- FAQ 3개 프리뷰
- 최종 CTA (다크 배경)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 13:26:05 +09:00
chpark 1c5f75b5b2 refactor: 매매정보 섹션 순서 정비 (매물설명+매장사진→매출/입지/사유→현장사진)
Deploy Startover / deploy (push) Failing after 0s
요구사항 12·13: 매매정보 안에 매물설명과 매장사진을 함께 묶고,
매물설명 아래에 매출/월수익·입지특징·매매사유·현장사진이 순서대로 나오도록 재구성.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 11:19:02 +09:00
chpark c64d5b77c6 fix: restore pnpm-lock.yaml to v6 format for Docker build compat
Deploy Startover / deploy (push) Failing after 0s
Dockerfile pins pnpm@8.10.0 via corepack; local install regenerated lockfile in v10 format which fails --frozen-lockfile.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 10:58:58 +09:00
chpark df7857a8ef feat: 블로그·정보 페이지 추가 및 매매정보 도메인 확장
Deploy Startover / deploy (push) Failing after 0s
AdSense 승인을 위한 콘텐츠 인프라와 점포라인형 매매 정보 모델을 도입.

- 업종 분류 확장: 7개 대분류(휴게음식점/일반음식점/주류점/오락스포츠/판매업/서비스업/기타업종) 하위 소분류
- StoreSale 모델 추가: 월매출·월수익·창업비용·매물설명·입지특징·매매사유
- 매장 검색 카드 재설계(대표 사진 + 권리금 + 월수익), 등록/상세 페이지 매매정보 섹션
- 블로그 시스템: 17개 포스트(폐업/창업/지원금/인테리어), /blog, /blog/[slug]
- 정보 페이지: /about, /terms, /privacy, /faq, /contact
- SEO: sitemap.ts, robots.ts, 페이지별 메타데이터, Article·FAQ JSON-LD, OG 태그
- 주소 라벨 도로명 주소 → 주소

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 10:52:21 +09:00
admin 2b6de14064 feat: add ads.txt route handler for Google AdSense
Deploy Startover / deploy (push) Has been cancelled
2026-04-02 09:31:16 +00:00
Johngreen 35eacedfb6 chore: Google AdSense ads.txt 추가
Deploy Startover / deploy (push) Has been cancelled
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 07:09:21 +09:00
Johngreen 49ed21a768 fix: 폼 에러 시 사용자 입력값 유지 (회원가입, 업체 인증 신청)
useActionState 사용하는 폼에서 서버 에러 반환 시 입력값이 초기화되는 문제 수정.
서버 액션이 에러 시 submitted values를 함께 반환하고, 폼 input에 defaultValue 바인딩.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 18:50:23 +09:00
Johngreen e674b90d5a feat: 전체 UI 리디자인 — Editorial Warmth 디자인 시스템 적용
Playfair Display + Noto Sans KR 폰트, warm 브라운 컬러 시스템,
글래스모피즘 카드, 애니메이션 효과를 전체 22개 페이지/컴포넌트에 적용.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 08:13:47 +09:00
Johngreen b4639e00cc feat: 파비콘 추가 (파란 배경 흰색 S) 및 noImplicitAny 타입 수정
- web/admin 양쪽 앱에 icon.svg, apple-icon.png, favicon.ico 추가
- Prisma .map() 콜백의 implicit any 타입 에러 수정

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 07:56:01 +09:00
Johngreen 012c7e0e1a fix: www.startover.co.kr Traefik 라우팅 추가
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 05:40:33 +09:00
Johngreen f23a22ce15 chore: cleanup test file, Gitea Actions 자동배포 완성
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 22:35:25 +09:00
Johngreen c08bc3f101 chore: test fixed runner config
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 22:23:04 +09:00
Johngreen 928be6aa80 chore: test host-mode runner
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 22:19:58 +09:00
Johngreen 1801319887 chore: trigger Actions re-run
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 22:17:18 +09:00
Johngreen df8569053b perf: BuildKit + docker compose v2로 빌드 속도 개선
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 22:10:37 +09:00
Johngreen 9b7e5bb600 fix: docker-compose v1 명령어로 변경
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 21:55:00 +09:00
Johngreen af378ae0e8 fix: checkout 제거, 호스트 모드 워크플로우로 수정
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 21:53:14 +09:00
Johngreen cca38e70bb chore: test Gitea Actions pipeline
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 21:51:55 +09:00
Johngreen 2bcc6483ba feat: Gitea Actions 기반 자동배포 워크플로우 업데이트
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 21:49:54 +09:00
Johngreen be223276c7 chore: remove deploy test file
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 21:37:14 +09:00
Johngreen d194ad6d1f chore: test auto-deploy pipeline
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 21:20:30 +09:00
Johngreen ee42222ca3 feat: Google AdSense 메타태그 및 스크립트 추가
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 19:14:22 +09:00
Johngreen d25ede6d8b fix: admin Traefik 라우팅 비활성화 (/admin/* → web 앱에서 처리)
admin 앱에 실제 페이지가 없어 404 발생하던 문제 해결.
web 앱의 /admin/* 라우트가 정상 처리되도록 변경.
2026-03-09 07:48:36 +09:00
Johngreen 12f142ac74 fix: 매장 등록 폼 검증 실패 시 입력값 보존
서버 검증 에러 발생 시 fieldValues를 반환하고
각 입력 필드에 defaultValue로 바인딩하여 사용자 입력 유지
2026-03-09 07:40:11 +09:00
Johngreen cfcb694a01 chore: test auto-deploy webhook 2026-03-09 07:21:43 +09:00
Johngreen d8a68caccb feat: 1회용 관리자 설정 API (/api/setup-admin) 2026-03-09 00:37:38 +09:00
Johngreen 4f887b8642 chore: trigger deploy 2026-03-09 00:32:04 +09:00
Johngreen 8ffad799e9 fix: seed에서 argon2 런타임 의존성 제거 (Docker Alpine 호환) 2026-03-09 00:26:04 +09:00
Johngreen 7ce2bd23f8 feat: seed에 운영자 계정 추가 (admin@admin.com / SUPER_ADMIN) 2026-03-09 00:18:35 +09:00
Johngreen 7794a3dd8c fix: 매장 등록 폼 에러 시 입력값 유지 (useActionState 적용)
- server action을 actions.ts로 분리
- page.tsx를 client component로 전환 (useActionState)
- 에러 시 redirect 대신 state 반환 → 입력값 유지
- 제출 중 버튼 비활성화 (isPending)
2026-03-08 23:53:12 +09:00
Johngreen 2917cc9d0b fix: migrate 서비스에 seed 실행 추가 (마스터 데이터 자동 투입) 2026-03-08 23:47:38 +09:00
Johngreen 8900f1897c fix: prisma db push를 builder 스테이지에서 실행하도록 수정
- docker-compose.prod.yml에 migrate 서비스 추가 (builder target 사용)
- deploy.sh: postgres 먼저 시작 → migrate 실행 → 나머지 서비스 시작
- Dockerfile에서 불필요한 prisma schema 복사 제거 (runner에 prisma CLI 없음)
2026-03-08 23:31:32 +09:00
Johngreen 0c705d00e2 fix: 프로덕션 DB 스키마 미적용 및 PrismaClient 싱글톤 수정
- deploy.sh에 prisma db push 단계 추가 (배포 시 스키마 자동 적용)
- Dockerfile에 Prisma schema 런타임 이미지 복사 추가
- PrismaClient 프로덕션 싱글톤 캐시 활성화 (커넥션 풀 소진 방지)
2026-03-08 23:26:29 +09:00
Johngreen de531bfe11 Protect admin pages, add store/subsidy actions
Enforce authentication/authorization for admin pages and add several management actions and UI improvements.

Key changes:
- Added auth checks and redirects on admin pages (contracts, stores, subsidies, vendors) to restrict access to SUPER_ADMIN/OPS_MANAGER.
- Hooked server actions to authenticated user IDs (release escrow, review/publish stores, review subsidies/vendors, open disputes, create subsidy cases, create match requests, submit/delete store drafts).
- Implemented store publish flow including policy version resolution and StoreActionButtons update to show approve/reject/publish based on reviewStatus.
- Added filtering UIs and query handling: admin lists (stores/subsidies/vendors) now support status filters; public stores list uses a new client StoreFilters component to build search params.
- New client-side improvements: invite form triggers router.refresh() after success; register page accepts/validates optional phone and persists it; store creation now uses createStoreDraftService and shows error banner on failure.
- Matching and subsidies pages now support contextual forms to create match requests and subsidy cases when a storeId is provided.
- Various UX tweaks: disabled inspection button, dispute form, list link styling, and revalidation calls after server actions.
- Added docs/BUG-REPORT-2026-03-08.md.

These changes centralize auth, connect actions to real user IDs, and improve admin and store workflows and filtering.
2026-03-08 23:15:21 +09:00
Johngreen 98406af090 fix: AUTH_TRUST_HOST 환경변수 추가 (리버스 프록시 신뢰) 2026-03-08 20:27:00 +09:00
Johngreen 7f59b94dcf Rename project from Re:Link to Startover
Rebrand repository from "Re:Link" to "Startover" across the codebase. Updates include package names and scopes (@relink/* -> @startover/*), import paths, Next.js transpile settings, vitest name, UI text and docs, Dockerfile and CI/workflow names, deploy scripts and repo paths, and example/production env values. Also add auth-related env vars, an apps/web .env symlink, and small formatting/typing cleanups in several TSX/TS files and tests to accommodate the rename.
2026-03-08 20:22:08 +09:00
Johngreen 557559c654 feat: HTTPS 설정 - Let's Encrypt + startover.co.kr 도메인 적용 2026-03-08 17:22:07 +09:00
Johngreen 4802e70387 fix: docker-compose.prod.yml에 카카오 인증 환경변수 추가 2026-03-08 13:27:53 +09:00
Johngreen 5dea44046d feat: Auth.js v5 인증 시스템 구현 - 카카오 소셜 + 이메일/비번 로그인
- Auth.js v5 (next-auth beta.30) + 커스텀 Prisma 어댑터 (BigInt PK 호환)
- 카카오 OAuth2 소셜 로그인 (PKCE 비활성화, placeholder 이메일 처리)
- 이메일/비밀번호 자격증명 로그인 (argon2 해시)
- JWT 세션 전략 + 커스텀 클레임 (publicId, primaryRole, userStatus)
- 역할 기반 미들웨어 (/admin 운영자 전용, /auth 비인증 전용)
- Prisma 스키마: Account, VerificationToken, InviteToken 모델 추가
- ConsentType enum 7개로 업데이트
- 로그인/회원가입/프로필완성/403 페이지 구현
- 운영자 초대 시스템 (admin/settings/invite)
2026-03-08 12:59:21 +09:00
Johngreen 636eaaca23 feat: 샘플 데이터를 실제 Prisma DB 연동으로 전환
- admin 페이지: contracts, stores, subsidies, vendors 실제 DB 조회
- ActionButtons 컴포넌트 분리 (클라이언트 컴포넌트)
- 사용자 페이지: contracts, matching, stores, subsidies, vendors DB 연동
- vendor 신청 폼 및 server actions 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 01:06:56 +09:00
Johngreen 713b4d7241 feat: Traefik에 webhook 프록시 추가 및 cron 폴링 제거
- Traefik file provider로 호스트 webhook(9000) 프록시
- /deploy 경로로 Gitea webhook 수신
- extra_hosts로 Linux host.docker.internal 지원
- 불필요한 Docker webhook 서비스 제거

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 00:45:40 +09:00
Johngreen 097d102dd9 feat: nginx를 Traefik v3.2로 교체
- Docker 라벨 기반 자동 라우팅으로 전환
- /admin/* → admin 서비스 (StripPrefix 미들웨어)
- /* → web 서비스 (catch-all)
- Let's Encrypt 설정 준비 (도메인 확보 시 활성화)
- 다른 서비스 추가 시 라벨만 붙이면 자동 등록

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 23:58:39 +09:00
Johngreen e95acfc6af fix: Dockerfile builder 단계에서 public 디렉토리 보장
- builder에서 mkdir -p로 public 디렉토리 생성 (앱에 없을 경우 대비)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 22:51:10 +09:00
Johngreen 3f7c0f8e79 fix: admin public 디렉토리 누락 및 Dockerfile COPY 안전 처리
- apps/admin/public/.gitkeep 추가
- Dockerfile: public 디렉토리 미존재 시에도 COPY 성공하도록 수정

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 22:45:22 +09:00
Johngreen 41fc108803 fix: Docker 빌드 오류 수정 - prisma generate 명령어 및 타입 명시
- Dockerfile: prisma generate 명령어를 npx prisma generate로 수정
- feature-flag.ts: map 콜백 파라미터에 명시적 타입 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 22:39:28 +09:00
Johngreen bd48cafcc9 ci: IDC 서버 자동배포 파이프라인 구축
- Dockerfile: Turborepo 멀티스테이지 빌드 (Next.js standalone)
- docker-compose.prod.yml: PostgreSQL/Redis/Nginx/Web/Admin 프로덕션 스택
- deploy/poll-deploy.sh: cron 기반 자동배포 (매분 Gitea 폴링)
- deploy/nginx/default.conf: 리버스 프록시 설정
- next.config.ts: output standalone 추가
- .env.production.example: 환경변수 템플릿

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 22:28:09 +09:00
Johngreen 16bd2cb92a feat: Re:Link MVP 초기 구현 - 도메인/서비스/프론트엔드 전체
- 모노레포 구조 (Turborepo + pnpm): @relink/domain, @relink/shared, @relink/infrastructure, @relink/database, @relink/web
- 도메인 레이어: 매장(store), 매칭(matching), 업체(vendor), 보조금(subsidy), 계약/에스크로(contract) TDD 완료 (158 단위 테스트)
- 서비스 레이어: 전 도메인 서비스 함수 + 통합 테스트 (58 테스트)
- 프론트엔드: Next.js 15 App Router, 13개 페이지 (사용자 6 + 관리자 7)
- 인프라: PostgreSQL 16 + PostGIS, Prisma ORM, Docker Compose, AuditLog + OutboxEvent 패턴
- .env 파일 포함 (로컬 개발 기본값만 포함, 실제 시크릿 없음)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 17:39:56 +09:00