尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Vesor: plataforma para analizar riesgos e inversiones con IA, noticias financieras y paneles personalizados
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Plataforma web para aprender a invertir, analizar oportunidades del mercado y decidir con más información. Incluye registro con perfil inversor, panel personalizado, mercado con indicadores, un asistente de análisis financiero con IA, noticias de fuentes externas, historial de actividad y un panel de administración.
Stack: Next.js 14 (App Router, TypeScript) · PostgreSQL (Supabase en producción, PGlite embebido en desarrollo) · API de Claude (Anthropic) · Vercel.
Vesor es una herramienta informativa y educativa. Sus análisis no garantizan rendimientos ni sustituyen la evaluación personal del riesgo.
| Módulo | Ruta | Descripción |
|---|---|---|
| Portada | / | Se conserva el diseño y las animaciones originales. El llamado a la acción ahora dice «Comienza tu análisis inteligente». |
| Registro / acceso | /registro, /login, /recuperar, /restablecer | Registro con nombre, correo, contraseña segura, fecha de nacimiento (mayoría de edad), nivel de experiencia, intereses y, opcionalmente, objetivo, horizonte y tolerancia al riesgo. Recuperación de contraseña con enlace de un solo uso (30 min). |
| Panel de usuario | /panel | Resumen del mercado, lista de seguimiento, ideas personalizadas con riesgos y pérdidas posibles, activos de sus intereses, noticias filtradas, actividad reciente y acceso al asistente. |
| Mercado | /mercado, /activo/[símbolo] | Catálogo de 39 activos (acciones, ETF y criptomonedas) con filtros; ficha con gráfico, rendimiento 30/90 días, medias móviles, RSI, volatilidad, caída máxima, ventajas y riesgos. |
| Análisis de riesgo | /analizar | El simulador existente (antes «Simulador»), ahora guarda cada análisis en el historial. |
| Asistente IA | /chat | Chatbot que analiza activos, compara, explica conceptos y sugiere ideas según el perfil. Conversaciones persistentes. |
| Noticias | /noticias | Titulares de Yahoo Finance, CNBC, MarketWatch, CoinDesk, Cointelegraph, Reserva Federal, TechCrunch y OilPrice vía RSS oficial; filtros por categoría e intereses; guardar noticias. |
| Historial | /historial | Inicio/cierre de sesión, consultas al chatbot, análisis, simulaciones, activos consultados y seguidos, noticias visitadas/guardadas y cambios de perfil, en orden cronológico, con filtros y detalle. |
| Perfil | /perfil | Edición de intereses, nivel, objetivos y tolerancia al riesgo; cambio de contraseña. |
| Administración | /admin | Estadísticas de uso, estado de la plataforma, usuarios (suspender/reactivar, rol), registros de actividad de todos los usuarios y gestión de fuentes de noticias. |
Requisitos: Node.js 18.17+ (probado con Node 20).
npm install
cp .env.example .env.local
Define en .env.local al menos las contraseñas de las cuentas de prueba (SEED_ADMIN_PASSWORD, SEED_USER_PASSWORD, entre comillas simples). Todo lo demás es opcional.
npm run dev
Abrir http://localhost:3000. Sin DATABASE_URL la app crea automáticamente una base PostgreSQL embebida (PGlite) en ./.data/pglite, aplica el esquema y crea las cuentas de prueba. Para empezar de cero basta con borrar la carpeta .data/.
Con el servidor en marcha:
npm test
Ejecuta tests/api.test.mjs (9 pruebas de extremo a extremo: rutas protegidas, registro y validaciones, CSRF, inicio de sesión, permisos de administrador, seguimiento, chatbot, simulaciones, noticias, perfil, historial, aislamiento entre usuarios, recuperación de contraseña y suspensión de cuentas). Las pruebas crean usuarios *@vesor.test en la base local. También hay verificación de tipos con npm run typecheck.
| Variable | Obligatoria | Uso |
|---|---|---|
DATABASE_URL | En producción | PostgreSQL. En Supabase: Project Settings → Database → Connection string → Transaction pooler. Sin ella se usa PGlite local (no persiste en Vercel, por eso allí es obligatoria). |
APP_URL | Recomendada | URL pública para los enlaces de recuperación de contraseña. |
ANTHROPIC_API_KEY | No | Activa el asistente con IA (Claude). Sin clave funciona en «modo local» con reglas y datos, indicado en cada respuesta. |
ANTHROPIC_MODEL | No | Por defecto claude-opus-5-5. |
ALPHA_VANTAGE_API_KEY, MARKET_DATA_PROVIDER | No | Cotizaciones e históricos de acciones/ETF. Sin clave se usan datos de demostración marcados como tales. |
RESEND_API_KEY, MAIL_FROM | No | Envío del correo de recuperación. Sin proveedor, en desarrollo el enlace aparece en la consola y en pantalla; en producción no se muestra. |
SEED_ADMIN_EMAIL, SEED_ADMIN_PASSWORD, SEED_USER_EMAIL, SEED_USER_PASSWORD | No | Cuentas de prueba creadas al iniciar (ver abajo). |
ALLOW_PRODUCTION_SEED | No | Debe ser true para que el seed corra con NODE_ENV=production. |
SEED_RESET_PASSWORDS | No | true para volver a fijar la contraseña de las cuentas de prueba existentes. |
PGLITE_DATA_DIR | No | Carpeta de la base local (por defecto ./.data/pglite). |
Ninguna clave se usa en el navegador: todas se leen solo en el servidor. .env* está en .gitignore (salvo .env.example).
Se crean mediante un mecanismo de inicialización controlado (src/lib/db/seed.ts), no con credenciales fijas en el código:
[email protected] (rol administrador) y [email protected] (rol usuario, principiante, intereses tecnología/IA/cripto).SEED_ADMIN_PASSWORD / SEED_USER_PASSWORD. El seed rechaza contraseñas débiles, no sobrescribe contraseñas de cuentas existentes y no se ejecuta en producción salvo con ALLOW_PRODUCTION_SEED=true..env.local y en cuentas-prueba.local.md (ambos ignorados por git)./admin/noticias. Revisa las condiciones de uso de cada medio antes de un uso comercial.src/app/ Páginas (App Router) y rutas API
src/app/api/auth/* Registro, login, logout, recuperación y restablecimiento
src/app/api/chat/* Chatbot y conversaciones
src/app/api/admin/* APIs exclusivas de administración (rol verificado en el servidor)
src/lib/db/ Conexión (Postgres o PGlite), esquema y seed
src/lib/auth.ts Sesiones, guardas de usuario/admin, CSRF y límite de intentos
src/lib/password.ts Hash scrypt con sal por usuario
src/lib/validation.ts Validaciones compartidas navegador/servidor
src/lib/market-data.ts Cotizaciones, históricos e indicadores técnicos
src/lib/assets.ts Catálogo de activos con volatilidad y riesgos
src/lib/personalization.ts Recomendaciones según intereses, experiencia, tolerancia y horizonte
src/lib/chat.ts Motor del asistente (Claude + modo local)
src/lib/news.ts Lectura RSS, deduplicación y caché de noticias
src/lib/activity.ts Registro del historial (con deduplicación)
src/lib/simulation.ts Lógica del simulador de riesgo
supabase/schema.sql Copia del esquema para ejecutarlo manualmente en Supabase
tests/api.test.mjs Pruebas de extremo a extremo
httpOnly, SameSite=Lax y Secure en producción; en la base solo se guarda el hash SHA-256 del token. Al cambiar o restablecer la contraseña y al suspender una cuenta se cierran sus sesiones.admin. Las consultas de datos personales filtran por user_id en SQL. El middleware es solo una primera barrera.Origin en todas las peticiones que modifican datos.anon) no puede leerlas; solo el servidor, con DATABASE_URL.DATABASE_URL.supabase/schema.sql en el SQL Editor; si no, la app lo aplica al primer acceso.DATABASE_URL y APP_URL).SEED_ADMIN_EMAIL, una contraseña fuerte en SEED_ADMIN_PASSWORD y ALLOW_PRODUCTION_SEED=true en un despliegue; luego quitar esas variables.ALPHA_VANTAGE_API_KEY las acciones/ETF usan datos de demostración; con el plan gratuito solo se consultan pocas cotizaciones por minuto.Más detalle de las pruebas realizadas y los errores corregidos en docs/PRUEBAS.md.