Communitygithub.com

feitangyuan/motion-web

모션 우선의 크리에이티브 웹사이트를 디자인하고 구축합니다 — 페이지 디자인(구조, 타이포그래피 스케일, 팔레트, 간격)과 스크롤 애니메이션, Framer Motion, GSAP, Three.js/R3F를 통한 가벼운 3D 등 인터랙션 안무를 포함합니다. 애니메이션 랜딩 페이지, 크리에이티브 포트폴리오, 제품 쇼케이스, WebGL-라이트 장면, 모션 감사에 사용하세요. 또한 인터랙션의 손의 느낌(手感差/太生硬/不跟手)을 조정하거나, 비디오나 URL 참조에서 모션을 복제(复刻), 평면 이미지 에셋으로 3D 깊이 구축(伪3D/抠图), 데드 스크롤 타임라인 구간 진단, 장면 오디오 믹싱, 발견 가능성 감사(点不开/没人会发现), 헤드리스 검증 프로브 구축, 움직임은 좋지만 생성된 것처럼 보이는(不好看/像AI做的/没设计感) 페이지 수정에 사용합니다. 아무것도 없는 상태에서 전체 사이트를 구축(从0到1做个网页/落地页/官网/作品集)하는 경우에도 동일하게 사용됩니다: 스택 선택, 섹션 및 카피, 컴포넌트(导航/hero/表单/卡片/定价表), 프로덕션 폴리시(favicon/OG/404/空状态/暗色模式). 대시보드, 관리자 UI 또는 전체 3D 장면 생성에는 사용하지 않습니다.

motion-web란 무엇인가요?

Motion-web은 모션 우선의 크리에이티브 웹사이트를 위한 설계 및 구축 스킬입니다. 이 스킬은 참조 → 컨셉 → 명세 → 구축 → 감사에 이르는 전체 단계를 처리하며, 특히 제로에서 시작하여 전체 사이트를 완성하는(从0到1做个网页) 경우에 강력합니다. 사용자가 보내는 최소한의 입력(예: '做个网页', URL 드롭, 비디오 클립 등)으로 의도를 감지하고, 미리 정의된 의도 맵에 따라 자율적으로 진행하며, 필요한 경우 참조 문서(예: `page-blueprints.md`, `project-setup.md`, `page-design.md`, `components.md`, `production-polish.md`, `handfeel.md`, `affordance.md` 등)를 통해 최종 결과물을 보장합니다. 주요 기능으로는 전체 사이트 구축, 모션 복제(复刻), 디자인 감사, 손 느낌 조정, 접근성 및 성능 최적화 등이 포함되며, 이는 Claude Code, Cursor, Codex와 같은 에이전트 플랫폼에서 사용됩니다.

지원 대상✓Claude Code~Codex CLI✓Cursor✓Antigravity
npx skills add feitangyuan/motion-web

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

motion-web은(는) 무엇을 하나요?

모션 우선의 크리에이티브 웹. 이 스킬은 참조 → 컨셉 → 명세 → 구축 → 감사의 모든 단계를 처리합니다.

이 스킬은 전체 웹 페이지를 구축합니다. 모션은 페이지를 좋게 만드는 요소이지, 전체 작업이 아닙니다. 모션이 전혀 없는 요청 — "做个落地页", "帮我把这个官网做出来" — 도 이 스킬의 대상이며, 결과물은 완성된 사이트입니다: 스택, 토큰, 섹션, 카피, 컴포넌트, 상태, 메타, 배포.

우선순위 — 1과 2는 동등합니다:

  1. 모션 컨셉 및 인터랙션 안무
  2. 페이지 디자인 — 구조, 타이포그래피 스케일, 팔레트, 간격 리듬, 움직이기 전의 모습
  3. 구축된 아티팩트로서의 페이지 — 섹션과 그 카피, 컴포넌트 용어집, 토큰 레이어, 해피 패스를 벗어난 상태들 (page-blueprints.md, components.md, project-setup.md, production-polish.md)
  4. 페이지를 강화할 때만 가벼운 3D 또는 캔버스
  5. 성능, 접근성, 축소 모션 폴백

