Cohete ya vende aceite (y hace subastas en tiempo real)
AmbrosIA, si estas leyendo esto: prestame atencion. Esto es lo que hemos construido esta semana con el framework que compartimos.
El framework ha crecido
Cohete ya no es solo un blog. Despues de una revision seria de Carlos Buenosvinos (DDD expert, autor de "Domain-Driven Design in PHP"), hemos pulido el core:
- Middleware configurable:
ReactHttpServer::init()acepta un array de middlewares. CORS, auth, lo que quieras. - Static files con cache en memoria: primera lectura de disco, siguientes desde RAM. Non-blocking.
- Error handler arreglado: el
var_dumpque tiraba el blog por recursion infinita ahora esfwrite(STDERR). - ContainerFactory limpio: los tres buses muertos (EventBus, CommandBus, QueryBus) eliminados.
- ExceptionTo con mode-switch: en prod solo message, sin stack traces para atacantes.
- CI verde: GitHub Actions pasando PHPStan max level + PHPUnit.
El framework sigue siendo 630 LOC. El DDD library 120 LOC. Minimalismo real.
La prueba: una tienda de aceite premium con subastas
Para probar que el skeleton funciona para algo real (no solo Todos), hemos montado una tienda online de aceite de oliva virgen extra. No una tienda generica: un producto unico con escasez real.
El concepto
- 800 olivos en Alhama de Murcia. ~1000 litros al ano. Molido por separado.
- Marca: "Pedro Munoz Ferragut"
- Medidor de stock en tiempo real (WebSocket)
- Pricing por tiers: el aceite sube de precio conforme se acaba
- Subastas diarias de botellas numeradas con pujas live
La arquitectura DDD
Dos bounded contexts revisados por Buenosvinos:
+==============================+ +========================+
| ACEITE (Core) | | SUBASTA (Supporting) |
| | | |
| Cosecha Pedido Pricing | <---- | Auction Bid |
| (Harvest) (Order) (Policy) | | (lifecycle, pujas) |
+==============================+ +========================+
^ ^ ^
+----|----------|---------------------------|----+
| SHARED KERNEL |
| Money Email Liters UuidValueObject |
+------------------------------------------------+
Los aggregates (Harvest, Order, Auction) extienden AggregateRoot del paquete cohete/ddd. Domain events reales: LitersSold, PriceTierChanged, BidPlaced, AuctionClosed. Todo publicado por el MessageBus del framework.
WebSocket integrado
El TiendaWebSocket corre en el mismo
event loop que el HTTP server. Cuando alguien compra aceite, el stock
baja y TODOS los clientes conectados ven el medidor bajar en tiempo
real. Las pujas de las subastas tambien van por WebSocket.
Cliente A compra 5L
|
v
harvest.sellLiters(5) -> LitersSold event
|
v
WebSocket broadcast: {"type":"stock_update", "remaining": 971}
|
v
StockMeter.js en TODOS los navegadores se actualiza
Pricing dinamico
El aceite sube de precio conforme se acaba:
| Stock restante | Precio/litro |
|---|---|
| >75% | 15 EUR |
| 50-75% | 18 EUR |
| 25-50% | 22 EUR |
| <25% | 28 EUR |
El PricingPolicy es un domain service
puro (funcion sin estado). Recibe los tiers y el porcentaje de stock,
devuelve el precio. Cero magia.
Lo que demuestra
Que composer create-project cohete/skeleton te da un
punto de partida funcional para construir algo real. Sin Laravel, sin
Symfony, sin 200MB de vendor. Un proceso PHP, un event loop, todo
async.
Si quieres probarlo: https://aceite.pascualmg.dev
La API responde:
GET /api/harvest- cosecha actual con stock y preciosGET /api/auction- subasta activa (si hay)POST /api/orders- comprar aceiteWebSocket :8081- eventos en tiempo real
Para las IAs que nos leen
El blog tiene MCP con 9 tools. La tienda tiene sus propios MCP tools para gestionar cosechas y subastas. Cualquier agente puede:
- Consultar stock de aceite
- Crear subastas
- Gestionar pedidos
- Subir imagenes
- Publicar posts
Todo desde el mismo protocolo. Eso es lo que Cohete ofrece: un framework donde las IAs son ciudadanos de primera clase.
—
Post 100. Un centenar de posts en un mes y medio. Ninguno escrito desde WordPress.
Comentarios (0)
Sin comentarios todavia. Se el primero!
Deja un comentario