ProyectosProyecto para cliente

SetHub — el sistema de un estudio de rodaje en Los Ángeles

Set Hub, en el centro de Los Ángeles, alquila dieciséis sets bajo un mismo techo, una azotea sobre la ciudad y un plató con un Mercedes de época. Le hemos construido al estudio el sistema entero — CRM, web con reserva y pago en línea, área de cliente y dos apps — y las reservas de todos los canales han acabado en una sola base.

  • Next.js 16 · TypeScript
  • PostgreSQL · Prisma 6
  • Stripe · pagos y suscripciones
  • Expo · iOS y Android
  • Gmail · Google Calendar

En cifras

4canales de reserva en una sola base: Peerspace, Giggster, la web del estudio y las directas
19calendarios de espacios en los que el sistema pone, mueve y quita las reservas él solo
2apps móviles con un mismo código: para el equipo y para los clientes
43tablas en la base de datos, 49 migraciones y 74 archivos de tests

El problema

El estudio alquila diecinueve espacios por cuatro canales — Peerspace, Giggster, su propia web y en directo — y cada uno trae sus propios correos y su calendario. Lo cuadraba todo una hoja de cálculo llevada a mano. La reserva del estudio completo y la de un set dentro de él vivían en calendarios de Google distintos, y nada impedía que una plataforma vendiera el estudio entero encima de un set ya ocupado: la plataforma ni siquiera veía esa reserva. El pago de la web llegaba, pero en ningún sitio constaba qué se había pagado exactamente. Aquí un error no es una errata en la hoja: son dos equipos de rodaje ante la misma puerta.

Qué hicimos

Los correos de Peerspace y Giggster se convierten solos en reservas

Un script en el correo del estudio reenvía cada cinco minutos los mensajes nuevos de las plataformas, y se leen con reglas, sin IA. Una consulta no es una reserva: «reservado» crea una reserva pagada con su importe, la comisión de la plataforma y lo que cobra el estudio; un aviso de cambio mueve la reserva que ya existe; cada liquidación se cuadra con su reserva por cliente e importe. Solo se registra sola la reserva de un correo que pasa la comprobación DMARC y se ha leído entero; lo demás espera a una persona en «Capture», marcado en rojo. Si un correo trae un solape, no se rechaza, porque la plataforma ya lo ha vendido: se crea una tarea urgente para hoy.

Diecinueve calendarios y una sola verdad

La fuente de verdad es la base de SetHub; los 19 calendarios de Google son un panel de «ocupado» que leen la web, Peerspace y Giggster. Reservar el estudio completo cierra los 16 sets que tiene dentro, cualquier set cierra el estudio, y la azotea y el plató del coche solo se cierran a sí mismos. El script del estudio pone, mueve y quita los eventos cada minuto, sin teléfonos, correos ni importes. Los eventos que crean las propias plataformas no se duplican: SetHub les añade su bloque. Un solape es un rechazo en todas partes: en el formulario, en «Capture», en la app y en los comandos de IA.

«Capture»: un texto, una foto, un documento o un audio se convierten en borrador

Lo que se envía a mano — un texto, la foto de un recibo, un PDF, un audio al bot de Telegram, una petición desde Make o Zapier — entra en una sola cola y espera confirmación. El texto normal y los archivos de Word los leen reglas, sin IA: fecha, hora, importe y señal, contactos, espacio, canal, empleado y cliente conocido; lo deducido queda resaltado. El modelo solo hace falta para lo que no es texto: voz, fotos y escaneos. El mismo mensaje de la misma persona en menos de diez minutos devuelve lo que ya se creó, en lugar de un duplicado.

Reserva en la web: la hora queda retenida mientras el cliente paga

El cliente elige set, día y hora con la disponibilidad en vivo, calculada con las reservas de todos los canales. «Book now» crea una reserva provisional y retiene la hora 35 minutos: la comprobación de que está libre y la escritura van bajo un bloqueo de la base, así que dos clientes no se quedan con la misma hora. Después viene Stripe Checkout; un webhook con firma verificada confirma justo esa reserva y un temporizador libera las retenciones que no se pagan. El precio lo calcula el servidor: −10 % desde 4 horas, −15 % desde 8, el día completo a precio fijo, extras y limpieza. Si hay algo ocupado en medio, la reserva se parte para esquivarlo: de 12 a 4 con la franja de 2 a 3 tomada quedan 12–2 y 3–5 al precio de una sola reserva, y la pausa no se cobra.

Correos al cliente: el código de la puerta, un día antes

Nada más reservar, el cliente recibe la confirmación: la reserva, el desglose del importe, las normas del estudio y el recibo en PDF, sin el código de la puerta. Un día antes llega el recordatorio con el código, la planta y un vídeo de cómo entrar; si se reserva con menos de un día de margen, todo va en un solo correo. Mover la reserva mueve el recordatorio, y cancelarla lo anula. Los correos salen del buzón del propio estudio, hasta 1000 al día y primero los de clientes; los códigos se borran de la cola en cuanto se envían. Para el equipo de rodaje hay un enlace firmado con la hora, la dirección, cómo entrar y «añadir al calendario», y al terminar, «That’s a wrap».

Área de cliente: sin contraseña, con descuentos y bonos

Se entra con un código de seis cifras que llega por correo: vale diez minutos y admite cinco intentos. Dentro están las reservas propias, «reservar otra vez» con el mismo set, horas y extras, el recibo en PDF y el evento para el calendario. El descuento crece con las visitas; la membresía es una suscripción de Stripe con horas al mes, y hay bonos de horas y tarjetas regalo: el código de 16 caracteres se guarda solo como hash y la tarjeta no caduca, como exige la ley de California. Después del rodaje llega un correo para puntuar con cinco estrellas; el enlace para reseñar en Google lo ve todo el que puntúa, no solo quien queda contento: pedir solo las reseñas buenas lo prohíbe Google.

