Cache of Recipes es una aplicación web moderna construida con Next.js que permite a los usuarios descubrir, guardar y compartir recetas culinarias. La aplicación utiliza la API de Spoonacular para obtener una amplia variedad de recetas y ofrece funcionalidades avanzadas como autenticación, gestión de favoritos y calificaciones.
- 🔍 Búsqueda Avanzada: Busca recetas por nombre, ingredientes, tipo de cocina, dietas especiales y más
- ❤️ Sistema de Favoritos: Guarda tus recetas preferidas para acceso rápido
- ⭐ Calificaciones y Reseñas: Comparte opiniones y califica recetas
- 👤 Autenticación Completa: Registro e inicio de sesión con email/contraseña o Google
- 📱 Diseño Responsivo: Interfaz optimizada para dispositivos móviles y escritorio
- 🎨 Animaciones GSAP: Experiencia de usuario fluida con animaciones modernas
- 🌙 Modo Oscuro: Soporte completo para tema claro y oscuro
- 🔄 Gestión Inteligente de API: Sistema robusto con múltiples claves API y manejo de errores
- Next.js 15.3.2 - Framework React con SSR/SSG
- React 19 - Biblioteca de interfaz de usuario
- TypeScript - Tipado estático
- Tailwind CSS 4 - Framework de estilos utility-first
- GSAP - Animaciones avanzadas y efectos visuales
- Radix UI - Componentes de interfaz accesibles
- React Hook Form - Gestión de formularios
- React Query - Gestión de estado del servidor
- Zod - Validación de esquemas
- Lucide React - Iconografía moderna
- Firebase - Autenticación y base de datos
- Authentication (Email/Password y Google)
- Firestore (base de datos NoSQL)
- Storage (almacenamiento de archivos)
- Spoonacular API - Datos de recetas y nutrición
- Axios - Cliente HTTP para requests API
- ESLint - Linting de código
- PostCSS - Procesamiento de CSS
- Next Themes - Gestión de temas
src/
├── app/ # App Router de Next.js
│ ├── (auth)/ # Rutas de autenticación
│ │ ├── login/ # Página de inicio de sesión
│ │ └── register/ # Página de registro
│ ├── (main)/ # Rutas principales protegidas
│ │ ├── favorites/ # Gestión de recetas favoritas
│ │ ├── profile/ # Perfil de usuario
│ │ └── recipes/ # Búsqueda y detalles de recetas
│ └── api/ # API Routes
│ └── spoonacular/ # Proxy para API de Spoonacular
├── components/ # Componentes reutilizables
│ ├── auth/ # Componentes de autenticación
│ ├── recipes/ # Componentes relacionados con recetas
│ ├── ui/ # Componentes UI base (shadcn/ui)
│ └── layout/ # Componentes de layout
├── context/ # Contextos de React
├── hooks/ # Hooks personalizados
├── lib/ # Utilidades y configuraciones
│ └── server/ # Lógica del servidor
├── types/ # Definiciones de TypeScript
└── middleware.ts # Middleware de Next.js
- Node.js 18+
- npm o yarn
- Cuenta de Firebase
- API Key de Spoonacular
git clone https://github.com/tuusuario/cacheofrecipes.git
cd cacheofrecipes
npm install
Crea un archivo .env.local
en la raíz del proyecto:
# Firebase Configuration
NEXT_PUBLIC_FIREBASE_API_KEY=tu_firebase_api_key
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=tu_proyecto.firebaseapp.com
NEXT_PUBLIC_FIREBASE_PROJECT_ID=tu_proyecto_id
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=tu_proyecto.appspot.com
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=tu_sender_id
NEXT_PUBLIC_FIREBASE_APP_ID=tu_app_id
# Spoonacular API Keys (separadas por comas para balanceo de carga)
SPOONACULAR_API_KEYS=key1,key2,key3
# URL de la aplicación (para producción)
NEXT_PUBLIC_API_URL=https://tu-dominio.com
- Crea un proyecto en Firebase Console
- Habilita Authentication (Email/Password y Google)
- Crea una base de datos Firestore
- Configura las reglas de seguridad de Firestore:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// Reglas para favoritos
match /favorites/{document} {
allow read, write: if request.auth != null && request.auth.uid == resource.data.userId;
allow create: if request.auth != null && request.auth.uid == request.resource.data.userId;
}
// Reglas para reseñas
match /reviews/{document} {
allow read: if true;
allow write: if request.auth != null && request.auth.uid == resource.data.userId;
allow create: if request.auth != null && request.auth.uid == request.resource.data.userId;
}
// Reglas para usuarios
match /users/{userId} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}
}
}
- Registrate en Spoonacular API
- Obtén tu API key desde el dashboard
- Para mejor rendimiento, considera obtener múltiples keys
# Desarrollo
npm run dev
# Producción
npm run build
npm start
La aplicación estará disponible en http://localhost:3000
- Registro con email: Validación completa de formularios
- Inicio de sesión: Persistencia de sesión
- Google OAuth: Integración nativa con Firebase Auth
- Gestión de perfil: Actualización de datos personales
- Restablecimiento de contraseña: Por email
- Filtros avanzados: Por cocina, dieta, intolerancia, tiempo de preparación
- Búsqueda por texto: Título, ingredientes o descripción
- Ordenamiento: Por popularidad, tiempo, puntuación nutricional
- Paginación: Carga eficiente de resultados
- Recetas similares: Recomendaciones basadas en selección
- Añadir/quitar favoritos: Con feedback visual inmediato
- Persistencia: Sincronización con Firebase Firestore
- Carga optimizada: Lazy loading de detalles de recetas
- Vista dedicada: Página especial para gestionar favoritos
- Calificación por estrellas: Sistema de 1 a 5 estrellas
- Comentarios: Texto libre para opiniones detalladas
- Agregación: Cálculo automático de puntuación promedio
- Validación: Solo usuarios autenticados pueden reseñar
- Múltiples claves: Balanceo automático de carga
- Reintentos inteligentes: Manejo robusto de errores
- Límites de rate: Respeto de las limitaciones de la API
- Proxy interno: Protección de claves API del frontend
- Elementos flotantes: Decoraciones animadas en la página principal
- Transiciones suaves: Entre estados y páginas
- Efectos de hover: Interacciones responsivas
- Loading states: Feedback visual durante cargas
- Diseño consistente: Basado en shadcn/ui y Radix
- Accesibilidad: Soporte completo para lectores de pantalla
- Responsive: Adaptación automática a diferentes tamaños de pantalla
- Temas: Modo claro y oscuro con transiciones suaves
{
uid: string;
email: string;
firstName: string;
lastName: string;
displayName: string;
photoURL: string | null;
bio: string | null;
createdAt: Timestamp;
}
{
userId: string;
recipeId: number;
createdAt: Timestamp;
}
{
userId: string;
recipeId: number;
rating: number;
comment: string;
createdAt: Timestamp;
updatedAt: Timestamp;
}
- Autenticación Firebase: Gestión segura de sesiones
- Reglas Firestore: Control de acceso a datos
- Validación de entrada: Schemas Zod en formularios
- Middleware de protección: Rutas protegidas por autenticación
- Sanitización: Limpieza de datos de usuario
- HTTPS obligatorio: En producción
npm install -g vercel
vercel
Asegúrate de configurar todas las variables de entorno en tu plataforma de deployment.
- Configura un dominio personalizado
- Habilita analytics
- Configura alertas de monitoreo
- Optimiza las imágenes con next/image
# Ejecutar tests
npm run test
# Linting
npm run lint
- Lazy loading: Componentes y rutas cargadas bajo demanda
- Optimización de imágenes: Compresión automática con Next.js
- Code splitting: Bundles optimizados por ruta
- Caching: Estrategias de cache para API calls
- Preloading: Prefetch de rutas críticas
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature
) - Commit tus cambios (
git commit -m 'Add some AmazingFeature'
) - Push a la rama (
git push origin feature/AmazingFeature
) - Abre un Pull Request
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE
para más detalles.
Aaron Hernandez Jimenez - [email protected]
- Spoonacular API por los datos de recetas
- Firebase por la infraestructura backend
- shadcn/ui por los componentes UI
- GSAP por las animaciones
- La comunidad de Next.js por el excelente framework
⭐ Si este proyecto te ha sido útil, ¡considera darle una estrella en GitHub!