Acortador de URLs profesional Full-Stack
Características • Tecnologías • Instalación • Uso • API • Contribuir
RedisLink es un acortador de URLs moderno y eficiente. Combina la velocidad de Redis con la robustez de Spring Boot en el backend y la modernidad de Angular 20 con TailwindCSS en el frontend.
Perfecto para acortar enlaces largos, rastrear clics y obtener estadísticas detalladas en tiempo real.
- ⚡ Ultra rápido: Tiempos de respuesta < 5ms gracias a Redis
- 🔤 Códigos legibles: Generación automática de códigos basados en palabras (ej:
rich-violet-osprey) - 📊 Contador de clics: Seguimiento en tiempo real de cada URL acortada
- ⏰ TTL automático: URLs temporales con expiración configurable
- 🔄 Gestión de colisiones: Sistema inteligente de fallback
- 🧪 Testing robusto: 154 tests con 85%+ de cobertura
- 🏗️ Arquitectura limpia: Patrón en capas (Controller → Service → Repository)
- 🎨 Diseño moderno: Interfaz con glassmorphism y degradados premium
- 📱 100% Responsive: Adaptado a móvil, tablet y desktop
- 📈 Dashboard de estadísticas: Análisis detallado con:
- Total de clics
- Fecha de creación y antigüedad
- Promedio de clics diarios
- Nivel de popularidad
- Barra de progreso visual
- 📋 Copiar con un click: Funcionalidad de portapapeles integrada
- 🔍 Búsqueda por código: Consulta estadísticas de cualquier URL
⚠️ Manejo de errores: Mensajes amigables y descriptivos
| Tecnología | Versión | Uso |
|---|---|---|
| Java | 21 | Lenguaje principal |
| Spring Boot | 3.5.6 | Framework backend |
| Redis | 7.0+ | Base de datos en memoria |
| Maven | 3.9+ | Gestión de dependencias |
| JUnit 5 | 5.10+ | Testing unitario |
| Mockito | 5.0+ | Mocking para tests |
| Lombok | 1.18+ | Reducción de boilerplate |
| Bean Validation | 3.0 | Validación de datos |
| Tecnología | Versión | Uso |
|---|---|---|
| Angular | 20.3.5 | Framework frontend |
| TypeScript | 5.0+ | Lenguaje tipado |
| TailwindCSS | 3.0 | Framework CSS |
| RxJS | 7.0+ | Programación reactiva |
| HttpClient | - | Comunicación con API |
Antes de comenzar, asegúrate de tener instalado:
- ✅ Java 21 o superior (Descargar)
- ✅ Node.js 18+ y npm (Descargar)
- ✅ Redis Server 7.0+ (Descargar)
- ✅ Angular CLI 20+ (
npm install -g @angular/cli) - ✅ Git (Descargar)
git clone https://github.com/DanielPMdev/RedisLink.git
cd RedisLinkRedis Docker:
docker run -d -p 6379:6379 redis:8.2-alpinecd RedisLinkAPI
# Opción 1: Usar Maven Wrapper (recomendado)
./mvnw clean install
# Opción 2: Usar Maven instalado globalmente
mvn clean install
# Ejecutar el backend
./mvnw spring-boot:runEl backend estará disponible en: http://localhost:8080
Endpoints principales:
- API Base:
http://localhost:8080/api/v1/urls
Abre una nueva terminal y ejecuta:
cd RedisLinkWeb
# Instalar dependencias
npm install
# Iniciar el servidor de desarrollo
ng serve --openEl frontend estará disponible en: http://localhost:4200
- Abre el navegador en
http://localhost:4200 - Ingresa una URL larga en el campo de texto
- Click en el botón "Cortar"
- ¡Listo! Copia tu URL corta
Opción 1: Desde la página principal
- Después de acortar una URL, click en "Ver Estadísticas Completas"
Opción 2: Desde el menú de estadísticas
- Click en "Estadísticas" en el menú superior
- Ingresa el código corto (ej:
rich-violet-osprey) - Click en "Buscar"
Cuando alguien visite tu URL corta:
- Será redirigido automáticamente a la URL original
- El contador de clics se incrementará
http://localhost:8080/api/v1/urls
POST /api/v1/urls/short
Content-Type: application/json
{
"url": "https://www.vocesdecuenca.com/provincia/tarancon/la-guardia-civil-detiene-a-tres-personas-como-presuntos-autores-de-los-robos-en-el-cementerio-de-tarancon/"
}Respuesta exitosa (200 OK):
{
"successful": true,
"message": "Link successfully created",
"link": {
"long_url": "https://www.lasnoticiasdecuenca.es/provincia/cuatro-pueblos-se-ofrecen-para-acoger-nuevos-parque-bomberos-cuenca--43525",
"short": "rich-violet-osprey",
"hits": 0,
"created_at": "2025-10-21T13:30:12.5459048"
},
"shortUrl": "http://localhost:8080/api/v1/urls/rich-violet-osprey"
}GET /api/v1/urls/{shortCode}Respuesta:
- HTTP 301 (Redirect permanente) a la URL original
- Incrementa el contador de clics
GET /api/v1/urls/{shortCode}/statsRespuesta exitosa (200 OK):
{
"long_url": "https://www.vocesdecuenca.com/provincia/un-guardia-civil-fuera-de-servicio-salva-la-vida-a-un-hombre-en-villarejo-de-fuentes/",
"short": "stark-bronze-deer",
"hits": 4,
"created_at": "2025-10-13T11:19:08.9804202"
}cd RedisLinkAPI
# Ejecutar todos los tests
./mvnw test# Redis Configuration
spring.redis.host=localhost
spring.redis.port=6379export const environment = {
production: false,
apiUrl: 'http://localhost:8080/api/v1/urls'
};RedisLink/
├── RedisLinkAPI/ # Backend Spring Boot
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── danielpm/dev/redislink/
│ │ │ │ ├── controller/ # API Controllers
│ │ │ │ ├── service/ # Business Logic
│ │ │ │ ├── repository/ # Data Access
│ │ │ │ ├── model/ # DTOs y Entities
| | | | ├── exceptions/ # Exceptions
| | | | ├── util/ # Utilities
│ │ │ │ └── config/ # Configuración
│ │ │ └── resources/
│ │ │ └── application.properties
│ │ └── test/ # Tests unitarios
│ └── pom.xml
│
└── RedisLinkWeb/ # Frontend Angular
├── src/
│ ├── app/
│ │ ├── core/
│ │ │ ├── models/ # Interfaces TypeScript
│ │ │ └── services/ # Servicios HTTP
│ │ ├── features/
│ │ │ ├── home/ # Página principal
│ │ │ └── stats/ # Dashboard estadísticas
│ │ └── shared/
│ │ └── components/ # Componentes reutilizables
│ │
| ├── environmets/ #Entornos
│ ├── index.html
│ ├── main.ts
│ └── styles.css
├── angular.json
├── package.json
├── tailwind.config.js
└── README.md
- Autenticación con JWT
- Panel de administración
- URLs personalizadas (custom slugs)
- QR Code generator
- Análisis avanzado (geolocalización, dispositivos)
- Rate limiting con Redis
- Tests E2E con Playwright
- Modo oscuro/claro
- Exportar estadísticas (CSV, PDF)
¡Las contribuciones son bienvenidas! Si quieres mejorar RedisLink:
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/nueva-caracteristica) - Commit tus cambios (
git commit -m 'Añade nueva característica') - Push a la rama (
git push origin feature/nueva-caracteristica) - Abre un Pull Request
- Sigue las convenciones de código existentes
- Añade tests para nuevas funcionalidades
- Actualiza la documentación si es necesario
- Asegúrate de que todos los tests pasen
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
Daniel PM
- GitHub: @DanielPMdev
- LinkedIn: Daniel PM
⭐ Si te gusta este proyecto, dale una estrella en GitHub ⭐
Hecho con ❤️ por Daniel PM

