🍴

FORK_REPORT.md — GrowthBot API

Preparación para open source · 2026-06-18 · Pipeline etapa 1/2

✓ Fork limpio MIT FastAPI · Python 3.11
Fuente
/home/alvaro/projects/growthbot-api
Repositorio privado CULTIVA IA
Destino staging
/home/alvaro/opensource-staging/growthbot-api
Listo para publicar en GitHub
Fecha
2026-06-18
18:34 UTC
Licencia
MIT
Uso comercial permitido
📁
94
archivos copiados
🗑️
11
archivos eliminados
🔑
23
secretos extraídos
🔄
47
referencias internas reemplazadas
📝
7
archivos modificados
🗑️ Archivos eliminados (11)
📄 .env.production 23 secretos · credenciales reales
📄 .env.local variables de entorno local
📄 .env.staging entorno de staging interno
📄 credentials/service-account.json Google Cloud service account
📄 credentials/supabase-admin.json credenciales Supabase admin
📄 certs/server.key clave privada SSL
📄 certs/server.pem certificado privado
📄 .claude/settings.json configuración privada Claude Code
📄 sessions/ directorio de sesiones activas
📄 dist/*.map 8 source maps (exponen rutas internas)
🔑 Secretos extraídos → .env.example (23)
Variable Tipo Archivo origen Acción
DATABASE_URL DB connection docker-compose.yml:18 Parametrizado con ${DATABASE_URL}
OPENAI_API_KEY API key config/settings.py:34 Reemplazado → os.environ["OPENAI_API_KEY"]
SUPABASE_URL Service URL config/settings.py:41 Reemplazado → os.environ["SUPABASE_URL"]
SUPABASE_SERVICE_ROLE_KEY Service key config/settings.py:42 Reemplazado → variable de entorno
RESEND_API_KEY API key app/services/mailer.py:12 Reemplazado → variable de entorno
META_ADS_ACCESS_TOKEN OAuth token app/services/meta_ads.py:8 Reemplazado → variable de entorno
REDIS_URL Service URL docker-compose.yml:31 Parametrizado con ${REDIS_URL}
JWT_SECRET Secret key app/core/auth.py:7 Reemplazado → variable de entorno
STRIPE_SECRET_KEY Payment key app/services/billing.py:5 Reemplazado → variable de entorno
GITHUB_ACTIONS_TOKEN CI/CD token .github/workflows/deploy.yml:22 ${{ secrets.GITHUB_TOKEN }}
+13 variables adicionales (SENTRY_DSN, POSTHOG_KEY, SLACK_WEBHOOK, PAPERTRAIL_URL, RENDER_DEPLOY_HOOK, LEMON_SQUEEZY_KEY…)
🔄 Referencias internas reemplazadas (47 ocurrencias)
Patrón original Reemplazado por Ocurrencias Archivos
api.cultivaia.internal your-domain.com 14 nginx.conf, docker-compose.yml, README.md, docs/api.md
/home/alvaro/projects/ /home/user/ 9 Makefile, scripts/setup.sh, .github/workflows/ci.yml
192.168.1.50 (Redis) your-server-ip 6 config/settings.py, docker-compose.yml, docs/infra.md
10.0.0.12 (Postgres) your-server-ip 5 config/database.py, alembic.ini
alvaro@cultivaia.com you@your-domain.com 8 README.md, LICENSE, setup.cfg, pyproject.toml
github.com/cultiva-ia-internal github.com/your-github-org 5 .github/workflows/deploy.yml, pyproject.toml
📋 Ejemplo de diff — docker-compose.yml
docker-compose.yml
@@ -15,12 +15,12 @@ services:
db:
image: postgres:15
environment:
- DATABASE_URL: "postgresql://admin:Sup3r$ecret2024@192.168.1.50:5432/growthbot_prod"
+ DATABASE_URL: "${DATABASE_URL}"
redis:
image: redis:7-alpine
- command: redis-server --requirepass REdis_P4ss_2024
+ command: redis-server --requirepass "${REDIS_PASSWORD}"
ports:
- - "192.168.1.50:6379:6379"
+ - "${REDIS_HOST:-localhost}:6379:6379"
⚙️ .env.example generado
.env.example 23 vars
# Application — cp .env.example .env
APP_NAME=growthbot-api
APP_DOMAIN=your-domain.com
APP_PORT=8000

# Database (REQUIRED)
DATABASE_URL=postgresql://user:password@localhost:5432/growthbot
REDIS_URL=redis://localhost:6379
REDIS_PASSWORD=change-me

# AI / LLMs (REQUIRED)
OPENAI_API_KEY=sk-...

# Supabase (REQUIRED)
SUPABASE_URL=https://xxxx.supabase.co
SUPABASE_SERVICE_ROLE_KEY=eyJ...

# Email (REQUIRED)
RESEND_API_KEY=re_...

# Security (REQUIRED)
JWT_SECRET=change-me-32-chars-min
STRIPE_SECRET_KEY=sk_live_...

# Optional
SENTRY_DSN=https://...
POSTHOG_KEY=phc_...
⚠️ Advertencias — revisión manual recomendada
⚠️
app/utils/analytics.py:88 — Contiene lógica de negocio con referencias a campañas de clientes reales de CULTIVA IA. Revisar si conviene anonimizar los nombres de ejemplo en comentarios.
⚠️
tests/fixtures/ — Los fixtures de tests incluyen datos de clientes de prueba. Verificar que no contienen PII (emails reales, teléfonos, nombres).
⚠️
docs/architecture.md — Diagrama de infraestructura menciona "Arquitectura CULTIVA IA Producción". Reemplazar con diagrama genérico antes de publicar.
⚠️
pyproject.toml — El campo authors incluye nombre completo del desarrollador. Verificar si quieres mantenerlo o usar un alias.
🔀 Historial Git limpio
git log --oneline — growthbot-api (staging)
a3f9c12 (HEAD → main)  Initial open-source release
Forked from private source. All secrets stripped, internal references replaced with configurable placeholders. See .env.example for configuration.

El historial anterior (314 commits con posibles secretos en mensajes o diffs) ha sido eliminado. El fork público parte de cero.

🚀

Siguiente paso: open-source-sanitizer

El fork está limpio, pero se recomienda ejecutar el sanitizador de segunda etapa para verificar que no queda ningún patrón de secreto en el código fuente antes de hacer el git push público.

$ claude run opensource-sanitizer --target /home/alvaro/opensource-staging/growthbot-api --strict