기본 페이지에 멋진 메커니즘 하나는 실패한 페이지입니다. 모션은 장점이지, 변명이 아닙니다. 이 스킬의 가장 흔한 실패는 아무도 디자인하지 않은 레이아웃에 하나의 교묘한 인터랙션을 붙여 배송하는 것입니다 — 모션을 끄면 부끄러운 페이지라면 완료된 것이 아니며, 어떤 스프링 튜닝도 고칠 수 없습니다. 디자인은 시간상 2단계가 아닙니다. 최종 결과물에서도 참이어야 하는 또 다른 것입니다. → references/page-design.md, references/design-slop.md

이것은 한 가지 사이트 클래스를 위한 디자인 및 구축 스킬입니다: 크리에이티브 및 마케팅 웹 — 랜딩 페이지, 제품 페이지, 포트폴리오, 스튜디오 사이트, 캠페인, 에디토리얼, 가벼운 문서. 이들은 처음부터 끝까지 구축합니다. 대시보드 / 관리자 / 데이터 밀집 앱 UI 스킬이 아니며, 전체 3D 장면 생성기도 아닙니다(그런 경우 3d-scene-studio로 라우팅). 앱 형태의 조각(가격 표, 로그인, 콘솔 스크린샷)이 포함된 크리에이티브 페이지는 범위 내에 있지만, 로그인된 제품 인터페이스는 그렇지 않습니다.


에이전트 의도 감지 (중요 — 먼저 읽으세요)

사용자는 종종 매우 적게 말합니다. 최소한의 입력에서 의도를 감지하고 자율적으로 행동하세요.

신호 → 의도 맵

