Sistema de agenda online para barberías con panel de administración, autenticación y notificaciones automáticas vía WhatsApp.
| Tecnología | Versión | Uso |
|---|---|---|
| Next.js | 14.2.5 | Framework fullstack con App Router |
| React | 18 | UI y componentes |
| TypeScript | 5 | Tipado estático |
| Supabase | 2.x | Base de datos, autenticación y backend |
| Tailwind CSS | 3.4 | Estilos utilitarios |
| Fonnte | — | Notificaciones automáticas por WhatsApp |
barber-agenda2/
├── app/
│ ├── admin/ # Panel de administración (protegido)
│ ├── api/
│ │ ├── auth/logout/ # Cierre de sesión
│ │ ├── available/[date]/ # Disponibilidad por fecha
│ │ ├── bookings/ # CRUD de reservas
│ │ │ └── [id]/
│ │ └── services/ # Servicios disponibles
│ ├── login/ # Autenticación
│ ├── layout.tsx
│ └── page.tsx
├── components/
│ ├── BookingForm.tsx # Formulario de reserva
│ └── BookingList.tsx # Listado de turnos
├── lib/
│ ├── supabase.ts # Cliente Supabase (browser)
│ ├── supabase-server.ts # Cliente Supabase (server)
│ └── whatsapp.ts # Integración Fonnte
└── middleware.ts # Protección de rutas
git clone https://github.com/Joaquinln23/AppReservas.git
cd AppReservas
npm installCrea .env.local en la raíz del proyecto:
NEXT_PUBLIC_SUPABASE_URL=https://tu-proyecto.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=tu-anon-key
FONNTE_TOKEN=tu-token-fonnte
BARBER_PHONE=56912345678
BARBER_PHONEdebe ser el número sin+(ej:56912345678)
Ve a SQL Editor en Supabase y ejecuta el archivo supabase-schema.sql incluido en el proyecto.
- En Supabase → Authentication → Users
- Clic en "Add user" → "Create new user"
- Ingresa email y contraseña
- Ese usuario tendrá acceso a
/admin
- Crea una cuenta en fonnte.com
- Ve a Device → Add Device
- Ingresa tu número con código de país (ej:
56920952959) - Escanea el QR con tu WhatsApp
- Una vez conectado, clic en Token y cópialo
- Agrega el token a
FONNTE_TOKENen.env.local
⚠️ El número del barbero debe ser el mismo que se conecta en Fonnte.
npm run dev| URL | Descripción |
|---|---|
| http://localhost:3000 | Vista cliente — reserva de citas |
| http://localhost:3000/login | Login administrador |
| http://localhost:3000/admin | Panel admin (requiere login) |
- 📅 Reserva de turnos — Clientes agendan citas por fecha y horario disponible
- 🔐 Autenticación — Login seguro con Supabase Auth + middleware de protección
- 🛠️ Panel admin — Gestión completa de reservas y servicios
- 📲 Notificaciones WhatsApp — Confirmación automática al barbero vía Fonnte al reservar
- ✅ Disponibilidad en tiempo real — Los horarios se actualizan dinámicamente
services
| Campo | Tipo | Descripción |
|---|---|---|
| id | uuid | Identificador único |
| name | text | Nombre del servicio |
| duration | int | Duración en minutos |
| price | numeric | Precio |
| description | text | Descripción |
| active | boolean | Si está disponible |
bookings
| Campo | Tipo | Descripción |
|---|---|---|
| id | uuid | Identificador único |
| client_name | text | Nombre del cliente |
| client_email | text | Email del cliente |
| client_phone | text | Teléfono del cliente |
| date | date | Fecha del turno |
| time | time | Hora del turno |
| service_id | uuid | Servicio reservado |
| notes | text | Notas adicionales |
| status | enum | confirmed / cancelled |
| created_at | timestamp | Fecha de creación |
vercelAgrega estas variables de entorno en el dashboard de Vercel:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYFONNTE_TOKENBARBER_PHONE
npm run dev # Servidor de desarrollo
npm run build # Build de producción
npm run start # Iniciar en producciónMIT