Skip to content
View ruubeenn13's full-sized avatar

Block or report ruubeenn13

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
ruubeenn13/README.md
Rubén Juan Candela · Full Stack Developer · Java, Spring Boot, React y TypeScript. Disponible. De la base de datos al despliegue, sin saltarse ninguna capa.

🟢 Disponible · incorporación inmediata — Full Stack, Backend Java o Frontend React
📍 Alicante · Elche · remoto  ·  Español nativo · Inglés B2

LinkedIn Email: rubenjuancandela06@gmail.com

Desarrollador Full Stack junior (DAM, 2026). Me ocupo de todas las capas: modelo de datos, API, frontend, tests y despliegue.

En Grupo Enercoop diseñé y construí desde cero un gestor de turnos en tiempo real que hoy está en producción. Por mi cuenta mantengo GymProFit (API Spring Boot + app Android + panel React) y GymProBot, un bot de Discord que se prueba y se despliega solo en mi propio servidor Linux.

EN: Junior full-stack developer who builds, tests and ships — from the database to deployment.

Lo que he construido

Gestor de turnos en tiempo real para Grupo Enercoop, en producción: 139 tests con Vitest, 13 contenedores Docker y seguridad por roles con RLS. Panel React + Vite, Supabase autoalojado con PostgreSQL detrás de nginx y agente Python para kiosko y puestos con escáner e impresora térmica.
  • Lógica en PostgreSQL: asignación automática de turnos por prioridad y seguridad por roles con RLS.
  • Supabase autoalojado en Docker (13 contenedores) detrás de nginx, con CI/CD en GitLab y 139 tests automatizados con Vitest.
  • Agente en Python para los puestos de atención y el kiosko, integrado con escáner e impresora térmica.

Prácticas FCT (400 h, mar–jun 2026) y después contrato temporal (jun–jul 2026) para desplegarlo. Sistema interno de la empresa: sin enlace ni capturas.


GymProFit: app Android, API REST en Spring Boot con JWT, refresh token rotado y roles, y panel web en React + TypeScript. Más de 870 tests en CI, 239 endpoints REST y 25 tablas en MySQL. API en api.gymprofit.app.
  • Spring Security con JWT, refresh token rotado y permisos por rol (ADMIN, USER, GUEST).
  • Audité mi propia API: encontré y cerré varias vulnerabilidades IDOR y una escalada de privilegios, y cubrí con tests de acceso ajeno las rutas con id.
  • CI en GitHub Actions para la API (contra una MariaDB efímera), la app Android y el panel web; las actualizaciones de Dependabot solo se fusionan con el CI en verde.
  • API desplegada primero en AWS EC2 y después en Render, con dominio propio (api.gymprofit.app); el panel vive en admin.gymprofit.app, detrás de Cloudflare Access.

Ver el repositorio de GymProFit →


GymProBot: bot de Discord en Java 21 + JDA 5 conectado a la API de GymProFit. 65 comandos slash, más de 660 tests y unas 21 000 líneas de Java. Cada push a main pasa el CI y, solo si está en verde, se construye la imagen Docker y se despliega en el homelab con aviso por ntfy.
  • Sin framework: arquitectura por capas propia sobre JDA, sin Spring (comandos, servicios, cliente de API, repositorios JDBC, jobs e i18n ES/EN).
  • Despliegue continuo: cada push a main pasa build y tests (JUnit 5, Mockito y Testcontainers con MySQL real); solo si el CI está en verde, un runner self-hosted construye la imagen Docker y la despliega en mi homelab, con aviso por ntfy.
  • Cliente de la API de GymProFit con Retrofit: JWT con renovación ante 401, caché y reintentos con backoff.
  • RGPD por diseño: texto libre cifrado con AES-256-GCM, exportación y borrado de datos y retención automática. 39 migraciones Flyway sobre 38 tablas.

Ver el repositorio de GymProBot →

También

  • Homelab — Portátil reutilizado con Ubuntu Server 24.04 y Docker Compose: 14 stacks, Traefik v3 con TLS wildcard, Prometheus + Grafana, Uptime Kuma + ntfy, backups 3-2-1 (restic + Backblaze B2) y ningún puerto abierto al exterior (Cloudflare Tunnel + Tailscale). Aquí vive GymProBot.

Stack

Stack. Backend: Java, Spring Boot, Spring Security, Python, Maven, JUnit 5 y Flyway. Frontend y móvil: React, TypeScript, JavaScript, Vite, Vitest, Android, HTML5 y CSS3. DevOps y datos: Docker, Linux, nginx, Traefik, GitHub Actions, GitLab CI/CD, Cloudflare, AWS, PostgreSQL, MySQL, Supabase, Prometheus y Grafana.

Ahora mismo

  • Desde octubre de 2026 curso la Especialización en Inteligencia Artificial y Big Data (IES Severo Ochoa, Elche · 600 h · lunes, miércoles y viernes de 17 a 21 h).
  • Preparación por mi cuenta en Python, pandas, MongoDB y AWS: iabd-prep.

Formación

Título Centro Años
CFGS Desarrollo de Aplicaciones Multiplataforma (DAM) IES Macià Abela, Crevillente 2024–2026
CFGM Sistemas Microinformáticos y Redes (SMR) IES Macià Abela, Crevillente 2022–2024

Contacto

¿Tienes un puesto Full Stack, Backend Java o Frontend React en Alicante, Elche o en remoto? Escríbeme a rubenjuancandela06@gmail.com o por LinkedIn.

Pinned Loading

  1. GymProFit GymProFit Public

    GymProFit - App Android de gestión de entrenamientos y nutrición.

    Java 1

  2. gymprofit-bot gymprofit-bot Public

    🤖 Bot oficial de Discord de GymProFit: comunidad fitness gamificada — XP, retos, economía y conexión en vivo con la API de la app. Java 21 + JDA.

    Java 1

  3. filmoteca-RubenJuan filmoteca-RubenJuan Public

    Proyecto filmoteca 2DAM

    Java

  4. aprendiendo_react aprendiendo_react Public

    JavaScript

  5. ruubeenn13 ruubeenn13 Public