Ulula.
SaaS Hostelería
Diseñé y construí toda Ulula desde cero: el SaaS web, las cuatro apps móviles que orbitan a su alrededor, la librería compartida y la integración de pagos multi-proveedor. Hoy está en producción, con clientes activos y facturación electrónica VeriFactu verificada.

El problema
La hostelería en España vive una tormenta perfecta: una ley que llega, unas comisiones que asfixian y unas herramientas que no se hablan entre sí.
La facturación electrónica será obligatoria, con multas de hasta 150.000 €. La mayoría de los negocios ni sabe que existe.
Y el día a día se gestiona con la carta en PDF, las comandas en papel y las reservas por WhatsApp. Cada herramienta suelta es un punto de fallo más.
La tesis
Siete herramientas en una. Si el pedido, el cobro, la cocina, la reserva, el evento, el delivery y la factura viven en el mismo sitio y en tiempo real, desaparecen los errores de copiar y pegar entre sistemas. Esa fue la apuesta.
La solución
Ulula es una plataforma todo-en-uno para restaurantes, tiendas, servicios y eventos: web app sin instalaciones + un ecosistema de seis apps. El negocio cobra con su propia pasarela —0% de comisión— y queda listo en cinco minutos. La diseñé y construí de extremo a extremo.

La suite
Seis apps desde un único código en React Native + Expo. Cada una resuelve un lado del negocio; todas comparten el mismo backend.
uQRCheck-in
uKDSCocina
uBookingReservas





Pedidos en tiempo real
El cliente escanea el QR de la mesa y pide desde el móvil; el pedido entra directo a cocina. Mesa, delivery o recogida, con estados de recibido a entregado y alertas de pedidos urgentes. Lo que se cobra es lo que se prepara.
// Del TPV a la cocina, en tiempo real
supabase
.channel('orders')
.on('postgres_changes',
{ event: 'INSERT', schema: 'public', table: 'orders' },
({ new: order }) => kds.enqueue(order))
.subscribe()
Punto de venta (TPV)
POS web + app nativa con sesiones de caja: apertura, arqueo de cierre y detección automática de discrepancias. Multi-cajero, propinas, informes X y Z, y modo offline con cola local que sincroniza al reconectar.









Eventos, reservas y carta QR
Eventos con aforo y tickets, check-in por QR (uQR) y reservas con selección de menú. Servicios con calendario y sync con Google Calendar. Carta digital por mesa, multi-idioma y en tiempo real, con recordatorios para reducir los no-shows.

Todo lo que incluye
- ✓Perfil público del negocio
- ✓Carta digital con QR por mesa
- ✓Pedidos en mesa, delivery y recogida
- ✓Delivery propio con zonas en el mapa
- ✓Kitchen Display System
- ✓Eventos, tickets y check-in
- ✓Servicios y reserva de citas
- ✓Gestión de mesas y cupones
- ✓Punto de venta con arqueo de caja
- ✓Blog y seguidores por negocio
Integraciones
- ✓Pagos: Stripe Connect, Redsys, PayPal, Square, TropiPay, RalioPay
- ✓Google Maps, Places y Calendar
- ✓WhatsApp para estados de pedido
- ✓Facturación electrónica VeriFactu
- ✓Multi-moneda y multi-tenant
Retos técnicos resueltos
Construir esto en solitario significó resolver problemas de producción, no de tutorial.
Las pasarelas prohíben pedir las claves del negocio. Migré el cobro a Stripe Connect / OAuth: cada negocio conecta su cuenta, Ulula nunca guarda sus secretos y el dinero va directo a su cuenta. Cumplimiento por diseño.
Seis apps desde un código obligan a separar bien por variante: cada una con su bundle id y su GoogleService-Info. Usar el plist equivocado rompe push y analytics en silencio.
// Cada variante con su propio Firebase plist
function plistFor(variant) {
if (variant === 'consumer') return './GoogleService-Info.plist'
const p = `./GoogleService-Info-${variant}.plist`
return exists(p) ? p : fallback() // si no, [I-COR000008] y push roto
}El punto de venta no puede caerse si se va el WiFi un viernes a las 22h: las ventas se encolan localmente y se sincronizan al reconectar, sin duplicados.
El stack
Llevo más de 4 años construyendo producto a diario. Ulula es un monorepo: web en Next.js 15 + React 19, móvil en Expo / React Native, y backend en Supabase con 50+ Edge Functions (Deno), 120+ migraciones y Realtime. TypeScript de punta a punta.
// 6 apps desde un solo codebase (Expo)
const APP_VARIANTS = {
consumer: { name: 'ululando', bundleId: 'com.seracreativo.ululando' },
provider: { name: 'uBusiness', bundleId: 'com.seracreativo.ululando.business' },
tpv: { name: 'uTPV', bundleId: 'com.seracreativo.ululando.tpv' },
checkin: { name: 'uQR' }, kds: { name: 'uKDS' }, booking: { name: 'uBooking' },
}
// APP_VARIANT=tpv eas build → otra app, el mismo códigoEl modelo
Cuatro planes, del gratis al enterprise. El negocio empieza sin coste y escala cuando lo necesita.
Programa de embajadores
Ulula Ambassadors: por cada negocio que entra con tu código ganas el 20% de comisión recurrente durante 12 meses, y el negocio entra con un 20% de descuento los primeros 6 meses. Alta con Google + Stripe, eliges tu código y cobras el día 15. Global, vía Stripe Connect.

Roadmap 2026
Bootstrapping y product-led growth, barrio a barrio, hasta el default alive.
- Q1Zona Cero
10 negocios evangelistas, churn 0%, onboarding manual y happy path pulido.
- Q2Motor viral
Activar el loop B2B2C: el tráfico físico se vuelve usuarios de ululando. Meta: 1.000 activos.
- Q3Propuesta Pro
uKDS en cocina, reportes de rentabilidad y palanca VeriFactu. Meta: 30% a planes de pago.
- Q4Automatización y escala
Self-onboarding (foto de carta → IA → catálogo) y cashflow positivo.
Resultado
Ulula está en producción con clientes activos, en App Store y Google Play. Diseño, código y publicación, de extremo a extremo, por mí.
Si no escala con un fundador, no escala: ship pequeño y a diario, un audit ledger en vez de fixes silenciosos, y RLS desde el día uno.
Ulula