@ericrisco/rsc 0.1.66 → 0.1.68

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/manifest.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.1.66",
2
+ "version": "0.1.68",
3
3
  "counts": {
4
4
  "skills": 258
5
5
  },
@@ -4705,7 +4705,7 @@
4705
4705
  },
4706
4706
  {
4707
4707
  "id": "terms-conditions",
4708
- "description": "Use when drafting the one-to-many legal documents a product publishes to its users — Terms of Service / Terms of Use, an Acceptable Use Policy, a EULA for installed software, and the standing legal notices a site must display (copyright, DMCA agent, governing law, auto-renewal); also when adding AI-feature terms (output ownership + accuracy disclaimers), wiring auto-renew disclosure, or fixing acceptance so it actually binds. Triggers: 'draft Terms of Service for our SaaS', 'write an Acceptable Use Policy', 'add a limitation-of-liability and arbitration clause', 'our terms are just a footer link, make them binding', 'what does our footer need to say legally', 'we auto-renew subscriptions, what must the terms say', 'redactar los términos y condiciones de la plataforma', 'termes i condicions del marketplace'. NOT a negotiated two-party agreement you sign with another business (that is contracts) and NOT the privacy policy or how personal data is handled (that is gdpr-privacy).",
4708
+ "description": "Use when drafting the one-to-many legal documents a product publishes to its users — Terms of Service, an Acceptable Use Policy, a EULA for installed software, and the standing notices a site must display — plus AI-feature terms covering output ownership and accuracy, auto-renewal disclosure, and making acceptance actually binding. NOT a negotiated two-party agreement you sign with another business (that is `contracts`), NOT the privacy policy or how personal data is handled (that is `gdpr-privacy`).",
4709
4709
  "tags": [
4710
4710
  "legal",
4711
4711
  "terms-of-service",
@@ -4728,7 +4728,7 @@
4728
4728
  },
4729
4729
  {
4730
4730
  "id": "testing-go",
4731
- "description": "Use when writing or running Go tests — table-driven cases, named subtests, parallel isolation, fakes instead of mock frameworks, coverage profiles, benchmarks, and fuzzing. Triggers: 'write Go tests', 'table-driven test', 'go test -cover', 'benchmark this function', 'testing.B.Loop', 'test concurrent goroutines deterministically', flaky parallel subtest uses wrong case data, golden files, 'mockear una interfaz en Go', 'cobertura de tests en Go', 'testar goroutines sense esperar 5 segons'. NOT general Go code or modules (that is go), NOT pytest fixtures (that is testing-py), NOT browser user flows (that is e2e-testing).",
4731
+ "description": "Use when writing or running Go tests — table-driven cases, named subtests, parallel isolation, fakes instead of mock frameworks, coverage profiles, benchmarks, fuzzing, golden files, and testing concurrent goroutines deterministically. NOT general Go code or modules (that is `go`), NOT pytest fixtures (that is `testing-py`), NOT browser user flows (that is `e2e-testing`).",
4732
4732
  "tags": [
4733
4733
  "go",
4734
4734
  "testing",
@@ -4749,7 +4749,7 @@
4749
4749
  },
4750
4750
  {
4751
4751
  "id": "testing-py",
4752
- "description": "Use when writing or fixing Python tests with pytest and the suite is green but bugs still ship, when you must mock an external dependency and aren't sure where to patch, when coverage looks high but catches nothing, or when adding property-based tests for parsers/encoders/invariants. Triggers: 'write pytest tests', 'how do I mock this call', 'why does my mock pass when the code is broken', 'coverage is high but useless', 'patch where it's used', 'add Hypothesis property tests', 'fixture scope leaking state between tests', 'tests en Python', 'cómo mockeo esta llamada', 'la cobertura no detecta nada', 'tests de propietats'. NOT browser end-to-end flows (that is e2e-testing), NOT JS/TS unit tests (that is testing-web), NOT Go tests (that is testing-go).",
4752
+ "description": "Use when writing or fixing Python tests with pytest — especially when the suite is green but bugs still ship, when you must decide where to patch a mocked dependency, when coverage is high but catches nothing, when fixture scope leaks state, or when adding property-based tests for parsers and invariants. NOT browser end-to-end flows (that is `e2e-testing`), NOT JS/TS unit tests (that is `testing-web`), NOT Go tests (that is `testing-go`).",
4753
4753
  "tags": [
4754
4754
  "pytest",
4755
4755
  "python",
@@ -4770,7 +4770,7 @@
4770
4770
  },
4771
4771
  {
4772
4772
  "id": "testing-web",
4773
- "description": "Use when writing or fixing frontend unit, component, or custom-hook tests with Vitest or Jest plus Testing Library — rendering a React/Vue/Svelte component in jsdom, testing a hook in isolation, killing 'not wrapped in act' warnings, or migrating a Jest suite to Vitest. Triggers: 'test this component', 'renderHook for my useCountdown', 'getBy vs findBy, my query is flaky', 'An update to X was not wrapped in act warning', 'mock fetch in a Vitest test', 'set up Vitest with React Testing Library', 'test mi componente de carrito', 'provar un hook amb renderHook'. NOT real-browser multi-page journeys (that is e2e-testing), NOT pytest suites (that is testing-py), NOT axe/contrast/keyboard auditing (that is accessibility).",
4773
+ "description": "Use when writing or fixing frontend unit, component or custom-hook tests with Vitest or Jest plus Testing Library — rendering a component in jsdom, testing a hook in isolation, choosing between sync and async queries, silencing act warnings, mocking fetch, or migrating a Jest suite to Vitest. NOT real-browser multi-page journeys (that is `e2e-testing`), NOT pytest suites (that is `testing-py`), NOT accessibility auditing (that is `accessibility`).",
4774
4774
  "tags": [
4775
4775
  "testing",
4776
4776
  "frontend",
@@ -4794,7 +4794,7 @@
4794
4794
  },
4795
4795
  {
4796
4796
  "id": "tiktok-api",
4797
- "description": "Use when connecting a real TikTok account to code via the Content Posting API + Display API + Business Account API — OAuth v2 (Login Kit), chunked video publish (FILE_UPLOAD / PULL_FROM_URL with init → PUT → status poll), and pulling views / watch time / full_video_watched_rate / impression sources — then logging that performance into 02-DOCS/wiki/shortform/ as a dated feedback log. Triggers: 'publish a video to my TikTok account via the API and poll until it's live', 'my TikTok access token dies after 24 hours so the cron breaks', 'the Display API won't give me watch time / full_video_watched_rate', 'publish init returns url_ownership_unverified for my PULL_FROM_URL', 'rate_limit_exceeded — 6 requests per minute', 'append this week's FYP vs profile impression sources to the wiki', 'subir vídeos a TikTok por API y guardar las métricas del canal en el wiki', 'treure la retenció i el watch time de TikTok cap al wiki'. NOT what-to-post or how-to-package it (that is shortform-strategy / shortform-packaging).",
4797
+ "description": "Use when connecting a real TikTok account to code via the Content Posting, Display and Business Account APIs — OAuth, chunked video publish with status polling, and pulling views, watch time and impression sources, then logging that performance into the wiki as a dated feedback record. Covers short-lived tokens breaking a cron, unverified pull-from-URL ownership, and rate limits. NOT what to post or how to package it (that is `shortform-strategy` and `shortform-packaging`).",
4798
4798
  "tags": [
4799
4799
  "tiktok",
4800
4800
  "content-posting-api",
@@ -4849,7 +4849,7 @@
4849
4849
  },
4850
4850
  {
4851
4851
  "id": "training-data",
4852
- "description": "Use when assembling or curating the corpus a fine-tune trains on: turning raw examples into JSONL in the format a trainer expects (Alpaca instruction, conversational messages, DPO preference pairs, KTO binary-label), matching your data to the model's chat template, generating synthetic or distilled examples, deduplicating and decontaminating against eval sets, or quality-filtering. Triggers: 'what format should my fine-tuning dataset be in', 'build a DPO preference dataset', 'convert my Q&A into the messages/chat format', 'my chat template does not match my training data', 'generate synthetic instruction data with distilabel', 'dedup and decontaminate my training set', 'quants exemples necessito i com filtro la qualitat del dataset abans d'entrenar'. NOT cleaning tabular rows/nulls/dtypes (that is data-cleaning), NOT building a retrieval corpus of chunks+embeddings (that is embeddings-search), NOT running the trainer or picking LoRA hyperparameters (that is finetuning/unsloth).",
4852
+ "description": "Use when assembling or curating the corpus a fine-tune trains on — turning raw examples into the JSONL shape a trainer expects (instruction, conversational, preference-pair or binary-label), matching the data to the model's chat template, generating synthetic or distilled examples, deduplicating and decontaminating against eval sets, and quality-filtering. NOT cleaning tabular rows, nulls and dtypes (that is `data-cleaning`), NOT building a retrieval corpus of chunks and embeddings (that is `embeddings-search`), NOT running the trainer or picking hyperparameters (that is `finetuning`).",
4853
4853
  "tags": [
4854
4854
  "training-data",
4855
4855
  "fine-tuning-dataset",
@@ -4872,7 +4872,7 @@
4872
4872
  },
4873
4873
  {
4874
4874
  "id": "translation-l10n",
4875
- "description": "Use when adding a second or Nth language to a web/app product, wiring i18n plumbing (extract strings, ICU messages, locale routing), fixing broken plurals or dates, or making a UI survive other languages (RTL, text expansion). Triggers: 'ship the app in French and Arabic', 'set up next-intl routing with generateStaticParams', 'our Russian plurals always show the singular', 'German text overflows the buttons', 'dates still show American format for Spanish users', 'the Arabic layout is mirrored wrong', 'traducir la app al árabe y montar el glosario', 'necessito localitzar el producte'. NOT defining the brand's tone in one language (that is brand-voice).",
4875
+ "description": "Use when adding a second or Nth language to a web or app product — i18n plumbing (string extraction, ICU messages, locale routing), fixing broken plurals or date formats, and making a UI survive other languages through right-to-left layout and text expansion. NOT defining the brand's tone in one language (that is `brand-voice`).",
4876
4876
  "tags": [
4877
4877
  "i18n",
4878
4878
  "l10n",
@@ -4910,7 +4910,7 @@
4910
4910
  },
4911
4911
  {
4912
4912
  "id": "unit-economics",
4913
- "description": "Use when computing or improving the per-customer economics of a business — CAC, LTV, CAC payback period, contribution margin — or judging whether LTV:CAC and payback are healthy against 2025-2026 norms, and naming the one lever that fixes the worst number. Triggers: 'what's our CAC / LTV / payback', 'is our LTV:CAC ratio healthy', 'our payback period feels too long', 'is a 5:1 LTV:CAC actually good', 'our blended CAC looks fine but I think paid is bleeding money', 'the model says we're profitable but each customer feels like a loss — what's the contribution margin per customer', 'calcula'm el CAC i quant trigo a recuperar el cost d'un client', 'el ratio LTV:CAC és sa?', 'margen de contribución por cliente'. NOT the multi-year P&L / scenario projection (that is financial-model).",
4913
+ "description": "Use when computing or improving the per-customer economics of a business — CAC, LTV, CAC payback period and contribution margin — judging whether the ratios are healthy against current norms, and naming the one lever that fixes the worst number. Covers a blended CAC that hides a bleeding channel, and a model that shows profit while each customer loses money. NOT the multi-year P&L or scenario projection (that is `financial-model`).",
4914
4914
  "tags": [
4915
4915
  "cac",
4916
4916
  "ltv",
@@ -4934,7 +4934,7 @@
4934
4934
  },
4935
4935
  {
4936
4936
  "id": "unity",
4937
- "description": "Use when writing, reviewing, or structuring Unity game code in C# for current Unity 6 LTS (6000.x) — GameObjects and Transform hierarchy, MonoBehaviour lifecycle, prefabs and prefab variants, ScriptableObjects for data, scenes and additive loading, the new Input System, coroutines vs async/await/Awaitable, Addressables, and build/player settings for 2D and 3D. Triggers: 'my Unity script', 'Awake vs Start', 'why is my physics jittery', MonoBehaviour .cs files, 'set up the new Input System', 'ScriptableObject config', 'load a scene additively', 'Instantiate a prefab', 'convert Input.GetAxis to the new system', 'build for Android/WebGL', 'por qué no se llama mi Start', 'com carrego una escena en additiu'. NOT Godot/GDScript (that is godot); NOT Unreal/Blueprint/C++ engine work (that is unreal); NOT the netcode wire protocol itself (that is gamedev-multiplayer).",
4937
+ "description": "Use when writing, reviewing or structuring Unity game code in C# for Unity 6 LTS — GameObjects and the Transform hierarchy, the MonoBehaviour lifecycle, prefabs and variants, ScriptableObjects for data, scenes and additive loading, the Input System, coroutines versus async and Awaitable, Addressables, and build settings for 2D and 3D. NOT Godot or GDScript (that is `godot`), NOT Unreal Blueprint or C++ engine work (that is `unreal`), NOT the netcode wire protocol (that is `gamedev-multiplayer`).",
4938
4938
  "tags": [
4939
4939
  "unity",
4940
4940
  "csharp",
@@ -4957,7 +4957,7 @@
4957
4957
  },
4958
4958
  {
4959
4959
  "id": "unreal",
4960
- "description": "Use when building, scripting, or debugging a game in Unreal Engine 5 (UE5) with Blueprint and/or C++ — gameplay framework (Actor/Pawn/Character/GameMode/PlayerController), Actor lifecycle and tick, UPROPERTY/UFUNCTION/UCLASS reflection and garbage collection, Enhanced Input, dynamic multicast delegates, UMG widgets, Paper2D sprites/flipbooks, and Blueprint↔C++ parity (exposing C++ to Blueprint, calling Blueprint from C++). Triggers: \\\"UE5\\\", \\\"Unreal\\\", \\\"Blueprint\\\", \\\"make a Character in C++\\\", \\\"expose this to Blueprint\\\", \\\"BlueprintCallable\\\", \\\"why is my UObject garbage collected\\\", \\\"Enhanced Input mapping context\\\", \\\"UMG widget\\\", \\\"Paper2D flipbook\\\", \\\".uproject\\\", \\\"GameMode vs GameState\\\". NOT for Godot (→ godot), NOT for Unity/C#/MonoBehaviour (→ unity), NOT for language-only C++ memory/RAII questions with no Unreal types (→ cpp).",
4960
+ "description": "Use when building, scripting or debugging a game in Unreal Engine 5 with Blueprint or C++ — the gameplay framework (Actor, Pawn, Character, GameMode, PlayerController), Actor lifecycle and tick, the reflection macros and garbage collection, Enhanced Input, multicast delegates, UMG widgets, Paper2D, and Blueprint-to-C++ parity in both directions. NOT Godot (that is `godot`), NOT Unity or MonoBehaviour (that is `unity`), NOT language-only C++ memory and RAII questions with no Unreal types (that is `cpp`).",
4961
4961
  "tags": [
4962
4962
  "unreal",
4963
4963
  "ue5",
@@ -4980,7 +4980,7 @@
4980
4980
  },
4981
4981
  {
4982
4982
  "id": "unsloth",
4983
- "description": "Use when fine-tuning an open-weight LLM fast on ONE GPU with low VRAM — Unsloth's FastLanguageModel/FastModel + 4-bit QLoRA + trl SFTTrainer, response-only loss masking via get_chat_template/train_on_responses_only, GRPO reasoning FT, and export to merged-16bit / GGUF / push_to_hub for Ollama or vLLM. Triggers: 'fine-tune Llama/Qwen/Gemma/gpt-oss on a single 16GB/24GB GPU', 'QLoRA OOMs on my GPU, make it fit', 'train ~2x faster with less VRAM', 'why is my loss covering the prompt / how do I mask the user turn', 'save my LoRA as GGUF Q4_K_M for Ollama', 'ajustar un modelo en una sola GPU sense quedar-me sense VRAM'. NOT whether/why/which method to fine-tune or trl/peft theory (that is finetuning), NOT running the exported GGUF locally (that is ollama), NOT serving-engine flags/throughput (that is vllm), NOT building the JSONL dataset (that is training-data).",
4983
+ "description": "Use when fine-tuning an open-weight LLM fast on ONE GPU with low VRAM — Unsloth's fast model loaders with 4-bit QLoRA and the trl trainer, response-only loss masking so the prompt is not trained on, GRPO reasoning fine-tunes, and export to merged 16-bit, GGUF or the Hub. NOT whether, why or which method to fine-tune (that is `finetuning`), NOT running the exported GGUF locally (that is `ollama`), NOT serving-engine flags and throughput (that is `vllm`), NOT building the JSONL dataset (that is `training-data`).",
4984
4984
  "tags": [
4985
4985
  "unsloth",
4986
4986
  "qlora",
@@ -5000,7 +5000,7 @@
5000
5000
  },
5001
5001
  {
5002
5002
  "id": "vector-db",
5003
- "description": "Use when operating a vector store as a data layer — choosing or migrating between Pinecone, Qdrant, Weaviate, or pgvector; designing a collection/index (distance metric, dimensions, HNSW m/ef_construction, named vectors); filtering on metadata/payload; running hybrid dense+sparse search; or picking quantization to cut RAM and cost. Symptoms: search returns garbage, filters get silently ignored, recall is low, queries are slow, the bill is too high, a filtered query returns fewer than k rows. Triggers: 'set up a vector database', 'my similarity search ignores the metadata filter', 'ef_search vs recall', 'move off Pinecone to pgvector to cut cost', 'hybrid search with RRF', 'why does my filtered query return fewer than k results', 'crear una colección en Qdrant con cuantización binaria', 'la cerca vectorial retorna resultats dolents'. NOT how to produce, chunk, or judge embeddings (that is embeddings-search).",
5003
+ "description": "Use when operating a vector store as a data layer — choosing or migrating between Pinecone, Qdrant, Weaviate and pgvector; designing a collection or index (distance metric, dimensions, HNSW parameters, named vectors); filtering on metadata; hybrid dense-plus-sparse search; and quantization to cut RAM and cost. Covers garbage results, silently ignored filters, low recall, slow queries, and filtered queries returning fewer than k rows. NOT producing, chunking or judging embeddings (that is `embeddings-search`).",
5004
5004
  "tags": [
5005
5005
  "vector-database",
5006
5006
  "pinecone",
@@ -5023,7 +5023,7 @@
5023
5023
  },
5024
5024
  {
5025
5025
  "id": "vercel",
5026
- "description": "Use when operating an already-chosen Vercel project from the CLI or vercel.json/vercel.ts — deploying preview vs production, debugging builds, pushing/pulling env vars across production/preview/development, attaching custom domains, configuring functions (runtime, maxDuration, regions), crons, rewrites/redirects/headers, and deployment protection. Triggers: 'deploy to Vercel', 'vercel --prod', 'my function timed out at 10s', 'vercel env pull doesn't update .env.local', 'should I still use Edge Functions', 'set maxDuration', 'add a cron on Vercel', 'desplega a Vercel', 'configura les variables d'entorn a Vercel', 'configurar un cron en Vercel'. NOT host choice / Docker / CI (that is deployment), NOT Next.js app code or next.config.js (that is nextjs), NOT DNS records / registrar transfers (that is domains-dns).",
5026
+ "description": "Use when operating an already-chosen Vercel project from the CLI or its config file — preview versus production deploys, debugging builds, pushing and pulling env vars across environments, custom domains, function runtime, duration and regions, crons, rewrites and headers, and deployment protection. NOT host choice, Docker or CI (that is `deployment`), NOT Next.js app code or next.config (that is `nextjs`), NOT DNS records or registrar transfers (that is `domains-dns`).",
5027
5027
  "tags": [
5028
5028
  "vercel",
5029
5029
  "deploy",
@@ -5056,7 +5056,7 @@
5056
5056
  },
5057
5057
  {
5058
5058
  "id": "video-shorts",
5059
- "description": "Use when scripting or directing the edit of a single vertical short for Reels/Shorts/TikTok that has to hold attention from the first frame — turning a topic, a clip, or a long video into a shot-by-shot script and an edit decision sheet. Use for writing a 15–60s short, fixing a hook that dies in second three, generating hook variants to A/B test, planning cuts and burned-in captions, or extracting shorts from a long video. Triggers: 'write me a 30-second Reel/TikTok/Short', 'my Reels die in the first 3 seconds', 'give me 5 hook variants to A/B test', 'turn this podcast clip into a vertical short', 'plan the cuts and on-screen text for this faceless voiceover Reel', 'escríbeme un guion para un Reel de 30 segundos', 'convierte este vídeo largo en un Short', 'el gancho de mis Reels no engancha'. NOT scheduling or cross-platform cadence (that is social-publisher), NOT running the editorial calendar/pipeline (that is content-engine), NOT defining the durable brand tone (that is brand-voice).",
5059
+ "description": "Use when scripting or directing the edit of a single vertical short that has to hold attention from the first frame — turning a topic, a clip or a long video into a shot-by-shot script and an edit decision sheet, fixing a hook that dies in second three, generating hook variants to test, and planning cuts and on-screen text. NOT scheduling or cross-platform cadence (that is `social-publisher`), NOT running the editorial calendar (that is `content-engine`), NOT defining the durable brand tone (that is `brand-voice`).",
5060
5060
  "tags": [
5061
5061
  "short-form-video",
5062
5062
  "reels",
@@ -5104,7 +5104,7 @@
5104
5104
  },
5105
5105
  {
5106
5106
  "id": "vllm",
5107
- "description": "Use when self-hosting an open-weight LLM for high-throughput, concurrent serving with vLLM — running `vllm serve` as an OpenAI-compatible endpoint, splitting a model across GPUs with tensor/pipeline parallelism, loading AWQ/GPTQ/FP8/compressed-tensors quants, serving one or many LoRA adapters, or debugging KV-cache OOM from --gpu-memory-utilization / --max-model-len. Triggers: 'serve a 70B to many users at once', 'point my OpenAI client at a self-hosted model', 'split a model across 4 GPUs with tensor parallel', 'why does vllm OOM at long context', 'serve my fine-tuned LoRA adapter', 'health check my vllm server', 'servir un modelo abierto con alta concurrencia en mis propias GPUs'. NOT renting/provisioning the GPU box itself (that is runpod / modal), NOT single-user laptop inference (that is ollama), NOT a hosted inference API you do not operate (that is together-fireworks / huggingface).",
5107
+ "description": "Use when self-hosting an open-weight LLM for high-throughput concurrent serving with vLLM — running an OpenAI-compatible endpoint, splitting a model across GPUs with tensor or pipeline parallelism, loading quantized weights, serving one or many LoRA adapters, and debugging KV-cache OOM from memory-utilisation and context-length flags. NOT renting or provisioning the GPU box (that is `runpod` or `modal`), NOT single-user laptop inference (that is `ollama`), NOT a hosted inference API you do not operate (that is `together-fireworks` or `huggingface`).",
5108
5108
  "tags": [
5109
5109
  "vllm",
5110
5110
  "llm-serving",
@@ -5162,7 +5162,7 @@
5162
5162
  },
5163
5163
  {
5164
5164
  "id": "webinar",
5165
- "description": "Use when planning, promoting, or running a webinar meant to convert — deciding the offer before the title, building the registration + reminder funnel, scripting the run-of-show, or splitting post-event follow-up by segment. Triggers: 'plan a webinar', 'webinar that converts', 'people register but don't show up', 'webinar got attendees but no sales', 'reminder email sequence', 'no-show replay follow-up', non-obvious: 'my live attend rate is only 30%', 'how do I transition into the pitch without it feeling salesy', ES 'montar un webinar que convierta', CA 'fer un webinar que vengui'. NOT the slide visuals themselves (that is presentations), NOT the registration page copy (that is landing-copy).",
5165
+ "description": "Use when planning, promoting or running a webinar meant to convert — deciding the offer before the title, building the registration and reminder funnel, scripting the run-of-show, and splitting post-event follow-up by segment. Covers a low live attend rate, attendees who do not buy, and the transition into the pitch. NOT the slide visuals themselves (that is `presentations`), NOT the registration page copy (that is `landing-copy`).",
5166
5166
  "tags": [
5167
5167
  "webinar",
5168
5168
  "conversion-funnel",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ericrisco/rsc",
3
- "version": "0.1.66",
3
+ "version": "0.1.68",
4
4
  "description": "Eric Risco's agent-skills catalog as a granular, self-recommending CLI installer.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: terms-conditions
3
- description: "Use when drafting the one-to-many legal documents a product publishes to its users — Terms of Service / Terms of Use, an Acceptable Use Policy, a EULA for installed software, and the standing legal notices a site must display (copyright, DMCA agent, governing law, auto-renewal); also when adding AI-feature terms (output ownership + accuracy disclaimers), wiring auto-renew disclosure, or fixing acceptance so it actually binds. Triggers: 'draft Terms of Service for our SaaS', 'write an Acceptable Use Policy', 'add a limitation-of-liability and arbitration clause', 'our terms are just a footer link, make them binding', 'what does our footer need to say legally', 'we auto-renew subscriptions, what must the terms say', 'redactar los términos y condiciones de la plataforma', 'termes i condicions del marketplace'. NOT a negotiated two-party agreement you sign with another business (that is contracts) and NOT the privacy policy or how personal data is handled (that is gdpr-privacy)."
3
+ description: "Use when drafting the one-to-many legal documents a product publishes to its users — Terms of Service, an Acceptable Use Policy, a EULA for installed software, and the standing notices a site must display — plus AI-feature terms covering output ownership and accuracy, auto-renewal disclosure, and making acceptance actually binding. NOT a negotiated two-party agreement you sign with another business (that is `contracts`), NOT the privacy policy or how personal data is handled (that is `gdpr-privacy`)."
4
4
  tags: [legal, terms-of-service, acceptable-use-policy, eula, dmca, clickwrap, auto-renewal, limitation-of-liability]
5
5
  recommends: [gdpr-privacy, contracts, e-signature, ip-trademark, compliance, data-policy]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: testing-go
3
- description: "Use when writing or running Go tests — table-driven cases, named subtests, parallel isolation, fakes instead of mock frameworks, coverage profiles, benchmarks, and fuzzing. Triggers: 'write Go tests', 'table-driven test', 'go test -cover', 'benchmark this function', 'testing.B.Loop', 'test concurrent goroutines deterministically', flaky parallel subtest uses wrong case data, golden files, 'mockear una interfaz en Go', 'cobertura de tests en Go', 'testar goroutines sense esperar 5 segons'. NOT general Go code or modules (that is go), NOT pytest fixtures (that is testing-py), NOT browser user flows (that is e2e-testing)."
3
+ description: "Use when writing or running Go tests — table-driven cases, named subtests, parallel isolation, fakes instead of mock frameworks, coverage profiles, benchmarks, fuzzing, golden files, and testing concurrent goroutines deterministically. NOT general Go code or modules (that is `go`), NOT pytest fixtures (that is `testing-py`), NOT browser user flows (that is `e2e-testing`)."
4
4
  tags: [go, testing, table-driven-tests, benchmarks, coverage, synctest, mocks, fuzzing]
5
5
  recommends: [go, secure-coding, testing-py, e2e-testing]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: testing-py
3
- description: "Use when writing or fixing Python tests with pytest and the suite is green but bugs still ship, when you must mock an external dependency and aren't sure where to patch, when coverage looks high but catches nothing, or when adding property-based tests for parsers/encoders/invariants. Triggers: 'write pytest tests', 'how do I mock this call', 'why does my mock pass when the code is broken', 'coverage is high but useless', 'patch where it's used', 'add Hypothesis property tests', 'fixture scope leaking state between tests', 'tests en Python', 'cómo mockeo esta llamada', 'la cobertura no detecta nada', 'tests de propietats'. NOT browser end-to-end flows (that is e2e-testing), NOT JS/TS unit tests (that is testing-web), NOT Go tests (that is testing-go)."
3
+ description: "Use when writing or fixing Python tests with pytest — especially when the suite is green but bugs still ship, when you must decide where to patch a mocked dependency, when coverage is high but catches nothing, when fixture scope leaks state, or when adding property-based tests for parsers and invariants. NOT browser end-to-end flows (that is `e2e-testing`), NOT JS/TS unit tests (that is `testing-web`), NOT Go tests (that is `testing-go`)."
4
4
  tags: [pytest, python, testing, coverage, hypothesis, mocking, fixtures, property-based]
5
5
  recommends: [python, code-review, github-actions, e2e-testing]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: testing-web
3
- description: "Use when writing or fixing frontend unit, component, or custom-hook tests with Vitest or Jest plus Testing Library — rendering a React/Vue/Svelte component in jsdom, testing a hook in isolation, killing 'not wrapped in act' warnings, or migrating a Jest suite to Vitest. Triggers: 'test this component', 'renderHook for my useCountdown', 'getBy vs findBy, my query is flaky', 'An update to X was not wrapped in act warning', 'mock fetch in a Vitest test', 'set up Vitest with React Testing Library', 'test mi componente de carrito', 'provar un hook amb renderHook'. NOT real-browser multi-page journeys (that is e2e-testing), NOT pytest suites (that is testing-py), NOT axe/contrast/keyboard auditing (that is accessibility)."
3
+ description: "Use when writing or fixing frontend unit, component or custom-hook tests with Vitest or Jest plus Testing Library — rendering a component in jsdom, testing a hook in isolation, choosing between sync and async queries, silencing act warnings, mocking fetch, or migrating a Jest suite to Vitest. NOT real-browser multi-page journeys (that is `e2e-testing`), NOT pytest suites (that is `testing-py`), NOT accessibility auditing (that is `accessibility`)."
4
4
  tags: [testing, frontend, vitest, jest, testing-library, react, hooks, component-testing, jsdom]
5
5
  recommends: [e2e-testing, accessibility, testing-py, react, nextjs, debug]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: tiktok-api
3
- description: "Use when connecting a real TikTok account to code via the Content Posting API + Display API + Business Account API — OAuth v2 (Login Kit), chunked video publish (FILE_UPLOAD / PULL_FROM_URL with init → PUT → status poll), and pulling views / watch time / full_video_watched_rate / impression sources — then logging that performance into 02-DOCS/wiki/shortform/ as a dated feedback log. Triggers: 'publish a video to my TikTok account via the API and poll until it's live', 'my TikTok access token dies after 24 hours so the cron breaks', 'the Display API won't give me watch time / full_video_watched_rate', 'publish init returns url_ownership_unverified for my PULL_FROM_URL', 'rate_limit_exceeded — 6 requests per minute', 'append this week's FYP vs profile impression sources to the wiki', 'subir vídeos a TikTok por API y guardar las métricas del canal en el wiki', 'treure la retenció i el watch time de TikTok cap al wiki'. NOT what-to-post or how-to-package it (that is shortform-strategy / shortform-packaging)."
3
+ description: "Use when connecting a real TikTok account to code via the Content Posting, Display and Business Account APIs — OAuth, chunked video publish with status polling, and pulling views, watch time and impression sources, then logging that performance into the wiki as a dated feedback record. Covers short-lived tokens breaking a cron, unverified pull-from-URL ownership, and rate limits. NOT what to post or how to package it (that is `shortform-strategy` and `shortform-packaging`)."
4
4
  tags: [tiktok, content-posting-api, tiktok-display-api, tiktok-business-api, oauth2, chunked-upload, video-publish, watch-time, completion-rate, shortform-feedback-log]
5
5
  recommends: [shortform-strategy, shortform-packaging, shortform-ideation, shortform-editing, social-publisher, instagram-api, youtube-api, api-connector-builder, automation-flows, knowledge-ops]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: training-data
3
- description: "Use when assembling or curating the corpus a fine-tune trains on: turning raw examples into JSONL in the format a trainer expects (Alpaca instruction, conversational messages, DPO preference pairs, KTO binary-label), matching your data to the model's chat template, generating synthetic or distilled examples, deduplicating and decontaminating against eval sets, or quality-filtering. Triggers: 'what format should my fine-tuning dataset be in', 'build a DPO preference dataset', 'convert my Q&A into the messages/chat format', 'my chat template does not match my training data', 'generate synthetic instruction data with distilabel', 'dedup and decontaminate my training set', 'quants exemples necessito i com filtro la qualitat del dataset abans d'entrenar'. NOT cleaning tabular rows/nulls/dtypes (that is data-cleaning), NOT building a retrieval corpus of chunks+embeddings (that is embeddings-search), NOT running the trainer or picking LoRA hyperparameters (that is finetuning/unsloth)."
3
+ description: "Use when assembling or curating the corpus a fine-tune trains on — turning raw examples into the JSONL shape a trainer expects (instruction, conversational, preference-pair or binary-label), matching the data to the model's chat template, generating synthetic or distilled examples, deduplicating and decontaminating against eval sets, and quality-filtering. NOT cleaning tabular rows, nulls and dtypes (that is `data-cleaning`), NOT building a retrieval corpus of chunks and embeddings (that is `embeddings-search`), NOT running the trainer or picking hyperparameters (that is `finetuning`)."
4
4
  tags: [training-data, fine-tuning-dataset, jsonl, chat-template, preference-data, dpo, kto, synthetic-data, decontamination, dataset-curation]
5
5
  recommends: [finetuning, unsloth, huggingface, data-cleaning]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: translation-l10n
3
- description: "Use when adding a second or Nth language to a web/app product, wiring i18n plumbing (extract strings, ICU messages, locale routing), fixing broken plurals or dates, or making a UI survive other languages (RTL, text expansion). Triggers: 'ship the app in French and Arabic', 'set up next-intl routing with generateStaticParams', 'our Russian plurals always show the singular', 'German text overflows the buttons', 'dates still show American format for Spanish users', 'the Arabic layout is mirrored wrong', 'traducir la app al árabe y montar el glosario', 'necessito localitzar el producte'. NOT defining the brand's tone in one language (that is brand-voice)."
3
+ description: "Use when adding a second or Nth language to a web or app product — i18n plumbing (string extraction, ICU messages, locale routing), fixing broken plurals or date formats, and making a UI survive other languages through right-to-left layout and text expansion. NOT defining the brand's tone in one language (that is `brand-voice`)."
4
4
  tags: [i18n, l10n, internationalization, localization, translation, rtl, icu-messageformat]
5
5
  recommends: [brand-voice, nextjs, seo-geo, accessibility, content-engine]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: unit-economics
3
- description: "Use when computing or improving the per-customer economics of a business — CAC, LTV, CAC payback period, contribution margin — or judging whether LTV:CAC and payback are healthy against 2025-2026 norms, and naming the one lever that fixes the worst number. Triggers: 'what's our CAC / LTV / payback', 'is our LTV:CAC ratio healthy', 'our payback period feels too long', 'is a 5:1 LTV:CAC actually good', 'our blended CAC looks fine but I think paid is bleeding money', 'the model says we're profitable but each customer feels like a loss — what's the contribution margin per customer', 'calcula'm el CAC i quant trigo a recuperar el cost d'un client', 'el ratio LTV:CAC és sa?', 'margen de contribución por cliente'. NOT the multi-year P&L / scenario projection (that is financial-model)."
3
+ description: "Use when computing or improving the per-customer economics of a business — CAC, LTV, CAC payback period and contribution margin — judging whether the ratios are healthy against current norms, and naming the one lever that fixes the worst number. Covers a blended CAC that hides a bleeding channel, and a model that shows profit while each customer loses money. NOT the multi-year P&L or scenario projection (that is `financial-model`)."
4
4
  tags: ["cac", "ltv", "payback-period", "contribution-margin", "unit-economics", "ltv-cac-ratio", "nrr", "saas-metrics"]
5
5
  recommends: ["financial-model", "pricing", "retention", "cost-tracking", "forecasting", "investor-materials", "dashboard"]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: unity
3
- description: "Use when writing, reviewing, or structuring Unity game code in C# for current Unity 6 LTS (6000.x) — GameObjects and Transform hierarchy, MonoBehaviour lifecycle, prefabs and prefab variants, ScriptableObjects for data, scenes and additive loading, the new Input System, coroutines vs async/await/Awaitable, Addressables, and build/player settings for 2D and 3D. Triggers: 'my Unity script', 'Awake vs Start', 'why is my physics jittery', MonoBehaviour .cs files, 'set up the new Input System', 'ScriptableObject config', 'load a scene additively', 'Instantiate a prefab', 'convert Input.GetAxis to the new system', 'build for Android/WebGL', 'por qué no se llama mi Start', 'com carrego una escena en additiu'. NOT Godot/GDScript (that is godot); NOT Unreal/Blueprint/C++ engine work (that is unreal); NOT the netcode wire protocol itself (that is gamedev-multiplayer)."
3
+ description: "Use when writing, reviewing or structuring Unity game code in C# for Unity 6 LTS — GameObjects and the Transform hierarchy, the MonoBehaviour lifecycle, prefabs and variants, ScriptableObjects for data, scenes and additive loading, the Input System, coroutines versus async and Awaitable, Addressables, and build settings for 2D and 3D. NOT Godot or GDScript (that is `godot`), NOT Unreal Blueprint or C++ engine work (that is `unreal`), NOT the netcode wire protocol (that is `gamedev-multiplayer`)."
4
4
  tags: [unity, csharp, game-dev, monobehaviour, input-system]
5
5
  recommends: [gamedev-multiplayer, gamedev-physics, gamedev-shaders, gamedev-pathing, gamedev-shipping, godot, unreal]
6
6
  profiles: [full]
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: unreal
3
- description: "Use when building, scripting, or debugging a game in Unreal Engine 5 (UE5) with Blueprint and/or C++ — gameplay framework (Actor/Pawn/Character/GameMode/PlayerController), Actor lifecycle and tick, UPROPERTY/UFUNCTION/UCLASS reflection and garbage collection, Enhanced Input, dynamic multicast delegates, UMG widgets, Paper2D sprites/flipbooks, and Blueprint↔C++ parity (exposing C++ to Blueprint, calling Blueprint from C++). Triggers: \"UE5\", \"Unreal\", \"Blueprint\", \"make a Character in C++\", \"expose this to Blueprint\", \"BlueprintCallable\", \"why is my UObject garbage collected\", \"Enhanced Input mapping context\", \"UMG widget\", \"Paper2D flipbook\", \".uproject\", \"GameMode vs GameState\". NOT for Godot (→ godot), NOT for Unity/C#/MonoBehaviour (→ unity), NOT for language-only C++ memory/RAII questions with no Unreal types (→ cpp)."
3
+ description: "Use when building, scripting or debugging a game in Unreal Engine 5 with Blueprint or C++ — the gameplay framework (Actor, Pawn, Character, GameMode, PlayerController), Actor lifecycle and tick, the reflection macros and garbage collection, Enhanced Input, multicast delegates, UMG widgets, Paper2D, and Blueprint-to-C++ parity in both directions. NOT Godot (that is `godot`), NOT Unity or MonoBehaviour (that is `unity`), NOT language-only C++ memory and RAII questions with no Unreal types (that is `cpp`)."
4
4
  tags: [unreal, ue5, blueprint, unreal-engine, gamedev]
5
5
  recommends: [cpp, gamedev-shipping, gamedev-multiplayer, game-design, gamedev-physics, godot, unity]
6
6
  profiles: [full]
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: unsloth
3
- description: "Use when fine-tuning an open-weight LLM fast on ONE GPU with low VRAM — Unsloth's FastLanguageModel/FastModel + 4-bit QLoRA + trl SFTTrainer, response-only loss masking via get_chat_template/train_on_responses_only, GRPO reasoning FT, and export to merged-16bit / GGUF / push_to_hub for Ollama or vLLM. Triggers: 'fine-tune Llama/Qwen/Gemma/gpt-oss on a single 16GB/24GB GPU', 'QLoRA OOMs on my GPU, make it fit', 'train ~2x faster with less VRAM', 'why is my loss covering the prompt / how do I mask the user turn', 'save my LoRA as GGUF Q4_K_M for Ollama', 'ajustar un modelo en una sola GPU sense quedar-me sense VRAM'. NOT whether/why/which method to fine-tune or trl/peft theory (that is finetuning), NOT running the exported GGUF locally (that is ollama), NOT serving-engine flags/throughput (that is vllm), NOT building the JSONL dataset (that is training-data)."
3
+ description: "Use when fine-tuning an open-weight LLM fast on ONE GPU with low VRAM — Unsloth's fast model loaders with 4-bit QLoRA and the trl trainer, response-only loss masking so the prompt is not trained on, GRPO reasoning fine-tunes, and export to merged 16-bit, GGUF or the Hub. NOT whether, why or which method to fine-tune (that is `finetuning`), NOT running the exported GGUF locally (that is `ollama`), NOT serving-engine flags and throughput (that is `vllm`), NOT building the JSONL dataset (that is `training-data`)."
4
4
  tags: [unsloth, qlora, lora, single-gpu, gguf, fine-tuning]
5
5
  recommends: [finetuning, training-data, open-weights, ollama, huggingface]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: vector-db
3
- description: "Use when operating a vector store as a data layer — choosing or migrating between Pinecone, Qdrant, Weaviate, or pgvector; designing a collection/index (distance metric, dimensions, HNSW m/ef_construction, named vectors); filtering on metadata/payload; running hybrid dense+sparse search; or picking quantization to cut RAM and cost. Symptoms: search returns garbage, filters get silently ignored, recall is low, queries are slow, the bill is too high, a filtered query returns fewer than k rows. Triggers: 'set up a vector database', 'my similarity search ignores the metadata filter', 'ef_search vs recall', 'move off Pinecone to pgvector to cut cost', 'hybrid search with RRF', 'why does my filtered query return fewer than k results', 'crear una colección en Qdrant con cuantización binaria', 'la cerca vectorial retorna resultats dolents'. NOT how to produce, chunk, or judge embeddings (that is embeddings-search)."
3
+ description: "Use when operating a vector store as a data layer — choosing or migrating between Pinecone, Qdrant, Weaviate and pgvector; designing a collection or index (distance metric, dimensions, HNSW parameters, named vectors); filtering on metadata; hybrid dense-plus-sparse search; and quantization to cut RAM and cost. Covers garbage results, silently ignored filters, low recall, slow queries, and filtered queries returning fewer than k rows. NOT producing, chunking or judging embeddings (that is `embeddings-search`)."
4
4
  tags: [vector-database, pinecone, qdrant, weaviate, pgvector, hnsw, hybrid-search, metadata-filter, quantization]
5
5
  recommends: [embeddings-search, rag, postgresdb, redis, supabase]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: vercel
3
- description: "Use when operating an already-chosen Vercel project from the CLI or vercel.json/vercel.ts — deploying preview vs production, debugging builds, pushing/pulling env vars across production/preview/development, attaching custom domains, configuring functions (runtime, maxDuration, regions), crons, rewrites/redirects/headers, and deployment protection. Triggers: 'deploy to Vercel', 'vercel --prod', 'my function timed out at 10s', 'vercel env pull doesn't update .env.local', 'should I still use Edge Functions', 'set maxDuration', 'add a cron on Vercel', 'desplega a Vercel', 'configura les variables d'entorn a Vercel', 'configurar un cron en Vercel'. NOT host choice / Docker / CI (that is deployment), NOT Next.js app code or next.config.js (that is nextjs), NOT DNS records / registrar transfers (that is domains-dns)."
3
+ description: "Use when operating an already-chosen Vercel project from the CLI or its config file — preview versus production deploys, debugging builds, pushing and pulling env vars across environments, custom domains, function runtime, duration and regions, crons, rewrites and headers, and deployment protection. NOT host choice, Docker or CI (that is `deployment`), NOT Next.js app code or next.config (that is `nextjs`), NOT DNS records or registrar transfers (that is `domains-dns`)."
4
4
  tags: [vercel, deploy, serverless, edge, env-vars]
5
5
  recommends: [deployment, nextjs, domains-dns]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: video-shorts
3
- description: "Use when scripting or directing the edit of a single vertical short for Reels/Shorts/TikTok that has to hold attention from the first frame — turning a topic, a clip, or a long video into a shot-by-shot script and an edit decision sheet. Use for writing a 15–60s short, fixing a hook that dies in second three, generating hook variants to A/B test, planning cuts and burned-in captions, or extracting shorts from a long video. Triggers: 'write me a 30-second Reel/TikTok/Short', 'my Reels die in the first 3 seconds', 'give me 5 hook variants to A/B test', 'turn this podcast clip into a vertical short', 'plan the cuts and on-screen text for this faceless voiceover Reel', 'escríbeme un guion para un Reel de 30 segundos', 'convierte este vídeo largo en un Short', 'el gancho de mis Reels no engancha'. NOT scheduling or cross-platform cadence (that is social-publisher), NOT running the editorial calendar/pipeline (that is content-engine), NOT defining the durable brand tone (that is brand-voice)."
3
+ description: "Use when scripting or directing the edit of a single vertical short that has to hold attention from the first frame — turning a topic, a clip or a long video into a shot-by-shot script and an edit decision sheet, fixing a hook that dies in second three, generating hook variants to test, and planning cuts and on-screen text. NOT scheduling or cross-platform cadence (that is `social-publisher`), NOT running the editorial calendar (that is `content-engine`), NOT defining the durable brand tone (that is `brand-voice`)."
4
4
  tags: [short-form-video, reels, shorts, tiktok, video-script, hook, retention, captions, vertical-video, editing]
5
5
  recommends: [social-publisher, content-engine, brand-voice, podcast, ads]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: vllm
3
- description: "Use when self-hosting an open-weight LLM for high-throughput, concurrent serving with vLLM — running `vllm serve` as an OpenAI-compatible endpoint, splitting a model across GPUs with tensor/pipeline parallelism, loading AWQ/GPTQ/FP8/compressed-tensors quants, serving one or many LoRA adapters, or debugging KV-cache OOM from --gpu-memory-utilization / --max-model-len. Triggers: 'serve a 70B to many users at once', 'point my OpenAI client at a self-hosted model', 'split a model across 4 GPUs with tensor parallel', 'why does vllm OOM at long context', 'serve my fine-tuned LoRA adapter', 'health check my vllm server', 'servir un modelo abierto con alta concurrencia en mis propias GPUs'. NOT renting/provisioning the GPU box itself (that is runpod / modal), NOT single-user laptop inference (that is ollama), NOT a hosted inference API you do not operate (that is together-fireworks / huggingface)."
3
+ description: "Use when self-hosting an open-weight LLM for high-throughput concurrent serving with vLLM — running an OpenAI-compatible endpoint, splitting a model across GPUs with tensor or pipeline parallelism, loading quantized weights, serving one or many LoRA adapters, and debugging KV-cache OOM from memory-utilisation and context-length flags. NOT renting or provisioning the GPU box (that is `runpod` or `modal`), NOT single-user laptop inference (that is `ollama`), NOT a hosted inference API you do not operate (that is `together-fireworks` or `huggingface`)."
4
4
  tags: [vllm, llm-serving, inference-server, tensor-parallel, quantization]
5
5
  recommends: [open-weights, finetuning, runpod, modal, ollama]
6
6
  origin: risco
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: webinar
3
- description: "Use when planning, promoting, or running a webinar meant to convert — deciding the offer before the title, building the registration + reminder funnel, scripting the run-of-show, or splitting post-event follow-up by segment. Triggers: 'plan a webinar', 'webinar that converts', 'people register but don't show up', 'webinar got attendees but no sales', 'reminder email sequence', 'no-show replay follow-up', non-obvious: 'my live attend rate is only 30%', 'how do I transition into the pitch without it feeling salesy', ES 'montar un webinar que convierta', CA 'fer un webinar que vengui'. NOT the slide visuals themselves (that is presentations), NOT the registration page copy (that is landing-copy)."
3
+ description: "Use when planning, promoting or running a webinar meant to convert — deciding the offer before the title, building the registration and reminder funnel, scripting the run-of-show, and splitting post-event follow-up by segment. Covers a low live attend rate, attendees who do not buy, and the transition into the pitch. NOT the slide visuals themselves (that is `presentations`), NOT the registration page copy (that is `landing-copy`)."
4
4
  tags: [webinar, conversion-funnel, run-of-show, registration, follow-up, marketing-brand]
5
5
  recommends: [presentations, landing-copy, content-engine, newsletter, lead-gen, cold-outreach, sales-pipeline, calendar-scheduling, email-connector]
6
6
  profiles: []