앱 웹사이트 (App website)
사용자가 제공한 디자인을 재현 가능한 Bun 개발/빌드 명령어와 명시적인 배포 상태와 함께 독립적인 정적 사이트로 제공합니다. 요청된 호스팅 제공자를 유지합니다. 이 워크플로우는 AceCut (/data/swi-algo/Swi-App-Factory/Acecut/website) 및 GolfCut에서 비롯되었습니다. 해당 프로젝트는 예시이며 필수 종속성이 아닙니다.
입력 설정
해당되는 AGENTS.md를 읽고 프로토타입, 기존 웹사이트 및 배포 문서를 검사합니다. 앱 이름, 대상 디렉토리, 표준 도메인, 실제 App Store URL 및 요청된 시각적 변경 사항을 식별합니다. 기존 브랜딩과 콘텐츠를 재사용합니다. 파일 시스템 쓰기 권한 및 호스팅/DNS 인증을 조기에 확인하고, 배포 접근 권한이 없는 경우 로컬 준비를 계속 진행합니다. 사용 불가능한 인증을 배포 성공으로 처리하지 마십시오.
Bun 프로젝트 준비
새로운 정적 웹사이트의 경우, 빈 디렉토리를 초기화합니다:
python3 <skill-directory>/scripts/init_site.py <app-directory>/website --slug <app-slug>
cd <app-directory>/website
bun install
번들로 제공되는 스타터에는 검증된 빌드/프리뷰 스크립트와 Vercel 구성이 포함되어 있습니다. 기존 프로젝트의 도구는 적절하게 유지합니다. public/ 디렉토리가 소스를 포함하고, scripts/build.mjs가 이를 dist/로 복사합니다. 프로덕션에서는 Bun 서버가 필요하지 않습니다. 일반 HTML/CSS/JS에는 종속성이 필요하지 않습니다. Bun이 PATH에 없으면, 무엇이든 설치하기 전에 ~/.bun/bin/bun을 확인하십시오. 다른 앱의 .git, .vercel, 자격 증명 또는 ID를 복사하지 마십시오.
프로토타입 전송
권한이 부여된 소스 내보내기나 저장소를 선호합니다. 공개 정적 프로토타입만 사용 가능한 경우, HTML을 검색하고 동일 출처의 HTML src/href 및 CSS url() 종속성(기능 페이지, 아이콘, SVG, 스크립트 포함)을 재귀적으로 검사합니다. Python HTTP 클라이언트를 거부하는 호스트의 경우 curl을 사용하여 가져옵니다. 누락된 리소스는 눈에 띄게 실패 처리하고, 오류 본문을 이미지로 저장하지 마십시오. 디렉토리 경로를 public/<route>/index.html에 매핑합니다.
에셋을 로컬에 유지합니다. 가져온 HTML에서 호스팅에 의해 삽입된 Cloudflare 챌린지 스크립트와 프리뷰 전용 메타데이터를 제거하고, 애플리케이션 JavaScript는 보존합니다. 서비스 자격 증명을 복사하거나 요구 사항 없이 분석 도구를 추가하지 마십시오. Google Fonts와 같은 외부 종속성을 검토합니다. 프로토타입의 앱 링크를 보존하며, App Store ID를 임의로 만들거나 다른 앱의 법적 약관을 조용히 대체하지 마십시오.
표준 URL, Open Graph, JSON-LD, robots 및 사이트맵의 프로토타입 출처를 의도된 프로덕션 출처로 대체합니다. 페이지 경로는 일관되게 유지합니다. 버튼 색상 요청의 경우, 렌더링된 에셋과 CSS를 모두 검사합니다. 채워진 SVG는 CSS 배경을 숨길 수 있습니다. 의도된 SVG 배경 경로만 변경하고 로고/텍스트 경로, 접근 가능한 이름 및 링크 대상을 보존합니다.
회사 푸터 및 법적 페이지
AceCut과 정렬해야 하는 SWINK 앱 웹사이트의 경우, 모든 페이지(기능 페이지 및 법적 페이지 자체 포함)에 © <year> SWINK AI INC., 눈에 띄는 mailto:[email protected] 연락처 링크 및 작동하는 /terms 및 /privacy 링크를 사용합니다. 현재 앱의 브랜드와 시각적 스타일을 유지합니다. 루트 상대 경로 에셋과 내비게이션을 사용하여 중첩된 경로가 작동하도록 하고, 법적 링크가 JavaScript 없이도 접근 가능하도록 합니다. 푸터 링크가 태블릿에서 줄바꿈되도록 하고, 수평 오버플로우 없이 간결한 모바일 레이아웃을 사용합니다.
사용자가 정렬을 요청하면, 참조된 앱의 이용약관/개인정보처리방침 구조와 확인된 회사/연락처 세부 정보를 사용한 다음, 앱 이름, 실제 기능, 날짜, 표준 URL 및 상호 링크를 조정합니다. 다른 앱의 분석 제공자, 업로드 동작, 저장/보유 약속 또는 설정을 맹목적으로 전송하지 마십시오. 이러한 주장에 대한 사용 가능한 제품 증거를 검사하고, 확인되지 않은 구체적인 내용은 만들지 말고 생략합니다. 이용약관과 개인정보처리방침을 읽을 수 있는 독립 페이지로 유지하고, 둘 다 사이트맵에 추가하며, 로컬 도구와 Vercel에서 깔끔한 URL을 확인합니다.
푸터/법적 변경 사항의 경우, 데스크톱, 태블릿 및 좁은 모바일 너비에서 영향을 받는 모든 페이지를 확인합니다. 회사 텍스트, mailto 대상, 두 법적 링크, 읽기 가능한 텍스트, 오버플로우 없음 및 모바일 내비게이션을 확인합니다. 요청된 다운로드 버튼 색상을 유지합니다. 푸시 후, 새로운 프로덕션 배포를 확인하고 라이브 상태를 보고하기 전에 HTTPS를 통해 실제 /terms와 /privacy를 가져옵니다.
빌드 및 확인
bun run build
bun run preview
로컬 서버는 디렉토리 인덱스 경로와 .html 클린 URL, GET 및 HEAD를 지원하고, 누락된 파일에 대해 404를 반환합니다. HTTP를 통해 모든 페이지와 로컬 에셋의 유효성을 검사합니다. 사이트맵과 표준 URL을 확인합니다. 데스크톱 및 좁은 모바일 너비(예: 1440, 768, 390 및 320)에서 오버플로우, 로드된 이미지, 브라우저 오류, 메뉴, 탭/키보드 컨트롤, FAQ, 필터 및 다운로드 대상을 각각 확인합니다. 리뷰 스크린샷은 public/ 외부에 저장합니다. 색상이 SVG로 표현되는 경우, 계산된 CSS뿐만 아니라 해당 경로나 스크린샷 픽셀을 검사합니다.
GitHub 퍼블리시 및 머신 액세스
SWI 머신에서 AceCut은 Linux 사용자 ubuntu(GitHub ID CC-AIMI)로 기존 GitHub CLI 로그인을 사용하여 푸시되었습니다. 이 선례에 의존하기 전에 gh repo view <owner>/<repo> --json viewerPermission,defaultBranchRef,isEmpty로 현재 ID와 저장소 쓰기 권한을 확인합니다. 네트워크/프록시 오류는 유효하지 않은 로그인의 증거가 아닙니다. gh 로그인이 작동하는데도 Git이 사용자 이름을 요구하는 경우, 동일한 인증된 Linux 계정에서 명령별 자격 증명 도우미를 사용합니다: git -c credential.helper='!gh auth git-credential' push origin <branch>. 이는 기존 로그인을 재사용하며 토큰을 노출하거나 전역 Git 구성을 변경하지 않습니다. 계정 간에 자격 증명을 복사하거나 비밀번호/토큰을 이 스킬, 셸 인수, 소스 파일 또는 로그에 넣지 마십시오.
사용자가 Unix 권한 문제를 해결하기 위해 관리자 계정을 승인하는 경우, id 및 getfacl을 검사하고 필요한 프로젝트 액세스만 부여합니다 (예: setfacl -m u:<executor>:rwx,d:u:<executor>:rwx <project>). 소유자/그룹 및 관련 없는 권한은 유지합니다. 관리자 로그인은 Vercel 또는 GoDaddy를 인증하지 않습니다.
명시적으로 요청된 저장소가 이미 존재하는 경우, 먼저 복제하고 히스토리를 보존합니다. 관련 없는 초기 커밋을 강제 푸시하지 마십시오. 웹사이트 파일을 저장소 루트에 배치하고 다른 website/ 레이어에 두지 마십시오. 준비된 소스를 전송할 때 .git, .vercel, dist, node_modules, 검증 스크린샷 및 비밀을 제외합니다. 다른 권한 있는 Linux 계정을 통해 퍼블리시하는 경우, 해당 계정이 소유한 임시 체크아웃을 사용하고 소스에 필요한 읽기 권한만 부여합니다. 저장소의 의도된 작성자를 로컬에서 구성하고, 스테이징된 파일을 검사하고, 커밋하고, 의도된 브랜치로 푸시하고, 원격 SHA를 확인합니다. 이후 기본 작업 체크아웃을 동기화 상태로 유지합니다.
diifan/golfcut-website와 같은 독립 저장소의 경우, Vercel은 루트 디렉토리 ./로 해당 저장소를 가져와야 합니다. GitHub 푸시만으로는 Vercel 프로젝트가 생성되지 않습니다.
Vercel 및 DNS
스타터는 프레임워크 null(대시보드: Other), bun install, bun run build, 출력 dist, cleanUrls: true, trailingSlash: false를 사용합니다. 독립 웹사이트 저장소의 경우 Vercel 루트 디렉토리를 ./로 설정하고, 앱 모노레포의 경우 website/를 사용합니다. 인증된 Vercel CLI/API가 직접 배포할 수 있는 경우 GitHub 통합은 선택 사항입니다. 추가 승인 게이트를 추가하지 않고 사용자의 권한 있는 퍼블리시 범위를 따릅니다.
생성 또는 연결하기 전에 인증된 계정/팀과 기존 프로젝트를 검사합니다. CLI 로그인이 필요한 경우, bun x vercel login을 실행하고 현재 장치 인증 URL을 사용자에게 보냅니다. 독립적인 작업을 완료하는 동안 프로세스를 활성 상태로 유지합니다. bunx 심이 없어도 bun x는 작동합니다. CLI가 확인할 때까지 로그인을 주장하지 마십시오. 로그인 후, 사용 가능한 팀과 AceCut의 프로젝트를 검사하고, 동일한 의도된 범위를 선택하고, 새 앱 프로젝트를 생성/링크하고, 정확한 GitHub 저장소를 연결한 다음 배포합니다. 연결된 Vercel 플러그인이 이러한 기능을 제공하는 경우 이를 선호합니다. 만료된 장치 코드를 재사용하거나 제안된 플러그인이 연결되었다고 가정하지 마십시오. 다른 앱의 프로젝트 ID를 재사용하지 마십시오. 빌드된 웹사이트를 배포하고 반환된 배포 URL을 확인합니다. 요청된 app.goswie.com의 경우, 해당 정확한 도메인을 Vercel 프로젝트에 추가한 다음, 프로젝트의 현재 DNS 권장 사항을 얻습니다. 권위 있는 DNS 제공자(AceCut은 GoDaddy 문서화)에서 요청된 앱 레코드만 생성/업데이트하며, 일반적으로 CNAME 호스트 app입니다. 추측하거나 복사한 AceCut 대상이 아닌 Vercel에서 반환된 대상을 사용합니다. 관련 없는 레코드, 특히 @, www, MX 및 네임서버를 보존합니다. 기존의 관련 없는 레코드를 대체하기 전에 소유권/충돌을 해결합니다. Vercel에서 요구하는 경우에만 요청된 확인 TXT 레코드를 추가합니다.
공용 DNS, Vercel 도메인 상태, HTTPS 및 배포된 페이지를 확인합니다. 자격 증명이 없는 경우, 빌드를 완료하고 정확히 남은 계정 작업을 문서화합니다. 준비된 구성, 완료된 배포 및 확인된 도메인을 구분합니다. 계획된 도메인을 라이브로 표시하지 마십시오.
현재 공식 참고 자료 (배포 작업 시 참조):
확인된 CLI 시퀀스
GolfCut은 Vercel CLI 65.4.0으로 배포되었습니다. 인증된 로그인 후, 플래그가 다른 경우 현재 --help를 사용하십시오. 확인된 범위, 프로젝트 및 저장소를 대체하십시오. AceCut 및 GolfCut에 사용된 실제 SWI 범위는 diifans-projects입니다.
bun x vercel teams list
bun x vercel project list --scope <scope>
bun x vercel project create <project> --scope <scope>
bun x vercel link --yes --project <project> --scope <scope>
bun x vercel git connect --yes --scope <scope>
bun x vercel project update <project> --framework other --build-command 'bun run build' --install-command 'bun install' --output-directory dist --yes --scope <scope>
bun x vercel --prod --yes --scope <scope>
bun x vercel domains add <app-domain> <project> --scope <scope>
bun x vercel domains verify <app-domain> --scope <scope>
올바른 Git 리모트와 함께 웹사이트 체크아웃에서 실행하십시오. 일치하는 프로젝트가 존재하면 생성을 건너뜁니다. git connect --yes는 해당 리모트를 사용합니다. --yes 없이 에이전트 모드 CLI는 실제로 연결하지 않고 확인 프롬프트에서 종료될 수 있습니다. link는 OIDC 토큰과 .vercel/이 포함된 .env.local을 생성할 수 있습니다. 둘 다 무시된 상태로 유지하십시오. 절대 출력하거나 커밋하지 마십시오.
새로 생성된 장치 로그인 URL을 즉시 보내고, 로그인 프로세스를 유지하며, 명시적인 성공을 기다리십시오. 사용자가 유효하지 않거나 만료된 코드를 보고하면, 이전 로그인을 중지하고, 새 코드를 발행하며, 인증을 위해 턴을 활성 상태로 유지하십시오. 만료된 URL을 계속 반환하지 마십시오.
READY 배포 및 커스텀 도메인 별칭이 공용 DNS가 작동함을 증명하지는 않습니다. 인증 없이 공용 <project>.vercel.app URL과 요청된 도메인을 모두 테스트하십시오. domains verify는 정확히 권장되는 CNAME을 반환합니다. 사용자가 DNS를 관리하는 경우 해당 값을 기록해 두십시오. DNS가 보류 중인 동안 공용 프리뷰를 계속 사용할 수 있도록 유지하십시오. Git이 연결되면 이후 푸시가 배포를 트리거해야 합니다. 특정 새 커밋이 라이브라고 주장하는 경우 배포 상태를 확인하십시오.
인계
소스 출처, 명령어, 빌드 출력, 검증 증거 및 남은 제한 사항을 웹사이트 README에 기록하십시오. 생성된 출력, 로컬 검증 아티팩트, 환경 파일 및 제공자 자격 증명을 Git 외부에 유지하십시오. 실제 라이브 URL은 성공적인 배포 후에만 보고하고, 그렇지 않은 경우 준비된 프로젝트와 정확한 차단 요소를 제공하십시오.