인디해커 워크플로 — OpenClaw 자동 보일러플레이트로 로컬 웹 마이크로앱 대량 생산
인디해커가 실패하는 이유는 아이디어 부족이 아니라, 17번째 아이디어가 스모크 테스트까지 가지 못하기 때문입니다. OpenClaw는 채팅 장난감이 아니라 자동 보일러플레이트 공장입니다. 같은 Next.js/Vite 마이크로앱 골격을 스킬과 셸로 반복 생성하고, 같은 npm test 게이트를 돌리며, 합격/불합격을 재무팀이 무시해도 되는 CSV에 남깁니다. 이 워크플로는 로컬 Mac에서의 대량 생산·테스트를 우선합니다. 원격 Mac 렌탈은 야간 배치용 선택 레인입니다.
Apple Silicon에서 OpenClaw를 쓰고 있다면 hour-zero 설치 규약, Webhook 전 속도 제한, 다중 repo 디스크 관리를 함께 보세요. 보일러플레이트 반복만이라면 OpenClaw + Ollama로 토큰 지출을 줄일 수 있습니다.
고지: KvmZone 언급은 장시간 배치용 렌탈 Mac을 선택할 때만 있습니다. 워크플로 대부분은 이미 보유한 Mac에서 완료됩니다.
로컬 우선 대량 생산이 「완벽한 한 앱」보다 나은 이유
| 통증 | 로컬 우선 OpenClaw 대응 |
|---|---|
| 템플릿 표류 | 한 스킬이 매번 같은 폴더 레이아웃 출력 |
| 출시 공포 | 배치 스모크로 각 아이디어를 15분 게이트로 압축 |
| API 청구 쇼크 | 보일러플레이트는 로컬/저가 모델, 승격 시만 프론티어 |
| repo 확산 | worktree + sparse checkout으로 디스크 예측 가능 |
운영자 문서는 OpenClaw gateway configuration examples입니다. 설치된 버전에 맞게 스킬·CLI 플래그를 확인하세요.
아키텍처: 한 워크스테이션의 보일러플레이트 루프
인디 루프 데이터 흐름:
Idea CSV → OpenClaw skill (scaffold) → git worktree → npm ci → npm run build → npm test → PASS/FAIL 행
한 번만 고정하는 구성요소
| 구성요소 | 경로 / 명령 | 역할 |
|---|---|---|
| Workspace | ~/.openclaw/workspace | 스킬·에이전트 기본값 |
| Boilerplate skill | skills/micro-app-scaffold/ | package.json, src/, README.md 출력 |
| Batch driver | ~/indie-batch/run.sh | 아이디어 순회(root 실행 금지) |
| Artifact root | ~/indie-apps/ | slug별 디렉터리, 하위 worktree |
| Smoke log | ~/indie-apps/smoke.csv | 타임스탬프, slug, 종료 코드, 로그 경로 |
모델 라우팅(지출을 지루하게)
| 단계 | 모델 레인 | 이유 |
|---|---|---|
| Scaffold + 파일 편집 | 로컬 Ollama 또는 빠른 클라우드 mini | 반복 횟수 많음 |
| UI 카피 다듬기 | 프론티어 모델 | 빈도 낮음 |
| 프로덕션 Webhook 에이전트 | 프론티어 + 속도 제한 | 예산 알림 글 참고 |
6단계 대량 생산 런북(로컬 Mac)
Step 1 — Node와 OpenClaw 고정
node -v # 22.x 예상
openclaw --version
openclaw doctor
배치 전 PATH를 수정하세요—hour-zero 규약 참고.
Step 2 — 아이디어 큐 생성
~/indie-apps/ideas.csv:
slug,title,stack
ping-dashboard,Ping Dashboard,vite-react
waitlist-mini,Waitlist Mini,next-14
Step 3 — OpenClaw 스캐폴드(스킬 1개, slug 다수)
export IDEA_SLUG=ping-dashboard
openclaw run --skill micro-app-scaffold --var slug=$IDEA_SLUG --var stack=vite-react
합격 게이트: ~/indie-apps/$IDEA_SLUG/package.json 존재·CSV 일치.
Step 4 — git worktree로 격리
cd ~/indie-apps/monorepo.git
git worktree add ../wt-$IDEA_SLUG -b indie/$IDEA_SLUG
rsync -a ~/indie-apps/$IDEA_SLUG/ ../wt-$IDEA_SLUG/
합격 게이트: git -C ../wt-$IDEA_SLUG status가 의도 파일 외 클린.
Step 5 — 배치 install·build
cd ~/indie-apps/wt-$IDEA_SLUG
npm ci --prefer-offline
npm run build
합격 게이트: dist/ 또는 .next/ 존재, 종료 코드 0.
Step 6 — 배치 test·기록
npm test -- --passWithNoTests 2>&1 | tee ~/indie-apps/logs/$IDEA_SLUG.test.log
echo "$(date -Iseconds),$IDEA_SLUG,$?,$PWD" >> ~/indie-apps/smoke.csv
승격 규칙: 종료 코드 0인 slug만 캘린더에 사람 리뷰를 둡니다.
배치 테스트 매트릭스(PASS 정의)
| 검사 | 명령 | PASS | FAIL 시 |
|---|---|---|---|
| Typecheck | npm run typecheck 또는 tsc -b | 종료 0 | OpenClaw 수정 스킬 1회, 이후 사람 |
| Unit | npm test | 종료 0 | smoke.csv에서 격리 |
| Lint | npm run lint | 종료 0 | 아이디어 단계는 선택, 공개 URL 전 필수 |
| Dev server | timeout 30 npm run dev | / HTTP 200 | 포트 충돌 로그, 병렬 dev 회피 |
| Bundle size | du -sh dist | 파일럿 < 5MB | 승격 전 에셋 축소 |
여유 RAM 8GB 이상 노트북은 검사를 직렬 실행. 16GB Apple Silicon은 병렬 npm ci를 2개까지로 제한해 스왑 폭주를 막습니다.
시나리오 A — 노트북만 인디 주간
조건: APFS 여유 50GB 이상, Webhook 노출 없음.
- 1일차: slug 5개로 Step 1–3.
- 2일차: 전 slug Step 4–6, 1개 slug 승격.
- 3일차: 승격 slug 랜딩 카피만 프론티어 모델.
권장: 동일 스택 템플릿으로 smoke.csv에 3연속 PASS가 나올 때까지 로컬 유지.
시나리오 B — 야간 배치용 선택 렌탈 Mac
조건: 로컬 Mac 슬립, 또는 병렬 npm ci 6개 필요.
렌탈 Mac mini M4 16GB는 전기·슬립 OPEX 대체이며 필수는 아닙니다. 렌탈 시 SSH 우선 운영을 재사용하고 시크릿은 서버에 둡니다. 서울 노드 등 리전은 요금 페이지에서 Compare 하세요.
문제 해결
openclaw run 성공인데 폴더 비어 있음
패턴: 스킬 종료 0, 파일 없음.
조치:
- 스킬이 repo CWD가 아닌 config
workspace에 쓰는지 확인. - verbose로 대화형 1회 실행, 경로를 스킬 README에 기록.
- 스킬 버전 고정—자동 업데이트가 경로를 조용히 깨뜨림.
배치 중 npm ci OOM / kill
패턴: Killed: 9 또는 스왑 폭주.
조치:
- 병렬을 1로 축소.
- 스모크만
npm ci --omit=dev(CSV에 편차 기록). - 16GB 이상 통합 메모리 머신으로 배치 이전.
FAQ
ideas.csv의 stack을 매개변수화하고, 필요 시 2열에 스택별 스모크 명령을 둡니다.