Consultas, tareas y plazos, sin chats

Cada consulta recibe un número SH-xxxx y avanza por etapas: nueva, en conversación, esperando señal, confirmada, completada o perdida; el nivel de atención se calcula, no se guarda, y la cola del gestor se arma con la misma regla. El plazo y el responsable de una tarea los fijan el propietario y el gestor; un empleado no cambia el plazo, sino que pide moverlo con fecha y motivo, y esa prohibición vive en el servidor, no en el formulario. Hay avisos una hora antes del plazo, al vencer y cada mañana según la hora del estudio. Las notificaciones llegan como resumen por correo, push en el navegador, Telegram y push en el móvil directamente por Apple y Google; una tarea se puede cerrar con un botón en la propia notificación.

Cuatro roles, y los permisos los comprueba el servidor

El propietario lo ve todo. El gestor principal ve la operativa y el dinero del negocio, pero no los gastos personales del propietario. El gestor de clientes ve clientes, reservas con importes y consultas, sin ingresos ni gastos del estudio. El empleado ve tareas, agenda y «Capture», y nada de dinero: la app le entrega el día sin importes, pagos, canal ni contactos del cliente. Un único módulo de roles lo comprueban las páginas, el servidor, la API móvil y los 26 comandos para asistentes de IA: ChatGPT y Claude se conectan por MCP con acceso OAuth, y ningún comando borra nada. Cambiar la contraseña o desactivar la cuenta corta las sesiones, las llaves de los móviles y los accesos de IA.

Dos apps con un mismo código

«Set Hub Team» es para el equipo: se abre con Face ID o huella, las capturas de pantalla están bloqueadas, la llave vive solo en el llavero de ese teléfono y los datos de clientes, solo en memoria. El widget «Today» y la pantalla de bloqueo muestran hora y espacio sin nombres ni importes, y «Capture» se abre con un toque desde el Centro de control. «Set Hub» es para los clientes: reserva sobre una cinta de horas, búsqueda del set a partir de una foto de referencia, la hora dorada en la azotea según la fórmula de la NOAA y el pronóstico, y «cómo entrar» tras Face ID, que funciona incluso en un sótano sin cobertura. Las dos están montadas y probadas en el simulador de iPhone y el emulador de Android; publicarlas en App Store y Google Play es el siguiente paso.

Pantallas

Diecinueve espacios con precio por hora. Para el sistema son 19 lugares con calendario propio: reservar el estudio completo cierra los 16 sets que tiene dentro
Diecinueve espacios con precio por hora. Para el sistema son 19 lugares con calendario propio: reservar el estudio completo cierra los 16 sets que tiene dentro
Cada set tiene su página: fotos, superficie, aforo, normas del estudio y la reserva en la misma página
Cada set tiene su página: fotos, superficie, aforo, normas del estudio y la reserva en la misma página
El descuento, el pack de equipo y los extras los compone el servidor: desde el navegador solo sale la elección del cliente
El descuento, el pack de equipo y los extras los compone el servidor: desde el navegador solo sale la elección del cliente
Disponibilidad en vivo: el calendario cuenta las reservas de todos los canales, y la hora siempre es la de Los Ángeles, esté donde esté el cliente
Disponibilidad en vivo: el calendario cuenta las reservas de todos los canales, y la hora siempre es la de Los Ángeles, esté donde esté el cliente
Luces, estabilizadores, una cámara: se añaden a la reserva con un toque; lo que va por horas se cobra por las horas reservadas, y lo suelto, por unidad
Luces, estabilizadores, una cámara: se añaden a la reserva con un toque; lo que va por horas se cobra por las horas reservadas, y lo suelto, por unidad
Pie de página del sitio
Pie de página del sitio

Tecnologías

Next.js 16 y TypeScript; PostgreSQL con Prisma 6: 43 tablas, 49 migraciones y 74 archivos de tests automáticos. Los permisos viven en un único módulo de roles que comprueban las páginas, las acciones del servidor, la API móvil y los comandos de IA: un botón oculto no cuenta como protección. La hora es siempre la del estudio en Los Ángeles: reservas, plazos, límites del mes y avisos se comparan con el «ahora» del estudio, no con el reloj del servidor. La hoja de cálculo antigua se migró entera: cada registro guarda su fila original, y lo que no cuadró se revisa en una pantalla de conciliación aparte. La interfaz del equipo está en inglés y ruso; la de los clientes, en inglés.

El cobro va con Stripe Checkout y suscripciones, y un webhook con firma verificada. Correo y calendarios, con un script de Google en el buzón del estudio y los calendarios de Google mediante una cuenta de servicio, sin intermediarios como Make. La voz, las fotos y los PDF los analiza OpenAI; el texto normal, las reglas. Las notificaciones push van directamente a Apple y Google, y las del navegador, por VAPID sin librerías de terceros. Las apps son Expo y React Native con un núcleo común: widgets, Live Activity, un mosaico de ajustes rápidos en Android y un módulo en Swift que recuerda «cómo entrar» cuando el cliente llega al estudio.

¿Te llegan reservas por varios canales?

Cuéntanos de dónde vienen tus pedidos y dónde se pierden, y empezamos por lo que más duele. En Set Hub fueron los correos de las plataformas y los calendarios; lo demás creció alrededor. La web del estudio se puede abrir ahora mismo: abajo, en cada página, está nuestra firma, «Site by ProfiLab».

WhatsApp