Javis OS
Javis OS는 기업가를 돕는 에이전시 AI로, 업무를 지원하고 함께 성장합니다
DLJ Innovations는 이발소·미용실·스튜디오·클리닉·수업 등 온라인 예약 플랫폼
A DLJ Innovations é a plataforma de agendamento online para barbearias, salões, estúdios, clínicas, aulas e mais: link público pro cliente marcar sozinho, agenda com confirmação de presença, bloqueios
비즈니스TypeScript · JavaScriptGitHub @lpo19Lucas온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기A DLJ Innovations é a plataforma de agendamento online para barbearias, salões, estúdios, clínicas, aulas e mais: link público pro cliente marcar sozinho, agenda com confirmação de presença, bloqueios, histórico, métricas e muito mais. 50 dias grátis.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Barbearia — Plataforma de Agendamento (scaffold do MVP) Scaffold gerado a partir de spec-funcional-mvp-barbearia.md e arquitetura-modelo-de-dados.md. Ainda não roda — é a estrutura + as peças de lógica mais críticas já implementadas de verdade, pra você continuar em cima em vez de começar do zero. Como rodar via Docker (recomendado — não precisa de Node/Postgres instalados na máquina) Pré-requisito: Docker Desktop instalado e rodando.README 전문 보기 ↗
Scaffold gerado a partir de spec-funcional-mvp-barbearia.md e arquitetura-modelo-de-dados.md. Ainda não roda — é a estrutura + as peças de lógica mais críticas já implementadas de verdade, pra você continuar em cima em vez de começar do zero.
Pré-requisito: Docker Desktop instalado e rodando.
docker compose up --build
Isso sobe o Postgres, instala as dependências, gera o client do Prisma, roda a migration inicial (prisma migrate dev --name init — cria prisma/migrations/ na primeira execução) e inicia o next dev em http://localhost:3000. As próximas vezes que rodar, a migration inicial já existirá e o comando só aplica o que houver de pendente.
Para parar: docker compose down (os dados do Postgres ficam persistidos no volume postgres_data; use docker compose down -v pra zerar o banco também).
Se editar código e a mudança não aparecer: no Docker Desktop com Windows, o bind mount (.:/app) às vezes não propaga eventos de arquivo pro inotify do Linux dentro do container — o Next.js fica servindo a versão antiga do arquivo silenciosamente, sem erro nenhum. O docker-compose.yml já liga WATCHPACK_POLLING/CHOKIDAR_USEPOLLING pra isso não acontecer, mas se ainda assim uma mudança não refletir, docker compose restart app resolve.
Rodando npm run build manualmente dentro do container: o docker-compose.yml fixa NODE_ENV=development (correto pro next dev), mas isso faz next build falhar com <Html> should not be imported outside of pages/_document ao gerar a página 404 — é um bug conhecido do Next.js quando NODE_ENV não é production durante o build. Rode assim: docker compose exec -e NODE_ENV=production app npm run build.
npm install
cp .env.example .env # ajuste DATABASE_URL pro seu Postgres
npx prisma generate
npx prisma migrate dev --name init
npm run dev
Não rodei nada disso aqui — o sandbox onde montei esse scaffold não tem acesso ao registry do npm. Validar npm install e prisma migrate dev é o primeiro passo ao abrir isso na sua máquina.
Stack: Jest (unitário) + Testing Library (componentes) + Playwright (E2E).
# Unitário/componente — rápido, não precisa de banco
docker compose exec app npm test
# Integração — bate no Postgres real do serviço postgres_test (já sobe junto no docker compose up)
docker compose exec app npm run test:integration
# E2E — precisa do app rodando em http://localhost:3000 e dos browsers do Playwright instalados
docker compose exec app npx playwright install --with-deps chromium
docker compose exec app npm run test:e2e
*.test.tsx, ambiente jsdom): hoje não há nenhum ainda porque todas as páginas são placeholder (return null) — não há o que testar de verdade até a UI existir. O setup (jest.setup.ts, Testing Library) já está pronto para quando as telas forem implementadas.*.integration.test.ts, ambiente node, roda contra Postgres real): cobre as 4 rotas de API que já têm lógica — criação de agendamento (conflito de horário, upsert de cliente, geração dos jobs de WhatsApp), cancelamento, confirmação de presença e o processador da fila de WhatsApp. Ver tests/integration/helpers.ts para os fixtures (resetDb, createTestSalon).e2e/*.spec.ts, Playwright): os testes existem como esqueleto (test.skip) descrevendo os fluxos-alvo (agendamento, cancelamento, confirmação de presença, agenda do dono) — ficam pulados até a UI real existir, pra não mascarar um resultado que não significa nada.prisma/schema.prisma — os 12 modelos completos.src/lib/prisma.ts — client singleton + o helper scopedToSalon (arquitetura seção 2).src/app/api/salons/[salonSlug]/appointments/route.ts — criação de agendamento com prevenção de conflito de horário via transação SERIALIZABLE (arquitetura seção 4, Opção A), upsert de cliente por telefone, e disparo dos 3 tipos de job de WhatsApp.src/app/api/appointments/[accessToken]/cancel/route.ts e .../confirm-presence/route.ts — as duas ações que o cliente faz sem login, autenticadas só pelo token da URL.src/app/api/cron/whatsapp-jobs/route.ts — o consumidor da fila própria (tabela whatsapp_message_jobs). O envio real pro provedor de WhatsApp ainda é um console.log — falta a integração com a Meta Cloud API.Todas as páginas em src/app/(public) e src/app/(dashboard) — cada arquivo tem um comentário apontando pra qual seção da spec ela implementa e qual exemplo do mui-exemplos.html usar de referência visual. Nenhuma tela foi construída ainda.
src/lib/auth.ts, cookie JWT).STATUS-DO-PROJETO.md).handleNoShows em src/app/api/cron/whatsapp-jobs/route.ts checa PresenceConfirmationConfig.actionOnNoConfirm e age (cancela ou sinaliza no dashboard).CRON_SECRET (ver .env.example)./admin (protegida por ADMIN_PASSWORD, ver .env.example).Ver STATUS-DO-PROJETO.md (na raiz do projeto, fora de app/) para o status completo e atualizado — este README documenta principalmente a estrutura do scaffold original.
src/app/
├── (public)/[salonSlug]/ → site público do salão (sem login)
│ ├── page.tsx → agendamento self-service
│ └── agendamento/[accessToken]/page.tsx → gerenciar 1 agendamento (cancelar/reagendar/confirmar)
├── (dashboard)/ → área do dono (autenticada — auth ainda não implementada)
│ ├── agenda/page.tsx
│ ├── profissionais/page.tsx
│ ├── servicos/page.tsx
│ ├── assinatura/page.tsx
│ └── metricas/page.tsx
└── api/
├── salons/[salonSlug]/appointments/route.ts → POST criar agendamento
├── appointments/[accessToken]/cancel/route.ts → POST cancelar
├── appointments/[accessToken]/confirm-presence/route.ts → POST confirmar presença
└── cron/whatsapp-jobs/route.ts → GET processa fila de WhatsApp