Disponible para proyectos

Kervis Vasquez.

Desarrollador Full Stack Senior — PHP/Laravel, Java/Spring Boot, Node.js/NestJS, React y React Native(Expo) — Construyo plataformas backend con microservicios, mensajería y arquitectura limpia — de la API al móvil.

7+Años exp.
20+Proyectos
5Sectores
~/kervis/profile.json
$ cat profile.json
{
"name": "Kervis Vasquez",
"role": "Desarrollador Full Stack Senior — PHP/Laravel, Java/Spring Boot, Node.js/NestJS, React y React Native(Expo)",
"focus": ["frontend", "backend", "mobile", "microservices",
"location": "São Paulo, Brasil · Remoto",
"open_to_work": true
}
$
01Sobre mí

Quién hay detrás del código

Más de 7 años construyendo software full stack en e-commerce, salud, fintech y plataformas SaaS. Trabajo en todas las capas — del modelado de datos al móvil — con PHP/Laravel, Java/Spring Boot, Node.js/NestJS y React/Next.js, aplicando Clean Architecture, DDD y microservicios con mensajería (RabbitMQ, NATS, Kafka).

Construyo plataformas backend con microservicios, mensajería y arquitectura limpia — de la API al móvil.

02Stack

Tecnologías que uso

Herramientas con las que trabajo a diario, agrupadas por capa.

Backend

01
PHPLaravelLumenJavaSpring BootNestJSElysia/Bun

Arquitectura

02
MicroserviciosClean ArchitectureDDDRepositoryRESTGraphQLAPI Gateway

Mensajería

03
RabbitMQNATSKafkaSocket.IOEvent-driven

Datos

04
PostgreSQLMySQLSQL ServerEloquentDrizzle ORMSpring Data JPA

Frontend

05
ReactNext.jsTypeScriptTailwindShadCNZustandReact Query

Mobile

06
React NativeExpoNativeWindreact-native-mapsexpo-location

DevOps

07
DockerDocker ComposeDokployCI/CDAWSGitflow
03Proyectos

Trabajo destacado

Plataformas reales en producción. Expande para ver la arquitectura, los retos técnicos y cada módulo.

Marketplace
Arrastra una imagen
or browse files

Agua Viva

2024 — 2026

Marketplace móvil de agua a domicilio en Venezuela que conecta clientes, tiendas y repartidores, sobre 6 microservicios. Publicada en Google Play.

React NativeExpoNestJSLaravelRabbitMQSocket.IO
Detalle

En Venezuela, comprar agua potable suele significar llevar el botellón vacío a un centro de recarga, esperar y volver cargándolo, sin saber antes si la tienda está abierta o tiene agua. Agua Viva digitaliza ese proceso en una sola app con 4 roles: el cliente encuentra tiendas en el mapa, pide y sigue el pedido en vivo hasta su puerta; la tienda (dueño y encargados) gestiona pedidos, catálogo, tanques, repartidores y ventas de mostrador; y el repartidor recoge los vacíos, los lleva a la tienda y entrega los llenos siguiendo una ruta ordenada.

La app está hecha en React Native/Expo con Clean Architecture y el backend son 6 microservicios en NestJS y Laravel conectados por RabbitMQ, con una base PostgreSQL por servicio y tiempo real con Socket.IO. Hoy el cliente paga por pago móvil directo a la tienda y la plataforma registra las comisiones y liquidaciones entre plataforma, tienda y repartidor. La app está publicada en Google Play. Hice el diseño y desarrollo full stack: app móvil, API Gateway, microservicios, mensajería e infraestructura.

4roles en una sola app
104pantallas
150casos de uso
6microservicios
200+endpoints REST
200+message patterns RPC
Retos técnicos6
  • Precios que no se manipulan

    La app muestra una estimación, pero el total lo cotiza el servidor (/orders/quote) y se envía expected_total; si el precio cambió mientras el cliente compraba, el backend rechaza el pedido.

  • NestJS y Laravel por RabbitMQ

    Implementé en PHP el protocolo RPC de NestJS (reply_to + correlation_id) para que los dos frameworks se hablen directamente por la cola, sin adaptadores HTTP entre servicios.

  • Consistencia sin transacciones distribuidas

    Una base PostgreSQL por servicio que solo comparte IDs; la consistencia se mantiene con holds de fondos y pasos compensatorios (saga ligera) orquestados en el gateway.

  • Tiempo real sin estado duplicado

    Los eventos de Socket.IO invalidan o actualizan la caché de React Query en vez de guardar un estado paralelo, así el servidor sigue siendo la única fuente de verdad.

  • Mapa con muchos marcadores

    Clustering con Supercluster, consultas por zona visible con debounce y keepPreviousData para que los marcadores no parpadeen al mover el mapa.

  • UX de reparto en lote

    Selección múltiple reutilizable (una factory de stores Zustand con 3 instancias), acciones en lote y reordenamiento por drag & drop; la entrega final se confirma pedido por pedido porque libera el dinero.

App móvil4
Arrastra una imagen
or browse files
Móvil

App móvil

Un solo binario para 4 roles, en Clean Architecture.

Cuatro capas con dependencias en una sola dirección (domain, aplication, infrastructure, presentation) y la misma cadena en todos los módulos: action HTTP → mapper / caso de uso → hook de React Query → hook de pantalla → screen. Ninguna pantalla llama a axios ni tiene lógica de negocio. El inicio elige su dashboard según el rol con una tabla de despacho. Sesión con token en SecureStore y logout automático ante un 401; builds con EAS, versionado semántico y changelog automático.

React Native 0.83Expo SDK 55Expo RouterTypeScriptTanStack QueryZustandNativeWindZod
Arrastra una imagen
or browse files
Rol

Cliente

Tiendas en mapa, carrito, checkout y seguimiento en vivo.

Búsqueda de tiendas en 3 modos: mapa con clustering y consultas por zona visible, cercanas por GPS y favoritas. Carrito persistente de una sola tienda con pedido mínimo, precios escalonados por cantidad y tarifas de delivery escalonadas. El total lo cotiza el servidor y se valida con expected_total, así el precio no se puede manipular desde el cliente. Seguimiento del pedido con línea de tiempo de estados, calificaciones y ubicaciones de entrega elegidas en el mapa o pegando un link de Google Maps.

MapboxSuperclusterReact Hook FormZod
Arrastra una imagen
or browse files
Rol

Tienda

Pedidos en vivo, catálogo, tanques, equipo y liquidaciones.

Panel de pedidos en vivo con filtros y pedidos programados: asignar repartidor, definir cantidades y cambiar el estado. Pedidos de clientes sin cuenta (online o de mostrador), catálogo con stock y price tiers, tanques con historial de recargas, modo de despacho configurable, resumen de ventas comparado con el período anterior y liquidaciones de comisiones con la plataforma y con cada repartidor. El dueño y el encargado tienen permisos distintos.

Socket.IOTanStack Query
Arrastra una imagen
or browse files
Rol

Repartidor

Cola de recogida, ruta en mapa y acciones en lote.

Cola de recogida con totales de litros, pedidos y tiendas, reordenable con drag & drop y visible en un mapa de ruta. En la ruta activa los pedidos se agrupan por la siguiente acción y se avanzan en lote con selección múltiple (assigned → going_to_pickup → picked_up → at_store → out_for_delivery); la entrega final se confirma pedido por pedido porque es la que libera el dinero. Incluye historial de entregas y cobros a cada tienda, con verificación de los pagos reportados.

Mapbox DirectionsZustandFlashList
Backend · microservicios6
Arrastra una imagen
or browse files
Gateway

API Gateway

Punto de entrada REST que orquesta los microservicios.

Recibe las peticiones de la app y las reparte por RPC sobre RabbitMQ. Mantiene la consistencia sin transacciones distribuidas, con holds de fondos y pasos compensatorios (saga ligera). En total el backend expone más de 200 endpoints REST y más de 200 message patterns RPC, y todo el entorno se levanta con docker compose up.

NestJSTypeScriptRabbitMQ
Arrastra una imagen
or browse files
Tiempo real

Realtime Service

Rooms por pantalla con permisos validados por el servicio dueño del dato.

Cada pantalla se suscribe a su room (mis pedidos, pedidos de la tienda, cola de recogida, ruta activa, un pedido concreto) y el servicio valida el permiso con el microservicio dueño del dato antes de aceptar. En la app, un cliente Socket.IO singleton sigue la sesión y el AppState, y los eventos invalidan la caché de React Query en vez de mantener un estado duplicado.

NestJSSocket.IORabbitMQ
Arrastra una imagen
or browse files
Microservicio

Pedidos

Máquinas de estado del pedido y del reparto.

Modela el ciclo de vida del pedido y del reparto con máquinas de estado, donde cada transición valida qué rol puede hacerla. Cotiza el total en el servidor y registra las comisiones de tienda y repartidor al completar cada entrega.

NestJSTypeORMPostgreSQL
Arrastra una imagen
or browse files
Microservicio

Tiendas

Tiendas, productos, tanques y búsqueda geoespacial.

Centraliza tiendas, productos, precios, tanques y equipo. La búsqueda geoespacial usa la fórmula de Haversine y consultas por bounding box en PostgreSQL, con Redis como caché. Para que Laravel hable con NestJS implementé en PHP el protocolo RPC de NestJS (reply_to + correlation_id) sobre RabbitMQ.

Laravel 12PostgreSQLRedis
Arrastra una imagen
or browse files
Fintech

Auth y billetera

Autenticación OAuth2 y billetera digital.

Autenticación con Laravel Passport (OAuth2) y recuperación de contraseña con código de 6 dígitos. La billetera digital (saldo, recargas, transferencias con clave, holds de fondos y pagos QR) está construida y funcionando en backend y app, pero en pausa por una razón legal: centralizar los cobros requiere una figura jurídica constituida en Venezuela.

Laravel 12Passport (OAuth2)PostgreSQL
Arrastra una imagen
or browse files
Microservicio

Notificaciones

WebSocket, push, email y WhatsApp con log por canal.

Consume los eventos de RabbitMQ y envía notificaciones por WebSocket, push (Expo + FCM), email y WhatsApp, guardando un log de entrega por canal. En la app hay una bandeja con marcado optimista como leída, y al tocar una notificación se abre la pantalla que corresponde según el rol.

NestJSExpo NotificationsFCMRabbitMQ
App web
Arrastra una imagen
or browse files

Atletas de Cristo

2026

App full stack para organizar el fútbol semanal de un grupo: jugadores, partidos, jornadas con equipos que rotan, marcador en tiempo real y ranking de goleadores.

ReactNestJSTypeScriptPostgreSQLSSETanStack Query
Ver demo
Detalle

Plataforma para gestionar las jornadas de fútbol de un grupo de amigos. Cada jugador tiene su perfil con foto, edad, altura y peso, mostrado como una carta estilo FIFA. Se arman partidos y jornadas con varios equipos sorteados al azar de forma balanceada, y los goles y asistencias se cargan mientras se juega: el marcador se actualiza en vivo en todos los celulares de la cancha.

Los partidos se cierran solos por tiempo o por límite de goles, y en el modo "ganador se queda" el backend arma la siguiente ronda: el ganador sigue en cancha, el perdedor va al final de la fila y entra el siguiente equipo. Hay un ranking de goles y asistencias que se comparte por WhatsApp con un clic, roles admin/member con permisos por recurso y recuperación de contraseña con código por correo. Frontend en React 19 y backend en NestJS con PostgreSQL, ambos con Clean Architecture; la interfaz está en portugués.

~38endpoints REST
7módulos en la API
2roles con permisos por recurso
SSEmarcador en vivo
Retos técnicos4
  • Ciclo de vida en un solo lugar

    MatchLifecycleService concentra el cierre del partido, los criterios de fin, el aviso a los clientes SSE y la rotación de la jornada; el resultado es el mismo si lo cierra un gol, el temporizador o el admin.

  • Tiempo real sin infraestructura extra

    Subjects de RxJS filtrados por partido o jornada, sin Redis ni WebSockets: estado completo al conectarse, reenvío con cada cambio y heartbeat cada 25 s. Alcanza para el tamaño del grupo y mantiene el deploy simple.

  • Cierre automático en segundo plano

    Un proceso revisa cada 12 s los partidos en curso y los finaliza por tiempo o por límite de goles; si la jornada está en "ganador se queda", crea la siguiente ronda y mueve la fila de equipos (con empate no rota).

  • Esquema solo por migraciones

    synchronize apagado en todos los entornos: la base cambia únicamente con migraciones versionadas de TypeORM, que se corren solas al levantar el contenedor de producción. Las variables de entorno se validan con Joi y la app no arranca si falta algo.

Frontend1
Arrastra una imagen
or browse files
Frontend

App web (SPA)

SPA responsive en capas, pensada para el celular.

Clean Architecture en cuatro capas: domain (entidades y errores), aplication (casos de uso, queries y mutations de TanStack Query), infrastructure (cliente HTTP, repositorios, mappers de DTO a entidad y stream en tiempo real) y presentation (páginas, componentes y stores de Zustand). Rutas protegidas por rol, formularios con React Hook Form + Zod y deploy en Vercel.

React 19TypeScriptViteTanStack QueryZustandReact Hook FormZodTailwind v4shadcn/uiReact Router 7
Backend4
Arrastra una imagen
or browse files
Backend

API REST

Unos 38 endpoints en módulos con Clean Architecture.

Módulos auth, users, players, matches, match-sessions, goals y stats, cada uno con domain (entidades y ports), application (casos de uso y DTOs validados), infrastructure (repositorios TypeORM) y presentation (controllers). Errores de dominio convertidos a HTTP por un filtro global, respuestas uniformes { success, data } con un interceptor, esquema solo por migraciones, variables de entorno validadas con Joi al arrancar e imagen Docker multi-stage.

NestJS 11PostgreSQL 16TypeORMJoiclass-validatorDocker
Arrastra una imagen
or browse files
Tiempo real

Marcador en vivo

Goles y marcador en todos los dispositivos, sin WebSockets ni Redis.

Server-Sent Events por partido y por jornada: el servidor envía el estado completo al conectarse, lo reenvía con cada cambio y manda un heartbeat cada 25 s; el cliente se reconecta solo. Los eventos se filtran con Subjects de RxJS, lo que mantiene el deploy simple.

SSERxJS
Arrastra una imagen
or browse files
Lógica de juego

Jornadas y rotación

Sorteo balanceado, cierre automático y "ganador se queda".

Sorteo aleatorio y balanceado de equipos (10 jugadores de a 4 → 4, 3, 3). Un proceso en segundo plano revisa cada 12 s los partidos en curso y los cierra por tiempo o por límite de goles. MatchLifecycleService concentra el cierre, avisa a los clientes y dispara la rotación, en modo manual o "ganador se queda" (con empate no rota). El ranking de goles, asistencias y partidos sale de una sola consulta SQL agregada.

NestJSPostgreSQL
Arrastra una imagen
or browse files
Seguridad

Auth, roles y perfiles

Admin y member con permisos por recurso; recuperación por correo.

Login y registro con JWT y contraseñas con bcrypt; guards propios para usuarios y admin. El member ve todo en modo lectura y solo edita su propio perfil y los partidos donde juega. Recuperación de contraseña en 3 pasos con un código de 6 dígitos guardado hasheado que vence a los 15 minutos, enviado por SMTP con plantilla HTML. Fotos de perfil en AWS S3 (JPEG, PNG, WebP).

JWTbcryptNodemailerAWS S3
E-commerce
Arrastra una imagen
or browse files

Lujevit

2024 — 2025

E-commerce de suplementos para el mercado de EE. UU. con storefront headless sobre Shopify.

Next.jsTypeScriptElysia/BunDrizzle ORMPostgreSQLShopify API
Ver demo
Detalle

Plataforma e-commerce a medida: frontend Next.js (App Router) con Compound Components, Tailwind, ShadCN, Zustand y React Query; guest checkout multi-step, SEO avanzado (Organization/Faq schema, sitemap, robots, OpenGraph), GTM e i18n. Backend en Elysia/Bun como puente de negocio con la Shopify Storefront/Admin API, Drizzle ORM, PostgreSQL y Better Auth.

Servicios / Microservicios3
Arrastra una imagen
or browse files
Frontend

Storefront

Guest checkout multi-step, SEO avanzado e i18n.

Storefront Next.js con Compound Components, schema markup, sitemap/robots, OpenGraph y GTM.

Next.jsTypeScriptTailwindShadCNZustandReact Query
Arrastra una imagen
or browse files
Backend

Puente Shopify

Capa de negocio sobre la Shopify Storefront/Admin API.

Elysia/Bun como puente con Shopify, Drizzle + PostgreSQL, Better Auth y recuperación de contraseña.

ElysiaBunDrizzle ORMPostgreSQLBetter Auth
Arrastra una imagen
or browse files
Integraciones

Cupones & Webhooks

Cupones, embajadores y webhooks de Shopify en tiempo real.

Sistema de cupones y embajadores, webhooks Shopify (orders/paid) y notificaciones por WebSocket.

Shopify APIWebSocket
Plataforma
Arrastra una imagen
or browse files

El Caporal Rifas

2024 — 2025

Sistema de rifas/tickets con compra, verificación de pagos y notificaciones automatizadas por WhatsApp.

Next.jsReactLaravelNestJSBaileysResend
Ver demo
Detalle

Sistema completo con DDD: frontpage en Next.js (SEO/performance), dashboard administrativo en React, core de negocio en Laravel (REST API) y servicio de notificaciones por WhatsApp (NestJS + Baileys). Compra de tickets, verificación de pagos (Pago Móvil, Zelle, Binance), flujos de aprobación/rechazo, procesamiento asíncrono masivo, ranking de compradores, blacklist, integración con Resend y DNS vía Cloudflare.

Servicios / Microservicios4
Arrastra una imagen
or browse files
Frontend

Frontpage

Página pública optimizada para SEO y performance.

Frontpage en Next.js con foco en SEO, performance y conversión.

Next.jsTypeScript
Arrastra una imagen
or browse files
Admin

Dashboard

Aprobación/rechazo, ranking de compradores y blacklist.

Dashboard administrativo en React para gestionar pagos, rankings y listas negras.

React
Arrastra una imagen
or browse files
Core

Core de negocio

Compra de tickets y procesamiento asíncrono masivo.

Laravel (REST, DDD) con compra de tickets, verificación de pagos y colas de procesamiento masivo.

LaravelREST APIDDD
Arrastra una imagen
or browse files
Notificaciones

WhatsApp Service

Notificaciones automatizadas por WhatsApp y correo.

Servicio NestJS + Baileys para WhatsApp e integración con Resend para correo.

NestJSBaileysResend
Plataforma
Arrastra una imagen
or browse files

IBR Sonho de Deus

2023 — 2024

Plataforma digital de una iglesia: sitio institucional + dashboard de gestión, sobre un CMS headless.

Next.jsTypeScriptReactViteStrapiGraphQL
Ver demo
Detalle

Plataforma digital completa de la Iglesia Bautista Reformada Sonho de Deus: dos frontends independientes y un backend headless. Un sitio institucional público en Next.js/TypeScript (SEO: metadatos, Open Graph, sitemap, structured data; multilingüe y contenido en Markdown) y un dashboard administrativo en React (Vite) desacoplado, pensado para que los líderes gestionen el contenido sin tocar el panel nativo de Strapi. Todo el contenido (eventos, sermones, misioneros, versículo del día) se sirve desde Strapi vía GraphQL.

Servicios / Microservicios3
Arrastra una imagen
or browse files
Frontend

Sitio institucional

Sitio público con SEO, multilingüe y contenido dinámico.

Next.js/TypeScript con foco en SEO y performance; eventos, sermones, misioneros y versículos servidos desde Strapi vía GraphQL, con soporte multilingüe y Markdown.

Next.jsTypeScriptGraphQLMarkdown
Arrastra una imagen
or browse files
Admin

Dashboard

Panel mobile-friendly para gestionar el contenido sin tocar Strapi.

Dashboard React (Vite) desacoplado y mobile-friendly: CRUD completo de eventos, sermones, misioneros y versículos consumiendo Strapi vía GraphQL, pensado para líderes sin perfil técnico.

ReactViteTypeScriptGraphQL
Arrastra una imagen
or browse files
CMS

Backend (Strapi)

Headless CMS con API GraphQL y gestión de medios.

Strapi como CMS headless con API GraphQL consumida por el sitio y el dashboard; modelado de contenido a medida (eventos, sermones, misioneros, devocionales) y gestión de medios (imágenes y audios).

StrapiGraphQLDocker
Landing
Arrastra una imagen
or browse files

Maduro Preso

2026

Landing estática en Next.js con un contador en tiempo real; proyecto satírico para la comunidad venezolana.

Next.jsTypeScriptStaticCloudflare
Detalle

Landing page 100% estática en Next.js/TypeScript con un contador en tiempo real (años, meses, días, horas, minutos y segundos), concebida como un proyecto de tono satírico y celebrativo en torno a un acontecimiento político venezolano y dirigida a la comunidad venezolana. Optimizada para compartir en redes (SEO y Open Graph), con carga ultrarrápida y dominio propio (maduro-preso.online) con DNS en Cloudflare.

04Experiencia

Trayectoria profesional

Desarrollador Full Stack

· Buildbox (asignado a Grupo Petrópolis)Jul 2026 — Actual
Brasil

Desarrollador full stack de Buildbox asignado a Grupo Petrópolis. Trabajo en todo el producto: backend, aplicaciones móviles con React Native y aplicaciones web con React.

Desarrollador Full Stack Senior (Freelance)

· FreelanceAgo 2024 — Actual
Brasil · Remoto (EE. UU., Venezuela, Brasil)

Diseño y entrego plataformas full stack para clientes de EE. UU., Venezuela y Brasil: e-commerce headless (Lujevit), marketplace con microservicios (Agua Viva) y sistemas de tickets con notificaciones automatizadas (El Caporal).

Senior Frontend React Engineer

· Caixa Vida e Previdência (vía HYTI)Nov 2024 — Ene 2026
Brasil · Remoto

Tercerizado vía HYTI para Caixa Vida e Previdência. Lideré dos proyectos React de punta a punta para sustituir DocuSign por una plataforma interna de firma: portal de cliente y dashboard de gestión de documentos firmados. Apliqué Clean Architecture y patrones de componentes (Compound Components, State Initializer), con tests en Jest/Vitest, documentación en Storybook, mocks con MSW y configuración de linter.

Desarrollador Full Stack

· QantaDic 2021 — Ago 2024
Costa Rica · Remoto

Frontend con React, React Query y GraphQL; web con Next.js y APIs REST con Laravel y NestJS; app móvil escalable con DDD. Stack: React, Flutter, Riverpod, WordPress, Strapi, Next.js, Laravel, NestJS.

Desarrollador Full Stack

· DynamicsNov 2019 — Dic 2021
Venezuela · Presencial

Sistemas administrativos con Laravel y React; microservicios con Lumen conectando sistemas gráficos a e-commerce. Stack: Lumen, React, Next.js, Laravel, SQL.

Desarrollador Full Stack

· Medicon de Venezuela C.ANov 2019 — Dic 2021
Venezuela · Presencial

Centro de distribución de medicamentos (stock, trazabilidad, logística) con Laravel y React/Redux; SRM de compras internacionales (modelado, REST API, import/export masivo por Excel) y gestión de consultas médicas con Laravel + Blade.

05Formación

Estudios y certificaciones

Ingeniería en Telecomunicaciones

Licenciatura · 2019

Certificaciones

Formación continua · Udemy / Platzi

React Native Expo: Aplicaciones nativas para iOS y AndroidReact Native CLI: Aplicaciones nativas para iOS y AndroidNestJS + Microservicios: Aplicaciones escalables y modularesNest: Desarrollo backend escalable con NodeJava: Spring Boot - Guía DefinitivaAPI RESTful con Laravel: Guía DefinitivaMicroservicios Lumen: Crea tus servicios y APIs con LumenLaravel 7: Crea Aplicaciones y Sitios Web con PHP y MVCReact PRO: Lleva tus bases al siguiente nivelReact: De cero a experto (Hooks y MERN)Zustand: Gestor de estado para ReactTanStack Query: Un poderoso gestor de estado asíncronoTypeScript: Tu guía y manual completo (2021)JavaScript Moderno: Guía Definitiva — +15 ProyectosDocker: Guía práctica de uso para desarrolladores