https://github.com/h0kd/climate-analytics
Climate Analytics Dashboard — Aplicación full‑stack en Next.js para consultar, almacenar y visualizar datos meteorológicos en tiempo real e histórico, con exportación de reportes y cron jobs automáticos.
https://github.com/h0kd/climate-analytics
chartjs clerk-auth cron nextjs openweather prisma react tailwindcss typescript vercel
Last synced: about 2 months ago
JSON representation
Climate Analytics Dashboard — Aplicación full‑stack en Next.js para consultar, almacenar y visualizar datos meteorológicos en tiempo real e histórico, con exportación de reportes y cron jobs automáticos.
- Host: GitHub
- URL: https://github.com/h0kd/climate-analytics
- Owner: h0kd
- Created: 2025-05-05T20:29:41.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2025-05-06T15:03:06.000Z (about 1 year ago)
- Last Synced: 2025-08-08T16:38:49.526Z (11 months ago)
- Topics: chartjs, clerk-auth, cron, nextjs, openweather, prisma, react, tailwindcss, typescript, vercel
- Language: TypeScript
- Homepage: https://climate-analytics.vercel.app
- Size: 104 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 🌤️ Climate Analytics Dashboard
[](https://vercel.com/…)
[](LICENSE)
Una plataforma full‑stack para consultar, almacenar y visualizar datos meteorológicos en tiempo real e histórico.
---
## 📝 Descripción
**Climate Analytics** es una aplicación web construida con Next.js (App Router), Tailwind CSS y Prisma que ofrece:
- 🔍 **Clima en tiempo real** por ciudad usando la API de OpenWeather.
- 💾 **Persistencia** de las lecturas (temperatura, humedad, viento) en una base de datos (SQLite local / PostgreSQL en producción).
- 📈 **Gráficos históricos** interactivos (Chart.js + react‑chartjs‑2).
- 🗃️ **Exportación** de reportes a CSV (papaparse) y PDF (jsPDF + autotable).
- 🔒 **Autenticación** con Clerk.
- 🕒 **Recolección automática** diaria de datos con Cron Jobs (node‑cron local / Vercel Cron Jobs).
Ideal para demostraciones de: React, Next.js App Router, TailwindCSS, Prisma, consumo de APIs, generación de archivos, cron jobs y despliegue en la nube.
---
## 🚀 Tecnologías
- **Frontend**: Next.js (App Router), React, TailwindCSS
- **Backend**: Next.js Route Handlers (Node.js runtime)
- **BD dev**: SQLite + Prisma
- **BD prod**: PostgreSQL + Prisma
- **Gráficos**: Chart.js + react‑chartjs‑2
- **Auth**: Clerk (`@clerk/nextjs`)
- **Exportación**: papaparse, jsPDF + autotable
- **Cron local**: node‑cron
- **Cron prod**: Vercel Cron Jobs (`vercel.json`)
---
## ⚙️ Instalación y arranque local
1. **Clona el repo**
```bash
git clone https://github.com/h0kd/climate-analytics.git
cd climate-analytics
```
2. **Instala dependencias**
```bash
npm install
```
3. **Crea** un fichero `.env.local` con tus credenciales:
```env
# OpenWeather
WEATHER_API_KEY=TU_OPENWEATHER_KEY
# Clerk
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_xxx
CLERK_SECRET_KEY=sk_test_xxx
# Base de datos local (SQLite)
DATABASE_URL="file:./dev.db"
# (Opcional si migras a Postgres)
# DATABASE_URL=postgresql://USER:PASS@HOST:PORT/DB
# Cron
CRON_SECRET=S3cureCr0nT0ken!
# URL pública de tu app (para rutas internas en cron)
NEXT_PUBLIC_APP_URL=http://localhost:3000
```
4. **Inicializa BD y Prisma**
```bash
npx prisma migrate dev --name init
npx prisma generate
```
5. **(Opcional) Si quieres poblar datos**
```bash
npm run seed # semillas de ciudades
npm run seed-weather # histórico sintético últimos 7 días
```
6. **Arranca en modo dev**
```bash
npm run dev
```
→ Visita [http://localhost:3000](http://localhost:3000)
---
## 🛠️ Scripts disponibles
| Script | Descripción |
| ---------------------- | ------------------------------------------------- |
| `npm run dev` | Servidor de desarrollo (Next.js + Turbopack) |
| `npm run build` | Genera build de producción |
| `npm run start` | Inicia servidor en modo producción |
| `npm run lint` | Ejecuta ESLint |
| `npm run seed` | Poblar tabla **City** |
| `npm run seed-weather` | Poblar tabla **WeatherData** con datos sintéticos |
---
## 📄 Uso básico
1. Regístrate o inicia sesión con Clerk.
2. Selecciona una ciudad en el desplegable.
3. Consulta clima actual y descarga CSV / PDF.
4. Ajusta el rango de fechas para tu histórico en el gráfico.
---
## 🕒 Cron Jobs
### Local
En `scripts/fetchAndStore.ts` usamos `node-cron` para lanzar automáticamente la recolección diaria.
Para probarlo manualmente:
```bash
npm run fetch-and-store
```
### Producción (Vercel)
1. Crea un archivo **vercel.json** en la raíz:
```json
{
"crons": [
{
"path": "/api/cron",
"schedule": "0 2 * * *"
}
]
}
```
2. Asegúrate en **Settings → Cron Jobs** de Vercel que esté **Enabled**.
3. Añade tu `CRON_SECRET` en **Environment Variables** del proyecto.
4. La ruta `/api/cron` validará `Authorization: Bearer $CRON_SECRET` y disparará la recolección.
---
## 📦 Despliegue en Vercel
1. Empuja tu rama `master` a GitHub.
2. Importa el repo en Vercel, selecciona **Next.js**.
3. Configura tus **Environment Variables** en el dashboard (mismas que `.env.local`).
4. Comprueba el **Activity → Functions** para ver invocaciones de:
- `/api/weather/fetch-and-store` (manual o cron)
- `/api/cron` (programado)
---
## 📄 Licencia
MIT © \[h0kd]