Congelar el alcance aceptado en versiones.
- Por qué
- Un cambio posterior crea una versión nueva que el cliente debe aceptar; nada acordado se edita.
- Costo
- Más tablas y consultas por versión.
Caso de estudio · .NET 10 + React · 2026
Cada entrega aprobada, cada cobro claro.
Un freelancer acuerda hitos con su cliente, registra cada entrega y aprobación, y sabe en todo momento cuánto le deben. El cliente no crea cuenta: abre un enlace privado desde su celular.


El alcance de un proyecto freelance suele vivir en mensajes de WhatsApp: cambia sin registro, nadie sabe qué está aprobado y el cobro se discute al final.
Hito separa lo acordado de lo que pasa después: el alcance aceptado queda congelado, cada entrega se aprueba o se rechaza con un comentario y el panel dice qué se debe.
Diseñé y construí todo el sistema: la API en capas con .NET 10, la interfaz en React, las pruebas y el despliegue automático a costo cero.
Es el mismo flujo que recorre la prueba end-to-end, con el freelancer y el cliente en navegadores separados.
Crear el proyecto
Hitos con título, monto en MXN, fecha y entregable; el total se calcula en el servidor.
Enviar el enlace
Privado, con vencimiento y revocable; en la base solo se guarda el hash del token.
El cliente acepta
Hitos y montos quedan congelados; un cambio posterior es una versión nueva.
Entregar
El freelancer agrega la URL de evidencia (solo http o https).
Aprobar o pedir cambios
Pedir cambios exige un comentario.
Registrar el pago
Solo sobre un hito aprobado y sin pagar de más.
Las transiciones viven en el dominio y tienen pruebas unitarias; una transición inválida responde 409.
Borrador
Se arma el alcance.
Enviado
El cliente tiene el enlace.
Aceptado
El alcance queda congelado.
Completado
También puede pasar a Cancelado; los pagos registrados conservan su historial.
Pendiente
Aún sin entregar.
Entregado
Con evidencia; puede volver de Cambios solicitados.
Aprobado
Ya se puede cobrar.
Pagado
El pago no puede exceder el monto.
React en Vercel llama por rewrite a una API ASP.NET Core en Render, con PostgreSQL en Supabase. La API está en capas: Domain, Application, Infrastructure y Api.
React + TanStack Query
Vercel Hobby; /api/* se reescribe hacia la API.
ASP.NET Core (.NET 10)
Render Free con el Dockerfile del repositorio.
EF Core + Npgsql
Migraciones versionadas; dinero en numeric(18,2).
PostgreSQL
Supabase Free por el session pooler.
build-test
Unitarias e integración con PostgreSQL real.
kind
Rollout en Kubernetes local con sondas live/ready.
Migraciones
Bundle de EF Core contra Supabase.
Deploy hook
Render publica la versión nueva.
Cantidades tomadas del README en la revisión fijada.
Archivos del repositorio público, fijados a la revisión que se revisó.