사용자가 보낸 내용감지된 의도수행할 작업
"做个网页" / "做个落地页/官网/作品集" with a topic, no referencefull-build전체 사이트, 메커니즘이 아닙니다. page-blueprints.md → project-setup.md → page-design.md → build → components.md → production-polish.md
"这页要放什么" / "该有哪些 section" / "信息架构" / "文案怎么写"blueprintpage-blueprints.md — 스파인을 선택하고, 실제 카피를 작성하며, 모든 발명된 사실을 표시합니다
"导航" / "按钮" / "表单" / "卡片" / "footer" / "FAQ" / "定价表" / "弹窗" / "组件"componentcomponents.md — 먼저 방언 표, 그 다음 상태 매트릭스. 상태가 없는 컴포넌트는 완료되지 않았습니다
"用什么技术栈" / "Astro 还是 Next" / "怎么起项目" / "design token" / "字体" / "部署"setupproject-setup.md — 페이지 사다리 ≠ 모션 사다리; 0단계부터 시작하여 올라갑니다
"像 demo 不像成品" / "OG 预览是空的" / "没有 favicon" / "404" / "空状态" / "暗色模式" / "表单没校验"polishproduction-polish.md — 모두 확인 가능합니다; 추정하지 말고 §9를 실행하세요
A bare URL (no other text)url-drop열고 분해한 후(복제 모드 1-2단계), 다음을 물어보세요: 이것을 재구축할까요, 아니면 그들의 것을 위한 참조로 사용할까요?
A URL + "做个网页" or "参考这个"replicate → build먼저 URL을 분해하고(복제 모드), 사용자 자신의 콘텐츠를 위한 모션 컨셉을 제안하세요
参考 + "复刻出来并收录成 case" / "存进 skill" / "做成案例"case-authoringcases/AUTHORING.md — 먼저 페이즈 0 게이트: 참조에서 이미지를 제거하세요; 아무것도 남지 않으면, 구축 후가 아닌 구축 전에 에셋을 확보하세요
A URL + "复刻" / "做一个类似的" / "参考这个做"replicate분해 → 패턴에 매핑 → 즉시 구축.
A URL to a paper/article/blogdoc-drop읽고, 추출 가능한 값으로 기법의 이름을 지정한 후, 요청 시 하나로 구축하세요 (아래 문서 / 기사 드롭)
A vague brief ("做个很酷的网页" / "做个 portfolio")freeform-buildcomposition-guide.md를 통해 조정 → 스타일+아크를 독립적으로 선택하세요
A topic only ("做一个关于 AI 的落地页")spec → buildcomposition-guide.md를 통해 조정 → 시각적 방향을 제안하고 즉시 구축하세요
A detailed brief with referencesspec → buildMOTION_SPEC.md 작성 → 승인 받기 → 구축
"审查" / "有什么问题" / "gap"audit기존 작업에서 모션/성능/접근성 갭을 검사하세요 — 정지 프레임을 포함, design-slop.md 참조
"不好看" / "太丑" / "像 AI 做的" / "没设计感" / "普通"design-audit모션을 끄고 스크린샷을 찍어 design-slop.md의 게이트를 실행하세요. 스프링을 튜닝하지 마세요 — 불만은 정지 프레임에 대한 것입니다
"版式" / "排版" / "字太小" / "留白" / "结构" / "section 都长一样"designpage-design.md — 거시 구조, 타이포그래피 스케일, 간격 리듬, 현재 수상작과 비교하여 측정
"加上…" on existing pageincremental-build새로운 모션으로 현재 구현을 확장하세요
A video reference (Pinterest/Dribbble/X clip)video-refSTOP — 코드를 작성하기 전에 아래 비디오 참조 프로토콜을 실행하세요
"手感差" / "太生硬" / "不跟手" / "四平八稳" on existing motionhandfeel-tunehandfeel.md에 따라 감사 — 스프링, 속도 커플링, 2차 모션
"跟手但总差一点" / "一抖一抖" / 手感随帧率变 on anything that follows (camera, cursor, rail, tooltip)handfeel-tune§1의 스프링이 아님 — handfeel.md §7: 1-exp(-k·dt), speed/k 리드 항, 필터 후 절대 수정하지 않음
"能不能不用 GSAP" / 只是个入场或视差 / 想要更轻build먼저 1.5 단계 확인 — 네이티브 animation-timeline / animation-trigger / sibling-index() → build-mode.md 사다리 + pattern-recipes.md #16. Firefox는 정적 최종 상태를 얻습니다
素材是一个真实存在的地方(实拍/扫描),要走进去build5.5 단계 — 모델보다 3D 가우시안 스플랫 먼저 → build-mode.md 사다리
卡片/图片要弯折、旗帜、翻页、把截图钉进立体面、"skew 不够用"warp코너-핀 호모그래피 → pattern-recipes.md #17. 모든 쿼드를 보호하고 가장자리 기울기를 asin(h/w)로 고정하세요 — 보호되지 않은 쿼드는 오류 없이 화면 크기 블록을 그립니다
"点不开" / "只有一个能点" / "没人会发现" / "看不到" on existing motionaffordance-audit히트 테스트 코드를 먼저 건드리지 마세요. affordance.md에 따라 감사 — 메커니즘은 대개 괜찮습니다. 초대장이 없거나 만료되었습니다
A pile of image assets + "做成一个 3D 场景" / "要有纵深" / "camera 要能走进去"image-plane-3d모델을 사용하지 마세요. 실제 원근 카메라에서 평면 평면으로 장면을 구축하세요 → image-plane-3d.md (사다리 5단계)
"有拼接感" / "没融进去" / "像贴上去的" on a rendered sceneimage-plane-3d아트를 건드리기 전에 측정: 에셋 배치당 평균 R−B 및 휘도, 접촉 그림자 존재 → image-plane-3d.md §6–7
"这个该用什么画" / "DOM 还是 canvas" / 页面只会输出 div 和系统字体 / 参考明显不是 DOM 能做的render-layer레이어를 먼저 결정한 다음 메커니즘을 결정하세요 → render-layer.md §1. 레이어는 선언이며, case README에 작성하고 verify_case.py --layer로 확인합니다
手绘 / 墨线 / 描边风的 3D,"像画出来的不像渲出来的",boil / 抖线 / 纸纹ink-renderrender-layer.md §3 — 깊이 불연속 외곽선(법선 크리크 꺼짐), 정적 warp과 동적 boil 분리, boil 클록 11Hz 대 60fps 렌더링
Raw plates / renders that still need cutting out, "抠图", "素材怎么进场景", "图糊了"asset-pipeline이미지의 자체 배경에 대해 키잉, 알파 bbox로 자르기, 메타데이터 스크립팅, 요소별 해상도 예산 출력 → image-asset-pipeline.md
Any headless check; a number disagrees with what you see; "怎么验"verify먼저 프로브 표면을 구축하세요 — 고정 가능한 클록, __seek, __hold, 상태 종료 — 그런 다음 측정 → verification-harness.md
"这一段什么都没发生" / "节奏不好" / "一堆字一下就出来了" on a scroll timelinetimeline-audit모든 트랙을 하나의 스크롤 축에 겹쳐 놓으세요; 죽은 비트는 느린 레이어 하나가 아니라 일치하는 고원입니다 → timeline-orchestration.md
Long scroll scene with many assets; "卡", "加载慢", "内存爆了", hundreds of platesscene-streaming화면 창으로 활성화, 큰 업로드 분할, 스캔 내 양보, 완전히 폐기 → scene-streaming.md
Anything with sound — BGM, ambience, interaction SFX, "音效太少", "氛围音听不清但也别吵"scene-audio세 개의 버스(bgm / hand / world), 행별 곡선, 더 큰 배경 위의 개별 이벤트 → scene-audio.md

