Skip to content

www / admin-web 폴더 재구성 기획서

목적: apps/www를 랜딩·마케팅 전용으로 전환하고, 테넌트 관리(로그인, 온보딩, 빌링, 프로필 등) 페이지는 apps/admin-web으로 분리. www는 Cloudflare Pages(정적 out/); admin-webCloudflare Workers(OpenNext, cf:build / cf:deploy) 또는 Node/Vercel.
범위: 폴더 구조, 파일 이동, 배포 연동, 플로우 설계. 코드 생성은 별도 단계.


1. 개요

사이트경로용도배포(현행)도메인(예정)
wwwapps/www랜딩 페이지, 마케팅, 패키지 선택Pages — prego-www (apps/www/out)www.pregoi.com
admin-webapps/admin-web로그인·온보딩·빌링·프로필 등 tenant admin 전체Workers — Worker admin-web (.open-next/, R2는 wrangler.jsoncbucket_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.htmladmin-web으로 이동
  • dashboard.htmladmin-web으로 이동
  • billing.htmladmin-web으로 이동

2.4 패키지 선택 후 플로우

패키지 선택 완료 시 admin-web으로 이동:

www (prego-www.pages.dev 또는 www.pregoi.com) → 패키지 선택 → admin-web (m.pregoi.com)?plan=basic&region=sg ...

선택한 plan, region 등을 쿼리 파라미터 또는 sessionStorage/localStorage로 전달.


3. admin-web (apps/admin-web) — 신규 폴더

3.1 생성 경로

Prego/apps/admin-web/

3.2 이동·구성할 파일

기존 (www)admin-web
app.jsapp.js
api.jsapi.js (전체 또는 tenant admin용 분리)
locale.jslocale.js (복사 또는 공유)
styles.cssstyles.css (온보딩·대시보드·빌링용)
signup.htmlsignup.html
signup-verify.htmlsignup-verify.html
dashboard.htmldashboard.html
billing.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)

4.1 www (prego-www.pages.dev)

  • 프로젝트: 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.configoutput: '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&region=sg (또는 Worker 미리보기 URL) 리다이렉트
3. admin-web: 로그인/회원가입 → 결제(유료 시) → 테넌트 정보 → 제출 → 프로비저닝 대기
4. 완료 후: 대시보드, 빌링, 프로필 등 tenant admin 기능 이용

6. 폴더 구조 (목표)

Prego/
├── apps/
│ ├── www/ # 랜딩·마케팅·패키지 선택
│ │ ├── index.html # 랜딩 + 패키지 선택
│ │ ├── locale.js
│ │ ├── api.js # 패키지 선택용 최소 API
│ │ ├── styles.css
│ │ ├── functions/
│ │ │ └── api/
│ │ │ └── country.js
│ │ └── README.md
│ │
│ └── admin-web/ # 테넌트 관리 (신규)
│ ├── index.html # 온보딩 위저드 (Step 2~6)
│ ├── signup.html
│ ├── signup-verify.html
│ ├── dashboard.html
│ ├── billing.html
│ ├── profile.html # (선택)
│ ├── app.js
│ ├── api.js
│ ├── locale.js
│ ├── styles.css
│ ├── functions/ # 필요 시 country 등
│ │ └── api/
│ │ └── country.js
│ └── README.md

7. 적용 순서

Phase작업
1apps/admin-web 폴더 생성
2admin-web으로 이동: app.js, signup.html, signup-verify.html, dashboard.html, billing.html
3www index.html 축소: 패키지 선택(Step 1)만 유지, admin-web 리다이렉트 링크 추가
4admin-web index.html 구성: Step 2~6 위저드, www에서 전달된 plan/region 사용
5api.js 분리: www용 최소 API vs admin-web용 전체 API
6admin-web 배포: Workers(OpenNext admin-web, R2 캐시) 또는 Node/Vercel — www-admin-web 배포
7링크·리다이렉트 경로 수정 (www ↔ admin-web)
8README, docs/runbook 업데이트

8. 참조

Help