Proyecto experimental · Prueba técnica · 2026

LendLoop / Full-stack

Una plataforma para
prestar herramientas.

Desarrollé una plataforma para publicar herramientas, solicitar préstamos por fechas y gestionar su devolución. La usé como ejercicio para conectar una experiencia de producto con permisos de backend, automatizaciones confiables y manejo seguro de archivos.

Mi trabajo
Full-stack · UX · Seguridad
Stack
Next.js · Clerk · Convex · n8n
Estado
Prototipo funcional
Catálogo de LendLoop con herramientas de muestra
Captura de la demo con datos ficticios. No representa uso real de una comunidad.

01 / Producto

Del catálogo al préstamo.

El catálogo público muestra únicamente nombres y categorías. Después de iniciar sesión, una persona puede crear publicaciones, consultar disponibilidad y solicitar fechas. El propietario aprueba o rechaza; los participantes registran la devolución. Un administrador puede moderar publicaciones y distinguir prestadores de confianza.

Elegí una interfaz de catálogo con búsqueda, categorías y estados visibles. Separé mis publicaciones, mis solicitudes y las solicitudes recibidas para que cada acción tenga un lugar claro.

02 / Arquitectura

Responsabilidades separadas.

Next.js + Clerk + Convex

Next.js y TypeScript presentan la interfaz. Clerk gestiona identidad; Convex conserva herramientas, préstamos y miembros y verifica permisos en cada operación. El cliente no decide quién es propietario ni administrador.

n8n + Docker

Los cambios de un préstamo generan eventos en una cola transaccional. n8n procesa notificaciones simuladas y recordatorios diarios de vencimiento. Incluí reintentos, registro de errores e idempotencia para evitar duplicados.

03 / Ciberseguridad

Verificar antes de confiar.

Permisos e integraciones

  • Autorización y propiedad verificadas en Convex; comprobación de disponibilidad al aprobar.
  • Webhooks firmados con HMAC y claves separadas por dirección.
  • Eventos con identificadores opacos, sin correos ni tokens de sesión.
  • Variables privadas fuera del repositorio; plantillas de configuración sin claves.

Imágenes y almacenamiento

El servidor valida el contenido, decodifica y convierte JPEG, PNG o WebP estáticos a WebP optimizado. Limita tamaño y resolución y elimina metadatos. Convex almacena solo el resultado procesado; la lectura requiere autenticación y el reemplazo exige ser propietario.

Las cargas usan tickets de un solo uso, cuotas y una firma del procesador. El backend vuelve a comprobar el permiso antes de asociar el archivo a una publicación.

La capa de datos usa las consultas estructuradas de Convex y valida argumentos e identificadores antes de realizar operaciones. Los textos de usuario se muestran como texto, sin ejecutarlos como HTML.

04 / Verificación

Pruebas y límites visibles.

63pruebas automatizadas8recorridos Chromium de la demo

Verifiqué además la carga autenticada de un JPEG, su lectura como WebP, el rechazo de un archivo falso, la denegación de acceso anónimo y la eliminación. El circuito Convex–n8n entregó tres notificaciones firmadas y evitó duplicados al repetir un evento. Las pruebas de integración del préstamo utilizaron identidades sintéticas de desarrollo.

Solicitud de préstamo en la demo de LendLoop
Recorrido de solicitud con datos de muestra.

Consultar alcance y evidencia de las pruebas ↗

05 / Alcance

Un ejercicio funcional, no un servicio comercial.

LendLoop es un desarrollo experimental realizado como prueba técnica. No tiene usuarios reales ni métricas de adopción. Las notificaciones son registros simulados: no se envían correos. La demo en memoria está separada de la aplicación autenticada con persistencia.

Queda pendiente el recorrido manual con dos cuentas reales de Clerk. Para producción añadiría alojamiento estable, observabilidad, cuotas globales, paginación, políticas de retención y reconciliación de archivos huérfanos. Estas limitaciones están documentadas junto con las decisiones de seguridad.