URL Shrinker

Acortador de URLs minimalista. Node.js 24 sin dependencias (node:http + node:sqlite), un solo contenedor.

Producción: https://shrink.montlab.dev

API

Método Ruta Qué hace
POST /api/shorten Body {"url": "https://…", "code": "opcional"}201 {code, url, short_url}
GET /<code> Redirección 302 al destino (cuenta el clic)
GET /api/stats/<code> {code, url, clicks, created_at, short_url}
GET /healthz {ok, links, clicks}
GET / UI web

Códigos generados: 6 caracteres base58. Códigos personalizados: [A-Za-z0-9_-]{3,32} (api y healthz están reservados).

curl -X POST https://shrink.montlab.dev/api/shorten \
  -H 'Content-Type: application/json' \
  -d '{"url": "https://es.wikipedia.org/wiki/Anexo:Ejemplo"}'

Configuración

Variable Por defecto Descripción
PORT 3000 Puerto de escucha
DATA_DIR /data Directorio de la base SQLite (montar volumen persistente)
BASE_URL http://localhost:3000 Base con la que se construyen los enlaces cortos

Desarrollo local

DATA_DIR=./data BASE_URL=http://localhost:3000 node server.js

Requiere Node ≥ 24 (usa node:sqlite).

Despliegue

Pipeline estándar de MontLab: push a este repo (Gitea) → webhook → Coolify reconstruye el Dockerfile y publica en shrink.montlab.dev (Caddy + Let's Encrypt automáticos). La base de datos vive en un volumen persistente montado en /data.

Description
URL Shrinker — acortador de URLs
Readme 34 KiB
Languages
JavaScript 50.6%
HTML 46.1%
Dockerfile 3.3%