DG

Bogotá, Colombia · Desarrollador fullstack

DanielGonzález

Construyo aplicaciones completas: la interfaz que ve el usuario, la API que la sostiene y la infraestructura que las conecta. Ingeniero de Sistemas de la Universidad Nacional de Colombia.

Next.js · ReactSSR, App RouterExtensiónnavegadorNGINXTLS · rate limitAPI Gatewayauth · validaciónFastAPIPythonExpressTypeScriptDjangoDRFPostgreSQLMongoDBRedis
Lo que atraviesa una petición en los sistemas que construyo. Cada tramo lo he escrito en algún proyecto de los que siguen.
Ingeniería de Sistemas · Universidad Nacional de ColombiaDisponible para trabajar en Bogotá o remoto
01

Proyectos

4 láminas
P-012026Arquitectura de Software · UNAL · equipo de 8repo del equipo ↗

Parla

Aprender idiomas con los subtítulos de lo que ya estás viendo

Mi parte — Servicio de foro y todo el frontend

Una extensión captura las palabras que no conoces mientras ves una serie. La plataforma hace el resto: diccionario personal, repaso espaciado con SM-2, minijuegos, rachas y ranking. Seis microservicios en cuatro lenguajes, cada uno con su propia base de datos, detrás de un gateway en Go.

  • Escribí el servicio de foro de punta a punta: FastAPI sobre MongoDB, con su despliegue y configuración en el compose.
  • Construí la web app entera en Next.js: login con Auth0, renderizado en servidor, vocabulario, diccionario, perfil y el consumo del gateway.
  • Migré el registro y la consulta de usuarios a GraphQL contra el servicio de identidad.
  • Monté los reverse proxies NGINX del prototipo de seguridad: TLS, redirección forzada a HTTPS y límite de 10 req/s por IP.
  • Armé el popup y el servicio de autenticación en segundo plano de la extensión.

Next.js · FastAPI · MongoDB · Go · GraphQL · Auth0 · NGINX · RabbitMQ · Redis · Docker

red privada · sin puertos expuestosRESTpublicaconsumeWeb appNext.js · SSRmíoExtensióncaptura subtítulosNGINX ×2TLS · 10 req/sAPI GatewayGo · 9 middlewaresForoFastAPI · MongoDBmíoIdentidadGraphQLCorefrases · flashcardsGamificaciónXP · rankingEnriquecimientoejercicios con LLMRabbitMQenriquecimientoMongoDBPostgreSQLRedis
Vista de componentes y conectores. En rojo, lo que construí. El enriquecimiento con Claude corre fuera del ciclo de petición: el core publica en la cola y sigue respondiendo.
P-022025 — 2026Sistema interno · dos repositoriosbackend ↗ · frontend ↗

Seguimiento de compromisos

Los hallazgos de una auditoría dejan de perderse en hojas de cálculo

Mi parte — Backend y frontend

Cada auditoría genera compromisos con responsable y fecha límite. El sistema los registra, calcula los vencimientos sobre días hábiles del calendario colombiano, avisa a quien corresponde y muestra el estado consolidado en un tablero. La sesión es la misma de la empresa: se entra con la cuenta corporativa.

  • API en FastAPI con SQLAlchemy y Alembic sobre PostgreSQL, dividida por routers: auditorías, auditores, compromisos, mejoras, seguimientos e indicadores.
  • Autenticación contra Microsoft Entra ID con OAuth2 y PKCE, validando el token en cada petición y resolviendo roles desde el directorio.
  • Redis como caché y como límite de peticiones, montado en el ciclo de vida de la aplicación.
  • Fechas límite calculadas sobre días hábiles con workalendar y pendulum, no sobre días corridos.
  • Exportación a Excel y notificaciones por correo con Azure Communication Services.
  • Tablero en Next.js 15 con App Router: vista de dirección, gestión de compromisos y área de administración.
RESTcachévalida tokeninicio de sesiónNext.js 15tablero · adminFastAPIauditoríascompromisos · mejorasseguimientosindicadoresPostgreSQLRedisMicrosoft Entra IDOAuth2 + PKCE
Identidad delegada al directorio corporativo; Redis cumple doble función de caché y de freno.

FastAPI · PostgreSQL · SQLAlchemy · Redis · Entra ID · Next.js 15 · TypeScript · Tailwind

P-032025Ingeniería de Software 2 · UNAL · SCRUMbackend ↗ · frontend ↗ · sprint 2 ↗

Workio

Reservar un puesto de coworking en Bogotá sin llamar a nadie

Mi parte — Backend y parte del frontend