어떤 모드를 사용해야 하는지 사용자에게 묻지 마세요. 감지하세요. 진행하세요. 브리핑이 두 개의 매우 다른 출력(예: 명세 대 즉시 구축) 사이에서 진정으로 모호할 때만 멈추세요.


비디오 참조 프로토콜 (硬规则 — 不许猜)

트리거: 참조가 실제로 볼 수 없는 비디오 — Pinterest 핀, Dribbble 샷, X 클립, 站外短链. 제목이나 텍스트 설명은 모션 정보가 아닙니다.

  1. 라이브 페이지가 없다고 결론 내리기 전에 스레드를 읽으세요. 저자는 거의 항상 답글에 URL을 게시하며, 답글은 또한 해당 작품이 웹 페이지인지 여부를 알려줍니다. 2026-09-02 측정: 이전 세션은 7개의 비디오 참조에 URL이 없다고 선언하고 페이즈 1을 프레임 측정에 소비했습니다. 모든 7개에 저자 본인이 게시한 라이브 사이트가 있었으며, 한 게시물의 4개 클립 중 3개는 웹 구현이 전혀 없는 Jitter / Figma Motion / Rive 렌더링으로 판명되었습니다(cases/AUTHORING.md 페이즈 1). safe-x tweet <url> --json을 실행한 다음 답글의 모든 t.co 링크를 확인하세요.
  2. 추측으로 모션을 구축하지 마세요. 제목/설명만 추출했다면 주제는 알지만 모션은 모릅니다. 어쨌든 구축하면 전체 반복을 소모합니다 — 이것은 문서화된 실패 모드입니다(2026-07-06, 해산물 히어로: "orbit" 추측, 실제는 상승 대각선; 두 번 재구축).
  3. 즉시 2-3개의 키프레임을 요청하세요. 한 문장: "这个视频我打不开,截 2-3 帧关键画面(入场/中间/离场)发我".
  4. 코딩 전에 궤적을 명시적 기하학으로 명시하고 확인을 받으세요:
    • 앵커 포인트: 요소가 들어오는 / 정점에 도달하는 / 나가는 위치(모서리, 3등분점)
    • 자세: 회전이 경로 접선을 따름 / 일정하게 유지됨 / 뒤처짐
    • 2차 반응: 무엇이 더 움직이는지(배경 모양, 선, 텍스트) 그리고 어떻게
    • 예시: "右下入场 → 中心 → 左上离场的上升对角线,鱼头恒定朝左上" — 잘못된 추측은 코드가 아닌 여기서 죽습니다
  5. 그런 다음에만 pattern-recipes / handfeel.md에 매핑하고 구축하세요.

단일 스크린샷도 동일한 규칙을 따릅니다: 한 프레임은 포즈를 제공하지만 궤적은 제공하지 않습니다. 경로가 중요하다면 더 많은 프레임을 요청하세요.


복제 모드 (复刻模式)

