English {#english}
www & admin-web Deployment Guide
Summary of deploying Next.js www (Cloudflare Pages project prego-www, static out) and admin-web (Cloudflare Worker admin-web via OpenNext, or Node/Vercel).
Overview
| App | Path | Local port | Deploy target | Domain |
|---|---|---|---|---|
| www | apps/www | 3001 | Cloudflare Pages (prego-www, static out) | www.pregoi.com |
| admin-web | apps/admin-web | 3002 | Workers OpenNext (admin-web) or Node/Vercel (see Deploy) | m.pregoi.com |
Local run
From the monorepo root (workspace packages — use pnpm, not per-app npm install):
pnpm installpnpm --filter prego-www run dev # → http://localhost:3001pnpm --filter prego-admin-web run dev # → http://localhost:3002Lint: pnpm run lint:www-admin (same as Build Pages Apps CI, .github/workflows/deploy-pages.yml). Per app: pnpm --filter prego-www run lint / pnpm --filter prego-admin-web run lint. Manual Deploy admin-web (Cloudflare Worker) runs admin-web lint before cf:deploy:with-vars.
Environment variables
www (beta.pregoi.com)
| Variable | Purpose |
|---|---|
NEXT_PUBLIC_PREGO_ADMIN_BASE_URL | Sign in, Start for free, package selection redirect (default: https://m.pregoi.com) |
NEXT_PUBLIC_PREGO_WWW_BASE_URL | (Optional) canonical www URL |
NEXT_PUBLIC_DEMO_ADMIN_URL | Get Demo popup — Admin Portal Demo link |
NEXT_PUBLIC_DEMO_EMPLOYEE_URL | Get Demo popup — Employee Demo link |
NEXT_PUBLIC_DEMO_SALES_MEETING_URL | Get Demo popup — Book a Live Demo link |
admin-web (m.pregoi.com)
| Variable | Purpose |
|---|---|
NEXT_PUBLIC_PREGO_WWW_BASE_URL | Step 2 Previous, Choose package link (default: https://www.pregoi.com) |
NEXT_PUBLIC_PREGO_CONTROL_PLANE_URL | Tenant creation, Job status, subdomain check, Stripe Checkout |
NEXT_PUBLIC_PREGO_AUTH_URL | Zuplo Auth base (email OTP, Singpass, POST /auth/google/complete-session) |
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET | Server-only. App-owned Google OAuth; register redirect https://<host>/api/auth/google/callback |
PREGO_ZUPLO_INTERNAL_API_KEY | Same as Zuplo INTERNAL_API_KEY (server-only) |
PREGO_CONTROL_PLANE_INTERNAL_API_KEY | Worker Secret. Same value as Control Plane INTERNAL_API_KEY. Required for www /trial → admin /signup server verification. See Trial email (www) and admin handoff. |
PREGO_JWT_COOKIE_DOMAIN | Optional; e.g. .pregoi.com when the session cookie must be sent to the AUTH_URL host |
NEXT_PUBLIC_PREGO_BILLING_PROXY_URL | Billing info (billing page) |
GitHub — manual Worker deploy only: .github/workflows/deploy-admin-web-worker.yml runs pnpm --filter prego-admin-web run lint then cf:deploy:with-vars (scripts/cf-deploy-with-vars.mjs). Optional repository Variables ADMIN_GOOGLE_CLIENT_ID and ADMIN_PREGO_JWT_COOKIE_DOMAIN populate that job’s environment (not used by deploy-pages.yml).
Deploy
www (static)
Cloudflare Pages works well: monorepo root, pnpm --filter prego-www run build, output apps/www/out (output: 'export').
admin-web (server)
admin-web includes Route Handlers under app/api/* (Google OAuth code exchange). Static HTML export (out/) is disabled. Prefer Cloudflare Workers with OpenNext: pnpm --filter prego-admin-web run cf:build / cf:deploy (wrangler.jsonc). cf:deploy:with-vars is the same build+deploy plus optional Worker --var from env GOOGLE_CLIENT_ID / PREGO_JWT_COOKIE_DOMAIN (scripts/cf-deploy-with-vars.mjs); GitHub Deploy admin-web uses it—see the note above the Deploy heading. R2 bucket prego-admin-opennext-cache (incremental cache): create via prego-pulumi pulumi up (stack output r2_admin_opennext_cache_bucket_name) or wrangler r2 bucket create once. Alternatives: Node (next start), Vercel, Docker. See apps/admin-web/README.md and tenant onboarding flow §1.1.
If the build fails
- Lint / CI:
pnpm run lint:www-adminmust pass (ESLint--max-warnings 0) before builds in Build Pages Apps; fix or adjusteslint.config.mjsin each app if a rule is intentionally relaxed. - www: Confirm output directory
apps/www/out(oroutif project root isapps/www),output: 'export'innext.config. - admin-web:
cf:buildproduces.open-next/for Workers; plainnext buildstill emits.next/. Do not use Pages without/for this app.
Flow
Package selection happens on prego-www; onboarding (Sign in, Sign up) happens on admin-web.
flowchart LR A[www.pregoi.com] --> B[/pricing] B --> C[Choose plan] C --> D[m.pregoi.com] D --> E[Sign in / Sign up] E --> F[Onboarding → Payment → Provisioning]
Reference
- Trial email (www) and admin handoff — CP internal key, optional
TRIAL_FORCE_BUSINESS_EMAILS, adminPREGO_CONTROL_PLANE_INTERNAL_* - www-admin-web folder restructure
- www-admin-web Next.js pregoi clone
- Tenant onboarding flow
한국어 {#korean}
www & admin-web 배포 가이드
Next.js 기반 www(Cloudflare Pages prego-www)와 admin-web(Worker admin-web, OpenNext) 또는 Node/Vercel 배포 요약.
개요
| 앱 | 경로 | 포트(로컬) | 배포 대상 | 도메인 |
|---|---|---|---|---|
| www | apps/www | 3001 | Cloudflare Pages (prego-www, 정적 out) | www.pregoi.com |
| admin-web | apps/admin-web | 3002 | Workers OpenNext(admin-web, cf:build) 또는 Node/Vercel (Deploy) | m.pregoi.com |
로컬 실행, 환경 변수, Cloudflare Pages 배포, 빌드 실패 시 확인
위 영문 섹션 참조. (모노레포 루트에서 pnpm 로컬 실행, www/admin-web 환경 변수 표, Pages 배포, 빌드·lint 실패 시 확인.) Build Pages Apps (deploy-pages.yml)는 pnpm run lint:www-admin 후 www 빌드·admin-web cf:build·Storybook을 실행한다. 수동 Worker 배포 (deploy-admin-web-worker.yml)는 배포 전 admin-web ESLint를 실행한 뒤 cf:deploy:with-vars 를 실행한다. cf:deploy:with-vars 는 Actions와 동일한 scripts/cf-deploy-with-vars.mjs 로 배포하며, 셸의 GOOGLE_CLIENT_ID / PREGO_JWT_COOKIE_DOMAIN 을 Worker --var 로 넘길 수 있음. 선택 저장소 변수 ADMIN_GOOGLE_CLIENT_ID, ADMIN_PREGO_JWT_COOKIE_DOMAIN 는 .github/workflows/deploy-admin-web-worker.yml 에만 쓰이며 deploy-pages.yml CI에서는 사용하지 않는다.
플로우
패키지 선택은 prego-www에서, 온보딩(Sign in, Sign up 포함)은 Worker admin-web(m.pregoi.com 등)에서 수행된다.