Javis OS
Javis OS는 기업가를 돕는 에이전시 AI로, 업무를 지원하고 함께 성장합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Plataforma de gestão condominial com transparência total: ordens de serviço com registro visual de antes e depois, validação do zelador, aprovação do síndico e feed público para moradores. Status: MVP da Fase 1 (núcleo de OS, dashboards, feed, usuários, multi-condomínio, auditoria). Banco: PostgreSQL no Neon, provisionado pela integração Neon do Vercel Marketplace (projeto Vercel kreativae-projetos/condtrack).README 전문 보기 ↗
Plataforma de gestão condominial com transparência total: ordens de serviço com registro visual de antes e depois, validação do zelador, aprovação do síndico e feed público para moradores.
Status: MVP da Fase 1 (núcleo de OS, dashboards, feed, usuários, multi-condomínio, auditoria).
Banco: PostgreSQL no Neon, provisionado pela integração Neon do Vercel Marketplace
(projeto Vercel kreativae-projetos/condtrack).
npm install
vercel env pull .env.local --yes # traz DATABASE_URL / DATABASE_URL_UNPOOLED do Neon
npm run db:migrate # aplica prisma/migrations
npm run db:seed # dados de demonstração
npm run dev # http://localhost:3000
Os scripts db:* leem .env.local e .env (via dotenv-cli), porque o Prisma CLI não lê .env.local.
Alterou o schema? npm run db:migrate:dev -- --name descricao cria uma nova migração.
No deploy, npm run build roda prisma migrate deploy antes do next build.
Variáveis de ambiente do projeto:
| Variável | Obrigatória | Observação |
|---|---|---|
DATABASE_URL | sim | PostgreSQL (Neon). A integração Neon da Vercel cria automaticamente. |
DATABASE_URL_UNPOOLED | não | Conexão direta para migrações; se ausente, usa DATABASE_URL. |
AUTH_SECRET | sim | openssl rand -base64 32. Sem ela o login não funciona. |
BLOB_STORE_ID ou BLOB_READ_WRITE_TOKEN | sim, em produção | Fotos e vídeos das OS no Vercel Blob (privado). Criado ao conectar um Blob store ao projeto (Storage → Create → Blob); o formato novo usa BLOB_STORE_ID + OIDC. Sem ele, usa o disco local (./storage), que não persiste na Vercel. |
SETUP_TOKEN | só na instalação | Código (mín. 12 caracteres) para criar a conta de superadmin em /primeiro-acesso quando o banco não tem nenhum. Remova depois. |
SEED_ON_DEPLOY | não | true roda o seed de demonstração apenas se o banco estiver sem usuários. Remova após o primeiro deploy. |
O build (npm run build) aplica as migrações pendentes via scripts/migrate.mjs.
Contas de demonstração (senha condtrack123):
| Perfil | |
|---|---|
| Superadmin | [email protected] |
| Síndico | [email protected] |
| Zelador | [email protected] |
| Prestador (pintura) | [email protected] |
| Prestador (elétrica) | [email protected] |
| Conselho | [email protected] |
| Morador (somente visualização) | [email protected] |
| Perfil | Código | O que faz |
|---|---|---|
| Superadmin | superadmin | Tudo, em todos os condomínios |
| Síndico | syndic | Gestão completa do condomínio, atribui e aprova OS |
| Zelador | caretaker | Registra ocorrências e valida serviços |
| Prestador | provider | Executa OS atribuídas, anexa antes/depois |
| Conselho | council | Abre solicitações, acompanha as suas, comunicados e feed |
| Morador | resident | Somente visualização: dashboard e feed de serviços entregues |
Next.js 16 (App Router, Server Actions, proxy.ts) · React 19 · Tailwind CSS 4 · Prisma 6 + PostgreSQL (Neon) ·
Zod · jose (JWT em cookie httpOnly) · bcryptjs · Recharts · Lucide.
open ─► assigned ─► in_progress ─► completed ─► validated ─► approved (feed)
(síndico) (prestador, (prestador, (zelador) (síndico)
exige ANTES) exige DEPOIS)
│ │
└── rejected ◄─┘ (devolvida com motivo → prestador retoma)
Todas as regras de transição e visibilidade ficam em src/lib/workflow.ts (can() / canView()),
usadas tanto pela UI quanto pelas server actions — a UI nunca é a única barreira.
prisma/schema.prisma modelo de dados (Condomínio, Torre, Unidade, Usuário, OS, Mídia, Evento, …)
prisma/seed.ts dados de demonstração
src/proxy.ts redireciona não autenticados (checagem otimista)
src/lib/auth.ts sessão, requireUser(), "visualizar como" (impersonate)
src/lib/workflow.ts máquina de estados da OS + permissões por papel
src/lib/notify.ts notificações in-app (ponto de extensão p/ push/e-mail)
src/lib/audit.ts log de auditoria (IP, user-agent, antes/depois)
src/lib/storage.ts mídias: Vercel Blob privado (produção) ou disco local (dev)
src/app/actions/* server actions (auth, OS, admin, comunicados)
src/app/api/upload upload de mídia (1 arquivo/req, com checagem de permissão)
src/app/api/media entrega de mídia autenticada
src/app/(app)/… páginas autenticadas por perfil
src/components/ design system (ui.tsx), slider antes/depois, uploader, gráficos
Cobrança recorrente por condomínio, em BRL, via Stripe (integração do Vercel Marketplace).
lookup_key condtrack_<plano>_<month|year>)./assinatura): assinar via Stripe Checkout, trocar de plano/periodicidade (com proration), cancelar no fim do período ou reativar, trocar cartão e dados de cobrança no Portal do Cliente, histórico de faturas com PDF./admin/assinaturas): MRR, ARR, recebido em 30 dias, pagantes / em teste / inadimplentes / cancelados, receita mensal, condomínios por plano, lista completa com último pagamento e próxima cobrança; detalhe por condomínio com troca de plano, cancelamento e link para o Stripe./api/stripe/webhook (idempotente). Eventos: checkout.session.completed, customer.subscription.created|updated|deleted|trial_will_end, invoice.finalized|paid|payment_failed|voided|marked_uncollectible. Falha de pagamento notifica síndico e superadmins.Em dev, para receber webhooks: stripe listen --forward-to localhost:3000/api/stripe/webhook e use o segredo exibido em STRIPE_WEBHOOK_SECRET.
/admin/configuracoes centraliza as APIs da plataforma. Valores ficam na tabela Setting, cifrados com AES-256-GCM (SETTINGS_ENCRYPTION_KEY ou derivado do AUTH_SECRET). Ordem de leitura: valor salvo → variável de ambiente → padrão.
after()), e convite/redefinição de senha com a senha provisória.pg_stat_activity (por estado, por aplicação, sessões mais longas, uso vs. max_connections).@simplewebauthn): ativar/desativar, nome exibido, domínio (RP ID) e origens. Cada usuário cadastra aparelhos em Meu perfil; o login mostra "Entrar com Face ID / biometria". Exige HTTPS em produção.| Item | Observação |
|---|---|
| 2FA síndico/superadmin | Fase 1 restante. |
| Push / e-mail / WhatsApp | Plugar em src/lib/notify.ts. |
| Fase 2 | Documentos, reservas de áreas comuns, chat, inspeções/rondas persistidas, manutenção preventiva, relatórios PDF/Excel. |
| Fase 3 | App mobile (Expo), modo offline. |
| Logo por condomínio | Hoje só a cor de destaque é configurável. |
| Testes E2E | Playwright cobrindo o fluxo completo da OS. |