wizz-method 1.0.3 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +4 -2
- package/skills-registry.yaml +352 -0
- package/src/bmm-skills/4-implementation/wizz-quick-dev/SKILL.md +7 -0
- package/src/core-skills/wizz-editorial-review-prose/SKILL.md +20 -45
- package/src/core-skills/wizz-party-mode/customize.toml +894 -0
- package/src/core-skills/wizz-party-mode/scripts/__pycache__/resolve_party.cpython-314.pyc +0 -0
- package/src/core-skills/wizz-review-adversarial-general/SKILL.md +23 -12
- package/src/modules/wizz/agents/wizz-maestro/SKILL.md +48 -23
- package/src/skills-lib/ab-test-setup/SKILL.md +266 -0
- package/src/skills-lib/ab-test-setup/evals/evals.json +105 -0
- package/src/skills-lib/ab-test-setup/references/sample-size-guide.md +263 -0
- package/src/skills-lib/ab-test-setup/references/test-templates.md +277 -0
- package/src/skills-lib/ad-creative/SKILL.md +362 -0
- package/src/skills-lib/ad-creative/evals/evals.json +90 -0
- package/src/skills-lib/ad-creative/references/generative-tools.md +637 -0
- package/src/skills-lib/ad-creative/references/platform-specs.md +213 -0
- package/src/skills-lib/adversarial-reviewer/SKILL.md +122 -0
- package/src/skills-lib/agent-browser/SKILL.md +139 -0
- package/src/skills-lib/ai-seo/SKILL.md +398 -0
- package/src/skills-lib/ai-seo/evals/evals.json +90 -0
- package/src/skills-lib/ai-seo/references/content-patterns.md +285 -0
- package/src/skills-lib/ai-seo/references/platform-ranking-factors.md +152 -0
- package/src/skills-lib/analytics-tracking/SKILL.md +309 -0
- package/src/skills-lib/analytics-tracking/evals/evals.json +90 -0
- package/src/skills-lib/analytics-tracking/references/event-library.md +260 -0
- package/src/skills-lib/analytics-tracking/references/ga4-implementation.md +300 -0
- package/src/skills-lib/analytics-tracking/references/gtm-implementation.md +390 -0
- package/src/skills-lib/auth-and-secrets/SKILL.md +82 -0
- package/src/skills-lib/caching-and-queues/SKILL.md +58 -0
- package/src/skills-lib/cerebro/SKILL.md +368 -0
- package/src/skills-lib/churn-prevention/SKILL.md +424 -0
- package/src/skills-lib/churn-prevention/evals/evals.json +93 -0
- package/src/skills-lib/churn-prevention/references/cancel-flow-patterns.md +316 -0
- package/src/skills-lib/churn-prevention/references/dunning-playbook.md +408 -0
- package/src/skills-lib/cloud-and-infra/SKILL.md +36 -0
- package/src/skills-lib/cold-email/SKILL.md +158 -0
- package/src/skills-lib/cold-email/evals/evals.json +94 -0
- package/src/skills-lib/cold-email/references/benchmarks.md +83 -0
- package/src/skills-lib/cold-email/references/follow-up-sequences.md +81 -0
- package/src/skills-lib/cold-email/references/frameworks.md +90 -0
- package/src/skills-lib/cold-email/references/personalization.md +79 -0
- package/src/skills-lib/cold-email/references/subject-lines.md +53 -0
- package/src/skills-lib/competitor-alternatives/SKILL.md +256 -0
- package/src/skills-lib/competitor-alternatives/evals/evals.json +93 -0
- package/src/skills-lib/competitor-alternatives/references/content-architecture.md +271 -0
- package/src/skills-lib/competitor-alternatives/references/templates.md +223 -0
- package/src/skills-lib/content-strategy/SKILL.md +359 -0
- package/src/skills-lib/content-strategy/evals/evals.json +90 -0
- package/src/skills-lib/copy-editing/SKILL.md +447 -0
- package/src/skills-lib/copy-editing/evals/evals.json +89 -0
- package/src/skills-lib/copy-editing/references/plain-english-alternatives.md +394 -0
- package/src/skills-lib/copywriting/SKILL.md +252 -0
- package/src/skills-lib/copywriting/evals/evals.json +111 -0
- package/src/skills-lib/copywriting/references/copy-frameworks.md +344 -0
- package/src/skills-lib/copywriting/references/natural-transitions.md +272 -0
- package/src/skills-lib/database-and-deps/SKILL.md +80 -0
- package/src/skills-lib/database-scaling/SKILL.md +44 -0
- package/src/skills-lib/decision-maker/SKILL.md +534 -0
- package/src/skills-lib/desktop-security/SKILL.md +43 -0
- package/src/skills-lib/email-sequence/SKILL.md +309 -0
- package/src/skills-lib/email-sequence/evals/evals.json +93 -0
- package/src/skills-lib/email-sequence/references/copy-guidelines.md +113 -0
- package/src/skills-lib/email-sequence/references/email-types.md +515 -0
- package/src/skills-lib/email-sequence/references/sequence-templates.md +168 -0
- package/src/skills-lib/enhance-prompt/README.md +34 -0
- package/src/skills-lib/enhance-prompt/SKILL.md +204 -0
- package/src/skills-lib/enhance-prompt/references/KEYWORDS.md +114 -0
- package/src/skills-lib/find-skills/SKILL.md +181 -0
- package/src/skills-lib/form-cro/SKILL.md +429 -0
- package/src/skills-lib/form-cro/evals/evals.json +90 -0
- package/src/skills-lib/free-tool-strategy/SKILL.md +178 -0
- package/src/skills-lib/free-tool-strategy/evals/evals.json +90 -0
- package/src/skills-lib/free-tool-strategy/references/tool-types.md +217 -0
- package/src/skills-lib/graphify/.graphify_version +1 -0
- package/src/skills-lib/graphify/SKILL.md +1217 -0
- package/src/skills-lib/huashu-design/LICENSE +21 -0
- package/src/skills-lib/huashu-design/README.en.md +309 -0
- package/src/skills-lib/huashu-design/README.md +348 -0
- package/src/skills-lib/huashu-design/SKILL.md +631 -0
- package/src/skills-lib/huashu-design/assets/android_frame.jsx +175 -0
- package/src/skills-lib/huashu-design/assets/animations.jsx +348 -0
- package/src/skills-lib/huashu-design/assets/banner.svg +198 -0
- package/src/skills-lib/huashu-design/assets/bgm-ad.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-educational-alt.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-educational.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-tech.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-tutorial-alt.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-tutorial.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/browser_window.jsx +166 -0
- package/src/skills-lib/huashu-design/assets/deck_index.html +348 -0
- package/src/skills-lib/huashu-design/assets/deck_stage.js +420 -0
- package/src/skills-lib/huashu-design/assets/design_canvas.jsx +205 -0
- package/src/skills-lib/huashu-design/assets/director-notes-samples/launch-film-30s-sample.md +1713 -0
- package/src/skills-lib/huashu-design/assets/ios_frame.jsx +192 -0
- package/src/skills-lib/huashu-design/assets/macos_window.jsx +96 -0
- package/src/skills-lib/huashu-design/assets/narration_stage.jsx +476 -0
- package/src/skills-lib/huashu-design/assets/personal-asset-index.example.json +71 -0
- package/src/skills-lib/huashu-design/assets/sfx/container/card-flip.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/container/card-snap.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/container/modal-open.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/container/stack-collapse.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/feedback/achievement.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/feedback/error-tone.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/feedback/notification-pop.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/feedback/success-chime.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/impact/brand-stamp.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/impact/drop-thud.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/impact/logo-reveal-v2.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/impact/logo-reveal.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/keyboard/delete-key.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/keyboard/enter.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/keyboard/space-tap.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/keyboard/type-fast.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/keyboard/type.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/magic/ai-process.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/magic/sparkle.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/magic/transform.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/progress/complete-done.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/progress/generate-start.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/progress/loading-tick.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/terminal/command-execute.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/terminal/cursor-blink.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/terminal/output-appear.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/transition/dissolve.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/transition/slide-in.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/transition/swipe-horizontal.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/transition/whoosh-fast.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/transition/whoosh.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/click-soft.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/click.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/focus.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/hover-subtle.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/tap-finger.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/toggle-on.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/INDEX.md +115 -0
- package/src/skills-lib/huashu-design/assets/showcases/cover/cover-build.html +235 -0
- package/src/skills-lib/huashu-design/assets/showcases/cover/cover-build.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/cover/cover-pentagram.html +229 -0
- package/src/skills-lib/huashu-design/assets/showcases/cover/cover-pentagram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/cover/cover-takram.html +288 -0
- package/src/skills-lib/huashu-design/assets/showcases/cover/cover-takram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-build.html +503 -0
- package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-build.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-pentagram.html +600 -0
- package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-pentagram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-takram.html +670 -0
- package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-takram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-build.html +382 -0
- package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-build.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-pentagram.html +536 -0
- package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-pentagram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-takram.html +497 -0
- package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-takram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-build.html +385 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-build.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-pentagram.html +422 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-pentagram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-takram.html +499 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-takram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-build.html +562 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-build.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-pentagram.html +548 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-pentagram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-takram.html +696 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-takram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-build.html +372 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-build.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-pentagram.html +460 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-pentagram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-takram.html +494 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-takram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-build.html +367 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-build.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-pentagram.html +368 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-pentagram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-takram.html +459 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-takram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-build.html +493 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-build.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-pentagram.html +556 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-pentagram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-takram.html +604 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-takram.png +0 -0
- package/src/skills-lib/huashu-design/demos/c1-ios-prototype-en.html +1145 -0
- package/src/skills-lib/huashu-design/demos/c1-ios-prototype.html +1142 -0
- package/src/skills-lib/huashu-design/demos/c2-slides-pptx-en.html +1055 -0
- package/src/skills-lib/huashu-design/demos/c2-slides-pptx.html +1055 -0
- package/src/skills-lib/huashu-design/demos/c3-motion-design-en.html +1134 -0
- package/src/skills-lib/huashu-design/demos/c3-motion-design.html +1134 -0
- package/src/skills-lib/huashu-design/demos/c4-tweaks-en.html +989 -0
- package/src/skills-lib/huashu-design/demos/c4-tweaks.html +989 -0
- package/src/skills-lib/huashu-design/demos/c5-infographic-en.html +816 -0
- package/src/skills-lib/huashu-design/demos/c5-infographic.html +813 -0
- package/src/skills-lib/huashu-design/demos/c6-expert-review-en.html +885 -0
- package/src/skills-lib/huashu-design/demos/c6-expert-review.html +894 -0
- package/src/skills-lib/huashu-design/demos/hero-animation-v10-en.html +1498 -0
- package/src/skills-lib/huashu-design/demos/md-html-narration/md-html-demo.html +615 -0
- package/src/skills-lib/huashu-design/demos/md-html-narration/script.md +69 -0
- package/src/skills-lib/huashu-design/demos/voiceover-demo/script.md +17 -0
- package/src/skills-lib/huashu-design/demos/voiceover-demo//344/273/200/344/271/210/346/230/257token.html +201 -0
- package/src/skills-lib/huashu-design/demos/w1-brand-protocol-en.html +684 -0
- package/src/skills-lib/huashu-design/demos/w1-brand-protocol.html +696 -0
- package/src/skills-lib/huashu-design/demos/w2-junior-designer-en.html +983 -0
- package/src/skills-lib/huashu-design/demos/w2-junior-designer.html +994 -0
- package/src/skills-lib/huashu-design/demos/w3-fallback-advisor-en.html +647 -0
- package/src/skills-lib/huashu-design/demos/w3-fallback-advisor.html +704 -0
- package/src/skills-lib/huashu-design/package-lock.json +846 -0
- package/src/skills-lib/huashu-design/package.json +8 -0
- package/src/skills-lib/huashu-design/references/animation-best-practices.md +506 -0
- package/src/skills-lib/huashu-design/references/animation-pitfalls.md +402 -0
- package/src/skills-lib/huashu-design/references/animations.md +249 -0
- package/src/skills-lib/huashu-design/references/apple-gallery-showcase.md +338 -0
- package/src/skills-lib/huashu-design/references/audio-design-rules.md +260 -0
- package/src/skills-lib/huashu-design/references/brand-asset-protocol.md +250 -0
- package/src/skills-lib/huashu-design/references/cinematic-patterns.md +264 -0
- package/src/skills-lib/huashu-design/references/content-guidelines.md +260 -0
- package/src/skills-lib/huashu-design/references/critique-guide.md +199 -0
- package/src/skills-lib/huashu-design/references/design-context.md +213 -0
- package/src/skills-lib/huashu-design/references/design-styles.md +370 -0
- package/src/skills-lib/huashu-design/references/editable-pptx.md +334 -0
- package/src/skills-lib/huashu-design/references/hero-animation-case-study.md +250 -0
- package/src/skills-lib/huashu-design/references/launch-film-director-notes.md +293 -0
- package/src/skills-lib/huashu-design/references/multi-perspective-parallel-case-study.md +267 -0
- package/src/skills-lib/huashu-design/references/react-setup.md +276 -0
- package/src/skills-lib/huashu-design/references/scene-templates.md +262 -0
- package/src/skills-lib/huashu-design/references/sfx-library.md +226 -0
- package/src/skills-lib/huashu-design/references/slide-decks.md +745 -0
- package/src/skills-lib/huashu-design/references/tweaks-system.md +313 -0
- package/src/skills-lib/huashu-design/references/verification.md +183 -0
- package/src/skills-lib/huashu-design/references/video-export.md +232 -0
- package/src/skills-lib/huashu-design/references/voiceover-pipeline.md +397 -0
- package/src/skills-lib/huashu-design/references/workflow.md +216 -0
- package/src/skills-lib/huashu-design/scripts/add-music.sh +108 -0
- package/src/skills-lib/huashu-design/scripts/convert-formats.sh +83 -0
- package/src/skills-lib/huashu-design/scripts/export_deck_pdf.mjs +98 -0
- package/src/skills-lib/huashu-design/scripts/export_deck_pptx.mjs +107 -0
- package/src/skills-lib/huashu-design/scripts/export_deck_stage_pdf.mjs +130 -0
- package/src/skills-lib/huashu-design/scripts/fetch_images.py +94 -0
- package/src/skills-lib/huashu-design/scripts/gen_deck_thumbs.mjs +55 -0
- package/src/skills-lib/huashu-design/scripts/html2pptx.js +1178 -0
- package/src/skills-lib/huashu-design/scripts/mix-voiceover.sh +127 -0
- package/src/skills-lib/huashu-design/scripts/narrate-pipeline.mjs +315 -0
- package/src/skills-lib/huashu-design/scripts/render-narration.sh +151 -0
- package/src/skills-lib/huashu-design/scripts/render-video-seek.js +238 -0
- package/src/skills-lib/huashu-design/scripts/render-video.js +289 -0
- package/src/skills-lib/huashu-design/scripts/tts-doubao.mjs +184 -0
- package/src/skills-lib/huashu-design/scripts/verify.py +154 -0
- package/src/skills-lib/huashu-design/test-prompts.json +38 -0
- package/src/skills-lib/humanizer/LICENSE +21 -0
- package/src/skills-lib/humanizer/README.md +145 -0
- package/src/skills-lib/humanizer/SKILL.md +474 -0
- package/src/skills-lib/humanizer/WARP.md +53 -0
- package/src/skills-lib/impeccable/SKILL.md +186 -0
- package/src/skills-lib/implementation-planner/SKILL.md +630 -0
- package/src/skills-lib/infrastructure/SKILL.md +34 -0
- package/src/skills-lib/inicio-de-projeto/SKILL.md +313 -0
- package/src/skills-lib/launch-strategy/SKILL.md +353 -0
- package/src/skills-lib/launch-strategy/evals/evals.json +91 -0
- package/src/skills-lib/marketing-ideas/SKILL.md +167 -0
- package/src/skills-lib/marketing-ideas/evals/evals.json +90 -0
- package/src/skills-lib/marketing-ideas/references/ideas-by-category.md +366 -0
- package/src/skills-lib/marketing-psychology/SKILL.md +455 -0
- package/src/skills-lib/marketing-psychology/evals/evals.json +88 -0
- package/src/skills-lib/motion-3d-director/SKILL.md +485 -0
- package/src/skills-lib/onboarding-cro/SKILL.md +220 -0
- package/src/skills-lib/onboarding-cro/evals/evals.json +92 -0
- package/src/skills-lib/onboarding-cro/references/experiments.md +258 -0
- package/src/skills-lib/page-cro/SKILL.md +182 -0
- package/src/skills-lib/page-cro/evals/evals.json +111 -0
- package/src/skills-lib/page-cro/references/experiments.md +248 -0
- package/src/skills-lib/paid-ads/SKILL.md +315 -0
- package/src/skills-lib/paid-ads/evals/evals.json +90 -0
- package/src/skills-lib/paid-ads/references/ad-copy-templates.md +207 -0
- package/src/skills-lib/paid-ads/references/audience-targeting.md +243 -0
- package/src/skills-lib/paid-ads/references/platform-setup-checklists.md +277 -0
- package/src/skills-lib/paywall-upgrade-cro/SKILL.md +227 -0
- package/src/skills-lib/paywall-upgrade-cro/evals/evals.json +93 -0
- package/src/skills-lib/paywall-upgrade-cro/references/experiments.md +164 -0
- package/src/skills-lib/popup-cro/SKILL.md +453 -0
- package/src/skills-lib/popup-cro/evals/evals.json +94 -0
- package/src/skills-lib/premium-landing-ui-researcher/SKILL.md +2090 -0
- package/src/skills-lib/pricing-strategy/SKILL.md +231 -0
- package/src/skills-lib/pricing-strategy/evals/evals.json +90 -0
- package/src/skills-lib/pricing-strategy/references/research-methods.md +152 -0
- package/src/skills-lib/pricing-strategy/references/tier-structure.md +232 -0
- package/src/skills-lib/product-marketing-context/SKILL.md +241 -0
- package/src/skills-lib/product-marketing-context/evals/evals.json +85 -0
- package/src/skills-lib/programmatic-seo/SKILL.md +238 -0
- package/src/skills-lib/programmatic-seo/evals/evals.json +94 -0
- package/src/skills-lib/programmatic-seo/references/playbooks.md +308 -0
- package/src/skills-lib/react-components/README.md +36 -0
- package/src/skills-lib/react-components/SKILL.md +51 -0
- package/src/skills-lib/react-components/examples/gold-standard-card.tsx +80 -0
- package/src/skills-lib/react-components/package-lock.json +231 -0
- package/src/skills-lib/react-components/package.json +16 -0
- package/src/skills-lib/react-components/resources/architecture-checklist.md +15 -0
- package/src/skills-lib/react-components/resources/component-template.tsx +37 -0
- package/src/skills-lib/react-components/resources/stitch-api-reference.md +14 -0
- package/src/skills-lib/react-components/resources/style-guide.json +27 -0
- package/src/skills-lib/react-components/scripts/fetch-stitch.sh +30 -0
- package/src/skills-lib/react-components/scripts/validate.js +70 -0
- package/src/skills-lib/references/premium-agency-rules.md +79 -0
- package/src/skills-lib/referral-program/SKILL.md +255 -0
- package/src/skills-lib/referral-program/evals/evals.json +89 -0
- package/src/skills-lib/referral-program/references/affiliate-programs.md +164 -0
- package/src/skills-lib/referral-program/references/program-examples.md +143 -0
- package/src/skills-lib/remotion-best-practices/SKILL.md +61 -0
- package/src/skills-lib/remotion-best-practices/rules/3d.md +86 -0
- package/src/skills-lib/remotion-best-practices/rules/animations.md +27 -0
- package/src/skills-lib/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
- package/src/skills-lib/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
- package/src/skills-lib/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +103 -0
- package/src/skills-lib/remotion-best-practices/rules/assets.md +78 -0
- package/src/skills-lib/remotion-best-practices/rules/audio-visualization.md +198 -0
- package/src/skills-lib/remotion-best-practices/rules/audio.md +169 -0
- package/src/skills-lib/remotion-best-practices/rules/calculate-metadata.md +134 -0
- package/src/skills-lib/remotion-best-practices/rules/can-decode.md +75 -0
- package/src/skills-lib/remotion-best-practices/rules/charts.md +120 -0
- package/src/skills-lib/remotion-best-practices/rules/compositions.md +154 -0
- package/src/skills-lib/remotion-best-practices/rules/display-captions.md +184 -0
- package/src/skills-lib/remotion-best-practices/rules/extract-frames.md +229 -0
- package/src/skills-lib/remotion-best-practices/rules/ffmpeg.md +38 -0
- package/src/skills-lib/remotion-best-practices/rules/fonts.md +152 -0
- package/src/skills-lib/remotion-best-practices/rules/get-audio-duration.md +58 -0
- package/src/skills-lib/remotion-best-practices/rules/get-video-dimensions.md +68 -0
- package/src/skills-lib/remotion-best-practices/rules/get-video-duration.md +60 -0
- package/src/skills-lib/remotion-best-practices/rules/gifs.md +141 -0
- package/src/skills-lib/remotion-best-practices/rules/images.md +134 -0
- package/src/skills-lib/remotion-best-practices/rules/import-srt-captions.md +69 -0
- package/src/skills-lib/remotion-best-practices/rules/light-leaks.md +73 -0
- package/src/skills-lib/remotion-best-practices/rules/lottie.md +70 -0
- package/src/skills-lib/remotion-best-practices/rules/maps.md +412 -0
- package/src/skills-lib/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
- package/src/skills-lib/remotion-best-practices/rules/measuring-text.md +140 -0
- package/src/skills-lib/remotion-best-practices/rules/parameters.md +109 -0
- package/src/skills-lib/remotion-best-practices/rules/sequencing.md +118 -0
- package/src/skills-lib/remotion-best-practices/rules/sfx.md +26 -0
- package/src/skills-lib/remotion-best-practices/rules/subtitles.md +36 -0
- package/src/skills-lib/remotion-best-practices/rules/tailwind.md +11 -0
- package/src/skills-lib/remotion-best-practices/rules/text-animations.md +20 -0
- package/src/skills-lib/remotion-best-practices/rules/timing.md +179 -0
- package/src/skills-lib/remotion-best-practices/rules/transcribe-captions.md +70 -0
- package/src/skills-lib/remotion-best-practices/rules/transitions.md +197 -0
- package/src/skills-lib/remotion-best-practices/rules/transparent-videos.md +106 -0
- package/src/skills-lib/remotion-best-practices/rules/trimming.md +51 -0
- package/src/skills-lib/remotion-best-practices/rules/videos.md +171 -0
- package/src/skills-lib/remotion-best-practices/rules/voiceover.md +99 -0
- package/src/skills-lib/revops/SKILL.md +343 -0
- package/src/skills-lib/revops/evals/evals.json +91 -0
- package/src/skills-lib/revops/references/automation-playbooks.md +290 -0
- package/src/skills-lib/revops/references/lifecycle-definitions.md +278 -0
- package/src/skills-lib/revops/references/routing-rules.md +203 -0
- package/src/skills-lib/revops/references/scoring-models.md +247 -0
- package/src/skills-lib/sales-enablement/SKILL.md +349 -0
- package/src/skills-lib/sales-enablement/evals/evals.json +91 -0
- package/src/skills-lib/sales-enablement/references/deck-frameworks.md +263 -0
- package/src/skills-lib/sales-enablement/references/demo-scripts.md +355 -0
- package/src/skills-lib/sales-enablement/references/objection-library.md +270 -0
- package/src/skills-lib/sales-enablement/references/one-pager-templates.md +208 -0
- package/src/skills-lib/schema-markup/SKILL.md +179 -0
- package/src/skills-lib/schema-markup/evals/evals.json +87 -0
- package/src/skills-lib/schema-markup/references/schema-examples.md +398 -0
- package/src/skills-lib/seo-audit/SKILL.md +412 -0
- package/src/skills-lib/seo-audit/evals/evals.json +136 -0
- package/src/skills-lib/seo-audit/references/ai-writing-detection.md +200 -0
- package/src/skills-lib/signup-flow-cro/SKILL.md +359 -0
- package/src/skills-lib/signup-flow-cro/evals/evals.json +88 -0
- package/src/skills-lib/site-architecture/SKILL.md +357 -0
- package/src/skills-lib/site-architecture/evals/evals.json +88 -0
- package/src/skills-lib/site-architecture/references/mermaid-templates.md +216 -0
- package/src/skills-lib/site-architecture/references/navigation-patterns.md +305 -0
- package/src/skills-lib/site-architecture/references/site-type-templates.md +293 -0
- package/src/skills-lib/social-content/SKILL.md +278 -0
- package/src/skills-lib/social-content/evals/evals.json +92 -0
- package/src/skills-lib/social-content/references/platforms.md +170 -0
- package/src/skills-lib/social-content/references/post-templates.md +177 -0
- package/src/skills-lib/social-content/references/reverse-engineering.md +195 -0
- package/src/skills-lib/supabase-postgres-best-practices/AGENTS.md +68 -0
- package/src/skills-lib/supabase-postgres-best-practices/CLAUDE.md +68 -0
- package/src/skills-lib/supabase-postgres-best-practices/README.md +116 -0
- package/src/skills-lib/supabase-postgres-best-practices/SKILL.md +64 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/_contributing.md +171 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/_sections.md +39 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/_template.md +34 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/conn-limits.md +44 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/data-pagination.md +50 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/data-upsert.md +50 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/query-index-types.md +48 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/schema-constraints.md +80 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/security-privileges.md +54 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/security-rls-performance.md +57 -0
- package/src/skills-lib/taste-redesign/SKILL.md +178 -0
- package/src/skills-lib/taste-skill/SKILL.md +1206 -0
- package/src/skills-lib/ui-component-curator/SKILL.md +102 -0
- package/src/skills-lib/ui-ux-pro-max/SKILL.md +377 -0
- package/src/skills-lib/ui-ux-pro-max/data/charts.csv +26 -0
- package/src/skills-lib/ui-ux-pro-max/data/colors.csv +97 -0
- package/src/skills-lib/ui-ux-pro-max/data/icons.csv +101 -0
- package/src/skills-lib/ui-ux-pro-max/data/landing.csv +31 -0
- package/src/skills-lib/ui-ux-pro-max/data/products.csv +97 -0
- package/src/skills-lib/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/src/skills-lib/ui-ux-pro-max/data/styles.csv +68 -0
- package/src/skills-lib/ui-ux-pro-max/data/typography.csv +58 -0
- package/src/skills-lib/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/src/skills-lib/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/src/skills-lib/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/src/skills-lib/ui-ux-pro-max/scripts/__pycache__/core.cpython-314.pyc +0 -0
- package/src/skills-lib/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-314.pyc +0 -0
- package/src/skills-lib/ui-ux-pro-max/scripts/__pycache__/search.cpython-314.pyc +0 -0
- package/src/skills-lib/ui-ux-pro-max/scripts/core.py +253 -0
- package/src/skills-lib/ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/src/skills-lib/ui-ux-pro-max/scripts/graphify-out/cache/0964cef300f753b5cee0cc49777ca97035c85d45c212099405d9ee4da36e523f.json +1 -0
- package/src/skills-lib/ui-ux-pro-max/scripts/graphify-out/cache/21a40f6810c3a6f17acc3580f106171daf78c7b41bbd066bc80448a821ea0adf.json +1 -0
- package/src/skills-lib/ui-ux-pro-max/scripts/graphify-out/cache/69ea15a020ac81b8459e37ef63654398a50c1035fc01c43d8069df217389f7f3.json +1 -0
- package/src/skills-lib/ui-ux-pro-max/scripts/search.py +114 -0
- package/src/skills-lib/web-security/SKILL.md +147 -0
- package/src/skills-lib/wizz-router/SKILL.md +262 -0
- package/src/squads/README.md +39 -0
- package/src/squads/advisory-board/README.md +34 -0
- package/src/squads/advisory-board/agents/board-chair.md +161 -0
- package/src/squads/advisory-board/agents/brene-brown.md +296 -0
- package/src/squads/advisory-board/agents/charlie-munger.md +590 -0
- package/src/squads/advisory-board/agents/derek-sivers.md +268 -0
- package/src/squads/advisory-board/agents/naval-ravikant.md +251 -0
- package/src/squads/advisory-board/agents/patrick-lencioni.md +394 -0
- package/src/squads/advisory-board/agents/peter-thiel.md +269 -0
- package/src/squads/advisory-board/agents/ray-dalio.md +587 -0
- package/src/squads/advisory-board/agents/reid-hoffman.md +278 -0
- package/src/squads/advisory-board/agents/simon-sinek.md +291 -0
- package/src/squads/advisory-board/agents/yvon-chouinard.md +275 -0
- package/src/squads/advisory-board/squad.yaml +50 -0
- package/src/squads/brand-squad/README.md +60 -0
- package/src/squads/brand-squad/agents/al-ries.md +175 -0
- package/src/squads/brand-squad/agents/alina-wheeler.md +184 -0
- package/src/squads/brand-squad/agents/archetype-consultant.md +215 -0
- package/src/squads/brand-squad/agents/brand-chief.md +158 -0
- package/src/squads/brand-squad/agents/byron-sharp.md +169 -0
- package/src/squads/brand-squad/agents/david-aaker.md +166 -0
- package/src/squads/brand-squad/agents/denise-yohn.md +172 -0
- package/src/squads/brand-squad/agents/domain-scout.md +135 -0
- package/src/squads/brand-squad/agents/donald-miller.md +179 -0
- package/src/squads/brand-squad/agents/emily-heyward.md +147 -0
- package/src/squads/brand-squad/agents/jean-noel-kapferer.md +189 -0
- package/src/squads/brand-squad/agents/kevin-keller.md +199 -0
- package/src/squads/brand-squad/agents/marty-neumeier.md +170 -0
- package/src/squads/brand-squad/agents/miller-sticky-brand.md +180 -0
- package/src/squads/brand-squad/agents/naming-strategist.md +171 -0
- package/src/squads/brand-squad/squad.yaml +117 -0
- package/src/squads/c-level-squad/README.md +29 -0
- package/src/squads/c-level-squad/agents/caio-architect.md +235 -0
- package/src/squads/c-level-squad/agents/cio-engineer.md +209 -0
- package/src/squads/c-level-squad/agents/cmo-architect.md +208 -0
- package/src/squads/c-level-squad/agents/coo-orchestrator.md +193 -0
- package/src/squads/c-level-squad/agents/cto-architect.md +194 -0
- package/src/squads/c-level-squad/agents/vision-chief.md +201 -0
- package/src/squads/c-level-squad/squad.yaml +45 -0
- package/src/squads/claude-code-mastery/README.md +146 -0
- package/src/squads/claude-code-mastery/agents/claude-mastery-chief.md +554 -0
- package/src/squads/claude-code-mastery/agents/config-engineer.md +865 -0
- package/src/squads/claude-code-mastery/agents/hooks-architect.md +1013 -0
- package/src/squads/claude-code-mastery/agents/mcp-integrator.md +791 -0
- package/src/squads/claude-code-mastery/agents/project-integrator.md +1196 -0
- package/src/squads/claude-code-mastery/agents/roadmap-sentinel.md +931 -0
- package/src/squads/claude-code-mastery/agents/skill-craftsman.md +1250 -0
- package/src/squads/claude-code-mastery/agents/swarm-orchestrator.md +1008 -0
- package/src/squads/copy-squad/README.md +65 -0
- package/src/squads/copy-squad/agents/andre-chaperon.md +206 -0
- package/src/squads/copy-squad/agents/ben-settle.md +194 -0
- package/src/squads/copy-squad/agents/claude-hopkins.md +182 -0
- package/src/squads/copy-squad/agents/clayton-makepeace.md +225 -0
- package/src/squads/copy-squad/agents/copy-chief.md +166 -0
- package/src/squads/copy-squad/agents/dan-kennedy.md +202 -0
- package/src/squads/copy-squad/agents/dan-koe.md +223 -0
- package/src/squads/copy-squad/agents/david-deutsch.md +197 -0
- package/src/squads/copy-squad/agents/david-ogilvy.md +198 -0
- package/src/squads/copy-squad/agents/eugene-schwartz.md +238 -0
- package/src/squads/copy-squad/agents/frank-kern.md +195 -0
- package/src/squads/copy-squad/agents/gary-bencivenga.md +197 -0
- package/src/squads/copy-squad/agents/gary-halbert.md +219 -0
- package/src/squads/copy-squad/agents/jim-rutz.md +193 -0
- package/src/squads/copy-squad/agents/joe-sugarman.md +234 -0
- package/src/squads/copy-squad/agents/john-carlton.md +203 -0
- package/src/squads/copy-squad/agents/jon-benson.md +196 -0
- package/src/squads/copy-squad/agents/parris-lampropoulos.md +188 -0
- package/src/squads/copy-squad/agents/robert-collier.md +183 -0
- package/src/squads/copy-squad/agents/russell-brunson.md +229 -0
- package/src/squads/copy-squad/agents/ry-schwartz.md +185 -0
- package/src/squads/copy-squad/agents/stefan-georgi.md +188 -0
- package/src/squads/copy-squad/agents/todd-brown.md +171 -0
- package/src/squads/copy-squad/squad.yaml +87 -0
- package/src/squads/cybersecurity/README.md +38 -0
- package/src/squads/cybersecurity/agents/busterer.md +108 -0
- package/src/squads/cybersecurity/agents/cartographer.md +114 -0
- package/src/squads/cybersecurity/agents/chris-sanders.md +205 -0
- package/src/squads/cybersecurity/agents/command-generator.md +121 -0
- package/src/squads/cybersecurity/agents/cyber-chief.md +120 -0
- package/src/squads/cybersecurity/agents/dirber.md +111 -0
- package/src/squads/cybersecurity/agents/fuzzer.md +121 -0
- package/src/squads/cybersecurity/agents/georgia-weidman.md +178 -0
- package/src/squads/cybersecurity/agents/jim-manico.md +182 -0
- package/src/squads/cybersecurity/agents/marcus-carey.md +200 -0
- package/src/squads/cybersecurity/agents/omar-santos.md +206 -0
- package/src/squads/cybersecurity/agents/peter-kim.md +179 -0
- package/src/squads/cybersecurity/agents/ripper.md +121 -0
- package/src/squads/cybersecurity/agents/rogue.md +116 -0
- package/src/squads/cybersecurity/agents/shannon-runner.md +108 -0
- package/src/squads/cybersecurity/squad.yaml +56 -0
- package/src/squads/data-squad/README.md +30 -0
- package/src/squads/data-squad/agents/avinash-kaushik.md +268 -0
- package/src/squads/data-squad/agents/data-chief.md +167 -0
- package/src/squads/data-squad/agents/david-spinks.md +277 -0
- package/src/squads/data-squad/agents/nick-mehta.md +294 -0
- package/src/squads/data-squad/agents/peter-fader.md +246 -0
- package/src/squads/data-squad/agents/sean-ellis.md +303 -0
- package/src/squads/data-squad/agents/wes-kao.md +268 -0
- package/src/squads/data-squad/squad.yaml +46 -0
- package/src/squads/design-squad/README.md +31 -0
- package/src/squads/design-squad/agents/brad-frost.md +185 -0
- package/src/squads/design-squad/agents/dan-mall.md +178 -0
- package/src/squads/design-squad/agents/dave-malouf.md +198 -0
- package/src/squads/design-squad/agents/design-chief.md +109 -0
- package/src/squads/design-squad/agents/design-system-architect.md +109 -0
- package/src/squads/design-squad/agents/ui-engineer.md +102 -0
- package/src/squads/design-squad/agents/ux-designer.md +105 -0
- package/src/squads/design-squad/agents/visual-generator.md +108 -0
- package/src/squads/design-squad/squad.yaml +48 -0
- package/src/squads/hormozi-squad/README.md +39 -0
- package/src/squads/hormozi-squad/agents/hormozi-ads.md +159 -0
- package/src/squads/hormozi-squad/agents/hormozi-advisor.md +178 -0
- package/src/squads/hormozi-squad/agents/hormozi-audit.md +178 -0
- package/src/squads/hormozi-squad/agents/hormozi-chief.md +111 -0
- package/src/squads/hormozi-squad/agents/hormozi-closer.md +179 -0
- package/src/squads/hormozi-squad/agents/hormozi-content.md +166 -0
- package/src/squads/hormozi-squad/agents/hormozi-copy.md +152 -0
- package/src/squads/hormozi-squad/agents/hormozi-hooks.md +177 -0
- package/src/squads/hormozi-squad/agents/hormozi-launch.md +160 -0
- package/src/squads/hormozi-squad/agents/hormozi-leads.md +198 -0
- package/src/squads/hormozi-squad/agents/hormozi-models.md +191 -0
- package/src/squads/hormozi-squad/agents/hormozi-offers.md +197 -0
- package/src/squads/hormozi-squad/agents/hormozi-pricing.md +151 -0
- package/src/squads/hormozi-squad/agents/hormozi-retention.md +166 -0
- package/src/squads/hormozi-squad/agents/hormozi-scale.md +175 -0
- package/src/squads/hormozi-squad/agents/hormozi-workshop.md +160 -0
- package/src/squads/hormozi-squad/squad.yaml +60 -0
- package/src/squads/movement/README.md +29 -0
- package/src/squads/movement/agents/analista-de-impacto.md +350 -0
- package/src/squads/movement/agents/estrategista-de-ciclo.md +301 -0
- package/src/squads/movement/agents/fenomenologo.md +169 -0
- package/src/squads/movement/agents/identitario.md +265 -0
- package/src/squads/movement/agents/manifestador.md +279 -0
- package/src/squads/movement/agents/movement-architect.md +210 -0
- package/src/squads/movement/agents/movement-chief.md +135 -0
- package/src/squads/movement/squad.yaml +45 -0
- package/src/squads/storytelling/README.md +35 -0
- package/src/squads/storytelling/agents/blake-snyder.md +225 -0
- package/src/squads/storytelling/agents/dan-harmon.md +167 -0
- package/src/squads/storytelling/agents/joseph-campbell.md +184 -0
- package/src/squads/storytelling/agents/keith-johnstone.md +157 -0
- package/src/squads/storytelling/agents/kindra-hall.md +162 -0
- package/src/squads/storytelling/agents/marshall-ganz.md +167 -0
- package/src/squads/storytelling/agents/matthew-dicks.md +152 -0
- package/src/squads/storytelling/agents/nancy-duarte.md +154 -0
- package/src/squads/storytelling/agents/oren-klaff.md +166 -0
- package/src/squads/storytelling/agents/park-howell.md +152 -0
- package/src/squads/storytelling/agents/shawn-coyne.md +208 -0
- package/src/squads/storytelling/agents/story-chief.md +155 -0
- package/src/squads/storytelling/squad.yaml +52 -0
- package/src/squads/traffic-masters/README.md +39 -0
- package/src/squads/traffic-masters/agents/ad-midas.md +149 -0
- package/src/squads/traffic-masters/agents/ads-analyst.md +135 -0
- package/src/squads/traffic-masters/agents/creative-analyst.md +142 -0
- package/src/squads/traffic-masters/agents/depesh-mandalia.md +174 -0
- package/src/squads/traffic-masters/agents/fiscal.md +144 -0
- package/src/squads/traffic-masters/agents/kasim-aslam.md +158 -0
- package/src/squads/traffic-masters/agents/media-buyer.md +159 -0
- package/src/squads/traffic-masters/agents/molly-pittman.md +185 -0
- package/src/squads/traffic-masters/agents/nicholas-kusmich.md +157 -0
- package/src/squads/traffic-masters/agents/pedro-sobral.md +158 -0
- package/src/squads/traffic-masters/agents/performance-analyst.md +135 -0
- package/src/squads/traffic-masters/agents/pixel-specialist.md +144 -0
- package/src/squads/traffic-masters/agents/ralph-burns.md +163 -0
- package/src/squads/traffic-masters/agents/scale-optimizer.md +144 -0
- package/src/squads/traffic-masters/agents/tom-breeze.md +175 -0
- package/src/squads/traffic-masters/agents/traffic-chief.md +97 -0
- package/src/squads/traffic-masters/squad.yaml +59 -0
- package/tools/installer/commands/install.js +12 -0
- package/tools/installer/core/config.js +20 -0
- package/tools/installer/core/installer.js +100 -0
- package/tools/installer/core/manifest-generator.js +14 -3
- package/tools/installer/modules/cli-config.js +175 -0
- package/tools/installer/modules/mcp-config.js +137 -0
- package/tools/installer/modules/skills-lib.js +135 -0
- package/tools/installer/ui.js +210 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: light-leaks
|
|
3
|
+
description: Light leak overlay effects for Remotion using @remotion/light-leaks.
|
|
4
|
+
metadata:
|
|
5
|
+
tags: light-leaks, overlays, effects, transitions
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Light Leaks
|
|
9
|
+
|
|
10
|
+
This only works from Remotion 4.0.415 and up. Use `npx remotion versions` to check your Remotion version and `npx remotion upgrade` to upgrade your Remotion version.
|
|
11
|
+
|
|
12
|
+
`<LightLeak>` from `@remotion/light-leaks` renders a WebGL-based light leak effect. It reveals during the first half of its duration and retracts during the second half.
|
|
13
|
+
|
|
14
|
+
Typically used inside a `<TransitionSeries.Overlay>` to play over the cut point between two scenes. See the **transitions** rule for `<TransitionSeries>` and overlay usage.
|
|
15
|
+
|
|
16
|
+
## Prerequisites
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npx remotion add @remotion/light-leaks
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Basic usage with TransitionSeries
|
|
23
|
+
|
|
24
|
+
```tsx
|
|
25
|
+
import { TransitionSeries } from "@remotion/transitions";
|
|
26
|
+
import { LightLeak } from "@remotion/light-leaks";
|
|
27
|
+
|
|
28
|
+
<TransitionSeries>
|
|
29
|
+
<TransitionSeries.Sequence durationInFrames={60}>
|
|
30
|
+
<SceneA />
|
|
31
|
+
</TransitionSeries.Sequence>
|
|
32
|
+
<TransitionSeries.Overlay durationInFrames={30}>
|
|
33
|
+
<LightLeak />
|
|
34
|
+
</TransitionSeries.Overlay>
|
|
35
|
+
<TransitionSeries.Sequence durationInFrames={60}>
|
|
36
|
+
<SceneB />
|
|
37
|
+
</TransitionSeries.Sequence>
|
|
38
|
+
</TransitionSeries>;
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Props
|
|
42
|
+
|
|
43
|
+
- `durationInFrames?` — defaults to the parent sequence/composition duration. The effect reveals during the first half and retracts during the second half.
|
|
44
|
+
- `seed?` — determines the shape of the light leak pattern. Different seeds produce different patterns. Default: `0`.
|
|
45
|
+
- `hueShift?` — rotates the hue in degrees (`0`–`360`). Default: `0` (yellow-to-orange). `120` = green, `240` = blue.
|
|
46
|
+
|
|
47
|
+
## Customizing the look
|
|
48
|
+
|
|
49
|
+
```tsx
|
|
50
|
+
import { LightLeak } from "@remotion/light-leaks";
|
|
51
|
+
|
|
52
|
+
// Blue-tinted light leak with a different pattern
|
|
53
|
+
<LightLeak seed={5} hueShift={240} />;
|
|
54
|
+
|
|
55
|
+
// Green-tinted light leak
|
|
56
|
+
<LightLeak seed={2} hueShift={120} />;
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Standalone usage
|
|
60
|
+
|
|
61
|
+
`<LightLeak>` can also be used outside of `<TransitionSeries>`, for example as a decorative overlay in any composition:
|
|
62
|
+
|
|
63
|
+
```tsx
|
|
64
|
+
import { AbsoluteFill } from "remotion";
|
|
65
|
+
import { LightLeak } from "@remotion/light-leaks";
|
|
66
|
+
|
|
67
|
+
const MyComp: React.FC = () => (
|
|
68
|
+
<AbsoluteFill>
|
|
69
|
+
<MyContent />
|
|
70
|
+
<LightLeak durationInFrames={60} seed={3} />
|
|
71
|
+
</AbsoluteFill>
|
|
72
|
+
);
|
|
73
|
+
```
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: lottie
|
|
3
|
+
description: Embedding Lottie animations in Remotion.
|
|
4
|
+
metadata:
|
|
5
|
+
category: Animation
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Using Lottie Animations in Remotion
|
|
9
|
+
|
|
10
|
+
## Prerequisites
|
|
11
|
+
|
|
12
|
+
First, the @remotion/lottie package needs to be installed.
|
|
13
|
+
If it is not, use the following command:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npx remotion add @remotion/lottie # If project uses npm
|
|
17
|
+
bunx remotion add @remotion/lottie # If project uses bun
|
|
18
|
+
yarn remotion add @remotion/lottie # If project uses yarn
|
|
19
|
+
pnpm exec remotion add @remotion/lottie # If project uses pnpm
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Displaying a Lottie file
|
|
23
|
+
|
|
24
|
+
To import a Lottie animation:
|
|
25
|
+
|
|
26
|
+
- Fetch the Lottie asset
|
|
27
|
+
- Wrap the loading process in `delayRender()` and `continueRender()`
|
|
28
|
+
- Save the animation data in a state
|
|
29
|
+
- Render the Lottie animation using the `Lottie` component from the `@remotion/lottie` package
|
|
30
|
+
|
|
31
|
+
```tsx
|
|
32
|
+
import { Lottie, LottieAnimationData } from "@remotion/lottie";
|
|
33
|
+
import { useEffect, useState } from "react";
|
|
34
|
+
import { cancelRender, continueRender, delayRender } from "remotion";
|
|
35
|
+
|
|
36
|
+
export const MyAnimation = () => {
|
|
37
|
+
const [handle] = useState(() => delayRender("Loading Lottie animation"));
|
|
38
|
+
|
|
39
|
+
const [animationData, setAnimationData] =
|
|
40
|
+
useState<LottieAnimationData | null>(null);
|
|
41
|
+
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
fetch("https://assets4.lottiefiles.com/packages/lf20_zyquagfl.json")
|
|
44
|
+
.then((data) => data.json())
|
|
45
|
+
.then((json) => {
|
|
46
|
+
setAnimationData(json);
|
|
47
|
+
continueRender(handle);
|
|
48
|
+
})
|
|
49
|
+
.catch((err) => {
|
|
50
|
+
cancelRender(err);
|
|
51
|
+
});
|
|
52
|
+
}, [handle]);
|
|
53
|
+
|
|
54
|
+
if (!animationData) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return <Lottie animationData={animationData} />;
|
|
59
|
+
};
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Styling and animating
|
|
63
|
+
|
|
64
|
+
Lottie supports the `style` prop to allow styles and animations:
|
|
65
|
+
|
|
66
|
+
```tsx
|
|
67
|
+
return (
|
|
68
|
+
<Lottie animationData={animationData} style={{ width: 400, height: 400 }} />
|
|
69
|
+
);
|
|
70
|
+
```
|
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: maps
|
|
3
|
+
description: Make map animations with Mapbox
|
|
4
|
+
metadata:
|
|
5
|
+
tags: map, map animation, mapbox
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Maps can be added to a Remotion video with Mapbox.
|
|
9
|
+
The [Mapbox documentation](https://docs.mapbox.com/mapbox-gl-js/api/) has the API reference.
|
|
10
|
+
|
|
11
|
+
## Prerequisites
|
|
12
|
+
|
|
13
|
+
Mapbox and `@turf/turf` need to be installed.
|
|
14
|
+
|
|
15
|
+
Search the project for lockfiles and run the correct command depending on the package manager:
|
|
16
|
+
|
|
17
|
+
If `package-lock.json` is found, use the following command:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm i mapbox-gl @turf/turf @types/mapbox-gl
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
If `bun.lock` is found, use the following command:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
bun i mapbox-gl @turf/turf @types/mapbox-gl
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
If `yarn.lock` is found, use the following command:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
yarn add mapbox-gl @turf/turf @types/mapbox-gl
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
If `pnpm-lock.yaml` is found, use the following command:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
pnpm i mapbox-gl @turf/turf @types/mapbox-gl
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
The user needs to create a free Mapbox account and create an access token by visiting https://console.mapbox.com/account/access-tokens/.
|
|
42
|
+
|
|
43
|
+
The mapbox token needs to be added to the `.env` file:
|
|
44
|
+
|
|
45
|
+
```txt title=".env"
|
|
46
|
+
REMOTION_MAPBOX_TOKEN==pk.your-mapbox-access-token
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Adding a map
|
|
50
|
+
|
|
51
|
+
Here is a basic example of a map in Remotion.
|
|
52
|
+
|
|
53
|
+
```tsx
|
|
54
|
+
import { useEffect, useMemo, useRef, useState } from "react";
|
|
55
|
+
import { AbsoluteFill, useDelayRender, useVideoConfig } from "remotion";
|
|
56
|
+
import mapboxgl, { Map } from "mapbox-gl";
|
|
57
|
+
|
|
58
|
+
export const lineCoordinates = [
|
|
59
|
+
[6.56158447265625, 46.059891147620725],
|
|
60
|
+
[6.5691375732421875, 46.05679376154153],
|
|
61
|
+
[6.5842437744140625, 46.05059898938315],
|
|
62
|
+
[6.594886779785156, 46.04702502069337],
|
|
63
|
+
[6.601066589355469, 46.0460718554722],
|
|
64
|
+
[6.6089630126953125, 46.0365370783104],
|
|
65
|
+
[6.6185760498046875, 46.018420689207964],
|
|
66
|
+
];
|
|
67
|
+
|
|
68
|
+
mapboxgl.accessToken = process.env.REMOTION_MAPBOX_TOKEN as string;
|
|
69
|
+
|
|
70
|
+
export const MyComposition = () => {
|
|
71
|
+
const ref = useRef<HTMLDivElement>(null);
|
|
72
|
+
const { delayRender, continueRender } = useDelayRender();
|
|
73
|
+
|
|
74
|
+
const { width, height } = useVideoConfig();
|
|
75
|
+
const [handle] = useState(() => delayRender("Loading map..."));
|
|
76
|
+
const [map, setMap] = useState<Map | null>(null);
|
|
77
|
+
|
|
78
|
+
useEffect(() => {
|
|
79
|
+
const _map = new Map({
|
|
80
|
+
container: ref.current!,
|
|
81
|
+
zoom: 11.53,
|
|
82
|
+
center: [6.5615, 46.0598],
|
|
83
|
+
pitch: 65,
|
|
84
|
+
bearing: 0,
|
|
85
|
+
style: "mapbox://styles/mapbox/standard",
|
|
86
|
+
interactive: false,
|
|
87
|
+
fadeDuration: 0,
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
_map.on("style.load", () => {
|
|
91
|
+
// Hide all features from the Mapbox Standard style
|
|
92
|
+
const hideFeatures = [
|
|
93
|
+
"showRoadsAndTransit",
|
|
94
|
+
"showRoads",
|
|
95
|
+
"showTransit",
|
|
96
|
+
"showPedestrianRoads",
|
|
97
|
+
"showRoadLabels",
|
|
98
|
+
"showTransitLabels",
|
|
99
|
+
"showPlaceLabels",
|
|
100
|
+
"showPointOfInterestLabels",
|
|
101
|
+
"showPointsOfInterest",
|
|
102
|
+
"showAdminBoundaries",
|
|
103
|
+
"showLandmarkIcons",
|
|
104
|
+
"showLandmarkIconLabels",
|
|
105
|
+
"show3dObjects",
|
|
106
|
+
"show3dBuildings",
|
|
107
|
+
"show3dTrees",
|
|
108
|
+
"show3dLandmarks",
|
|
109
|
+
"show3dFacades",
|
|
110
|
+
];
|
|
111
|
+
for (const feature of hideFeatures) {
|
|
112
|
+
_map.setConfigProperty("basemap", feature, false);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
_map.setConfigProperty("basemap", "colorTrunks", "rgba(0, 0, 0, 0)");
|
|
116
|
+
|
|
117
|
+
_map.addSource("trace", {
|
|
118
|
+
type: "geojson",
|
|
119
|
+
data: {
|
|
120
|
+
type: "Feature",
|
|
121
|
+
properties: {},
|
|
122
|
+
geometry: {
|
|
123
|
+
type: "LineString",
|
|
124
|
+
coordinates: lineCoordinates,
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
_map.addLayer({
|
|
129
|
+
type: "line",
|
|
130
|
+
source: "trace",
|
|
131
|
+
id: "line",
|
|
132
|
+
paint: {
|
|
133
|
+
"line-color": "black",
|
|
134
|
+
"line-width": 5,
|
|
135
|
+
},
|
|
136
|
+
layout: {
|
|
137
|
+
"line-cap": "round",
|
|
138
|
+
"line-join": "round",
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
_map.on("load", () => {
|
|
144
|
+
continueRender(handle);
|
|
145
|
+
setMap(_map);
|
|
146
|
+
});
|
|
147
|
+
}, [handle, lineCoordinates]);
|
|
148
|
+
|
|
149
|
+
const style: React.CSSProperties = useMemo(
|
|
150
|
+
() => ({ width, height, position: "absolute" }),
|
|
151
|
+
[width, height],
|
|
152
|
+
);
|
|
153
|
+
|
|
154
|
+
return <AbsoluteFill ref={ref} style={style} />;
|
|
155
|
+
};
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
The following is important in Remotion:
|
|
159
|
+
|
|
160
|
+
- Animations must be driven by `useCurrentFrame()` and animations that Mapbox brings itself should be disabled. For example, the `fadeDuration` prop should be set to `0`, `interactive` should be set to `false`, etc.
|
|
161
|
+
- Loading the map should be delayed using `useDelayRender()` and the map should be set to `null` until it is loaded.
|
|
162
|
+
- The element containing the ref MUST have an explicit width and height and `position: "absolute"`.
|
|
163
|
+
- Do not add a `_map.remove();` cleanup function.
|
|
164
|
+
|
|
165
|
+
## Drawing lines
|
|
166
|
+
|
|
167
|
+
Unless I request it, do not add a glow effect to the lines.
|
|
168
|
+
Unless I request it, do not add additional points to the lines.
|
|
169
|
+
|
|
170
|
+
## Map style
|
|
171
|
+
|
|
172
|
+
By default, use the `mapbox://styles/mapbox/standard` style.
|
|
173
|
+
Hide the labels from the base map style.
|
|
174
|
+
|
|
175
|
+
Unless I request otherwise, remove all features from the Mapbox Standard style.
|
|
176
|
+
|
|
177
|
+
```tsx
|
|
178
|
+
// Hide all features from the Mapbox Standard style
|
|
179
|
+
const hideFeatures = [
|
|
180
|
+
"showRoadsAndTransit",
|
|
181
|
+
"showRoads",
|
|
182
|
+
"showTransit",
|
|
183
|
+
"showPedestrianRoads",
|
|
184
|
+
"showRoadLabels",
|
|
185
|
+
"showTransitLabels",
|
|
186
|
+
"showPlaceLabels",
|
|
187
|
+
"showPointOfInterestLabels",
|
|
188
|
+
"showPointsOfInterest",
|
|
189
|
+
"showAdminBoundaries",
|
|
190
|
+
"showLandmarkIcons",
|
|
191
|
+
"showLandmarkIconLabels",
|
|
192
|
+
"show3dObjects",
|
|
193
|
+
"show3dBuildings",
|
|
194
|
+
"show3dTrees",
|
|
195
|
+
"show3dLandmarks",
|
|
196
|
+
"show3dFacades",
|
|
197
|
+
];
|
|
198
|
+
for (const feature of hideFeatures) {
|
|
199
|
+
_map.setConfigProperty("basemap", feature, false);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
_map.setConfigProperty("basemap", "colorMotorways", "transparent");
|
|
203
|
+
_map.setConfigProperty("basemap", "colorRoads", "transparent");
|
|
204
|
+
_map.setConfigProperty("basemap", "colorTrunks", "transparent");
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
## Animating the camera
|
|
208
|
+
|
|
209
|
+
You can animate the camera along the line by adding a `useEffect` hook that updates the camera position based on the current frame.
|
|
210
|
+
|
|
211
|
+
Unless I ask for it, do not jump between camera angles.
|
|
212
|
+
|
|
213
|
+
```tsx
|
|
214
|
+
import * as turf from "@turf/turf";
|
|
215
|
+
import { interpolate } from "remotion";
|
|
216
|
+
import { Easing } from "remotion";
|
|
217
|
+
import { useCurrentFrame, useVideoConfig, useDelayRender } from "remotion";
|
|
218
|
+
|
|
219
|
+
const animationDuration = 20;
|
|
220
|
+
const cameraAltitude = 4000;
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
```tsx
|
|
224
|
+
const frame = useCurrentFrame();
|
|
225
|
+
const { fps } = useVideoConfig();
|
|
226
|
+
const { delayRender, continueRender } = useDelayRender();
|
|
227
|
+
|
|
228
|
+
useEffect(() => {
|
|
229
|
+
if (!map) {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
const handle = delayRender("Moving point...");
|
|
233
|
+
|
|
234
|
+
const routeDistance = turf.length(turf.lineString(lineCoordinates));
|
|
235
|
+
|
|
236
|
+
const progress = interpolate(
|
|
237
|
+
frame / fps,
|
|
238
|
+
[0.00001, animationDuration],
|
|
239
|
+
[0, 1],
|
|
240
|
+
{
|
|
241
|
+
easing: Easing.inOut(Easing.sin),
|
|
242
|
+
extrapolateLeft: "clamp",
|
|
243
|
+
extrapolateRight: "clamp",
|
|
244
|
+
},
|
|
245
|
+
);
|
|
246
|
+
|
|
247
|
+
const camera = map.getFreeCameraOptions();
|
|
248
|
+
|
|
249
|
+
const alongRoute = turf.along(
|
|
250
|
+
turf.lineString(lineCoordinates),
|
|
251
|
+
routeDistance * progress,
|
|
252
|
+
).geometry.coordinates;
|
|
253
|
+
|
|
254
|
+
camera.lookAtPoint({
|
|
255
|
+
lng: alongRoute[0],
|
|
256
|
+
lat: alongRoute[1],
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
map.setFreeCameraOptions(camera);
|
|
260
|
+
map.once("idle", () => continueRender(handle));
|
|
261
|
+
}, [lineCoordinates, fps, frame, handle, map]);
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
Notes:
|
|
265
|
+
|
|
266
|
+
IMPORTANT: Keep the camera by default so north is up.
|
|
267
|
+
IMPORTANT: For multi-step animations, set all properties at all stages (zoom, position, line progress) to prevent jumps. Override initial values.
|
|
268
|
+
|
|
269
|
+
- The progress is clamped to a minimum value to avoid the line being empty, which can lead to turf errors
|
|
270
|
+
- See [Timing](./timing.md) for more options for timing.
|
|
271
|
+
- Consider the dimensions of the composition and make the lines thick enough and the label font size large enough to be legible for when the composition is scaled down.
|
|
272
|
+
|
|
273
|
+
## Animating lines
|
|
274
|
+
|
|
275
|
+
### Straight lines (linear interpolation)
|
|
276
|
+
|
|
277
|
+
To animate a line that appears straight on the map, use linear interpolation between coordinates. Do NOT use turf's `lineSliceAlong` or `along` functions, as they use geodesic (great circle) calculations which appear curved on a Mercator projection.
|
|
278
|
+
|
|
279
|
+
```tsx
|
|
280
|
+
const frame = useCurrentFrame();
|
|
281
|
+
const { durationInFrames } = useVideoConfig();
|
|
282
|
+
|
|
283
|
+
useEffect(() => {
|
|
284
|
+
if (!map) return;
|
|
285
|
+
|
|
286
|
+
const animationHandle = delayRender("Animating line...");
|
|
287
|
+
|
|
288
|
+
const progress = interpolate(frame, [0, durationInFrames - 1], [0, 1], {
|
|
289
|
+
extrapolateLeft: "clamp",
|
|
290
|
+
extrapolateRight: "clamp",
|
|
291
|
+
easing: Easing.inOut(Easing.cubic),
|
|
292
|
+
});
|
|
293
|
+
|
|
294
|
+
// Linear interpolation for a straight line on the map
|
|
295
|
+
const start = lineCoordinates[0];
|
|
296
|
+
const end = lineCoordinates[1];
|
|
297
|
+
const currentLng = start[0] + (end[0] - start[0]) * progress;
|
|
298
|
+
const currentLat = start[1] + (end[1] - start[1]) * progress;
|
|
299
|
+
|
|
300
|
+
const lineData: GeoJSON.Feature<GeoJSON.LineString> = {
|
|
301
|
+
type: "Feature",
|
|
302
|
+
properties: {},
|
|
303
|
+
geometry: {
|
|
304
|
+
type: "LineString",
|
|
305
|
+
coordinates: [start, [currentLng, currentLat]],
|
|
306
|
+
},
|
|
307
|
+
};
|
|
308
|
+
|
|
309
|
+
const source = map.getSource("trace") as mapboxgl.GeoJSONSource;
|
|
310
|
+
if (source) {
|
|
311
|
+
source.setData(lineData);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
map.once("idle", () => continueRender(animationHandle));
|
|
315
|
+
}, [frame, map, durationInFrames]);
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
### Curved lines (geodesic/great circle)
|
|
319
|
+
|
|
320
|
+
To animate a line that follows the geodesic (great circle) path between two points, use turf's `lineSliceAlong`. This is useful for showing flight paths or the actual shortest distance on Earth.
|
|
321
|
+
|
|
322
|
+
```tsx
|
|
323
|
+
import * as turf from "@turf/turf";
|
|
324
|
+
|
|
325
|
+
const routeLine = turf.lineString(lineCoordinates);
|
|
326
|
+
const routeDistance = turf.length(routeLine);
|
|
327
|
+
|
|
328
|
+
const currentDistance = Math.max(0.001, routeDistance * progress);
|
|
329
|
+
const slicedLine = turf.lineSliceAlong(routeLine, 0, currentDistance);
|
|
330
|
+
|
|
331
|
+
const source = map.getSource("route") as mapboxgl.GeoJSONSource;
|
|
332
|
+
if (source) {
|
|
333
|
+
source.setData(slicedLine);
|
|
334
|
+
}
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
## Markers
|
|
338
|
+
|
|
339
|
+
Add labels, and markers where appropriate.
|
|
340
|
+
|
|
341
|
+
```tsx
|
|
342
|
+
_map.addSource("markers", {
|
|
343
|
+
type: "geojson",
|
|
344
|
+
data: {
|
|
345
|
+
type: "FeatureCollection",
|
|
346
|
+
features: [
|
|
347
|
+
{
|
|
348
|
+
type: "Feature",
|
|
349
|
+
properties: { name: "Point 1" },
|
|
350
|
+
geometry: { type: "Point", coordinates: [-118.2437, 34.0522] },
|
|
351
|
+
},
|
|
352
|
+
],
|
|
353
|
+
},
|
|
354
|
+
});
|
|
355
|
+
|
|
356
|
+
_map.addLayer({
|
|
357
|
+
id: "city-markers",
|
|
358
|
+
type: "circle",
|
|
359
|
+
source: "markers",
|
|
360
|
+
paint: {
|
|
361
|
+
"circle-radius": 40,
|
|
362
|
+
"circle-color": "#FF4444",
|
|
363
|
+
"circle-stroke-width": 4,
|
|
364
|
+
"circle-stroke-color": "#FFFFFF",
|
|
365
|
+
},
|
|
366
|
+
});
|
|
367
|
+
|
|
368
|
+
_map.addLayer({
|
|
369
|
+
id: "labels",
|
|
370
|
+
type: "symbol",
|
|
371
|
+
source: "markers",
|
|
372
|
+
layout: {
|
|
373
|
+
"text-field": ["get", "name"],
|
|
374
|
+
"text-font": ["DIN Pro Bold", "Arial Unicode MS Bold"],
|
|
375
|
+
"text-size": 50,
|
|
376
|
+
"text-offset": [0, 0.5],
|
|
377
|
+
"text-anchor": "top",
|
|
378
|
+
},
|
|
379
|
+
paint: {
|
|
380
|
+
"text-color": "#FFFFFF",
|
|
381
|
+
"text-halo-color": "#000000",
|
|
382
|
+
"text-halo-width": 2,
|
|
383
|
+
},
|
|
384
|
+
});
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
Make sure they are big enough. Check the composition dimensions and scale the labels accordingly.
|
|
388
|
+
For a composition size of 1920x1080, the label font size should be at least 40px.
|
|
389
|
+
|
|
390
|
+
IMPORTANT: Keep the `text-offset` small enough so it is close to the marker. Consider the marker circle radius. For a circle radius of 40, this is a good offset:
|
|
391
|
+
|
|
392
|
+
```tsx
|
|
393
|
+
"text-offset": [0, 0.5],
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
## 3D buildings
|
|
397
|
+
|
|
398
|
+
To enable 3D buildings, use the following code:
|
|
399
|
+
|
|
400
|
+
```tsx
|
|
401
|
+
_map.setConfigProperty("basemap", "show3dObjects", true);
|
|
402
|
+
_map.setConfigProperty("basemap", "show3dLandmarks", true);
|
|
403
|
+
_map.setConfigProperty("basemap", "show3dBuildings", true);
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
## Rendering
|
|
407
|
+
|
|
408
|
+
When rendering a map animation, make sure to render with the following flags:
|
|
409
|
+
|
|
410
|
+
```
|
|
411
|
+
npx remotion render --gl=angle --concurrency=1
|
|
412
|
+
```
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: measuring-dom-nodes
|
|
3
|
+
description: Measuring DOM element dimensions in Remotion
|
|
4
|
+
metadata:
|
|
5
|
+
tags: measure, layout, dimensions, getBoundingClientRect, scale
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Measuring DOM nodes in Remotion
|
|
9
|
+
|
|
10
|
+
Remotion applies a `scale()` transform to the video container, which affects values from `getBoundingClientRect()`. Use `useCurrentScale()` to get correct measurements.
|
|
11
|
+
|
|
12
|
+
## Measuring element dimensions
|
|
13
|
+
|
|
14
|
+
```tsx
|
|
15
|
+
import { useCurrentScale } from "remotion";
|
|
16
|
+
import { useRef, useEffect, useState } from "react";
|
|
17
|
+
|
|
18
|
+
export const MyComponent = () => {
|
|
19
|
+
const ref = useRef<HTMLDivElement>(null);
|
|
20
|
+
const scale = useCurrentScale();
|
|
21
|
+
const [dimensions, setDimensions] = useState({ width: 0, height: 0 });
|
|
22
|
+
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
if (!ref.current) return;
|
|
25
|
+
const rect = ref.current.getBoundingClientRect();
|
|
26
|
+
setDimensions({
|
|
27
|
+
width: rect.width / scale,
|
|
28
|
+
height: rect.height / scale,
|
|
29
|
+
});
|
|
30
|
+
}, [scale]);
|
|
31
|
+
|
|
32
|
+
return <div ref={ref}>Content to measure</div>;
|
|
33
|
+
};
|
|
34
|
+
```
|