Aplicación web desarrollada con Next.js 15 (App Router) que muestra un catálogo de casas en alquiler con funcionalidad de búsqueda por ciudad.
- Routing dinámico - Páginas de detalle de cada casa con rutas dinámicas
- Server Components - Renderizado del lado del servidor con uso de ISR (Incremental Static Regeneration) y SSG (Static Site Generation). Para el ejemplo, la página de listado de casas utiliza ISR pre-generada y la página de detalle de casa utiliza ISR bajo demanda.
- Client Components - Interactividad para el filtrado de búsqueda. Filtrado por ciudad en el cliente sin recargar la página.
- Optimización de imágenes - Next.js Image con optimización automática
- TypeScript - Tipado estático
- Tailwind CSS - Estilos responsivos
- API Server - Mock server con Hono para simular backend
src/app: Contiene las rutas y páginas de la aplicación Next.jssrc/pods/house-list: Módulo para el listado de casas, incluyendo componentes, mapeadores y llamadas a la APIsrc/pods/house: Módulo para la página de detalle de una casasrc/pods/search-input: Componente de entrada de búsquedasrc/core/constants: Constantes
- Clonar el repositorio
git clone <repository-url>
cd nextjs-lab- Instalar dependencias
npm installEsto instalará tanto las dependencias del cliente como del servidor API automáticamente.
Ejecuta tanto el servidor Next.js como el API server simultáneamente:
npm startEsto inicia:
- Next.js dev server: http://localhost:3000
- API server: http://localhost:3001
npm run start:devnpm run start:api-server- Compilar el proyecto
npm run build- Iniciar en producción
npm run start:prodLa aplicación estará disponible en http://localhost:8080
Crea un archivo .env.local en la raíz del proyecto para configurar las URLs de la API si es necesario:
BASE_API_URL=http://localhost:3001/api
BASE_PICTURES_URL=http://localhost:3001
IMAGES_DOMAIN=localhost
Las URLs de la API se configuran en src/core/constants/env.constants.ts:
export const ENV = {
BASE_API_URL: process.env.BASE_API_URL ?? 'http://localhost:3001/api',
BASE_PICTURES_URL: process.env.BASE_PICTURES_URL ?? 'http://localhost:3001',
};Configurado en package.json:
"imports": {
"#*": "./src/*"
}