尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
SaaS de IA especializada en Contrataciones Públicas del Perú. Construido por Promptive para el ciclo completo: Actuaciones Preparatorias, Selección y Ejecución Contractual. LexIA cubre los tres perfiles del ecosistema (Entidad pública, Proveedor, Consultor/Capacitador) con un chat fundado en la Ley N° 32069 vigente, una biblioteca normativa, un Evaluador IA de ofertas, 11 generadores de documentos especializados, 2 asistentes de trámites RNP y un Bot de scraping que mantiene la base normativa al día.檢視完整 README ↗
SaaS de IA especializada en Contrataciones Públicas del Perú. Construido por Promptive para el ciclo completo: Actuaciones Preparatorias, Selección y Ejecución Contractual.
LexIA cubre los tres perfiles del ecosistema (Entidad pública, Proveedor, Consultor/Capacitador) con un chat fundado en la Ley N° 32069 vigente, una biblioteca normativa, un Evaluador IA de ofertas, 11 generadores de documentos especializados, 2 asistentes de trámites RNP y un Bot de scraping que mantiene la base normativa al día.
past_due./admin/scraping para monitorear el bot.#0583F2 / #021D40 / blanco · Plus Jakarta Sans · logo compuesto + minimalista# 1. Clonar e instalar
git clone <repo>
cd LexIa
npm install
# 2. Configurar .env.local — copia las variables del bloque más abajo
cp .env.example .env.local
# 3. Aplicar migraciones SQL
# Las migraciones están en supabase/migrations/0001..0013.
# Puedes aplicarlas con scripts/apply-migration.ts o desde el SQL Editor.
npx tsx scripts/apply-migration.ts supabase/migrations/0001_init.sql
# (repite para cada una)
# 4. Sembrar la base normativa con los PDFs de data/normativa/
npx tsx scripts/ingest-normativa-v2.ts
# 5. Cargar plantillas oficiales de los generadores
npx tsx scripts/parse-templates.ts
# 6. Sembrar fuentes de scraping
npx tsx scripts/seed-scraping-sources.ts
# 7. Dev server
npm run dev
Crítica (sin estas la app no arranca):
# Supabase
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY=
SUPABASE_ACCESS_TOKEN= # Personal Access Token para apply-migration.ts
SUPABASE_PROJECT_REF=
# Gemini (IA)
GOOGLE_GENERATIVE_AI_API_KEY=
# App
NEXT_PUBLIC_APP_URL=
Para el bot de scraping y crons:
CRON_SECRET= # Vercel Cron usa esto para autenticarse
Para suscripciones Culqi (opcional hasta activar facturación):
CULQI_PUBLIC_KEY=
CULQI_PRIVATE_KEY=
CULQI_PLAN_STARTER= # plan_id creado en el dashboard Culqi
CULQI_PLAN_PRO=
| Script | Función |
|---|---|
npm run dev | Dev server (puerto 3000) |
npm run build | Build de producción |
npm run start | Servir build |
npm run lint | ESLint |
npx tsx scripts/v2-reset.ts | Resetea BD + Auth + Storage (orden Etapa 0) |
npx tsx scripts/apply-migration.ts <ruta-sql> | Aplica una migración vía Management API |
npx tsx scripts/ingest-normativa-v2.ts | Re-ingesta los PDFs de data/normativa/ |
npx tsx scripts/parse-templates.ts | Carga las plantillas oficiales en generator_templates |
npx tsx scripts/seed-scraping-sources.ts | Siembra fuentes del bot |
npx tsx scripts/test-rag-query.ts "consulta" | Smoke test del RAG |
npx tsx scripts/verify-rls.ts | Audita policies RLS de todas las tablas |
npx tsx scripts/count-db.ts | Conteos por tabla |
13 migraciones aplicadas en este orden. Todas las tablas tienen RLS.
| Migración | Contenido |
|---|---|
0001_init | profiles, normative_documents, normative_chunks (vector 1024), chat, evaluaciones, generador, biblioteca |
0002_rls | RLS policies de las tablas v1 |
0003_hybrid_search | función SQL hybrid_search (cosine + FTS español) |
0004_storage | Buckets de storage |
0005_reset_data_v2 | TRUNCATE inicial v2 |
0006_profiles_v2_subscriptions | profile_role, onboarding_completed, organization, subscriptions + events |
0007_generator_templates | catálogo de plantillas oficiales con slug enum |
0008_preparatorias_slugs | enum + tdr_eett, estrategia_contratacion |
0009_ejecucion_slugs | enum + 5 slugs de ejecución contractual |
0010_rnp_slugs | enum + rnp_aumento_cmc, rnp_actualizacion_financiera |
0011_scraping | scraping_sources, scraping_runs, profiles.is_admin |
0012_feature_usage | feature_usage (cuotas mensuales) + columnas Culqi extra |
0013_user_surveys | encuestas post-onboarding |
Configurados en vercel.json (Vercel ejecuta automáticamente):
| Path | Schedule | Función |
|---|---|---|
/api/scraping/run | 0 3 * * 0 (dom 03:00 UTC) | Bot de scraping de normativa |
/api/billing/trial-sweep | 0 4 * * * (diario 04:00 UTC) | Vence trials a past_due |
Auth de crons: cabecera Authorization: Bearer ${CRON_SECRET}.
main → Vercel deploya automáticamente.scripts/apply-migration.ts (NO se aplican solas en deploy).| Credencial | Dónde rotarla | Después |
|---|---|---|
| Gemini API key | Google AI Studio | actualizar GOOGLE_GENERATIVE_AI_API_KEY en Vercel + redeploy |
| Supabase service role | NO se rota (solo si compromiso) | actualizar en Vercel + redeploy |
| Culqi keys | Dashboard Culqi → API Keys | actualizar CULQI_* en Vercel + redeploy |
| CRON_SECRET | generar nuevo con node -e "console.log(require('crypto').randomBytes(32).toString('hex'))" | actualizar en Vercel + redeploy |
-- desde Supabase SQL Editor o con scripts/apply-migration
insert into scraping_sources (label, url, doc_type, link_selector, link_filter_regex, cadence_days, notes)
values (
'OECE — Otra fuente nueva',
'https://ejemplo.com/pagina-indice',
'opinion',
'a[href*=".pdf"]',
'\.pdf$',
7,
'Notas internas...'
);
Luego desde /admin/scraping → "Ejecutar" para probar la fuente nueva.
update profiles
set is_admin = true
where id in (select id from auth.users where email = '[email protected]');
npx tsx scripts/test-rag-query.ts "tu consulta de prueba"
# o
npx tsx scripts/count-db.ts
scraping_runs.error_messagesubscription_eventshttps://<SUPABASE_PROJECT_REF>.supabase.co/auth/v1/callback# Audita que todas las tablas tengan RLS habilitado y al menos una policy
npx tsx scripts/verify-rls.ts
Tablas que deben estar bajo RLS (con policies por owner o admin):
profiles, subscriptions, subscription_eventschat_conversations, chat_messagesevaluations, generated_documentsuser_folders, user_saved_documents, user_annotationsuser_surveys, feature_usagegenerator_templates (lectura autenticada, sin escritura desde cliente)scraping_sources, scraping_runs (solo admin)Propiedad de Promptive. Todos los derechos reservados.