Quien busca espacio filtra por zona y horario y reserva; quien administra un coworking publica sus salas, define disponibilidad y cobra. Dos roles con permisos distintos sobre la misma API.

  • API REST en Express y TypeScript sobre PostgreSQL, con el esquema y los scripts de base de datos.
  • Autenticación con JWT en cookies, contraseñas con bcrypt, permisos por rol y validación de entrada con express-validator.
  • Cobros con MercadoPago y Stripe, imágenes en Cloudinary y correos transaccionales con Nodemailer.
  • Pruebas con Jest y Supertest, más un entorno de extremo a extremo aparte.
  • En el cliente: las vistas de coworkings, con la información del espacio y los botones de reserva.
  • Reserva por horas con su cálculo de cobro, y las reservas separadas entre activas y pasadas.
  • Las páginas de inicio de sesión y registro.
JWTCliente · Reactcoworkings y reservainicio de sesiónregistromíoExpress · TypeScriptauth · users · admincoworkingsmy-coworkingsbookingspaymentPostgreSQLServicios externosMercadoPago · StripeCloudinaryNodemailer
En rojo, las vistas que construí en el cliente. Una sola API con permisos por rol; los servicios de pago, imágenes y correo quedan detrás de sus propios adaptadores.

Node.js · TypeScript · Express · PostgreSQL · JWT · React · Tailwind · Jest · MercadoPago

P-042025Prueba técnica · Django + Reactrepo ↗

Catálogo Lite

Prueba técnica: catálogo de empresas y productos con dominio desacoplado

Mi parte — Autor

El enunciado pedía un CRUD de empresas y productos en Django, React y PostgreSQL. Saqué las entidades del proyecto Django y las publiqué como un paquete propio instalado con Poetry, de modo que el modelo de dominio no dependa de la aplicación que lo consume. El extra opcional lo resolví con Gemini generando descripciones de producto.

  • lite_dominio como paquete Poetry independiente: entidades y migraciones que el backend instala como dependencia.
  • API en Django REST Framework con autenticación JWT (SimpleJWT).
  • Frontend en React 19 con Vite, TypeScript y Tailwind 4, organizado con Atomic Design.
  • Generación de contenido con Gemini a través de google-genai, e informes en PDF con ReportLab.
  • Todo el entorno en Docker Compose, con healthcheck de PostgreSQL antes de arrancar el backend.
RESTmodelosReact 19 · ViteAtomic DesignDjango + DRFSimpleJWTlite_dominiopaquete PoetryPostgreSQLGeminigoogle-genai
El paquete de dominio se instala como dependencia: las entidades no viven dentro de la aplicación que las usa. Todo el conjunto levanta con un docker compose up.

Django 6 · DRF · React 19 · Vite · Tailwind 4 · PostgreSQL · Poetry · Docker · Gemini

02

Notas

01Formación

Ingeniería de Sistemas y Computación en la Universidad Nacional de Colombia. Los proyectos de Arquitectura de Software e Ingeniería de Software 2 fueron los que me empujaron hacia el backend y la infraestructura.

02Cómo trabajo

Empiezo por el contrato entre las partes: qué endpoint devuelve qué y quién puede llamarlo. Después el resto encaja. Escribo pruebas donde el error sale caro y dejo el proyecto corriendo con un solo comando.

03Dónde me siento cómodo

En el medio. Puedo cerrar un flujo desde el formulario hasta el índice de la base de datos, pasando por el gateway y el contenedor. Lo que más disfruto es la parte donde los servicios se hablan entre sí.

04Qué busco

Un equipo donde el código llegue a producción y alguien lo revise antes. Bogotá o remoto.

03

Lista de materiales

herramientas · dónde las usé
ElementoHerramientasVisto en
InterfazNext.js · React · TypeScript · Tailwind · AstroParla, Compromisos, Catálogo Lite
ServiciosFastAPI · Django REST · Express · GraphQLParla, Compromisos, Workio
DatosPostgreSQL · MongoDB · Redis · SQLAlchemy · AlembicCompromisos, Parla
MensajeríaRabbitMQ · trabajos asíncronosParla
IdentidadMicrosoft Entra ID · Auth0 · JWT · OAuth2 PKCECompromisos, Parla, Workio
EntregaDocker Compose · NGINX · TLS · PoetryParla, Catálogo Lite
PruebasJest · Supertest · pruebas de carga con k6Workio, Parla
04

Contacto

¿Tienes algo que construir? Escríbeme.

Nombre
Daniel Alejandro González Calderón
Rol
Desarrollador fullstack
Ubicación
Bogotá, Colombia