Viajes05 / 12
RETURN
Escanea la etiqueta, contacta con el dueño, recupera la maleta
- Estado
- En producción
- Periodo
- 2026 →
- Rol
- Diseño y desarrollo, de principio a fin
- Para
- Viajeros, empezando por mí: un dueño por instalación, autoalojado en tu propia cuenta de Cloudflare. Código abierto con licencia MIT.
Problema
Quien encuentra una maleta perdida necesita una forma rápida de contactar con el dueño, pero una etiqueta con teléfono y dirección expone datos privados a cualquiera que la mire.
Un sistema de etiquetas QR y NFC para mi equipaje, autoalojado en Cloudflare Workers. Quien encuentra una maleta escanea la etiqueta y puede escribirme, llamarme o usar WhatsApp, sin cuenta ni app, y solo comparte una ubicación si lo decide.
Caso de estudio
Cada objeto lleva una etiqueta: una tarjeta imprimible con un código QR y un chip NFC con el mismo enlace. Al escanearla se abre una ficha pública en inglés, alemán o español con las vías de contacto que yo decido mostrar (email, teléfono, WhatsApp o contactos de confianza) y una conversación que quien la encuentra puede iniciar sin registrarse.
La ubicación nunca se toma en silencio: el GPS de quien la encuentra solo se pide tras un toque explícito, se muestra como vista previa y se envía después de confirmar. Las etiquetas desconocidas, revocadas o mal formadas devuelven el mismo 404, el primer contacto pasa por Turnstile y las escrituras tienen límites por IP y por etiqueta.
En mi lado, un panel privado detrás de Cloudflare Access reúne objetos, etiquetas, conversaciones, planes de devolución y recuperaciones, y una app instalable que nunca guarda datos privados en caché. Los avisos por email están construidos; el envío desde el dominio aún se está configurando. Las tarjetas imprimibles salen en PDF o PNG, tamaño CR80 con sangrado y marcas de corte.
Arquitectura
Un único Cloudflare Worker sirve dos hosts: las páginas públicas para quien encuentra, renderizadas en servidor con Hono JSX y sin bundle de cliente, y el panel del dueño en React 19 y Vite detrás de Cloudflare Access. Los datos viven en D1 y en un bucket privado de R2 en la UE. Los enlaces son URLs de capacidad (tokens de etiqueta de 128 bits; los de conversación, de 256 bits y guardados solo como SHA-256), cada consulta se filtra por dueño y un cron nocturno se ocupa de la retención y las copias de seguridad.
Decisiones técnicas
- Sin cuenta ni app para quien encuentra: un escaneo tiene que funcionar para un desconocido con prisa.
- Ubicación solo con consentimiento: toque explícito, vista previa y confirmación; nunca se recoge la ubicación del dueño.
- Un mismo 404 para cualquier etiqueta inválida o revocada, para que no se puedan sondear.
- Autoalojado para un único dueño en Cloudflare, no un SaaS que guarde datos ajenos.
- Un modelo de amenazas en el que cada fila nombra el test que la verifica.
Retos y compromisos
Hacer una etiqueta impresa que siga funcionando durante años y que cualquiera sepa usar, dando a un desconocido lo mínimo posible: ningún dato personal salvo los que yo elija, ningún rastreo silencioso y límites contra el abuso que no estorben a quien lo encuentra de buena fe.
Resultados verificados
- Host para quien encuentra activo en return.lr0y.dev; panel del dueño detrás de Cloudflare Access
- Páginas para quien encuentra en inglés, alemán y español
- 30 archivos de tests unitarios y de integración y 16 specs de Playwright (flujo de hallazgo, privacidad de la ubicación, aislamiento, accesibilidad)
- Web Push para el dueño en curso; falta escanear una etiqueta real con un móvil
Los estados son factuales: nada se presenta más terminado de lo que está.