Proyectos Personales

Apps personales que diseño, construyo y lanzo de principio a fin — más allá del trabajo.

Proyecto personal destacado

LoopBeat

Tu música. En todas partes.

Herramienta personal de música sin contraseña y con acceso por invitación. Pega una URL de YouTube, una búsqueda o un enlace de playlist de Spotify / Apple Music — LoopBeat descarga el audio, lo transcodifica a MP3 o AAC, lo almacena en object storage y te entrega un enlace de descarga firmado de corta duración.

Astro + React 19FastAPI · Python 3.11Postgres + Cloudflare R2

Cómo está construido

De punta a punta, cada servicio conectado — de un vistazo.

web

Front-end

Sitio estático Astro 5 con "islands" React 19, desplegado en Vercel. El navegador solo habla con su propio origen — Vercel reescribe /api/* al backend en el servidor, manteniendo sesiones first-party.

Astro 5React 19TailwindTypeScriptVercel
dns

Back-end

FastAPI (Python 3.11) en contenedor en Render. Las descargas corren como tareas en background — yt-dlp obtiene el audio, ffmpeg lo transcodifica — y pueden delegarse a un worker self-hosted en mi servidor, accedido vía Cloudflare Tunnel.

FastAPIyt-dlpffmpegRenderCloudflare Tunnel
storage

Base de datos

Neon / Postgres vía SQLAlchemy guarda solo metadatos — usuarios, sesiones, jobs, coincidencias de playlist. El audio nunca vive en la DB. Los secretos se almacenan como hashes, nunca en texto plano.

Neon PostgresSQLAlchemyAlembic
cloud

Almacenamiento de audio

Los archivos de audio viven en Cloudflare R2 bajo claves aleatorias. La reproducción y descargas usan enlaces firmados de corta duración que la app renueva, manteniendo tu biblioteca disponible sin exponer los archivos brutos.

Cloudflare R2Claves aleatoriasEnlaces auto-renovados
lock

Inicio de sesión

Sin contraseña y con acceso por invitación. Pide un magic link por email (vía Resend) o entra con passkey (WebAuthn) — en ambos casos aterrizas en la misma sesión segura, sin contraseña almacenada.

Magic linkPasskeysResendAcceso por invitación
hub

Servicios conectados

Spotify y Apple Music aportan metadatos de playlist; la YouTube Data API alimenta el autocompletado de búsqueda en vivo; yt-dlp obtiene el audio real de YouTube.

Spotify APIApple MusicYouTube Data APIyt-dlp

De un enlace a tu biblioteca

Cómo una canción se almacena y se sirve realmente.

  1. link
    Pega o buscaURL de YouTube / Spotify o una consulta simple
    arrow_forward
  2. download
    Descargayt-dlp obtiene el mejor audio disponible
    arrow_forward
  3. graphic_eq
    Transcodificaffmpeg → MP3 o AAC a 192 / 320 kbps
    arrow_forward
  4. cloud_upload
    Almacena en R2Subido a Cloudflare con clave UUID
    arrow_forward
  5. vpn_key
    Enlace firmadoURL firmada de corta duración para reproducir / guardar

Dentro de la app

Dashboard y búsqueda en vivo.

Dashboard — formulario de descarga + historial