chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,148 @@
|
||||
# Claude Jobs Scraper
|
||||
|
||||
Script para encontrar trabajos relacionados con Claude Code y Anthropic Claude utilizando múltiples fuentes y APIs profesionales.
|
||||
|
||||
## 🎯 Características
|
||||
|
||||
- **APIs Profesionales**: RapidAPI Jobs, Google Jobs (SerpAPI)
|
||||
- **Scraping Tradicional**: GitHub, YCombinator, WeWorkRemotely (fallback)
|
||||
- **Filtrado Estricto**: Solo trabajos que mencionen "Claude" explícitamente
|
||||
- **Datos Estructurados**: JSON compatible con la web existente
|
||||
- **Rate Limiting**: Manejo responsable de APIs
|
||||
|
||||
## 📋 Requisitos
|
||||
|
||||
### Opción 1: APIs Profesionales (Recomendado)
|
||||
|
||||
1. **RapidAPI Jobs API** - Acceso a 200M+ trabajos de LinkedIn, Indeed, Glassdoor
|
||||
- Regístrate en: https://rapidapi.com/letscrape-6bRBa3QguO5/api/jobs-search-realtime-data-api/
|
||||
- Plan gratuito: 100 requests/mes
|
||||
- Plan pagado: Desde $10/mes
|
||||
|
||||
2. **SerpAPI (Google Jobs)** - Búsqueda semántica avanzada
|
||||
- Regístrate en: https://serpapi.com/
|
||||
- Plan gratuito: 100 búsquedas/mes
|
||||
- Plan pagado: Desde $50/mes
|
||||
|
||||
### Opción 2: Solo Scraping Gratuito
|
||||
|
||||
- No requiere APIs pagadas
|
||||
- Resultados limitados debido a restricciones de sitios web
|
||||
|
||||
## ⚙️ Configuración
|
||||
|
||||
1. **Copia el archivo de configuración**:
|
||||
```bash
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
2. **Agrega tus API keys en `.env`**:
|
||||
```bash
|
||||
# Para mejores resultados
|
||||
RAPIDAPI_KEY=tu_clave_rapidapi
|
||||
SERPAPI_KEY=tu_clave_serpapi
|
||||
|
||||
# Opcional
|
||||
GITHUB_TOKEN=tu_token_github
|
||||
```
|
||||
|
||||
3. **Instala dependencias**:
|
||||
```bash
|
||||
pip install requests python-dotenv
|
||||
```
|
||||
|
||||
## 🚀 Uso
|
||||
|
||||
```bash
|
||||
python generate_claude_jobs.py
|
||||
```
|
||||
|
||||
### Flujo de Funcionamiento:
|
||||
|
||||
1. **APIs Profesionales** (si están configuradas)
|
||||
- RapidAPI: Busca en LinkedIn, Indeed, Glassdoor, etc.
|
||||
- Google Jobs: Búsqueda semántica avanzada
|
||||
|
||||
2. **Scraping Tradicional** (fallback si no hay APIs)
|
||||
- GitHub Issues/Discussions
|
||||
- YCombinator Who's Hiring
|
||||
- WeWorkRemotely RSS
|
||||
|
||||
3. **Generación del JSON**:
|
||||
- Archivo: `docs/claude-jobs.json`
|
||||
- Estructura compatible con la web existente
|
||||
|
||||
## 📊 Datos Generados
|
||||
|
||||
Cada trabajo incluye:
|
||||
|
||||
```json
|
||||
{
|
||||
"company": "Anthropic",
|
||||
"company_icon": "https://anthropic.com/favicon.ico",
|
||||
"location": "Remote",
|
||||
"description": "Senior AI Developer to enhance Claude Code capabilities...",
|
||||
"job_link": "https://anthropic.com/careers/claude-developer",
|
||||
"source": "RapidAPI Jobs",
|
||||
"date_posted": "2025-09-10T10:00:00Z",
|
||||
"salary": 150000
|
||||
}
|
||||
```
|
||||
|
||||
## 🔧 Filtros Aplicados
|
||||
|
||||
El script usa filtrado **ultra-estricto**:
|
||||
|
||||
- **Debe mencionar "Claude"** explícitamente
|
||||
- Términos específicos: `claude code`, `anthropic claude`, `claude ai`, etc.
|
||||
- Validación de contexto laboral: `hiring`, `position`, `engineer`, etc.
|
||||
|
||||
## 📈 Resultados Esperados
|
||||
|
||||
Dado que Claude Code es muy nuevo (2025), los resultados serán limitados pero precisos:
|
||||
|
||||
- **Con APIs**: 5-20 trabajos relevantes potenciales
|
||||
- **Solo Scraping**: 0-5 trabajos (debido a restricciones)
|
||||
- **Calidad**: 100% relevantes (menciones específicas de Claude)
|
||||
|
||||
## 🔄 Automatización
|
||||
|
||||
Para ejecutar periódicamente:
|
||||
|
||||
```bash
|
||||
# Cron job diario a las 9 AM
|
||||
0 9 * * * cd /path/to/project && python generate_claude_jobs.py
|
||||
|
||||
# GitHub Actions (recomendado)
|
||||
# Ver ejemplo en .github/workflows/
|
||||
```
|
||||
|
||||
## ⚠️ Limitaciones
|
||||
|
||||
1. **Claude Code es nuevo**: Pocas ofertas laborales específicas aún
|
||||
2. **APIs pagadas**: Mejores resultados requieren suscripciones
|
||||
3. **Rate limits**: Respetar límites de APIs para evitar bloqueos
|
||||
4. **Falsos positivos**: Filtrado estricto puede omitir trabajos relevantes
|
||||
|
||||
## 🆘 Troubleshooting
|
||||
|
||||
### Sin resultados:
|
||||
- ✅ Verifica API keys en `.env`
|
||||
- ✅ Revisa límites de rate en las APIs
|
||||
- ✅ Claude Code es muy específico - resultados limitados son normales
|
||||
|
||||
### Errores de API:
|
||||
- ✅ Verifica saldo en RapidAPI/SerpAPI
|
||||
- ✅ Revisa formato de API keys
|
||||
- ✅ Usa VPN si hay restricciones geográficas
|
||||
|
||||
## 🔮 Futuro
|
||||
|
||||
A medida que Claude Code se popularice (2025-2026):
|
||||
- Más trabajos específicos aparecerán
|
||||
- Términos de búsqueda se pueden expandir
|
||||
- APIs especializadas en AI jobs pueden surgir
|
||||
|
||||
---
|
||||
|
||||
**Resultado**: JSON estructurado en `docs/claude-jobs.json` listo para consumo por la web.
|
||||
@@ -0,0 +1,60 @@
|
||||
# 🚀 Deployment Guide
|
||||
|
||||
This project is configured for automatic deployment to Vercel from the `main` branch.
|
||||
|
||||
## GitHub Actions Setup
|
||||
|
||||
### Required Secrets
|
||||
|
||||
Add these secrets to your GitHub repository settings:
|
||||
|
||||
1. **VERCEL_TOKEN**: Your Vercel account token
|
||||
- Go to [Vercel Account Settings](https://vercel.com/account/tokens)
|
||||
- Create a new token with appropriate permissions
|
||||
- Add as `VERCEL_TOKEN` in GitHub Secrets
|
||||
|
||||
2. **VERCEL_ORG_ID**: Your Vercel organization ID
|
||||
- Run `vercel link` in your project
|
||||
- Copy the `orgId` from `.vercel/project.json`
|
||||
- Add as `VERCEL_ORG_ID` in GitHub Secrets
|
||||
|
||||
3. **VERCEL_PROJECT_ID**: Your Vercel project ID
|
||||
- Run `vercel link` in your project
|
||||
- Copy the `projectId` from `.vercel/project.json`
|
||||
- Add as `VERCEL_PROJECT_ID` in GitHub Secrets
|
||||
|
||||
### Getting the IDs
|
||||
|
||||
Run these commands in your project root:
|
||||
|
||||
```bash
|
||||
# Link to Vercel project
|
||||
vercel link
|
||||
|
||||
# Get your IDs from the generated file
|
||||
cat .vercel/project.json
|
||||
```
|
||||
|
||||
## Deployment Flow
|
||||
|
||||
- ✅ **Push to main** → Automatic production deploy to aitmpl.com
|
||||
- ✅ **Other branches** → Manual deploy only (no auto-deploy)
|
||||
- ✅ **Pull Requests** → No deployment
|
||||
|
||||
## Manual Deployment
|
||||
|
||||
For testing other branches:
|
||||
|
||||
```bash
|
||||
# Deploy current branch to preview URL
|
||||
vercel
|
||||
|
||||
# Deploy current branch to production
|
||||
vercel --prod
|
||||
```
|
||||
|
||||
## Domain Configuration
|
||||
|
||||
The main branch deploys to the custom domain: **aitmpl.com**
|
||||
|
||||
Configured in Vercel dashboard under Project Settings → Domains.
|
||||
@@ -0,0 +1,313 @@
|
||||
# Discord Bot Setup - Vercel Serverless
|
||||
|
||||
Discord bot para claude-code-templates integrado con Vercel Functions usando webhooks. Este enfoque es más eficiente que mantener un bot tradicional con conexión persistente.
|
||||
|
||||
## 🚀 Ventajas de la Arquitectura Serverless
|
||||
|
||||
- ✅ **Sin servidor permanente**: Solo se ejecuta cuando hay interacciones
|
||||
- ✅ **Escalabilidad automática**: Vercel maneja el scaling
|
||||
- ✅ **Integrado con tu infraestructura**: Mismo proyecto, mismo deployment
|
||||
- ✅ **Costo reducido**: Solo pagas por ejecuciones reales
|
||||
- ✅ **Cache inteligente**: Reutiliza datos entre invocaciones
|
||||
|
||||
## 📋 Comandos Disponibles
|
||||
|
||||
### Comandos Básicos (Fase 1)
|
||||
|
||||
1. **`/search <query> [type]`** - Buscar componentes
|
||||
2. **`/info <name> [type]`** - Información detallada
|
||||
3. **`/install <name> [type]`** - Comando de instalación
|
||||
4. **`/popular <type> [limit]`** - Componentes más populares
|
||||
5. **`/random <type>`** - Descubre componentes aleatorios
|
||||
|
||||
## 🛠️ Setup Paso a Paso
|
||||
|
||||
### 1. Crear Discord Application
|
||||
|
||||
1. Ve a [Discord Developer Portal](https://discord.com/developers/applications)
|
||||
2. Click "New Application" y dale un nombre
|
||||
3. En la sección "General Information":
|
||||
- Copia el **Application ID** → Esto es tu `DISCORD_APP_ID`
|
||||
4. Ve a la sección "Bot":
|
||||
- Click "Add Bot"
|
||||
- Copia el **Bot Token** → Esto es tu `DISCORD_BOT_TOKEN`
|
||||
- Habilita "Message Content Intent" si lo necesitas
|
||||
5. En "General Information" nuevamente:
|
||||
- Copia el **Public Key** → Esto es tu `DISCORD_PUBLIC_KEY`
|
||||
|
||||
### 2. Configurar Variables de Entorno
|
||||
|
||||
#### En Local (para testing)
|
||||
|
||||
Crea/actualiza tu archivo `.env`:
|
||||
|
||||
```bash
|
||||
# Discord Bot Configuration
|
||||
DISCORD_APP_ID=123456789012345678
|
||||
DISCORD_BOT_TOKEN=MTIzNDU2Nzg5MDEyMzQ1Njc4.AbCdEf.GhIjKlMnOpQrStUvWxYz
|
||||
DISCORD_PUBLIC_KEY=abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890
|
||||
DISCORD_GUILD_ID=987654321098765432 # Opcional, para testing en un server específico
|
||||
|
||||
# API Configuration
|
||||
COMPONENTS_API_URL=https://aitmpl.com/components.json
|
||||
```
|
||||
|
||||
#### En Vercel (para producción)
|
||||
|
||||
1. Ve a tu proyecto en Vercel Dashboard
|
||||
2. Settings → Environment Variables
|
||||
3. Agrega estas variables:
|
||||
- `DISCORD_APP_ID`
|
||||
- `DISCORD_BOT_TOKEN`
|
||||
- `DISCORD_PUBLIC_KEY`
|
||||
- `COMPONENTS_API_URL` (opcional, por defecto usa aitmpl.com)
|
||||
|
||||
### 3. Instalar Dependencias
|
||||
|
||||
```bash
|
||||
npm install
|
||||
```
|
||||
|
||||
Esto instalará:
|
||||
- `discord-interactions` - Para verificar requests de Discord
|
||||
- `axios` - Para cargar components.json
|
||||
- `dotenv` - Para variables de entorno
|
||||
|
||||
### 4. Registrar Comandos con Discord
|
||||
|
||||
```bash
|
||||
npm run discord:register
|
||||
```
|
||||
|
||||
Output esperado:
|
||||
```
|
||||
📦 Registering Discord slash commands...
|
||||
|
||||
Registering to guild: 987654321098765432
|
||||
|
||||
✅ Successfully registered 5 commands!
|
||||
|
||||
📝 Registered commands:
|
||||
1. /search - Search for components by keyword
|
||||
2. /info - Get detailed information about a specific component
|
||||
3. /install - Get the installation command for a component
|
||||
4. /popular - View the most popular components by download count
|
||||
5. /random - Discover a random component
|
||||
```
|
||||
|
||||
### 5. Deploy a Vercel
|
||||
|
||||
```bash
|
||||
vercel --prod
|
||||
```
|
||||
|
||||
O usa el deployment automático de GitHub si lo tienes configurado.
|
||||
|
||||
Después del deploy, copia tu URL de producción:
|
||||
```
|
||||
https://your-project.vercel.app
|
||||
```
|
||||
|
||||
### 6. Configurar Interactions Endpoint en Discord
|
||||
|
||||
1. Ve a Discord Developer Portal → Tu aplicación
|
||||
2. Ve a "General Information"
|
||||
3. En **Interactions Endpoint URL**, pega:
|
||||
```
|
||||
https://your-project.vercel.app/api/discord/interactions
|
||||
```
|
||||
4. Click "Save Changes"
|
||||
|
||||
Discord intentará verificar la URL enviando un PING. Si todo está bien configurado, verás un ✅.
|
||||
|
||||
### 7. Invitar el Bot a tu Servidor
|
||||
|
||||
1. En Discord Developer Portal → OAuth2 → URL Generator
|
||||
2. Selecciona scopes:
|
||||
- ✅ `bot`
|
||||
- ✅ `applications.commands`
|
||||
3. Selecciona permisos del bot:
|
||||
- ✅ Send Messages
|
||||
- ✅ Embed Links
|
||||
- ✅ Read Message History
|
||||
4. Copia la URL generada y ábrela en tu navegador
|
||||
5. Selecciona tu servidor y autoriza
|
||||
|
||||
## 🧪 Testing Local
|
||||
|
||||
Para testear localmente antes de hacer deploy:
|
||||
|
||||
```bash
|
||||
# 1. Instala Vercel CLI si no lo tienes
|
||||
npm i -g vercel
|
||||
|
||||
# 2. Inicia el servidor de desarrollo
|
||||
vercel dev
|
||||
```
|
||||
|
||||
Esto correrá en `http://localhost:3000`
|
||||
|
||||
Para que Discord pueda enviar webhooks a tu localhost, necesitas un túnel:
|
||||
|
||||
```bash
|
||||
# Opción 1: ngrok
|
||||
ngrok http 3000
|
||||
|
||||
# Opción 2: Vercel dev con --listen
|
||||
vercel dev --listen 3000
|
||||
```
|
||||
|
||||
Usa la URL pública del túnel en Discord Interactions Endpoint.
|
||||
|
||||
## 📁 Estructura del Proyecto
|
||||
|
||||
```
|
||||
api/
|
||||
└── discord/
|
||||
├── interactions.js # Endpoint principal de webhooks
|
||||
├── register-commands.js # Script para registrar comandos
|
||||
├── handlers/ # Handlers de cada comando
|
||||
│ ├── search.js
|
||||
│ ├── info.js
|
||||
│ ├── install.js
|
||||
│ ├── popular.js
|
||||
│ └── random.js
|
||||
└── utils/ # Utilidades compartidas
|
||||
├── componentsLoader.js # Cache de components.json
|
||||
└── embedBuilder.js # Generador de embeds
|
||||
```
|
||||
|
||||
## 🔍 Cómo Funciona
|
||||
|
||||
### Flujo de una Interacción
|
||||
|
||||
1. Usuario ejecuta `/search security` en Discord
|
||||
2. Discord envía POST a `https://your-domain.vercel.app/api/discord/interactions`
|
||||
3. Vercel ejecuta `api/discord/interactions.js`
|
||||
4. El handler verifica la firma (seguridad)
|
||||
5. Identifica el comando y llama al handler correspondiente
|
||||
6. Handler carga components.json (desde cache si existe)
|
||||
7. Ejecuta la búsqueda y genera un embed
|
||||
8. Retorna respuesta a Discord
|
||||
9. Discord muestra el resultado al usuario
|
||||
|
||||
### Cache de Componentes
|
||||
|
||||
El sistema mantiene `components.json` en memoria por 5 minutos:
|
||||
- Primera request: Descarga desde aitmpl.com
|
||||
- Siguientes requests (< 5 min): Usa cache
|
||||
- Después de 5 min: Actualiza automáticamente
|
||||
|
||||
Esto reduce latencia y requests a la API.
|
||||
|
||||
## 🐛 Troubleshooting
|
||||
|
||||
### Error: "Invalid request signature"
|
||||
|
||||
**Causa**: La PUBLIC_KEY no está configurada o es incorrecta
|
||||
|
||||
**Solución**:
|
||||
1. Verifica que `DISCORD_PUBLIC_KEY` esté en las variables de entorno de Vercel
|
||||
2. Asegúrate de copiar la Public Key correcta del Developer Portal
|
||||
3. Redeploy después de cambiar variables de entorno
|
||||
|
||||
### Error: Discord no puede verificar la URL
|
||||
|
||||
**Causa**: El endpoint no responde correctamente al PING
|
||||
|
||||
**Solución**:
|
||||
1. Verifica que el deployment fue exitoso
|
||||
2. Prueba manualmente: `curl https://your-domain.vercel.app/api/discord/interactions`
|
||||
3. Revisa los logs en Vercel Dashboard → Functions
|
||||
|
||||
### Comandos no aparecen en Discord
|
||||
|
||||
**Causa**: No se registraron o falta scope
|
||||
|
||||
**Solución**:
|
||||
1. Ejecuta `npm run discord:register` nuevamente
|
||||
2. Si usaste `DISCORD_GUILD_ID`, los comandos solo aparecen en ese server
|
||||
3. Quita el bot del server y vuelve a invitarlo con el scope `applications.commands`
|
||||
4. Espera unos minutos (comandos globales pueden tardar hasta 1 hora)
|
||||
|
||||
### Bot no responde
|
||||
|
||||
**Causa**: Error en el handler o falta de permisos
|
||||
|
||||
**Solución**:
|
||||
1. Revisa logs en Vercel Dashboard → Functions
|
||||
2. Verifica que el bot tenga permisos de "Send Messages" y "Embed Links"
|
||||
3. Prueba con un comando simple como `/random`
|
||||
|
||||
### "Components data not loaded"
|
||||
|
||||
**Causa**: No puede acceder a components.json
|
||||
|
||||
**Solución**:
|
||||
1. Verifica que `https://aitmpl.com/components.json` sea accesible
|
||||
2. Revisa la variable `COMPONENTS_API_URL` si usas una URL custom
|
||||
3. Chequea los logs de Vercel para ver el error específico
|
||||
|
||||
## 📊 Monitoreo
|
||||
|
||||
### Vercel Dashboard
|
||||
|
||||
Ve a tu proyecto en Vercel → Functions para ver:
|
||||
- Invocaciones totales
|
||||
- Errores
|
||||
- Tiempo de respuesta
|
||||
- Logs en tiempo real
|
||||
|
||||
### Discord Logs
|
||||
|
||||
Cada comando registra en consola:
|
||||
```
|
||||
🔹 Command received: /search
|
||||
✅ Components data loaded
|
||||
```
|
||||
|
||||
Revisa estos logs en Vercel Functions.
|
||||
|
||||
## 🚀 Próximos Pasos
|
||||
|
||||
### Fase 2: Comandos Interactivos
|
||||
- `/stats` - Estadísticas de la plataforma
|
||||
- `/new` - Componentes recientes
|
||||
- `/daily` - Componente del día
|
||||
|
||||
### Fase 3: Botones y Menús
|
||||
- Agregar botones de acción a los embeds
|
||||
- Select menus para filtros avanzados
|
||||
- Modal forms para búsqueda compleja
|
||||
|
||||
### Fase 4: Integración Avanzada
|
||||
- Tracking de instalaciones vía Discord
|
||||
- Notificaciones automáticas de releases
|
||||
- Sistema de votación y reviews
|
||||
|
||||
## 💡 Tips y Mejores Prácticas
|
||||
|
||||
1. **Testing**: Usa `DISCORD_GUILD_ID` para testing rápido en tu server
|
||||
2. **Production**: Quita `DISCORD_GUILD_ID` para comandos globales
|
||||
3. **Cache**: Ajusta `CACHE_DURATION` en `componentsLoader.js` según tus necesidades
|
||||
4. **Errores**: Todos los errores retornan embeds ephemeral (solo visibles para el usuario)
|
||||
5. **Logs**: Los logs en Vercel te ayudan a debuggear problemas en producción
|
||||
|
||||
## 📚 Recursos
|
||||
|
||||
- [Discord Developer Portal](https://discord.com/developers/applications)
|
||||
- [Discord Interactions Documentation](https://discord.com/developers/docs/interactions/receiving-and-responding)
|
||||
- [Vercel Functions Documentation](https://vercel.com/docs/functions)
|
||||
- [discord-interactions npm](https://www.npmjs.com/package/discord-interactions)
|
||||
|
||||
## 🤝 Soporte
|
||||
|
||||
Si tienes problemas:
|
||||
1. Revisa los logs en Vercel Dashboard
|
||||
2. Verifica todas las variables de entorno
|
||||
3. Prueba los endpoints manualmente con curl
|
||||
4. Abre un issue en GitHub con los logs relevantes
|
||||
|
||||
---
|
||||
|
||||
**¡Listo!** Tu bot de Discord está corriendo en Vercel Functions 🎉
|
||||
@@ -0,0 +1,193 @@
|
||||
# Growth Kit - Content Marketing Automation Commands
|
||||
|
||||
## Overview
|
||||
|
||||
This PR adds **Growth Kit** - a comprehensive content marketing automation toolkit that helps developers distribute blog content across social media platforms with a single command.
|
||||
|
||||
Built by [Kanaeru Labs](https://www.kanaeru.ai) while building Kanaeru AI, these commands solve the time-consuming problem of manually converting blog posts into platform-specific content.
|
||||
|
||||
## What's Included
|
||||
|
||||
### Marketing Commands (5 new commands)
|
||||
|
||||
**New Category:** `commands/marketing/`
|
||||
|
||||
1. **`publisher-x.md`** - X/Twitter Thread Generator
|
||||
- Generates copy-pastable X threads from any content source
|
||||
- **3 format options**: Thread (5-8 posts), Single Long, Single Short
|
||||
- Supports multi-language (EN/JA)
|
||||
- Creates interactive HTML preview with copy buttons
|
||||
- Auto-opens X.com for posting
|
||||
|
||||
2. **`publisher-linkedin.md`** - LinkedIn Post Generator
|
||||
- Creates professional LinkedIn posts via API
|
||||
- Automatic media attachment (images/PDFs)
|
||||
- Handles OAuth flow automatically
|
||||
- Works with zero dependencies (bash + curl only)
|
||||
|
||||
3. **`publisher-medium.md`** - Medium Article Converter
|
||||
- Converts blog posts to Medium-ready HTML
|
||||
- Image upload markers with file paths
|
||||
- One-click copy from HTML preview
|
||||
- Opens Medium editor automatically
|
||||
|
||||
4. **`publisher-devto.md`** - Dev.to RSS Generator
|
||||
- Generates complete RSS feed from all blog posts
|
||||
- One-time setup for automatic syndication
|
||||
- All future posts auto-import to Dev.to
|
||||
|
||||
5. **`publisher-all.md`** - All-Platform Generator
|
||||
- Runs all 4 publishers in one command
|
||||
- Saves ~2 hours of manual work per post
|
||||
- Opens all previews in browser tabs
|
||||
|
||||
### Setup Commands (1 new command)
|
||||
|
||||
**Existing Category:** `commands/setup/`
|
||||
|
||||
6. **`vercel-analytics.md`** - Vercel Analytics Setup
|
||||
- Auto-installs @vercel/analytics and @vercel/speed-insights
|
||||
- Configures React/Vite apps
|
||||
- Creates vercel.json for SPA routing
|
||||
- Fixes 404 errors on Vercel deployment
|
||||
|
||||
## Key Features
|
||||
|
||||
✅ **Universal Input Support**
|
||||
- Blog post slugs (e.g., `2025-10-06-my-post`)
|
||||
- File paths (markdown, PDF, HTML, text)
|
||||
- URLs (fetches and converts)
|
||||
|
||||
✅ **Zero Dependencies**
|
||||
- Works in ANY repo type (Python, Rust, Go, JavaScript, etc.)
|
||||
- Uses only Claude's built-in tools (Read, Write, Bash, Glob, WebFetch)
|
||||
- No Node.js/npm required (except for Vercel Analytics)
|
||||
|
||||
✅ **Multi-Language Support**
|
||||
- English and Japanese (EN/JA)
|
||||
- Auto-detects language from content/path
|
||||
- Platform-specific tone and formatting
|
||||
|
||||
✅ **Production-Ready**
|
||||
- Tested at Kanaeru Labs in production
|
||||
- Handles LinkedIn API authentication
|
||||
- Proper character counting for X/Twitter
|
||||
- HTML preview files with copy buttons
|
||||
|
||||
## Use Cases
|
||||
|
||||
**For Blog Authors:**
|
||||
```bash
|
||||
# Distribute a blog post across all platforms
|
||||
/publisher-all my-latest-post
|
||||
|
||||
# Generate just an X thread
|
||||
/publisher-x my-latest-post
|
||||
|
||||
# Create LinkedIn post with custom image
|
||||
/publisher-linkedin my-latest-post en diagram.png
|
||||
```
|
||||
|
||||
**For Content Marketers:**
|
||||
```bash
|
||||
# Convert any URL to X thread
|
||||
/publisher-x https://competitor.com/article
|
||||
|
||||
# Generate Medium article from PDF
|
||||
/publisher-medium whitepaper.pdf
|
||||
|
||||
# Set up Dev.to auto-syndication
|
||||
/publisher-devto
|
||||
```
|
||||
|
||||
**For Developers:**
|
||||
```bash
|
||||
# Add analytics to React app
|
||||
/vercel-analytics
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
All commands have been:
|
||||
- ✅ Tested in production at Kanaeru Labs
|
||||
- ✅ Validated across multiple blog structures
|
||||
- ✅ Verified to work in Python, Rust, Go, and JavaScript repos
|
||||
- ✅ Tested with both English and Japanese content
|
||||
|
||||
## Benefits to the Community
|
||||
|
||||
**Time Savings:**
|
||||
- X thread generation: ~30 minutes → 2 minutes
|
||||
- All platforms: ~2 hours → 5 minutes
|
||||
- One-time Dev.to setup enables automatic future syndication
|
||||
|
||||
**Developer-Friendly:**
|
||||
- No configuration required (auto-detects blog structure)
|
||||
- Works universally (any repo type, any framework)
|
||||
- Clear error messages and helpful prompts
|
||||
|
||||
**Production Quality:**
|
||||
- Proper API authentication handling
|
||||
- Character limit validation
|
||||
- Multi-language support
|
||||
- HTML previews for easy copying
|
||||
|
||||
## Integration Notes
|
||||
|
||||
**File Locations:**
|
||||
- Marketing commands: `cli-tool/components/commands/marketing/`
|
||||
- Analytics command: `cli-tool/components/commands/setup/`
|
||||
|
||||
**Frontmatter Format:**
|
||||
All commands include proper frontmatter:
|
||||
```yaml
|
||||
---
|
||||
allowed-tools: Read, Write, Bash, Glob, WebFetch
|
||||
argument-hint: <input> [lang]
|
||||
description: [Clear description]
|
||||
---
|
||||
```
|
||||
|
||||
**Auto-Discovery:**
|
||||
Commands will be automatically discovered by the `scripts/generate_components_json.py` script when scanning the commands directory.
|
||||
|
||||
## Screenshots
|
||||
|
||||
Available at: https://github.com/kanaerulabs/growth-kit
|
||||
|
||||
See the Growth Kit README for visual examples of:
|
||||
- X thread preview with 3 format tabs
|
||||
- LinkedIn post with PDF attachment
|
||||
- Medium article preview
|
||||
- Dev.to RSS feed structure
|
||||
|
||||
## Attribution
|
||||
|
||||
**Author:** Kanaeru Labs (https://www.kanaeru.ai)
|
||||
**Source Repository:** https://github.com/kanaerulabs/growth-kit
|
||||
**License:** MIT
|
||||
**Contact:** support@kanaeru.ai
|
||||
|
||||
## Related Resources
|
||||
|
||||
- Growth Kit Documentation: https://github.com/kanaerulabs/growth-kit
|
||||
- Example Blog Posts: See Growth Kit repo for real examples
|
||||
- LinkedIn API Setup: https://www.linkedin.com/developers/apps
|
||||
|
||||
---
|
||||
|
||||
## Why This Matters
|
||||
|
||||
Content distribution is a major bottleneck for developer bloggers and technical content creators. These commands solve real pain points we experienced while building Kanaeru AI:
|
||||
|
||||
- **Manual X thread creation** - repetitive and time-consuming
|
||||
- **Platform-specific formatting** - each platform has different requirements
|
||||
- **Character counting** - easy to exceed limits
|
||||
- **Media attachment** - LinkedIn API complexity
|
||||
- **Syndication setup** - Dev.to RSS configuration
|
||||
|
||||
Growth Kit automates all of this with Claude Code's built-in capabilities.
|
||||
|
||||
---
|
||||
|
||||
**We believe these commands will be valuable to the Claude Code community and help developers share their technical content more effectively.**
|
||||
Reference in New Issue
Block a user