📱 PWA para consultar y convertir tasas de cambio en Venezuela (BCV y Binance P2P) en tiempo real, con histórico de precios.
🔗 calculadolar-theta.vercel.app
Aplicación móvil-first, en español y con modo oscuro, construida con Next.js.
- Tasas en tiempo real — USD/EUR del BCV (Banco Central de Venezuela) y USDT de Binance P2P.
- Calculadora — conversión entre monedas con evaluación de expresiones matemáticas (mathjs).
- Histórico de precios — gráficos de líneas con rangos de 7d, 30d, 90d y 1 año.
- PWA instalable — funciona offline gracias al service worker (Serwist).
- Detalles móviles — toques con vibración (haptic), mantener presionado para copiar valores y notificaciones tipo toast.
| Área | Tecnología |
|---|---|
| Framework | Next.js 16 (App Router), React 19 |
| Lenguaje | TypeScript |
| Estilos | Tailwind CSS 4 |
| Base de datos | Supabase |
| Gráficos | Recharts |
| Cálculo | mathjs |
| Scraping | Cheerio + Axios |
| PWA | Serwist |
npm install
npm run dev # Servidor de desarrollo en http://localhost:3000Otros comandos:
npm run build # Build de producción
npm run start # Servidor de producción
npm run lint # Revisión con ESLintCrea un archivo .env.local con:
# Cliente (público)
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_DEFAULT_KEY=
# Servidor (nunca exponer en el cliente)
SUPABASE_SERVICE_ROLE_KEY=
# Autoriza las llamadas a los endpoints de actualización de tasas
CRON_SECRET=app/page.tsx obtiene las tasas desde Supabase al montar, las cachea en localStorage y las pasa a los componentes. La app alterna entre tres vistas: tasas (RateView), calculadora (CalculatorView) e histórico (HistoryView).
Las tasas se actualizan mediante endpoints API protegidos con Authorization: Bearer CRON_SECRET, disparados por cron-job.org cada hora:
app/api/cron/update-bcv-rates/route.ts— scrapea el sitio del BCV para USD/EUR→VES.app/api/cron/update-binance-rates/route.ts— consulta la API de Binance P2P para USDT/VES.app/api/history/route.ts— endpoint público que devuelve el histórico de precios (downsampled).
Cada actualización hace upsert en la tabla rates (precios actuales) e insert en rate_history (histórico).
Desplegado en Vercel.