Inspiration
What it does
How we built it
Challenges we ran into
Written for: judges/lectores del submission de Devpost (HackMTY 2026).
Aquí tienes la historia del proyecto lista para copiar/pegar en las secciones de Devpost. La escribí en español porque así vivió todo el proyecto (persona, commits, prompts); dime si la quieres en inglés y la traduzco.
Inspiration El reto de Capital One (track B2C) pedía algo más que un dashboard bonito: un predictor de "¿llego a fin de mes?" que actúe, no solo avise. Lo que nos movió fue una idea concreta, no abstracta: en México, según el INEGI (ENIGH 2024), una persona del decil III de ingresos —trabajo estable, ingreso medio-bajo, ~$12,282 MXN al mes en dos quincenas— vive con un margen tan delgado que una suscripción olvidada o unas alitas con amigos pueden ser la diferencia entre llegar a fin de mes o no. La mayoría de las apps bancarias solo te dicen "tu saldo es X" y te dejan solo con el número. Quisimos construir algo que se comportara como un acompañante financiero real: que vea venir el problema antes de que ocurra y proponga qué hacer, no solo qué pasó.
De ahí nació Ricardo Torres, nuestra persona demo: no un dataset aleatorio, sino un perfil calibrado con datos reales de INEGI para que el escenario de riesgo fuera creíble y el pitch tuviera peso.
What it does Un backend que proyecta el saldo día a día a 90 días (regresión lineal sobre el gasto variable + bills como cargos puntuales en su fecha + quincenas inferidas del historial real de depósitos) y lo entrega a dos agentes distintos, cada uno con una responsabilidad clara:
El agente de bienestar no es un asesor financiero genérico: genera exactamente 10 recomendaciones —desde "tu paso de hoy" (una acción de 15 minutos para bajar la ansiedad) hasta suscripciones prescindibles, comida chatarra, gastos hormiga, vida social y salud preventiva— cada una con un beneficio de bienestar explícito además del monetario. La meta no es solo que le alcance el dinero: es que viva mejor. El Agente Guía es proactivo: detecta los gastos esenciales con fecha fija (renta, servicios), calcula cuándo cae la próxima quincena y, un día antes, propone crear una "Cajita" —dinero apartado mentalmente para ese pago— antes de que se gaste sin querer. Si el usuario intenta sacarlo antes de tiempo, no lo bloquea (es su dinero), pero genera conciencia sobre la decisión con una advertencia que se pone más seria mientras más anticipado sea el retiro. Todo esto vive en un dashboard de Next.js a pantalla completa, con un avatar ("la canica") que recorre las tarjetas del dashboard narrando cada insight y cada recomendación.
How we built it
Nessie API → nessie_client.py → cache Postgres (Supabase) → ledger.py + categories.py → forecaster.py (sklearn) → agent.py / guide_agent.py (Gemini, Structured Outputs) → FastAPI ({"data","meta"}) → Next.js Construimos primero el "walking skeleton" (seed → un endpoint → un número real en pantalla) antes de tocar cualquier modelo, y fuimos subiendo capas: cache → cálculo determinista (ledger, forecast) → capa cognitiva (Gemini) → frontend. Cada capa tiene una sola responsabilidad: nessie_client.py solo habla HTTP, ledger.py solo hace cuentas, los agentes solo redactan sobre números que Python ya decidió. Eso nos permitió nunca depender de una llamada en vivo a Nessie ni a Gemini durante la demo: todo se cachea y hay un plan de respaldo con los números reales si la IA falla.
Challenges we ran into Nessie tiene comportamientos no documentados que solo se descubren probando: trunca los montos a enteros al leerlos, las compras y depósitos no mueven account.balance, no se pueden borrar ni actualizar compras, y las listas vacías regresan 404 en vez de []. Tuvimos que reconstruir el saldo nosotros mismos (saldo = inicial + depósitos − compras − bills cobradas) y guardar los montos reales con centavos aparte, porque Nessie los devuelve truncados. Cambiar de proveedor de IA a medio proyecto: empezamos pensando en Claude, pero al no tener tier gratis para el hackathon migramos a Gemini con Structured Outputs — y descubrimos que el tier gratis de Gemini falla con cierta frecuencia (503 por demanda alta), así que todo el diseño de los agentes tuvo que asumir que la IA puede no responder y seguir funcionando igual. Un dataset que envejece: como las fechas del seed son relativas al día en que se corre, cada mañana el escenario de insolvencia se movía un día. Tuvimos que construir una rutina de reseed (seed.py --reset) que recrea la cuenta y actualiza automáticamente las variables de entorno de backend y frontend. Diseñar un agente que "cuida" en vez de solo "asesora": la primera versión del agente sonaba a asesor financiero frío. Reescribir el prompt para que reconociera lo que el usuario ya hace bien antes de pedir cambios, y que cada recomendación tuviera un ángulo de bienestar (sueño, ansiedad, relaciones) y no solo de dinero, cambió por completo el tono del producto. Detalles de UI que parecían triviales y no lo eran: alinear un avatar animado exactamente en la esquina de tarjetas de tamaño variable resultó ser más difícil que el forecast — terminamos separando el elemento que centra del elemento que anima para que las transformaciones CSS no se pisaran entre sí. Accomplishments that we're proud of Que el pipeline completo —desde una llamada real a Nessie hasta una recomendación de Gemini mostrada en pantalla— funcione de punta a punta y nunca se caiga en vivo, incluso cuando la IA falla. Y que las Cajitas conviertan una idea abstracta ("ahorra un poco") en un momento concreto y accionable: "tu quincena cae mañana, aparta ya lo de la renta".
What we learned Que en un hackathon de 36 horas, el tiempo mejor invertido no es afinar el modelo, sino diseñar para el fallo: cachear todo, tener un plan de respaldo por cada llamada a una IA, y separar "qué número mostrar" (determinista, en Python) de "cómo redactarlo" (el LLM) para que una falla de red nunca se sienta como una falla de producto en medio del pitch.
What's next Conectar las Cajitas y el saludo del Agente Guía al frontend (el backend ya está probado), restar el dinero apartado del saldo disponible que ve el usuario, y construir /actions para que las recomendaciones se puedan ejecutar con un clic (bloquear una categoría, mover dinero a Ahorro) en vez de solo proponerse.
Accomplishments that we're proud of
What we learned
What's next for Capital Autonomy
Built With
- capital-one
- css
- dotenv
- fastapi
- git
- github
- google-gemini
- html
- javascript
- nessie-api
- nextjs
- pandas
- pnpm
- postgresql
- psycopg2
- pydantic
- python
- react
- rest-api
- scikit-learn
- structured-outputs
- supabase
- tailwindcss
- typescript
- uvicorn
Log in or sign up for Devpost to join the conversation.