"La tranquilidad de un capibara, la solidez de la tecnología"
Sistema completo de gestión de inversiones personales con soporte multi-moneda (COP/USD), verificación de email, recuperación de contraseña y análisis avanzado.
- 🔐 Registro seguro con verificación de email (Nodemailer)
- 📧 Recuperación de contraseña vía email
- 🔒 Sesiones seguras con Argon2
- ✉️ Emails transaccionales con plantillas HTML personalizadas
- 🛡️ Row Level Security (RLS) en PostgreSQL
- 📊 Dashboard interactivo con métricas en tiempo real
- � Gestión de cuentas con soporte para subcuentas jerárquicas
- 💵 Multi-moneda (COP y USD) con tasas de cambio automáticas
- 📈 Transferencias entre cuentas con conversión automática
- 💸 Aportes y retiros con validación de fondos
- � Historial completo de transacciones
- 📉 Estadísticas avanzadas (ROI, volatilidad, rendimiento)
- 📈 Gráficos dinámicos con Chart.js
- 🔍 Auditoría completa de todas las operaciones
- � Diseño responsive optimizado para mobile y desktop
- 🌙 Tema oscuro con paleta Stone/Amber/Teal
- ✨ Glassmorphism y animaciones sutiles
- 🧘 UX zen inspirado en la calma del capibara
- 🎯 SEO optimizado con meta tags completos
- Framework: Astro 5.15.9
- Estilos: TailwindCSS 4.1.17
- Gráficos: Chart.js 4.5.1
- Iconos: Heroicons (SVG)
- Runtime: Astro API Routes (Serverless)
- Database: Neon PostgreSQL (Serverless)
- ORM: Neon Serverless Driver
- Auth: Sesiones con Argon2
- Email: Nodemailer
- Deploy: Vercel
- Package Manager: pnpm
- Testing: Jest
- Linting: TypeScript ESLint
- Node.js 18+
- pnpm (recomendado) o npm
- Cuenta en Neon Database
- Servidor SMTP (Gmail, SendGrid, Mailtrap, etc.)
- Clonar el repositorio
git clone https://github.com/tu-usuario/capyte.git
cd capyte- Instalar dependencias
pnpm install- Configurar variables de entorno
cp .env.example .envEditar .env con tus credenciales:
# Database
DATABASE_URL=postgresql://user:password@host/database
# SMTP (Nodemailer)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=tu-email@gmail.com
SMTP_PASS=tu-contraseña-de-aplicacion
# Currency API (opcional)
CURRENCY_API_KEY=tu_api_key_de_currencyapi_net- Configurar base de datos
# Las tablas se crean automáticamente al ejecutar la app
# O ejecuta manualmente el schema en Neon Console- Iniciar servidor de desarrollo
pnpm dev- Abrir en navegador
http://localhost:4321
capyte/
├── src/
│ ├── components/ # Componentes reutilizables
│ │ ├── admin/ # Componentes del admin
│ │ └── dashboard/ # Componentes del dashboard
│ ├── layouts/ # Layouts de página
│ │ ├── home.astro # Layout landing (con SEO)
│ │ ├── default.astro # Layout dashboard
│ │ ├── admin.astro # Layout admin
│ │ └── error.astro # Layout errores
│ ├── lib/ # Lógica de negocio
│ │ ├── db.ts # Conexión DB + RLS
│ │ ├── finance.ts # Funciones financieras
│ │ └── audit.ts # Sistema de auditoría
│ ├── middleware.ts # Auth + protección de rutas
│ ├── pages/ # Rutas y páginas
│ │ ├── index.astro # Landing page
│ │ ├── auth/ # Login/registro/recovery
│ │ ├── dashboard/ # Panel usuario
│ │ ├── admin/ # Panel admin
│ │ └── api/ # API endpoints
│ └── styles/ # CSS global
├── public/ # Assets estáticos
│ ├── logo.png # Logo capibara
│ └── robots.txt # SEO
└── docs/ # Documentación
| Comando | Descripción |
|---|---|
pnpm dev |
Servidor de desarrollo (puerto 4321) |
pnpm build |
Build para producción |
pnpm preview |
Preview del build |
pnpm test |
Ejecutar tests con Jest |
pnpm test:watch |
Tests en modo watch |
- Usuario se registra con email y contraseña
- Sistema envía email de verificación con token único
- Usuario hace clic en el enlace (válido 24h)
- Cuenta se activa automáticamente
- Usuario puede iniciar sesión
- Usuario solicita recuperación desde
/auth/forgot-password - Sistema envía email con enlace de recuperación
- Usuario ingresa nueva contraseña
- Token se marca como usado
- Usuario puede iniciar sesión con nueva contraseña
- Tabla única:
transactionspara todos los movimientos - Tipos soportados:
initial_balance- Saldo inicialcontribution- Aportewithdrawal- Retirotransf_in/transf_out- Transferenciasfee- Comisionesadjustment- Ajustes manuales
- Transferencias entre monedas diferentes
- Tasa de cambio guardada en cada transacción
- Cálculos precisos con 2 decimales
- Valor total del portafolio (en COP)
- Total invertido vs Total retirado
- Retorno neto y ROI %
- Volatilidad (desviación estándar)
- Mejor/Peor mes de rendimiento
- Historial de valores
- Rentabilidad acumulada
- Rendimiento % diario
- Aportes vs Retiros
- Distribución por moneda
- Comparativa COP/USD
POST /api/auth/register # Registro + email verificación
POST /api/auth/login # Login (requiere email verificado)
GET /api/auth/logout # Logout
POST /api/auth/forgot-password # Solicitar recuperación
POST /api/auth/reset-password # Restablecer contraseña
GET /api/auth/verify-email # Verificar email
POST /api/transactions/contribute # Registrar aporte
POST /api/transactions/withdraw # Registrar retiro
POST /api/transactions/transfer # Transferir entre cuentas
GET /api/accounts # Listar cuentas
POST /api/accounts # Crear cuenta
DELETE /api/accounts/[id] # Eliminar cuenta
GET /api/graphics # Gráficos dinámicos
GET /api/cron/update-rate # Actualizar tasa de cambio
GET /sitemap.xml # Sitemap dinámico
GET /robots.txt # Control de crawlers
- Usuarios del sistema
- Campos:
id,email,password_hash,email_verified_at,role
- Sesiones activas
- Expiración automática (30 minutos)
- Cuentas de inversión
- Soporte para jerarquías (parent_id)
- Monedas: COP, USD
- Tabla unificada para todos los movimientos
- Campos clave:
type,amount,currency,new_value,usd_to_cop_rate
- Tasas de cambio históricas USD/COP
- Actualización automática vía cron
- Tokens de recuperación de contraseña
- Expiración: 1 hora
- Tokens de verificación de email
- Expiración: 24 horas
cash_flows- Vista de flujos de efectivoaccount_balances- Vista de balancescreate_transfer()- Función para transferenciasadjust_account_value()- Función para ajustes
- Stone (950-50): Base oscura, calma
- Amber (600-400): Acentos cálidos, confianza
- Teal (500-400): Toques de serenidad
- Calma visual - Sin elementos distractores
- Glassmorphism - Transparencias y blur
- Animaciones sutiles - Transiciones suaves
- Responsive first - Mobile y desktop
- Sidebars con logo capibara
- Cards con glassmorphism
- Botones con gradientes amber
- Inputs con focus rings amber
- Mensajes de error/éxito temáticos
✅ Argon2 para hashing de contraseñas
✅ Row Level Security (RLS) en PostgreSQL
✅ Validación de entrada con Zod
✅ Sesiones con expiración automática
✅ Tokens únicos (UUID) para recuperación
✅ CSRF protection en formularios
✅ HttpOnly cookies
✅ Middleware de autenticación
- Nunca exponer API keys en el código
- Validar todos los inputs del usuario
- Usar prepared statements (SQL injection protection)
- Limitar intentos de login (rate limiting)
- Logs de auditoría para acciones críticas
✅ Meta tags completos (title, description, keywords)
✅ Open Graph para redes sociales
✅ Twitter Cards
✅ Structured Data (JSON-LD)
✅ Sitemap.xml dinámico
✅ Robots.txt configurado
✅ Canonical URLs
✅ Favicon y Apple Touch Icon
- Serverless functions (Vercel Edge)
- PostgreSQL con índices optimizados
- Lazy loading de imágenes
- CSS minificado con TailwindCSS
- Astro Islands para JS mínimo
- Conectar repositorio
vercel- Configurar variables de entorno
- Agregar todas las variables del
.enven Vercel Dashboard
- Deploy automático
- Push a
main→ Deploy automático - Preview deployments en PRs
- Configurar dominio
- Agregar dominio custom en Vercel
- Actualizar
robots.txtcon el dominio final
# Ejecutar todos los tests
pnpm test
# Tests en modo watch
pnpm test:watch
# Coverage
pnpm test --coveragetests/
├── unit/ # Tests unitarios
├── integration/ # Tests de integración
└── e2e/ # Tests end-to-end
¡Las contribuciones son bienvenidas! Por favor:
- Fork el proyecto
- Crea una rama (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
- Seguir convenciones de código existentes
- Agregar tests para nuevas features
- Actualizar documentación
- Mantener commits atómicos y descriptivos
Este proyecto está bajo la Licencia MIT. Ver archivo LICENSE para más detalles.
Capyte Team
- Website: capyte.afroletra.com
- Email: soporte@capyte.com
- Astro - Framework web moderno
- Neon - PostgreSQL serverless
- Vercel - Hosting y deploy
- TailwindCSS - Utility-first CSS
- Chart.js - Gráficos interactivos
- Nodemailer - Email transaccional
¿Necesitas ayuda?
- 📖 Lee la documentación completa
- 🐛 Reporta bugs en Issues
- 💬 Contáctanos en soporte@capyte.com
Si este proyecto te fue útil, ¡dale una estrella en GitHub! ⭐
- Integración con bancos (Plaid/Belvo)
- App móvil (PWA)
- Exportación a Excel/PDF
- Notificaciones push
- Dashboard compartido (multi-usuario)
- API pública REST
- Integración con Stripe
- Análisis con IA/ML
- Modo offline
Hecho con 🧘 calma y ☕ café
"Inversiones sólidas, mente en calma"