Oracle3
Open-source trading engine and MCP server for prediction markets. Fee-aware no-arbitrage trading across related contracts, live on Kalshi, Polymarket and Solana or on paper.
La IA que rastrea ayudas, subvenciones y convocatorias antes de que se te escapen.
Translation pending
FinanceTypeScript · JavaScriptGitHub @oleferryOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
"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.cRead the full 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