https://github.com/pnvdev/url-shortener-web
Next.js project for a URL Shortener project
https://github.com/pnvdev/url-shortener-web
Last synced: 3 days ago
JSON representation
Next.js project for a URL Shortener project
- Host: GitHub
- URL: https://github.com/pnvdev/url-shortener-web
- Owner: pnvdev
- Created: 2025-10-07T02:16:39.000Z (9 months ago)
- Default Branch: main
- Last Pushed: 2025-10-07T04:33:55.000Z (9 months ago)
- Last Synced: 2025-10-26T23:38:37.757Z (8 months ago)
- Language: TypeScript
- Homepage: https://url-shortener-web-pearl.vercel.app
- Size: 127 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# URL Shortener Web App
Una aplicación web moderna construida con Next.js para crear, gestionar y redirigir URLs acortadas con una interfaz minimalista y elegante.
## 📋 Tabla de Contenidos
- [Características](#-características)
- [Tecnologías](#-tecnologías)
- [Requisitos Previos](#-requisitos-previos)
- [Guía de Inicio Rápido](#-guía-de-inicio-rápido)
- [Instalación y Configuración](#-instalación-y-configuración)
- [Ejecución Local](#-ejecución-local)
- [Despliegue en la Nube](#-despliegue-en-la-nube)
- [Estructura del Proyecto](#-estructura-del-proyecto)
- [API y Backend](#-api-y-backend)
- [Uso de la Aplicación](#-uso-de-la-aplicación)
## ✨ Características
- **Creación de URLs Cortas**: Convierte URLs largas en enlaces cortos y compartibles
- **Gestión de URLs**: Visualiza todas tus URLs acortadas en una lista organizada
- **Almacenamiento Persistente**: Guarda tus URLs en el navegador (localStorage)
- **Copiar al Portapapeles**: Copia URLs acortadas con un solo clic
- **Página de Redirección**: Muestra un mensaje de carga antes de redirigir al destino
- **Modo Oscuro**: Soporte completo para tema claro y oscuro
- **Diseño Minimalista**: Interfaz limpia y profesional enfocada en la funcionalidad
- **Responsive**: Funciona perfectamente en dispositivos móviles y de escritorio
- **Notificaciones Toast**: Feedback visual para todas las acciones del usuario
## 🛠️ Tecnologías
- **Next.js 15.5.4** - Framework de React con Turbopack
- **React 19.1.0** - Biblioteca de interfaz de usuario
- **TypeScript 5** - Tipado estático para JavaScript
- **Tailwind CSS 4.0** - Framework CSS utility-first
- **LocalStorage API** - Persistencia de datos en el navegador
## 📦 Requisitos Previos
Antes de comenzar, asegúrate de tener instalado:
- **Node.js** 18.0.0 o superior ([Descargar Node.js](https://nodejs.org/))
- **npm** 9.0.0 o superior (incluido con Node.js)
- **Git** (para clonar el repositorio)
Para verificar las versiones instaladas:
```bash
node --version
npm --version
git --version
```
## 🚀 Guía de Inicio Rápido
Ejecuta estos comandos para tener la aplicación corriendo en menos de 2 minutos:
```bash
# 1. Clona el repositorio
git clone
cd url-shortener-web
# 2. Instala las dependencias
npm install
# 3. Inicia el servidor de desarrollo
npm run dev
```
¡Listo! Abre [http://localhost:3000](http://localhost:3000) en tu navegador.
## 🔧 Instalación y Configuración
### 1. Clonar el Repositorio
```bash
git clone
cd url-shortener-web
```
### 2. Instalar Dependencias
Usando npm:
```bash
npm install
```
Usando yarn:
```bash
yarn install
```
Usando pnpm:
```bash
pnpm install
```
### 3. Configuración del Backend (Opcional)
La aplicación está configurada para usar el backend en `http://18.116.202.212`. Si necesitas cambiar esta URL:
1. Abre `src/app/api/short-urls/route.ts`
2. Modifica la variable `BACKEND_URL`:
```typescript
const BACKEND_URL = 'http://TU_BACKEND_URL/api/short-urls';
```
3. Abre `src/app/s/[code]/page.tsx`
4. Modifica la URL de redirección:
```typescript
window.location.href = `http://TU_BACKEND_URL/s/${code}`;
```
## 💻 Ejecución Local
### Modo Desarrollo
El modo desarrollo incluye hot-reload, lo que significa que verás los cambios instantáneamente:
```bash
npm run dev
```
La aplicación estará disponible en:
- **URL principal**: [http://localhost:3000](http://localhost:3000)
- **Si el puerto 3000 está ocupado**: [http://localhost:3001](http://localhost:3001)
### Modo Producción (Local)
Para probar la versión optimizada localmente:
```bash
# 1. Construir la aplicación
npm run build
# 2. Iniciar el servidor de producción
npm start
```
La aplicación estará disponible en [http://localhost:3000](http://localhost:3000)
### Comandos Disponibles
```bash
# Desarrollo
npm run dev # Inicia servidor de desarrollo con Turbopack
# Producción
npm run build # Construye la aplicación para producción
npm start # Inicia el servidor de producción
# Testing
npm test # Ejecuta todos los tests
npm run test:watch # Ejecuta tests en modo watch
npm run test:coverage # Genera reporte de cobertura
# Utilidades
npm run lint # Ejecuta ESLint para verificar código
```
## ☁️ Despliegue en la Nube
### Opción 1: Vercel (Recomendado)
Vercel es la plataforma creada por los desarrolladores de Next.js y ofrece el mejor soporte:
#### Despliegue Automático desde GitHub
1. **Crea una cuenta en [Vercel](https://vercel.com)**
2. **Conecta tu repositorio de GitHub**:
- Haz clic en "Add New Project"
- Selecciona tu repositorio de GitHub
- Vercel detectará automáticamente que es un proyecto Next.js
3. **Configura el proyecto** (Vercel usa configuración por defecto):
- Framework Preset: Next.js
- Build Command: `npm run build`
- Output Directory: `.next`
- Install Command: `npm install`
4. **Haz clic en "Deploy"**
5. **Tu aplicación estará en línea** en una URL como:
```
https://tu-proyecto.vercel.app
```
#### Despliegue desde la Terminal
```bash
# 1. Instala Vercel CLI
npm install -g vercel
# 2. Inicia sesión en Vercel
vercel login
# 3. Despliega tu proyecto
vercel
# 4. Para producción
vercel --prod
```
### Opción 2: Netlify
1. **Crea una cuenta en [Netlify](https://www.netlify.com)**
2. **Conecta tu repositorio**:
- Click en "Add new site" → "Import an existing project"
- Conecta con GitHub y selecciona tu repositorio
3. **Configura el build**:
- Build command: `npm run build`
- Publish directory: `.next`
4. **Despliega**
### Opción 3: AWS Amplify
1. **Crea una cuenta en [AWS Amplify](https://aws.amazon.com/amplify/)**
2. **Conecta tu repositorio de GitHub**
3. **Amplify detectará Next.js automáticamente**
4. **Configuración de build** (amplify.yml):
```yaml
version: 1
frontend:
phases:
preBuild:
commands:
- npm install
build:
commands:
- npm run build
artifacts:
baseDirectory: .next
files:
- '**/*'
cache:
paths:
- node_modules/**/*
```
5. **Despliega**
### Opción 4: Docker
Si prefieres usar Docker:
```dockerfile
# Dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["npm", "start"]
```
Construir y ejecutar:
```bash
# Construir imagen
docker build -t url-shortener .
# Ejecutar contenedor
docker run -p 3000:3000 url-shortener
```
### Variables de Entorno (Opcional)
Si necesitas configurar variables de entorno en producción:
1. Crea un archivo `.env.production`:
```env
NEXT_PUBLIC_BACKEND_URL=http://18.116.202.212
```
2. Configura las variables en tu plataforma de despliegue:
- **Vercel**: Settings → Environment Variables
- **Netlify**: Site settings → Build & deploy → Environment
- **AWS Amplify**: App settings → Environment variables
## 📁 Estructura del Proyecto
```plaintext
url-shortener-web/
├── public/ # Archivos estáticos
│ ├── file.svg
│ ├── globe.svg
│ ├── next.svg
│ ├── vercel.svg
│ └── window.svg
├── src/
│ └── app/
│ ├── api/
│ │ └── short-urls/
│ │ └── route.ts # Proxy API para evitar CORS
│ ├── components/
│ │ └── Header.tsx # Componente de navegación
│ ├── create/
│ │ └── page.tsx # Página de creación de URLs
│ ├── s/
│ │ └── [code]/
│ │ └── page.tsx # Página de redirección
│ ├── favicon.ico
│ ├── globals.css # Estilos globales y animaciones
│ ├── layout.tsx # Layout principal de la app
│ └── page.tsx # Página principal (lista de URLs)
├── eslint.config.mjs # Configuración de ESLint
├── next.config.ts # Configuración de Next.js
├── package.json # Dependencias y scripts
├── postcss.config.mjs # Configuración de PostCSS
├── tailwind.config.ts # Configuración de Tailwind CSS
├── tsconfig.json # Configuración de TypeScript
└── README.md # Este archivo
```
### Descripción de Archivos Clave
- **`src/app/page.tsx`**: Página principal que muestra la lista de URLs acortadas con opciones de copiar, redirigir y eliminar
- **`src/app/create/page.tsx`**: Formulario para crear nuevas URLs acortadas
- **`src/app/s/[code]/page.tsx`**: Página de redirección con animación de carga
- **`src/app/api/short-urls/route.ts`**: Proxy para el backend que evita problemas de CORS
- **`src/app/components/Header.tsx`**: Componente de navegación reutilizable
- **`src/app/globals.css`**: Estilos globales, animaciones y tema oscuro
## 🔌 API y Backend
La aplicación se conecta a un servicio backend de acortador de URLs en `http://18.116.202.212`
### Crear URL Corta
**Endpoint**: `POST /api/short-urls`
**Request Body**:
```json
{
"url": "https://www.example.com/very/long/url/path"
}
```
**Response**:
```json
{
"original_url": "https://www.example.com/very/long/url/path",
"short_url": "http://18.116.202.212/s/2caf8b",
"short_code": "2caf8b",
"created_at": "2025-10-06T14:05:35.000000Z"
}
```
### Redirección
**Endpoint**: `GET /s/{code}`
Redirige automáticamente a la URL original asociada al código.
### Flujo de Datos
1. **Usuario ingresa URL** → Formulario en `/create`
2. **Petición al proxy** → `POST /api/short-urls` (Next.js)
3. **Proxy al backend** → `POST http://18.116.202.212/api/short-urls`
4. **Respuesta del backend** → Código corto generado
5. **Guardado local** → localStorage del navegador
6. **Redirección** → Vista de lista en `/`
## 📱 Uso de la Aplicación
### 1. Ver URLs Acortadas
En la página principal (`/`):
- Visualiza todas tus URLs acortadas
- Información mostrada: ID, código, URL original y fecha de creación
- Acciones disponibles por URL:
- **Copiar**: Copia la URL corta al portapapeles
- **Redirigir**: Prueba el enlace en una nueva pestaña
- **Eliminar**: Borra la URL de tu lista
- **Clear All**: Elimina todas las URLs de una vez
### 2. Crear Nueva URL
1. Haz clic en "Create URL" en el header o en el botón de la página principal
2. Ingresa la URL larga que quieres acortar
3. La validación se hace en tiempo real (debe comenzar con http:// o https://)
4. Haz clic en "Shorten URL"
5. Serás redirigido a la página principal con tu nueva URL
### 3. Probar Redirección
1. En la lista de URLs, haz clic en el icono de redirección
2. Se abrirá la página `/s/[code]` con una animación de carga
3. Después de 1.5 segundos, serás redirigido al destino final
### 4. Persistencia de Datos
- Todas las URLs se guardan en el **localStorage** del navegador
- Los datos persisten incluso después de cerrar el navegador
- Solo se pierden si borras los datos del navegador o usas "Clear All"
## 🎨 Características de Diseño
- **Minimalista y Limpio**: Enfoque en funcionalidad sobre decoración
- **Colores Neutros**: Paleta de grises, negro y blanco
- **Modo Oscuro**: Soporte completo sin configuración adicional
- **Responsive**: Adaptable a móviles, tablets y escritorio
- **Accesibilidad**: Compatible con lectores de pantalla y navegación por teclado
- **Animaciones Sutiles**: Transiciones suaves en hover y feedback visual
## 🔍 Solución de Problemas
### El servidor no inicia
```bash
# Limpia node_modules y reinstala
rm -rf node_modules package-lock.json
npm install
npm run dev
```
### El puerto 3000 está ocupado
```bash
# Usa un puerto diferente
PORT=3001 npm run dev
```
O Next.js automáticamente intentará usar el puerto 3001.
### Errores de CORS
La aplicación usa un proxy interno (`/api/short-urls`) para evitar errores de CORS. Si experimentas problemas:
1. Verifica que el backend esté en línea: `http://18.116.202.212`
2. Revisa la consola del navegador para errores
3. Asegúrate de que el proxy esté configurado correctamente
### Los datos no persisten
Si tus URLs no se guardan:
1. Verifica que el navegador permita localStorage
2. Revisa la consola para errores de JavaScript
3. Prueba en modo incógnito para descartar extensiones
## � Testing
Este proyecto incluye un conjunto completo de tests para garantizar la calidad del código.
### Configuración de Tests
Para instalar las dependencias de testing:
```bash
npm install
```
### Ejecutar Tests
```bash
# Ejecutar todos los tests
npm test
# Ejecutar tests en modo watch (desarrollo)
npm run test:watch
# Ejecutar tests con reporte de cobertura
npm run test:coverage
```
### Cobertura de Tests
El proyecto incluye tests para:
- ✅ **Componentes**: Header, UrlListContent
- ✅ **Páginas**: Home, Create, Redirect
- ✅ **API Routes**: /api/short-urls
- ✅ **Integración**: Flujos completos de usuario
- ✅ **Utilidades**: Helpers y funciones auxiliares
**Meta de cobertura**: 80%+ en todas las métricas
### Documentación de Tests
Para información detallada sobre testing, consulta:
📖 **[TESTING.md](./TESTING.md)** - Guía completa de testing
Incluye:
- Estructura de tests
- Cómo escribir nuevos tests
- Mejores prácticas
- Solución de problemas
- Ejemplos de código
### Continuous Integration
Los tests se ejecutan automáticamente en:
- Cada push a las ramas principales
- Cada Pull Request
- Antes del deployment
Ver configuración en `.github/workflows/test.yml`
## �🤝 Contribuir
¿Quieres contribuir? ¡Genial! Aquí está cómo:
1. Fork el repositorio
2. Crea una rama para tu feature (`git checkout -b feature/AmazingFeature`)
3. Commit tus cambios (`git commit -m 'Add some AmazingFeature'`)
4. Push a la rama (`git push origin feature/AmazingFeature`)
5. Abre un Pull Request
## 📄 Licencia
Este proyecto es de código abierto y está disponible bajo la licencia MIT.
## 📞 Soporte
Si tienes preguntas o problemas:
1. Revisa la sección [Solución de Problemas](#-solución-de-problemas)
2. Abre un Issue en GitHub
3. Consulta la documentación de [Next.js](https://nextjs.org/docs)
## 🚀 Próximas Características
- [ ] Autenticación de usuarios
- [ ] Estadísticas de clics
- [ ] URLs personalizadas
- [ ] Fecha de expiración para URLs
- [ ] Códigos QR para URLs cortas
- [ ] Exportar URLs a CSV/JSON
- [ ] API pública con documentación
---
Desarrollado con ❤️ usando Next.js y Tailwind CSS