Dashboard AMM para monitoreo de liquidez y APR de pares Uniswap v2 con datos en tiempo real de The Graph.
backend/render.yaml- Infraestructura como código para Renderfrontend/vercel.json- Configuración para VercelDEPLOYMENT.md- Guía completa paso a paso
- Frontend:
https://sentora-frontend.vercel.app - Backend:
https://sentora-backend.onrender.com - API Docs:
https://sentora-backend.onrender.com/api/health
Backend en Render:
- Conectar repo en render.com
- Crear Blueprint desde
backend/render.yaml - Render creará automáticamente PostgreSQL + Web Service
Frontend en Vercel:
cd frontend
npm i -g vercel
vercel --prod📖 Ver guía completa: DEPLOYMENT.md
- Docker y Docker Compose instalados
- Puertos 3001 (backend) y 5173 (frontend) disponibles
# Clonar el repositorio
git clone <url>
cd sentora
cd backend && ./scripts/start.shEste comando:
- ✅ Levanta PostgreSQL + Backend automáticamente
- ✅ Configura base de datos con migraciones
- ✅ Inicia captura de datos de The Graph
- ✅ Verifica que todo funcione
- ✅ Muestra endpoints para testing
# Mientras el backend arranca, en otra terminal:
cd frontend
npm install
npm run dev
# Frontend disponible en http://localhost:5173# ✅ Backend health check
curl http://localhost:3001/api/health
# ✅ Ver datos capturados
curl http://localhost:3001/api/metrics/snapshots- Node.js + TypeScript + Express - API REST
- PostgreSQL + Prisma ORM - Base de datos y migrations
- GraphQL (The Graph) - Datos DeFi en tiempo real
- Docker + Docker Compose - Orquestación completa
- Redis - Cache y almacenamiento temporal
- Cron Jobs (node-cron) - Captura automática de snapshots
- Zod - Validación de schemas y tipos
- CORS - Habilitación de cross-origin requests
- ESLint + Prettier - Linting y formateo de código
- React + TypeScript - Interfaz moderna
- TailwindCSS - Estilos responsive y utilidades CSS
- Recharts - Visualización de datos y gráficos interactivos
- React Query (TanStack Query) - Gestión de estado servidor
- Shadcn/ui - Componentes consistentes y accesibles
- Framer Motion - Animaciones fluidas y interacciones
- React Router - Navegación entre páginas
- React Icons - Iconografía consistente
- Vite - Build tool moderno y rápido
- ESLint + Prettier - Linting y formateo de código
- Render - Backend hosting con PostgreSQL
- Vercel - Frontend hosting con auto-deploy
- Docker - Containerización para desarrollo
- GitHub Actions - CI/CD pipeline (auto-deploy)
┌─────────────────┐ GraphQL ┌──────────────┐
│ The Graph │◄─────────────┤ Backend │
│ (Uniswap v2) │ │ Node.js │
└─────────────────┘ │ │
│ ┌────────┐ │
┌─────────────────┤ │ Cron │ │
│ │ │ Jobs │ │
│ │ └────────┘ │
│ └──────────────┘
│ │
│ │ REST API
│ ▼
┌───────────▼────────┐ ┌─────────────────┐
│ PostgreSQL │ │ Frontend │
│ (Snapshots) │ │ React │
└────────────────────┘ │ │
│ ┌──────────┐ │
│ │ Charts │ │
│ │ Filters │ │
│ │ APR Calc │ │
│ └──────────┘ │
└─────────────────┘
- TypeScript - Tipado estático para mayor robustez
- Husky - Git hooks para pre-commit
- Lint-staged - Linting solo en archivos modificados
- Prettier - Formateo automático de código
- ESLint - Análisis estático y detección de errores
- Vitest - Testing framework moderno
- React Testing Library - Testing de componentes
- MSW - Mocking de APIs para testing
- Vite - Build tool rápido con HMR
- React DevTools - Debugging de componentes
- Postman/Insomnia - Testing de APIs
- useGetChartData - Datos para gráficos con cache
- useGetGlobalMetrics - Métricas globales del dashboard
- useGetAnnualizedReturns - Retornos anualizados por período
Nota: Se han eliminado hooks no utilizados (useGetSnapshots, useGetPairs, useGetPairAPR, useGetAllPairsAPR, useMetricsCache) para mantener el código limpio y optimizado.
- Captura automática de datos cada 60 minutos
- Snapshots de liquidez, volumen y fees
- Cálculo automático de APR
- Gráficos responsivos con Recharts
- Filtros temporales: 7d, 1m, 3m, 6m, 1y, YTD, Custom, All
- Date picker para rangos personalizados
- Tooltips con información detallada
- APR calculado con moving averages
- Visualización de gaps en datos faltantes
- Escalas Y uniformes y optimizadas
- Formateo inteligente de fechas
- Framer Motion - Transiciones fluidas y micro-interacciones
- Hover Effects - Efectos sutiles en cards y botones
- Loading States - Skeletons animados durante carga
- Error States - Estados de error con animaciones
- Page Transitions - Transiciones entre páginas
- Responsive Design - Adaptación a todos los dispositivos
sentora/
├── backend/ # Node.js + Express API
│ ├── src/
│ │ ├── routes/ # Endpoints REST
│ │ ├── services/ # Lógica de negocio
│ │ ├── graphql/ # Cliente The Graph
│ │ └── types/ # TypeScript types
│ ├── prisma/ # Schema + migraciones
│ ├── scripts/
│ │ └── start.sh # 🎯 Setup automático
│ ├── render.yaml # 🚀 Configuración Render
│ └── docker-compose.yml
├── frontend/ # React + TypeScript
│ ├── src/
│ │ ├── components/ # UI components
│ │ ├── hooks/ # Custom hooks
│ │ └── pages/ # Páginas
│ ├── vercel.json # 🚀 Configuración Vercel
│ └── package.json
├── DEPLOYMENT.md # 📖 Guía de deployment
└── README.md # 📖 Este archivo
cd backend
# 🚀 Inicio completo (recomendado)
./scripts/start.sh
# 🛠️ Solo desarrollo local
npm run dev
# 📊 Ver logs en tiempo real
docker logs -f sentora-backend
# 🗄️ Acceso directo a PostgreSQL
docker exec -it sentora-postgres psql -U sentora_user -d sentora_db
# 🧹 Limpiar y resetear todo
docker compose down -vcd frontend
# Desarrollo
npm run dev
# Build para producción
npm run build
# 🧪 Testing
npm test # modo wathc
npm run test:run # Ejecutar todos los tests
npm run test:ui # Interfaz gráfica de tests- Vitest
- React Testing Library - testing de componentes React
- jsdom - dom virtual para testing
- @vitest/ui - interfaz gráfica para tests
cd frontend
# Ejecutar todos los tests
npm test
# Ejecutar tests una sola vez
npm run test:run
# Interfaz gráfica de tests (navegador)
npm run test:ui
# Reporte de cobertura
npm run coverage # Requiere: npm install --save-dev @vitest/coverage-v8src/
├── App.test.tsx # Test principal de la app
├── components/
│ ├── commons/SectionTitle/SectionTitle.test.tsx # Tests de componentes comunes
│ └── Dashboard/MetricsCard/MetricsCard.test.tsx # Tests de componentes dashboard
└── test/
└── setup.ts # Configuración global de tests
- IntersectionObserver - Para componentes con framer-motion
- ResizeObserver - Para componentes responsivos
- matchMedia - Para tests de media queries
- requestAnimationFrame - Para animaciones
import { render, screen } from "@testing-library/react";
import { describe, it, expect } from "vitest";
describe("MiComponente", () => {
it("renders correctly", () => {
render(<MiComponente />);
expect(screen.getByText("Expected Text")).toBeInTheDocument();
});
});GET /api/health- Estado del servicioGET /api/db-check- Verificar base de datosGET /- Información general
GET /api/metrics/global- Métricas globales del dashboardGET /api/metrics/annualized-returns- Retornos anualizados por períodoGET /api/metrics/chart?timeRange=7d- Datos para gráficosGET /api/metrics/chart?timeRange=custom&from=2025-07-01&to=2025-07-05- Rango personalizado
GET /api/metrics/snapshots- Todos los snapshotsGET /api/metrics/snapshots?pairAddress=0x...- Por par específicoGET /api/metrics/pairs- Pares monitoreadosGET /api/metrics/apr- Cálculo APR con moving averagesGET /api/metrics/apr/all- APR para todos los pares
### Health Check
GET http://localhost:3001/api/health
### Ver Snapshots Recientes
GET http://localhost:3001/api/metrics/snapshots
### Datos para Chart (7 días)
GET http://localhost:3001/api/metrics/chart?timeRange=7d
### Datos Custom Range
GET http://localhost:3001/api/metrics/chart?timeRange=custom&from=2025-07-02&to=2025-07-08
### Pares Monitoreados
GET http://localhost:3001/api/metrics/pairsGerman Derbes Catoni
- 📧 Email: germanderbescatoni@gmail.com
- 🐙 GitHub: [https://github.com/GDC94]





