Agendamento self-hosted · MIT

Seu próprio sistema de agendamento, rodando na sua máquina.

SnagTime é o código-fonte de um app de agendamento completo: disponibilidade, links públicos de booking, Google Calendar, e-mails e pagamentos em modo teste. Sobe local em cinco minutos, sem credencial nenhuma.

Capa do projeto SnagTime
O que é

Snag a time. Get booked.

Um app de agendamento livre (licença MIT) e self-hostable. Em vez de assinar um SaaS de booking, você roda o seu — e customiza o que quiser.

🆓 Demo local sem credencial

Modo gratuito com SQLite, calendário local, caixa de e-mail local e pagamentos stub. Não chama Google nem Stripe.

🔗 Booking de verdade

Tipos de evento com várias durações, disponibilidade semanal, exceções por data, buffers, antecedência mínima, janela de agendamento e links públicos com fuso horário.

🔒 Produção endurecida

Arquitetura PostgreSQL 18 com row-level security forçada, credenciais separadas de app e worker, TLS verificado no banco e ingress autenticado.

Como funciona

Do setup ao agendamento confirmado

O fluxo do organizador até o convidado — tudo dentro da sua instalação.

npm run setup Workspace Tipo de evento Disponibilidade Link público Convidado agenda Confirmação por e-mail Remarcar / cancelar

👥 Workspaces

Cadastro, login, recuperação de senha, verificação de e-mail, membros, convites e troca de workspace.

🗓️ Agenda

Checagem de free/busy no Google Calendar e criação do evento no calendário do organizador.

🎨 Marca

Branding do workspace: cor de destaque, imagem de perfil e logo enviada por upload.

Pré-requisitos

O que precisa na máquina

Para a demo local gratuita, só isso. Nenhuma conta de terceiro é necessária.

Node.js 20.9+

Node 24 é o runtime verificado do projeto.

node --version  # v24.x

npm

Vem junto com o Node; instala as dependências do monorepo.

npm --version

Git

Para clonar o repositório.

git --version
Guia de uso · passo a passo

SnagTime rodando em cinco minutos

Comandos reais do repositório. Ao final você tem o app no localhost:3000 com login de organizador já criado.

1

Clonar o repositório

Baixe o código e entre na pasta.

git clone https://github.com/inematds/snagtime.git
cd snagtime
2

Gerar a configuração local

Cria um .env.local ignorado pelo git, gera segredos criptográficos independentes e imprime o login da demo uma vez.

npm run setup

# ou com o seu próprio login de organizador:
npm run setup -- --email voce@exemplo.com --password "SuaSenhaForte7!"
3

Instalar, migrar e subir

Um comando só: instala, aplica as migrações, popula o banco e sobe a demo gratuita.

npm run demo:free  # abra http://localhost:3000
4

Conferir a configuração

Valida a configuração local sem credenciais, se algo não subir como esperado.

npm run setup:check
5

Comandos do dia a dia

Desenvolvimento, testes e build de produção.

npm run dev              # servidor de desenvolvimento
npm run test             # testes unitários e de contrato
npm run typecheck        # TypeScript
npm run lint             # ESLint
npm run build            # build de produção do Next.js
npm run ci:secret-scan   # varre credenciais no código público
6

Banco de dados

db:reset destrói o SQLite local — use só quando quiser uma demo limpa.

npm run db:generate
npm run db:migrate
npm run db:seed
npm run db:reset        # destrutivo
7

Instalar com ajuda de IA

O repositório traz um prompt pronto para o Codex ou o Claude Code conduzirem a instalação, parando só nas etapas de conta que só você pode fazer.

# docs/AI-SETUP.md — copie o prompt do aluno e cole no assistente com:
https://github.com/inematds/snagtime
Integrações

O que você conecta com as suas contas

O código vem inteiro. As integrações externas continuam sendo suas — e nenhuma delas é necessária para a demo local.

RecursoO que você fornecePrecisa na demo local?
Banco de dadosNada para SQLite; PostgreSQL em produçãoNão
Hospedagem públicaDomínio HTTPS + serviço Node e worker de longa duraçãoNão
Google CalendarOAuth client ID e client secretNão
E-mail transacionalHost SMTP, usuário, senha e domínio remetente verificadoNão
Pagamentos StripeChave secreta de teste, publishable key e webhook secretNão

Callback URLs, variáveis de ambiente e verificação: docs/INTEGRATION-SETUP.md. Deploy público: docs/DEPLOYMENT.md.

Status

Onde o projeto está

Honestidade sobre o que é demo e o que é caminho avançado de self-hosting.

Pronto
Demo local gratuitaSQLite, adaptador de calendário local, caixa de e-mail local e pagamentos stub — para demos, desenvolvimento e experimentação pessoal.
Pronto
Integrações reaisGoogle Calendar (free/busy + criação de evento), SMTP e Stripe Checkout em modo teste, incluindo webhook de confirmação e reembolso.
Avançado
Produção self-hostedPostgreSQL 18 com RLS forçada, credenciais separadas, TLS verificado e ingress autenticado. Precisa de VPS ou plataforma de containers — Vercel e ChatGPT Sites não servem, pelo worker de longa duração.
Fora
Stripe em modo liveEsta versão rejeita chaves de modo live de propósito. Não anuncie como processador de pagamentos real sem implementar e auditar o suporte a live mode.