FICCT Boutique: venta, facturación verificable e IA sobre seis servicios desplegados.
Plataforma retail donde un núcleo Go orquesta catálogo, inventario y ventas; la automatización emite facturas con integridad por hash-chain; y un servicio de IA agrega similitud visual, pronóstico y segmentación. Este sitio explica los flujos reales, sin marketing.
Arquitectura general
Mapa interactivo de contenedores y nubes. Recorre los pasos o toca una tarjeta para ver el detalle de cada servicio.
Núcleo transaccional: catálogo, inventario multisucursal, ventas/pedidos, BI, tokens push y outbox de webhooks.
- API GraphQL en POST /graphql con autenticación JWT RS256 y roles admin/staff/customer.
- Productos y variantes (talla/color), inventario por sucursal (SC-01, SC-02), ventas y órdenes.
- Reportes BI: ventas mensuales, productos populares, resumen de tablero.
- webhook_outbox + WebhookDispatcher que firma el evento sale.confirmed con HMAC-SHA256.
- PushSender que llama a la Expo Push API y desactiva tokens inválidos.
- Datos
- NeonDB PostgreSQL (serverless).
- Por qué este proveedor
- Railway entrega despliegue continuo desde Git y red interna privada para hablar con n8n sin exponer puertos.
Flujos operativos
Cada flujo se anima paso a paso sobre el sistema real. Usa el control para cambiar de flujo.
HMAC inválido = sin efectos
Un webhook con firma inválida se responde con 200 pero no produce PDF, objeto en S3, documento en MS3 ni correo. La firma HMAC-SHA256 se valida con comparación de tiempo constante sobre el cuerpo crudo.
Panel administrativo
El panel consume Go GraphQL, la API de documentos MS3 y la API de IA MS2; los tres orígenes están habilitados en CORS.
Login
Autenticación JWT contra Go; formulario sin credenciales precargadas.
Tablero / BI
Ventas del día, productos activos, sucursales y gráficos mensuales.
Productos
Catálogo con variantes (talla/color) y alta/edición/baja.
Inventario
Stock y reorden por sucursal (SC-01, SC-02).
Ventas / Pedidos
Registro y confirmación de ventas, reportes.
Documentos + Ledger
Consola MS3 con verificación de hash-ledger por documento.
Analítica IA
Pronóstico (Holt) y clustering (K-Means) ejecutados desde el navegador.
Despliegue
Cada repositorio se despliega a su proveedor. MS3 vive en AWS (no en Railway) por coste por uso y cercanía a S3/SES; SES reemplaza al SMTP que Railway bloquea en egress.
| Repositorio | Servicio | Proveedor | CI/CD | Nota |
|---|---|---|---|---|
| ficct-boutique-backend-go | MS1 Go Core | Railway | Git push → Railway | GraphQL + NeonDB; redeploy automático al hacer push a main. |
| gotenberg | n8n + Gotenberg | Railway | Railway (imagen) | Workflow self-hosted; Gotenberg por red interna. |
| ficct-boutique-backend-express | MS3 Documentos | AWS | GitHub Actions | CI build/test → update Lambda; NeonDB migrate. |
| ficct-boutique-backend-python | MS2 IA | GCP | GitHub Actions (WIF) | Despliegue keyless a Cloud Run con Workload Identity Federation. |
| ficct-boutique-frontend-angular | Angular Admin | Railway | GitHub Actions → Railway | Build estático (nginx); dominio en Cloudflare. |
| ficct-boutique-mobile-react-native | App Móvil | Expo | EAS (manual) | Builds nativos por EAS; export web para QA. |
| ficct-boutique-workflow | Este sitio | Railway | Git push → Railway | Frontend estático Svelte (nginx). |
Decisiones de infraestructura
- Escala a cero: Cloud Run (MS2) y Lambda (MS3) sólo cobran al ejecutarse.
- NeonDB serverless evita una base siempre encendida.
- S3 privado con ciclo de vida y SES por HTTPS evitan infraestructura de correo dedicada.
- Sin EC2, sin RDS, sin balanceadores ni NAT gateways de pago.
Evidencia
Resultados verificados del sistema real. Sin secretos ni credenciales.
Flujo de factura verificado
verificadoUna venta confirmada genera el PDF, lo sube a MS3/S3 y envía el correo, extremo a extremo.
documento activo · intact=true · chainIntact=true
HMAC inválido sin efectos
verificadoUn webhook con firma inválida es aceptado con 200 pero no produce PDF, objeto S3, documento ni correo.
sideEffectDocument = null
Correo por AWS SES
verificadoRemitente verificado dev@ficct.com con acceso de producción; envío por HTTPS (SendRawEmail), sin SMTP.
remitente dev@ficct.com · production access
Bucket S3 privado
verificadoficct-boutique-documents con BlockPublicAcls y cifrado SSE-AES256; acceso sólo por URLs presignadas.
BlockPublicAcls=true · AES256
Hash-ledger de MS3
verificadoCada documento encadena su SHA-256; /verify recomputa la cadena desde génesis y confirma la integridad.
chain_hash = SHA256(prev | sha256)
MS2 IA operativo
verificadoHealth público y lectura/escritura en DynamoDB; similitud visual verificada (consulta → match con puntaje).
similitud: match 1.0 / 0.67 / 0.35
Capturas de frontends
infoAngular Admin (login/dashboard/inventario/documentos/IA) y app móvil (catálogo/carrito/sucursales) capturadas con Playwright.
evidencia UI por viewport
CI/CD en verde
verificadoPipelines de MS3 (AWS) y MS2 (GCP Cloud Run, keyless WIF) con última corrida exitosa.
MS3 ok · MS2 ok
Resumen de la verificación de producción. No incluye secretos, credenciales ni contraseñas de prueba.