Communitygithub.com

timerise-ai/booking-kiosk

Habilidade de Agente: construir um quiosque de autoatendimento com tela sensível ao toque para reservas — fluxo de sete etapas, teclado na tela, reinicialização automática por inatividade, reservas com preços no servidor, transações de capacidade e bloqueios de estoque, pagamento no balcão ou por QR, atualização de disponibilidade ao vivo, failover offline em LAN, edição de reserva "encontre minha reserva" — no Next.js App Router, independente de backend

O que é booking-kiosk?

Esta habilidade permite que um agente de IA construa um quiosque de autoatendimento para reservas, onde o modelo de confiança é invertido: o cliente não é autenticado e o terminal é fisicamente compartilhado. Portanto, toda a confiança reside no servidor (para preços, capacidade e idempotência), e todo o estado do cliente é descartável (mantido em memória, reinicializado automaticamente por inatividade, nunca persistido). O fluxo é inspirado em quiosques físicos de auto-check-in, como em academias ou estúdios, com sete etapas em tela sensível ao toque (serviço → data → horário → participantes → equipamentos → resumo → confirmação), teclado virtual na tela, temporizador de inatividade de 120 segundos e um fluxo lateral para "encontre minha reserva" permitindo edição. A habilidade suporta Next.js App Router e é agnóstica em relação ao backend, fornecendo interfaces (seams) para adaptação a diferentes domínios (quadras, karts, baias), autenticação por chave de dispositivo, acesso a dados (Firestore ou SQL), pagamentos (status de balcão ou sessão de checkout Stripe), atualizações em tempo real (Firestore, Supabase, SSE ou polling) e failover offline em rede local. O agente gerencia preços estritamente no servidor, bloqueia estoque com TTL de 15 minutos liberado em cada caminho de falha, usa o sessionId do cliente como chave de idempotência e diferencia atualizações de fundo (REFRESH_SLOT) de navegação explícita (SET_SLOT) para evitar teleportar o cliente durante a compra.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add timerise-ai/booking-kiosk

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Quiosque de Reservas de Autoatendimento

Um quiosque é um site de reservas com o modelo de confiança invertido: o cliente não é autenticado por design e é fisicamente compartilhado, então toda a confiança reside no servidor (preços, capacidade, idempotência) e todo o estado é descartável (em memória, reinicialização automática, nunca persistido). Tudo nesta habilidade decorre desses dois fatos.

Quando usar

  • Construir um terminal de reservas para capacidade baseada em slots (estações × janelas de tempo) com opcionais de equipamentos e consumíveis.
  • Adicionar modo quiosque a um aplicativo que já possui reservas online.
  • Auditar um quiosque existente em relação às regras rígidas abaixo; provenance.md registra a razão por trás de cada uma.

Quando NÃO usar

  • Servidor de failover offline local — essa é a habilidade irmã island-mode-server; esta habilidade define apenas o contrato de failover do lado do cliente do quiosque.
  • Sinalização digital / telas de exibição — capacidade diferente (reprodução, sem entrada), habilidade diferente.
  • Ferramentas de POS ou administração de reservas para a equipe — a equipe é autenticada e confiável; o modelo de confiança desta habilidade está errado para eles.
  • Um site de reservas comum — aproveite a costura do backend se útil, mas a maquinaria do quiosque (teclado, temporizadores, endurecimento de toque) é peso morto lá.

Arquitetura

 KioskProvider (redutor puro: etapas, seleções, carrinho, sessionId)
   │ props: fatias de dicionário        hooks: preços · equipamentos · disponibilidade
 telas: serviço→data→horário→participantes→equipamentos→resumo→confirmação
   │                         └─ fluxo lateral: consulta-reserva → edição-reserva
   ▼ um wrapper de busca (chave do dispositivo + URL base de failover offline)
 /api/kiosk/booking/{create,lookup,add-items,edit}     ← todas as decisões de confiança
   ▼ Costura KioskBackend: preços do servidor · promoção · bloqueios de estoque (TTL 15 min)
     re-verificação transacional de capacidade · pagamento no balcão/online · webhook
 tempo real: location.lastBookingChangeAt → nova busca silenciosa → REFRESH_SLOT

