Del negocio al esquema.
Con la IA, convierto un proceso de negocio en tablas, relaciones y reglas que impiden datos inválidos desde el origen.
Soy Diego Angel Chaustre Baena. Estudio bases de datos en el SENA y uso la IA como copiloto para diseñar, proteger y automatizar datos. Hoy escribo SQL fundamental por mi cuenta y avanzo cada semana; con la IA he llevado proyectos reales mucho más lejos, entendiendo y verificando cada paso. Aquí están las pruebas.
tablas relacionales diseñadas para una app de movilidad
políticas de seguridad a nivel de fila (RLS) en PostgreSQL
líneas de SQL generadas con IA bajo mi dirección y revisadas por mí
proyectos construidos con IA, uno de ellos una tienda en línea con ventas reales
Una empresa no necesita "usar IA"; necesita datos ordenados, seguros y útiles para decidir. Así es como aplico la inteligencia artificial en cada etapa del ciclo de vida de los datos, con evidencia de mis propios proyectos.
Con la IA, convierto un proceso de negocio en tablas, relaciones y reglas que impiden datos inválidos desde el origen.
Cada usuario ve solo lo suyo. Con la IA reviso accesos, datos expuestos y el cumplimiento de la ley de protección de datos.
Conecto formularios, APIs y hojas de cálculo para que la información fluya sin volver a digitarla.
Traduzco preguntas de negocio a consultas SQL con IA, y verifico que la respuesta sea correcta.
Una super-app de transporte en carro, moto y mensajería, pensada para que el conductor pague menos comisión. La construí de principio a fin: investigación del problema, modelo de datos, seguridad, API y aplicación móvil.
Una app de transporte mueve datos sensibles en tiempo real: ubicación, pagos y calificaciones. Si el modelo de datos falla, se pierde dinero o se exponen personas. Por eso empecé por la base de datos antes de escribir una sola pantalla.
"Primero diseñé los datos; la aplicación vino después."
Los movimientos de dinero nunca se editan ni se borran. El saldo siempre se puede reconstruir y auditar desde el historial.
12 tipos enumerados (estado del viaje, método de pago, nivel del conductor) hacen imposible guardar un valor inválido.
El pasajero solo ve sus viajes y el conductor solo los que tiene asignados. La regla vive en la base de datos, no en la app.
La búsqueda de conductores cercanos (fórmula de Haversine), la tarifa y la comisión por nivel son funciones SQL.
Un índice parcial compuesto acelera la búsqueda de conductores disponibles, y 9 triggers mantienen fechas y perfiles al día.
Política de tratamiento de datos personales redactada bajo la Ley 1581 de 2012 y el Decreto 1377 de 2013.
-- Conductores disponibles dentro de un radio, ordenados por distancia CREATE OR REPLACE FUNCTION public.nearby_drivers( search_lat numeric, search_lng numeric, radius_km numeric DEFAULT 3.0, v_type public.vehicle_type DEFAULT 'car' ) RETURNS TABLE (driver_id uuid, distance_km numeric, ...) LANGUAGE sql STABLE AS $$ SELECT d.id, (6371.0 * acos(cos(radians(search_lat)) * cos(radians(d.current_lat)) * cos(radians(d.current_lng) - radians(search_lng)) + sin(radians(search_lat)) * sin(radians(d.current_lat))))::numeric(8,3) FROM public.drivers d JOIN public.profiles p ON p.id = d.profile_id WHERE d.status = 'available' AND d.vehicle_type = v_type AND d.is_active = true -- ...y distancia <= radius_km ORDER BY distance_km ASC; $$;
-- El conductor solo puede leer los viajes que tiene asignados ALTER TABLE trips ENABLE ROW LEVEL SECURITY; CREATE POLICY "trips_select_driver" ON trips FOR SELECT TO authenticated USING ( driver_id IN ( SELECT id FROM drivers WHERE profile_id = auth.uid() ) ); -- El pasajero, solo los suyos CREATE POLICY "trips_select_passenger" ON trips FOR SELECT TO authenticated USING (passenger_id = auth.uid());
-- Movimientos de la billetera (append-only). -- amount > 0 suma saldo · amount < 0 resta saldo. -- Nunca se edita ni se elimina un registro de esta tabla. CREATE TABLE IF NOT EXISTS wallet_transactions ( id uuid PRIMARY KEY DEFAULT gen_random_uuid(), wallet_id uuid NOT NULL REFERENCES wallets(id) ON DELETE CASCADE, trip_id uuid REFERENCES trips(id) ON DELETE SET NULL, type transaction_type NOT NULL, amount numeric(12,2) NOT NULL, balance_after numeric(12,2) NOT NULL, created_at timestamptz NOT NULL DEFAULT now() );
Diseña la arquitectura y redacta especificaciones precisas por fases: tablas, reglas y contratos de la API.
Genera el código a partir de esas especificaciones, dentro de VS Code, archivo por archivo.
Ejecuto cada script en Supabase, pruebo en emulador y en celular real, reporto errores y decido qué se corrige.
endpoints de API con validación de datos
líneas de TypeScript en el backend
líneas de Dart en la app móvil
Modo conductor en línea, esperando viajes cercanos sobre el mapa de Cúcuta. El estado "disponible" se guarda en la tabla drivers y alimenta la función de búsqueda por cercanía.
Tras una auditoría de seguridad asistida por IA, el backend salió bien librado: verifica la propiedad de cada viaje, valida los datos y mantiene la clave maestra solo en el servidor. Los siguientes pasos son limitar peticiones por minuto y automatizar la expiración de ofertas.
Esta es una réplica de ALIS con datos de prueba de Cúcuta, ejecutándose en su navegador. Elija una pregunta de negocio: verá la consulta SQL que la responde, redactada con apoyo de IA y revisada por mí. También puede escribir la suya.
Un emprendimiento real, aplicaciones y práctica deliberada. En cada proyecto aprendí algo sobre cómo se guardan, se mueven y se protegen los datos.
Tienda en línea de bienestar y belleza con pago contraentrega en toda Colombia, en funcionamiento y con ventas reales conseguidas con campañas de publicidad en Facebook e Instagram (Meta Ads). Cada venta queda registrada automáticamente: se envía al operador logístico y aparece en un panel de contabilidad con su estado real (entregado, en novedad o devuelto).
Visitar velozi.store ↗Guardé los pedidos en un archivo JSON para arrancar rápido. Funcionó, pero no permite consultas ni escala. Esa limitación me llevó al modelo relacional de VELOX.
| Pedido | Cliente | Total | Estado |
|---|
Haga un pedido en la tienda VELOZI y mírelo llegar aquí.
Recreación interactiva del flujo de mi panel real, con datos ficticios; las llamadas a la API de Mastershop están simuladas. Ver la réplica exacta del panel original ↗
Backend que recibe pedidos por webhook, elige proveedor, despacha y rastrea cada orden, con la ganancia calculada por pedido.
products · orders · order_items con SQLAlchemy sobre PostgreSQL 16 en Docker.Separar el pedido de sus ítems (1 a N) es lo que permite responder "¿qué producto deja más margen?" con una sola consulta.
Construí una página de pedidos contraentrega que guardaba los datos de cada cliente en el servidor y los mostraba en un panel de ventas. Antes de usarla con más clientes, le pedí a la IA una auditoría de seguridad del código, y esto encontró:
Se generaron las correcciones para cada punto. La sanitización contra inyección de fórmulas y la validación de cantidades en el servidor ya están implementadas.
Los datos de un cliente no son solo información: son una responsabilidad legal. Proteger el archivo importa tanto como diseñarlo.
App de notas sin anuncios, con widget de escritorio, recordatorios, listas de tareas y nota flotante. Nació en Kotlin nativo y la reescribí en Flutter para publicarla en Android e iOS con un solo código.
deletedAt manda la nota a la papelera en lugar de eliminarla.Demo en vivo: es la misma app compilada para web. Cree una nota, cámbiele el color o abra la papelera. Todo se guarda solo en su navegador.
Instalé y configuré un servidor MySQL 8 local, con los datos en un disco secundario, y practico sobre las bases de ejemplo world y sakila con la IA como tutor, lección por lección.
SELECT, WHERE, ORDER BY y LIMIT.SUM, AVG, COUNT, GROUP BY y HAVING.INNER JOIN entre dos y tres tablas combinado con agregaciones.SELECT country.Name AS Pais, COUNT(city.ID) AS NumeroCiudades FROM country INNER JOIN city ON country.Code = city.CountryCode GROUP BY country.Name ORDER BY NumeroCiudades DESC LIMIT 15;
WHERE filtra filas; HAVING filtra grupos. Entender esa diferencia cambió mi forma de leer una consulta.
Un juego de rol de texto en el que cada misión se supera escribiendo una consulta SQL contra una base de datos MySQL. Explorar una región es un SELECT, reparar el inventario es un UPDATE y formar una alianza entre facciones es un JOIN.
La mejor forma de aprender una base de datos es necesitarla. Este juego me obliga a consultar para avanzar.
La IA escribe rápido, pero no conoce su negocio ni responde por sus datos. Mi trabajo es dirigirla, cuestionarla y verificar lo que produce.
Antes de crear una tabla, identifico el problema. En ALIS empecé investigando los dolores de conductores y pasajeros.
Le pido propuestas de modelo y las cuestiono: ¿qué pasa si se cancela un viaje?, ¿quién puede ver este dato?
El código se genera en pasos pequeños y ordenados: esquema, seguridad, funciones y, al final, los datos.
Ejecuto, pruebo con datos reales y en dispositivos reales, leo los errores y los corrijo.
Reviso seguridad y privacidad antes de publicar. Lo que expone datos de clientes no sale.
"La IA acelera el trabajo. La responsabilidad sobre los datos sigue siendo mía."
Principio de trabajoLlevo pocas semanas en el programa de Implementación y Gestión de Bases de Datos del SENA, pero no llego desde cero: antes de iniciarlo completé por iniciativa propia el curso certificado Bases de datos: generalidades y sistemas de gestión, para adelantar los fundamentos del programa. He manejado los pedidos y la contabilidad de mi propia tienda en línea, y he construido proyectos con bases de datos reales trabajando junto a la inteligencia artificial.
Quiero ser transparente con mi nivel: hoy escribo por mi cuenta consultas SQL fundamentales (filtros, agregaciones y uniones entre tablas). Lo más avanzado que ve en este portafolio (funciones, triggers y políticas de seguridad) lo construí dirigiendo a la IA, entendiendo qué hace cada parte y verificando que funcione. Esa es justamente mi propuesta: aprender las bases a fondo en el SENA mientras aporto a su equipo con lo que ya sé hacer.
Lo que puedo aportar mientras aprendo:
Ordenar datos dispersos en Excel o correos y ayudar a llevarlos a una base de datos, con la guía de su equipo.
Consultas SQL básicas por mi cuenta y, con apoyo de IA, reportes más elaborados que valido antes de entregar.
Conectar formularios, hojas de cálculo y correos para reducir la digitación manual, como ya lo hice en mi tienda.
Buenas prácticas básicas de acceso y conocimiento de la Ley 1581 de protección de datos.
No pretendo llegar sabiéndolo todo. Llego con la disciplina de quien ha sacado adelante su propio emprendimiento, con ganas de aprender la forma de trabajar de su equipo y con una manera de usar la IA que me permite rendir más mientras crezco. Agradezco de antemano su tiempo y su consideración.
Tecnólogo en Implementación y Gestión de Bases de Datos, en formación virtual.
Bases de datos: generalidades y sistemas de gestión (40 horas), por iniciativa propia antes del tecnólogo.
Servidor local, consultas, agregaciones y JOIN.
Persistencia, borrado lógico y recordatorios.
Investigación, base de datos en PostgreSQL, API y app móvil.
Tienda en línea contraentrega, con ventas reales por publicidad en Meta.
Lo tomé por iniciativa propia antes de empezar el tecnólogo, para llegar con los fundamentos adelantados. Unidades del programa:
Verificable en el registro oficial certificados.sena.edu.co. Código de verificación disponible a solicitud.