www / admin-web 폴더 재구성 기획서
목적: apps/www를 랜딩·마케팅 전용으로 전환하고, 테넌트 관리(로그인, 온보딩, 빌링, 프로필 등) 페이지는 apps/admin-web으로 분리. www 는 Cloudflare Pages (정적 out/); admin-web 은 Cloudflare Workers (OpenNext, cf:build / cf:deploy) 또는 Node/Vercel.
범위: 폴더 구조, 파일 이동, 배포 연동, 플로우 설계. 코드 생성은 별도 단계.
1. 개요
사이트 경로 용도 배포(현행) 도메인(예정) www apps/www랜딩 페이지, 마케팅, 패키지 선택 Pages — prego-www (apps/www/out) www.pregoi.com admin-web apps/admin-web로그인·온보딩·빌링·프로필 등 tenant admin 전체 Workers — Worker admin-web (.open-next/, R2는 wrangler.jsonc의 bucket_name; 기본 admin-cache , 레거시 prego-admin-opennext-cache )m.pregoi.com
2. www (apps/www) — 랜딩·마케팅·패키지 선택
2.1 유지·배치할 내용
패키지 선택 페이지 — 현재 index.html의 Step 1(패키지 선택) 유지
랜딩·마케팅 페이지 — 신규 또는 기존 구조 재구성
공통 에셋 — locale.js, styles.css(필요 부분), functions/api/country.js 등
2.2 www에 남길 파일
파일 역할 index.html랜딩 + 패키지 선택 (Step 1만 또는 별도 페이지) locale.js언어·국가 선택 (공통) styles.csswww 전용 스타일 (또는 공유 스타일 경량화) functions/api/country.jsIP 기반 국가 조회 (CF Pages Function) api.js패키지 선택 시 필요한 최소 API (예: checkSubdomainAvailable, 기타) README.mdwww 전용 설명
2.3 www에서 제거·이동할 항목
app.js — 온보딩 위저드 로직 → admin-web으로 이동
signup.html, signup-verify.html → admin-web으로 이동
dashboard.html → admin-web으로 이동
billing.html → admin-web으로 이동
2.4 패키지 선택 후 플로우
패키지 선택 완료 시 admin-web 으로 이동:
www (prego-www.pages.dev 또는 www.pregoi.com) → 패키지 선택 → admin-web (m.pregoi.com)?plan=basic®ion=sg ...
선택한 plan, region 등을 쿼리 파라미터 또는 sessionStorage/localStorage로 전달.
3. admin-web (apps/admin-web) — 신규 폴더
3.1 생성 경로
3.2 이동·구성할 파일
기존 (www) admin-web app.jsapp.jsapi.jsapi.js (전체 또는 tenant admin용 분리)locale.jslocale.js (복사 또는 공유)styles.cssstyles.css (온보딩·대시보드·빌링용)signup.htmlsignup.htmlsignup-verify.htmlsignup-verify.htmldashboard.htmldashboard.htmlbilling.htmlbilling.html(index.html Step 2~6) index.html — 로그인, 온보딩 위저드 Step 2~6, 프로비저닝 대기
3.3 admin-web 페이지 목록
페이지 경로 역할 온보딩·위저드 index.htmlStep 2 로그인 → Step 3 결제 → Step 4 테넌트 정보 → Step 5 확인 → Step 6 프로비저닝 회원가입 signup.html이메일·Google 가입 이메일 인증 signup-verify.htmlOTP 검증 (fallback) 대시보드 dashboard.html테넌트 관리 대시보드 결제 정보 billing.html플랜·결제 수단·인보이스 프로필 profile.html(신규 또는 기존 확장) 사용자 프로필
3.4 admin-web 환경 변수·API
window.PREGO_CONTROL_PLANE_URL
window.PREGO_AUTH_URL
window.PREGO_BILLING_PROXY_URL
window.PREGO_ADMIN_BASE_URL — admin-web 자신의 base URL (선택)
www에서 전달받은 plan, region을 쿼리 또는 localStorage에서 읽어 위저드 초기 상태로 사용.
4. Cloudflare 배포 (Pages / Workers)
프로젝트: Cloudflare Pages — prego-www (또는 기존 프로젝트)
빌드 소스: Prego 레포, 브랜치 main (또는 지정)
빌드 설정: @platform/shell, @platform/theme-context 워크스페이스 의존성 때문에 저장소 루트 에서 빌드한다.
Root directory: . (모노레포 루트)
Build command: pnpm install --frozen-lockfile && pnpm --filter prego-www run build
Build output: apps/www/out (next.config의 output: 'export' 정적 산출물)
출력 URL: https://prego-www.pages.dev/
커스텀 도메인(예정): www.pregoi.com
4.2 admin-web (Cloudflare Workers, OpenNext)
프로젝트: Cloudflare Workers — Worker 이름 admin-web (wrangler.jsonc). Pages 정적 out/ 배포는 사용하지 않음 (app/api Google OAuth 등 Route Handler).
빌드 소스: SaaS ERP 모노레포 루트에서 pnpm install --frozen-lockfile && pnpm --filter prego-admin-web run cf:build → .open-next/ .
R2: OpenNext incremental cache 바인딩 NEXT_INC_CACHE_R2_BUCKET → 버킷 이름은 wrangler.jsonc 와 동일(현재 저장소 기본 admin-cache ). 레거시 prego-admin-opennext-cache 를 쓰는 환경은 계정에 맞게 조정. 권장: prego-pulumi pulumi up (스택 출력 r2_admin_opennext_cache_bucket_name); 대안 wrangler r2 bucket create. 상세 apps/admin-web/README.md, www-admin-web 배포 .
배포: 로컬 cf:deploy 또는 환경 변수와 함께 cf:deploy:with-vars (scripts/cf-deploy-with-vars.mjs). GitHub: Build Pages Apps (deploy-pages.yml) — lint:www-admin 후 www·admin-web 빌드·Storybook(업로드 없음); Deploy admin-web (Cloudflare Worker) (workflow_dispatch) — ESLint 후 동일 cf:deploy:with-vars 스크립트. 선택 저장소 변수 ADMIN_GOOGLE_CLIENT_ID , ADMIN_PREGO_JWT_COOKIE_DOMAIN → Worker 일반 변수(deploy-admin-web-worker.yml).
미리보기 호스트: *.workers.dev 또는 연결한 커스텀 도메인.
커스텀 도메인(운영): m.pregoi.com
5. 사용자 플로우
1. 사용자 접속: www.pregoi.com (또는 prego-www.pages.dev)
2. 패키지 선택 후: "시작하기" / "Select Basic" 등 클릭
→ m.pregoi.com?plan=basic®ion=sg (또는 Worker 미리보기 URL) 리다이렉트
3. admin-web: 로그인/회원가입 → 결제(유료 시) → 테넌트 정보 → 제출 → 프로비저닝 대기
4. 완료 후: 대시보드, 빌링, 프로필 등 tenant admin 기능 이용
6. 폴더 구조 (목표)
│ ├── www/ # 랜딩·마케팅·패키지 선택
│ │ ├── index.html # 랜딩 + 패키지 선택
│ │ ├── api.js # 패키지 선택용 최소 API
│ └── admin-web/ # 테넌트 관리 (신규)
│ ├── index.html # 온보딩 위저드 (Step 2~6)
│ ├── profile.html # (선택)
│ ├── functions/ # 필요 시 country 등
7. 적용 순서
Phase 작업 1 apps/admin-web 폴더 생성2 admin-web으로 이동: app.js, signup.html, signup-verify.html, dashboard.html, billing.html 3 www index.html 축소: 패키지 선택(Step 1)만 유지, admin-web 리다이렉트 링크 추가 4 admin-web index.html 구성: Step 2~6 위저드, www에서 전달된 plan/region 사용 5 api.js 분리: www용 최소 API vs admin-web용 전체 API 6 admin-web 배포: Workers(OpenNext admin-web, R2 캐시) 또는 Node/Vercel — www-admin-web 배포 7 링크·리다이렉트 경로 수정 (www ↔ admin-web) 8 README, docs/runbook 업데이트
8. 참조