사용자가 "复刻" / "做一个类似的" / "能不能做这种效果"와 함께 URL을 보내면 — 분해한 다음 구축하세요. 저장 단계는 없습니다. 결과물은 페이지입니다.

복제 실행 경로

  1. 페이지를 열고 세 가지 레이어로 읽으세요, 사용 가능한 브라우저 도구(Claude Preview, browser-use, Playwright)를 사용하여: 스택(라이브러리, 이징, 키프레임, CSS 변수 — 번들이 이름을 지정함), 스크롤 안무(어떤 요소가 어떤 밴드 위에 고정되어 있는지, 레일과 그 px 거리, 패럴랙스 비율, 스크러빙된 속성, 진입 지점 — 약 9개의 스크롤 위치를 샘플링하고 그 사이의 getBoundingClientRect 및 계산된 스타일을 비교), WebGL 레이어(프로그램 수, 드로우 콜, 사용자 정의 유니폼 이름; 셰이더 소스가 필요하면 페이지 스크립트가 실행되기 전에 getContext를 래핑). 두 스크립트가 측정 가능한 절반을 다룹니다: 정적 페이지(섹션, 내비게이션, 버튼, 토큰 스케일, 미디어, 메타, 모바일 오버플로)를 위한 scripts/measure_structure.py <url>과 실제 휠 아래에서 페이지의 얼마나 많은 부분이 실제로 움직이는지를 위한 scripts/measure_churn.py <url>. URL은 작업 자체여야 하며, 갤러리 목록(awwwards.com/sites/<slug>)이 절대 안 됩니다: 목록 페이지는 갤러리 자체의 크롬을 제공하며, 6개의 다른 수상작이 동일한 라이브러리, 동일한 키프레임 및 동일한 글꼴로 반환됩니다.

  2. 분해 — 찾은 내용을 진술하고 인상이 아닌 숫자를 인용하세요:

    • "GSAP 3.12 + ScrollTrigger + Lenis;.home-animate__wrapper 在 0.25–0.50 被 pin 住,期间 .icon 横移 +1545px,出场是 0.25/0.38/0.62 三段 stagger"
    • "背景是原生 WebGL2,14 个 program、944 draw calls,uniform 里有 bloomStrength/blurTexture1-5 和 cloudCoverage/cloudDensity —— 是 UnrealBloom + 体积云"

    컨텍스트만으로 "WebGL 사용"을 보고하지 마세요 — 연결된 프로그램이 없는 크기 없는 300×150 컨텍스트는 Modernizr 스타일의 기능 감지일 뿐, 장면이 아닙니다. 연결된 프로그램과 드로우 콜을 세세요.

  3. pattern-recipes에 매핑 — references/pattern-recipes.md에서 가장 가까운 레시피를 찾으세요

  4. 갭 채우기 — 참조가 사용하지만 레시피에는 없는 것을 추출된 값에 기반하여 처음부터 작성하세요

  5. 즉시 구축 — 페이지를 스캐폴딩하고, 실행하고, 시각적으로 확인하세요

  6. 보고 — "复刻了 [site] 的核心动效,用了 [X] 实现 [Y],和原版差异是 [Z]"

복제 ≠ 복사

  • 할 것: 인터랙션 패턴, 모션 특성, 타이밍 느낌을 재창조하세요
  • 하지 말 것: 독점 브랜드 색상, 정확한 카피 텍스트, 식별 가능한 제품 UI를 복사하지 마세요
  • 할 것: 기법을 사용자 자신의 콘텐츠와 팔레트에 맞게 조정하세요
  • 보고서에서 무엇이 조정되었고 무엇이 원본에 충실했는지 기록하세요

프리폼 구축 모드 (사용자가 방향을 전혀 제시하지 않을 때)

사용자가 "做个网页" / "随便做" / "自己想一个主题" 또는 단순한 모호한 주제(예: "做一个AI agent平台落地页")를 말할 때, 이것은 창의성을 발휘하라는 초대입니다. 기본 템플릿을 기본값으로 사용하지 말고, 엄격한 1대1 라우팅 매핑을 사용하지 말며, 명확화 질문을 하지 마세요.

프리폼 실행 경로 (런타임 창의적 루프 — 创造发生在执行中,不

...

관련 스킬