@badgie/crm-cli 0.8.0 → 0.9.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/AGENTS.md +87 -1
- package/CHANGELOG.md +50 -0
- package/README.md +45 -0
- package/dist/commands/marketing.js +1336 -45
- package/dist/commands/marketing.js.map +1 -1
- package/package.json +1 -1
package/AGENTS.md
CHANGED
|
@@ -4,7 +4,7 @@ Este archivo es la guía canónica para que un agente (openclaw, Claude, Cursor,
|
|
|
4
4
|
|
|
5
5
|
## Qué es
|
|
6
6
|
|
|
7
|
-
CLI oficial del Badgie CRM. La versión publicada `0.
|
|
7
|
+
CLI oficial del Badgie CRM. La versión publicada `0.9.0` expone ~145 comandos sobre Supabase y endpoints de la app Next, e incluye flujo completo para federaciones (nacionales + regionales) y para el **Marketing Planner** (campañas, posts, canales, assets, publicaciones, reviews, métricas). Instalación: ver `cli/README.md`.
|
|
8
8
|
|
|
9
9
|
## Fuente de verdad (machine-readable)
|
|
10
10
|
|
|
@@ -144,6 +144,92 @@ Reglas para el agente:
|
|
|
144
144
|
- Para investigar contactos: usa `federations contacts list --federation <numero>`
|
|
145
145
|
(donde `<numero>` puede ser `"12"` o `reg-<uuid>` indistintamente).
|
|
146
146
|
|
|
147
|
+
## Marketing Planner para agentes (operación diaria + memoria histórica)
|
|
148
|
+
|
|
149
|
+
El módulo `marketing` cubre el flujo completo del **Marketing Planner** dentro de `crm.badgie.es/marketing-planner`: planificar la semana, generar/actualizar copy, asociar assets, mover estados, registrar publicaciones con su URL final + evidencia y guardar histórico. Tablas: `marketing_campaigns`, `marketing_channels` (LinkedIn/Instagram/TikTok/X/Blog/Email/WhatsApp/YouTube/Pinterest), `marketing_posts`, `marketing_assets`, `marketing_post_assets`, `marketing_publications`, `marketing_status_events`, `marketing_reviews`, `marketing_metrics`.
|
|
150
|
+
|
|
151
|
+
### Workflow diario recomendado para Coach/OpenClaw
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
# 1. ¿Qué toca hoy? Output cronológico con canal, owner, estado.
|
|
155
|
+
badgie-crm marketing planner today --pretty
|
|
156
|
+
|
|
157
|
+
# 2. ¿Qué está bloqueado? Detecta falta de copy, canal, fecha, manual_required, failed.
|
|
158
|
+
badgie-crm marketing planner blockers --pretty
|
|
159
|
+
|
|
160
|
+
# 3. Para cada blocker, decidir:
|
|
161
|
+
|
|
162
|
+
# 3a. Falta copy → genera y actualiza
|
|
163
|
+
badgie-crm marketing posts update vid-testimonio-fmg \
|
|
164
|
+
--copy "Texto generado con CTA y datos del estudio…" \
|
|
165
|
+
--hashtags "BadgieGolf,FederacionMadridGolf,GolfJunior"
|
|
166
|
+
|
|
167
|
+
# 3b. Falta asset → enlaza URL externa o sube uuid existente
|
|
168
|
+
badgie-crm marketing posts assets add vid-testimonio-fmg \
|
|
169
|
+
--asset-id-or-url https://res.cloudinary.com/dzsrcaaas/badgie/test.mp4 \
|
|
170
|
+
--role primary
|
|
171
|
+
|
|
172
|
+
# 3c. Lista para revisión humana
|
|
173
|
+
badgie-crm marketing posts status set vid-testimonio-fmg needs_review \
|
|
174
|
+
--reason "Asset y copy listos; falta validación de Greg"
|
|
175
|
+
|
|
176
|
+
# 4. Cuando el humano publica manualmente, registra evidencia:
|
|
177
|
+
badgie-crm marketing posts publications create vid-testimonio-fmg --channel linkedin
|
|
178
|
+
# (esto crea una marketing_publication con status=pending)
|
|
179
|
+
|
|
180
|
+
badgie-crm marketing publications mark-published <publication-uuid> \
|
|
181
|
+
--external-url "https://www.linkedin.com/posts/badgie_…" \
|
|
182
|
+
--evidence-url "https://res.cloudinary.com/dzsrcaaas/screenshot.png"
|
|
183
|
+
|
|
184
|
+
# 5. Reporte semanal
|
|
185
|
+
badgie-crm marketing planner reports weekly --pretty
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Workflow semanal de planning
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
# 1. Listar campañas activas
|
|
192
|
+
badgie-crm marketing campaigns list --status active --pretty
|
|
193
|
+
|
|
194
|
+
# 2. Crear campaña nueva
|
|
195
|
+
badgie-crm marketing campaigns create \
|
|
196
|
+
--name "Profes Informes Deportivos" \
|
|
197
|
+
--slug profes-informes-q2 \
|
|
198
|
+
--objective "30 demos cualificadas en Q2" \
|
|
199
|
+
--start-date 2026-05-01 --end-date 2026-06-30 \
|
|
200
|
+
--landing-url "https://www.badgie.com/profes-informes-deportivos" \
|
|
201
|
+
--owner-email gregorio@badgie.com --pretty
|
|
202
|
+
|
|
203
|
+
# 3. Crear pieza editorial atada a la campaña
|
|
204
|
+
badgie-crm marketing posts create \
|
|
205
|
+
--title "Reel testimonio profesor tenis" \
|
|
206
|
+
--slug reel-testimonio-tenis-1 \
|
|
207
|
+
--campaign profes-informes-q2 \
|
|
208
|
+
--channel instagram \
|
|
209
|
+
--scheduled-at "2026-05-15T11:00:00+02:00" \
|
|
210
|
+
--copy "Antes lo escribía a mano. Hoy con Badgie…" \
|
|
211
|
+
--cta-label "Solicita demo" \
|
|
212
|
+
--cta-url "https://www.badgie.com/profes-informes-deportivos" \
|
|
213
|
+
--hashtags "BadgieTenis,InformesDeportivos,EscuelaTenis" \
|
|
214
|
+
--owner-email coach@badgie.com --pretty
|
|
215
|
+
# Devuelve la pieza y crea marketing_status_events automático (∅ → draft).
|
|
216
|
+
|
|
217
|
+
# 4. Una pieza, varios canales: cross-post LinkedIn + Instagram
|
|
218
|
+
badgie-crm marketing posts publications create reel-testimonio-tenis-1 --channel linkedin
|
|
219
|
+
badgie-crm marketing posts publications create reel-testimonio-tenis-1 --channel instagram
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### Reglas para el agente
|
|
223
|
+
|
|
224
|
+
- **No publiques nunca automáticamente** sin `--confirm` humano. La V1 NO tiene publicación automática real — `mark-published` solo persiste evidencia de algo ya publicado fuera.
|
|
225
|
+
- **Estados válidos**: `idea | draft | needs_review | approved | scheduled | published | failed | manual_required | cancelled`. Cada cambio se registra solo en `marketing_status_events`.
|
|
226
|
+
- **Slug** se autogenera desde el título si no se pasa. Reusa el slug del post como `utm_content`; el slug de la campaña como `utm_campaign`.
|
|
227
|
+
- **`marketing posts assets add --asset-id-or-url`** acepta UUID (asset existente) o URL externa (auto-crea `marketing_assets` con `storage_provider='external'`). Para upload binario real usa la UI: el CLI no sube archivos.
|
|
228
|
+
- **`marketing publications mark-published`** es idempotente y registra `published_by` con tu user. Antes de marcar, verifica que `external_url` sea pública.
|
|
229
|
+
- **Métricas**: V1 entrada manual con `marketing metrics record --publication-id <uuid> --impressions ... --clicks ...`. No las inventes.
|
|
230
|
+
- **Borrados**: `marketing posts delete --confirm` hace cascade en assets, publications, events, reviews. **Pide confirmación humana**.
|
|
231
|
+
- **Filtros agregados**: `marketing planner reports weekly --week 2026-05-12` te da counts por estado/canal/campaña + publicaciones registradas en esa semana.
|
|
232
|
+
|
|
147
233
|
## Finance OS para agentes
|
|
148
234
|
|
|
149
235
|
Usa estos comandos nuevos antes de hacer queries manuales:
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,55 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.9.0 — 2026-05-08
|
|
4
|
+
|
|
5
|
+
### Added — Marketing Planner workflow completo
|
|
6
|
+
|
|
7
|
+
Reescritura del módulo `marketing` para soportar el nuevo Marketing Planner
|
|
8
|
+
(`crm.badgie.es/marketing-planner`). Pensado para que Coach/OpenClaw planifique
|
|
9
|
+
la semana, mantenga copy/assets, mueva estados y registre evidencia de cada
|
|
10
|
+
publicación. ~30 comandos nuevos sustituyen los 5 antiguos read-only.
|
|
11
|
+
|
|
12
|
+
- **Planner reads**:
|
|
13
|
+
- `marketing planner today` — piezas programadas para hoy con canal/owner/CTA.
|
|
14
|
+
- `marketing planner week [--week YYYY-MM-DD]` — agrupado por día.
|
|
15
|
+
- `marketing planner blockers` — detecta `falta_copy`, `falta_canal`,
|
|
16
|
+
`falta_fecha`, `manual_required`, `failed`, `needs_review`.
|
|
17
|
+
- `marketing planner reports weekly [--week YYYY-MM-DD]` — counts por estado,
|
|
18
|
+
canal, campaña + publicaciones registradas.
|
|
19
|
+
- **Campañas**: `campaigns list|get|create|update|delete`. UTM canónico
|
|
20
|
+
derivado de `slug` por defecto.
|
|
21
|
+
- **Canales**: `channels list|create|update`. Seed inicial con LinkedIn,
|
|
22
|
+
Instagram, TikTok, X, Blog, Email, WhatsApp, YouTube, Pinterest.
|
|
23
|
+
- **Posts**: `posts list|get|create|update|delete` + `posts status set` con
|
|
24
|
+
histórico append-only en `marketing_status_events`.
|
|
25
|
+
- **Post-assets**: `posts assets list|add|remove`. `add --asset-id-or-url`
|
|
26
|
+
acepta UUID o URL externa (auto-crea `marketing_assets` con
|
|
27
|
+
`storage_provider='external'`).
|
|
28
|
+
- **Publicaciones** (una pieza × N canales):
|
|
29
|
+
- `publications list`, `posts publications list|create`,
|
|
30
|
+
`publications update`, `publications mark-published` (atajo con
|
|
31
|
+
`--external-url` y `--evidence-url` que setea `published_at` y
|
|
32
|
+
`published_by` automáticamente).
|
|
33
|
+
- **Reviews**: `reviews request|resolve` con estados `requested|approved|
|
|
34
|
+
changes_requested|rejected`.
|
|
35
|
+
- **Histórico**: `posts events list <post-id>` ordenado descendente.
|
|
36
|
+
- **Métricas**: `metrics list`, `metrics record --publication-id …
|
|
37
|
+
--impressions … --clicks … --source manual|api|zapier`.
|
|
38
|
+
|
|
39
|
+
### Migration required
|
|
40
|
+
|
|
41
|
+
Aplicar `supabase-marketing-planner-migration.sql` en Supabase. **Es destructiva**:
|
|
42
|
+
hace `DROP TABLE CASCADE` de las 5 tablas legacy del módulo marketing antiguo
|
|
43
|
+
(`marketing_campaigns`, `social_media_posts`, `marketing_assets`,
|
|
44
|
+
`marketing_metrics`, `marketing_leads`) y crea 9 nuevas. La página `/marketing`
|
|
45
|
+
y sus componentes/modales han sido eliminados — usar `/marketing-planner`.
|
|
46
|
+
|
|
47
|
+
### Removed
|
|
48
|
+
|
|
49
|
+
- `marketing leads list` (la tabla `marketing_leads` ya no existe; la
|
|
50
|
+
atribución de leads se rehará en otra iteración).
|
|
51
|
+
- 4 comandos read-only originales sustituidos por la nueva familia completa.
|
|
52
|
+
|
|
3
53
|
## 0.8.0 — 2026-05-06
|
|
4
54
|
|
|
5
55
|
### Added — Federations workflow para agentes
|
package/README.md
CHANGED
|
@@ -153,6 +153,51 @@ badgie-crm docs finance --json
|
|
|
153
153
|
badgie-crm docs finance
|
|
154
154
|
```
|
|
155
155
|
|
|
156
|
+
## Marketing Planner
|
|
157
|
+
|
|
158
|
+
`marketing` cubre el flujo completo del Marketing Planner (`crm.badgie.es/marketing-planner`): planificar la semana, generar copy, asociar assets, mover estados, registrar publicaciones y medir.
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
# Operación diaria
|
|
162
|
+
badgie-crm marketing planner today --pretty
|
|
163
|
+
badgie-crm marketing planner blockers --pretty
|
|
164
|
+
badgie-crm marketing planner reports weekly --pretty
|
|
165
|
+
|
|
166
|
+
# Planning semanal
|
|
167
|
+
badgie-crm marketing campaigns create \
|
|
168
|
+
--name "Profes Informes Q2" --slug profes-informes-q2 \
|
|
169
|
+
--objective "30 demos cualificadas" --start-date 2026-05-01 --end-date 2026-06-30 \
|
|
170
|
+
--landing-url "https://www.badgie.com/profes-informes-deportivos" --pretty
|
|
171
|
+
|
|
172
|
+
badgie-crm marketing posts create \
|
|
173
|
+
--title "Reel testimonio profesor tenis" \
|
|
174
|
+
--campaign profes-informes-q2 --channel instagram \
|
|
175
|
+
--scheduled-at "2026-05-15T11:00:00+02:00" \
|
|
176
|
+
--copy "Antes lo escribía a mano. Hoy con Badgie…" \
|
|
177
|
+
--cta-label "Solicita demo" --cta-url "https://www.badgie.com/profes-informes-deportivos" \
|
|
178
|
+
--hashtags "BadgieTenis,InformesDeportivos" --owner-email coach@badgie.com --pretty
|
|
179
|
+
|
|
180
|
+
# Cross-post: una pieza, dos canales
|
|
181
|
+
badgie-crm marketing posts publications create reel-testimonio-profesor-tenis --channel linkedin
|
|
182
|
+
badgie-crm marketing posts publications create reel-testimonio-profesor-tenis --channel instagram
|
|
183
|
+
|
|
184
|
+
# Estado y assets
|
|
185
|
+
badgie-crm marketing posts status set reel-testimonio-profesor-tenis needs_review --reason "Listo para Greg"
|
|
186
|
+
badgie-crm marketing posts assets add reel-testimonio-profesor-tenis \
|
|
187
|
+
--asset-id-or-url https://res.cloudinary.com/dzsrcaaas/test.mp4 --role primary
|
|
188
|
+
|
|
189
|
+
# Tras publicar manualmente: registrar evidencia
|
|
190
|
+
badgie-crm marketing publications mark-published <publication-uuid> \
|
|
191
|
+
--external-url "https://www.linkedin.com/posts/badgie_..." \
|
|
192
|
+
--evidence-url "https://res.cloudinary.com/dzsrcaaas/screenshot.png"
|
|
193
|
+
|
|
194
|
+
# Métricas (V1 manual)
|
|
195
|
+
badgie-crm marketing metrics record --publication-id <uuid> \
|
|
196
|
+
--impressions 5400 --clicks 120 --ctr 0.022 --likes 87 --source manual --pretty
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Workflow Coach completo en `cli/AGENTS.md` → sección "Marketing Planner para agentes".
|
|
200
|
+
|
|
156
201
|
## Top Clients
|
|
157
202
|
|
|
158
203
|
Top Clients usa `client_monthly_reviews` para las revisiones mensuales. La pantalla actual no tiene una tabla separada de preguntas/configuración: las preguntas del modal son columnas de esa tabla (`notes`, `needs`, `testimonials`, `risk_level`, `next_actions`, `status`, `reviewed_at`) y el contacto semanal vive en `metadata.contact_log`.
|