Fatos críticos

  1. Toques do usuário navegam; atualizações em segundo plano nunca o fazem. SET_SLOT vs REFRESH_SLOT é a diferença entre disponibilidade ao vivo e teletransportar um cliente para fora da tela de resumo no meio da compra.
  2. O servidor precifica tudo. Nada que se pareça com dinheiro cruza o fio de entrada; o total do cliente é uma prévia.
  3. Pagamento no balcão é o caminho de resiliência — a reserva confirma com PENDING_COUNTER_PAYMENT, sem integração de pagamento no loop; pagamento online em um quiosque significa um QR que o cliente escaneia, nunca navegando o quiosque para longe.
  4. Toda entrada de texto abre o teclado na tela e define inputMode="none". Um sem o outro é uma tela inutilizável.
  5. Bloqueios de estoque são reservados com TTL (15 min) e liberados em todo caminho de falha — o trabalho de varredura é a rede de segurança, não o mecanismo.
  6. O sessionId do cliente é a chave de idempotência. Toque duplo, repetição, resposta perdida: no máximo uma reserva.

Regras rígidas

Nunca persista o estado da sessão do quiosque. O próximo cliente não deve ver o nome do anterior. Em memória + reinicialização por inatividade de 120 s + reinicialização de confirmação de 30 s, verificado em hardware.

Nunca confie no cliente para preços, capacidade ou validade de promoção. O servidor calcula cada valor e responde a uma promoção inválida com PROMO_INVALID; um cliente em um quiosque não tem como verificar o valor.

Um wrapper de busca para cada requisição do quiosque. O wrapper carrega o cabeçalho do dispositivo, o envelope de erro e a URL base de failover, para que autenticação, erros e failover offline se apliquem a cada requisição de uma vez.

Se a chave do dispositivo estiver configurada, um cabeçalho ausente é um 401. Apenas rejeitar com chave errada é o mesmo que nenhuma autenticação.

Libere bloqueios de estoque em todo caminho de falha após adquiri-los. Um 409 que mantém a reserva congela o estoque pelo TTL completo.

Início rápido

  1. Leia state-machine.md; implemente o redutor e o provedor, execute seu conjunto de testes.
  2. Construa telas de acordo com o contrato em screens.md com o sistema de design do anfitrião — teclado, temporizadores, endurecimento de toque.
  3. Implemente as rotas de api-contract.md sobre a costura booking-backend.md.
  4. Conecte atualização + offline conforme realtime-offline.md.
  5. Implante e teste de fumaça conforme operations.md.

Contrato de Adaptação

CosturaEsta habilidade forneceO anfitrião fornece
Entidades de domínioserviço/estação/equipamento/consumível + tabela de renomeaçãoseu vocabulário (quadra, kart, baía…)
Escopo do locatáriolocationId na URL do quiosque, verificado pelo servidorseu modelo de local/site
Autenticação do dispositivoContrato x-kiosk-api-keygerenciamento de chaves; tokens opcionais por dispositivo
Acesso a dadosInterface KioskBackend; referência Firestore + esboço SQLseu ORM/SDK
Pagamentosstatus de balcão + contrato de sessão de checkout/webhookStripe ou equivalente
Tempo realInterface SubscribeFreshnessFirestore/Supabase/SSE/polling
OfflineContrato NetworkStatusservidor LAN (island-mode-server) ou nenhum
Primitivas de UIestrutura, estados, regras de interaçãobotões, diálogo, spinner, aparência
Estilizaçãointenção de layout, alvos de toque, um token --primaryseu sistema de design
Stringsárvore de chaves de dicionário, todas as chaves obrigatóriasseus arquivos i18n, todas as localidades
Validaçãoguardas sem dependênciassua biblioteca de esquemas, se houver

Diretório de referência

CenárioPalavras-chave de gatilhoReferência
Estado, etapas, redutor, sessão, testesetapa, redutor, GO_BACK, REFRESH_SLOT, sessionId, resetstate-machine.md
Telas, teclado, temporizadores, toque, chaves i18nteclado na tela, inatividade, contagem regressiva, QR, alvo de toque, dicionárioscreens.md
Rotas, autenticação, validação, idempotência, errosx-kiosk-api-key, 401, 409, idempotência, PROMO_INVALID, consulta, PIIapi-contract.md
Capacidade, estoque, pagamentos, webhook, cronstransação, bloqueio de estoque, TTL, PENDING_COUNTER_PAYMENT, webhook, reembolsobooking-backend.md
Atualização ao vivo, cache, failover offlinelastBookingChangeAt, onSnapshot, s-maxage, banner offline, LAN, sonda de saúderealtime-offline.md
Implantação, controle de acesso, superfície do operadorEdge --kiosk, acesso atribuído, batimento cardíaco, feature gate, teste de fumaçaoperations.md
Por que os modelos diferem da implementação anteriorauditoria, razão, mantido deliberadamente, adicionadoprovenance.md

Habilidades Relacionadas