尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
"El perro que encuentra las perras." Web app + bot de Telegram que rastrea subvenciones, ayudas y convocatorias (BDNS, fondos UE, premios privados) y las cruza con el perfil de cada empresa/autónomo. Multi-perfil por usuario, memoria/resumen generados con IA, leads a gestorías, y un panel de coste real de la API de Claude. 1. Supabase (base de datos) 1. https://supabase.c檢視完整 README ↗
"El perro que encuentra las perras." Web app + bot de Telegram que rastrea subvenciones, ayudas y convocatorias (BDNS, fondos UE, premios privados) y las cruza con el perfil de cada empresa/autónomo. Multi-perfil por usuario, memoria/resumen generados con IA, leads a gestorías, y un panel de coste real de la API de Claude.
📖 CONTEXTO.md — contexto completo para retomar el proyecto: estado real con cifras, por qué está construido así, el motor de matching explicado, las trampas ya pisadas y qué sigue. Léelo antes de tocar matching, ingesta o costes.
convocatorias/
├── app/
│ ├── auth/ ← Login / registro (Supabase auth)
│ ├── dashboard/ ← Panel principal (convocatorias, sugerencias, memoria/resumen IA)
│ ├── organizations/ ← Gestión de perfiles de empresa (CNAE/IAE/CCAA/provincia)
│ ├── admin/costs/ ← Panel de coste real de la API de Claude
│ ├── admin/leads/ ← Panel de leads → gestorías
│ ├── api/ ← Endpoints API (ver más abajo)
│ ├── layout.tsx, Landing.tsx ← Layout raíz + landing pública
│ ├── robots.ts, sitemap.ts ← SEO (convenciones de metadata de Next.js)
│ └── opengraph-image.tsx, twitter-image.tsx ← Imagen social generada dinámicamente
├── lib/
│ ├── supabase.ts / supabase-server.ts ← Clientes Supabase (browser / servidor+admin)
│ ├── ai.ts ← Llamadas a Claude (analyze, memoria, resumen, radar…)
│ ├── admin.ts ← Emails con acceso admin (ADMIN_EMAILS)
│ ├── costs.ts ← Coste real por llamada a Claude → api_usage_log
│ ├── bdns.ts / bdns-sync.ts ← Cliente BDNS + sync incremental al catálogo
│ ├── eu-funding.ts / radar-data.ts / radar-sync.ts / descubrir.ts ← Radar de fondos UE y privados
│ ├── matching.ts / geo.ts ← Motor de matching perfil↔convocatoria
│ ├── theme.ts / types.ts ← Tokens de marca ("Rastro") + tipos TS
│ └── og-image.tsx ← Generador de la imagen OG/Twitter
├── bot/ ← Bot de Telegram (deploy en Railway, `npm start`)
├── supabase/migrations/ ← 001 → 013, ver abajo
├── public/data/ ← Catálogos oficiales INE (CNAE, IAE, provincias, municipios)
├── diseno-referencia.jsx ← Prototipo visual histórico (ya no representa el UI actual)
├── .env.local.example
└── README.md
supabase/migrations/001_schema.sql → 013_resumen_ia.sql, en orden/newbot → guardar el token y el usernamebotnpm start# Web (Vercel) — imprescindibles
NEXT_PUBLIC_SUPABASE_URL
NEXT_PUBLIC_SUPABASE_ANON_KEY
SUPABASE_SERVICE_ROLE_KEY # server-only, salta RLS — NUNCA en el navegador
ANTHROPIC_API_KEY # /api/grants/analyze, /api/search, memoria, resumen, radar
NEXT_PUBLIC_APP_URL # p.ej. https://www.dameperrasperro.es
# Admin
ADMIN_EMAILS # emails con acceso a /admin/leads y /admin/costs (coma-separados)
# Digest semanal + leads (opcionales, sin ellos el digest solo va por Telegram)
TELEGRAM_BOT_TOKEN
TELEGRAM_BOT_USERNAME
RESEND_API_KEY
DIGEST_FROM # remitente, p.ej. "DamePerrasPerro <[email protected]>"
LEADS_NOTIFY_EMAIL # a quién avisar de leads nuevos (si no, usa el primero de ADMIN_EMAILS)
# Crons manuales (opcional)
CRON_SECRET # protege /api/cron/* si se llaman a mano fuera de Vercel Cron
ADMIN_EMAILS solo llega a server components/API routes — el check de admin en el
dashboard (cliente) usa el fallback hardcodeado en lib/admin.ts, no esta variable.
/app, /lib) → Vercel. Raíz del repo = raíz de la app Next.js./bot) → Railway · Root bot · npm start. Vinculación de cuenta, comandos, "pégame un link", alertas de plazo (cron diario propio).001_schema.sql — esquema base (usuarios, perfiles, convocatorias, historial, RLS).002_bdns_catalogo.sql — catálogo público BDNS + estado de sync incremental.003_digest.sql — control de envíos del digest semanal.004_memoria.sql — columna memoria (borrador de solicitud con IA) en grants.005_telegram_link.sql — vinculación segura de Telegram (token de un solo uso).006_catalogos.sql — CNAE múltiple + provincia en perfiles.007_radar.sql — columna fuente (bdns / privada / europea) en el catálogo.008_fix_convpub_rls.sql — arregla la política de lectura pública del catálogo.009_iae_multiple.sql — IAE múltiple en perfiles.010_leads.sql — tabla leads (monetización vía gestorías).011_provincia_catalogo.sql — provincia derivada para convocatorias de ámbito local.012_costes.sql — api_usage_log (coste real por llamada a Claude) + fixed_costs.013_resumen_ia.sql — columna resumen_ia (resumen de las bases de la convocatoria) en grants.Definidos en vercel.json. Necesitan SUPABASE_SERVICE_ROLE_KEY en Vercel.
/api/cron/ingest (diario 06:00): ingesta BDNS al catálogo + refresco del radar (privadas + europeas), y los lunes además dispara el descubrimiento IA de nuevos privados./api/cron/digest (lunes 07:00): digest semanal por usuario (Telegram + email Resend)./api/cron/radar y /api/cron/descubrir: existen como rutas pero no están en vercel.json — solo se disparan a mano (?key=CRON_SECRET) o como efecto del cron de ingest de los lunes.ingest en vez de tener su propio horario. Para separarlo hace falta Vercel Pro.app/robots.ts / app/sitemap.ts: indexa la landing, bloquea /dashboard, /organizations, /admin, /api.app/opengraph-image.tsx / twitter-image.tsx: tarjeta social generada en el momento (sin depender de un asset de diseño).@vercel/analytics: montado en layout.tsx. Requiere activar "Web Analytics" una vez en el dashboard de Vercel (gratis en Hobby)./api/cron/ingest?key=... → el catálogo se llena y "Sugeridas" muestra BDNS + privadas + europeas.bot, npm start.@vercel/analytics empiece a registrar tráfico./admin/costs