Javis OS
Javis OS is an Agentic AI that assists entrepreneurs in business tasks, helping them grow their work.
AI translation
Organize imóveis, clientes e potenciais parcerias em uma plataforma para corretores. Um produto SNNtech.
Translation pending
BusinessTypeScript · PLpgSQLGitHub @Snntech-flowOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
negocia Lar
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Protótipo de uma rede MLS para corretores. O repositório contém a interface inicial, cadastro de imóveis e perfis de busca, além de registros internos de visita em rascunho.Read the full README ↗
Protótipo de uma rede MLS para corretores. O repositório contém a interface inicial, cadastro de imóveis e perfis de busca, além de registros internos de visita em rascunho.
SUPABASE_URL e SUPABASE_SERVICE_ROLE_KEY) ou coladas como URL HTTPS. A tela reduz a foto e tira os dados de câmera; o servidor confere o tipo pelo conteúdo e recusa foto com EXIF..ics para importar no calendário, usar uma lista de leads adaptada para celular, conferir sugestões de imóveis com os critérios de compatibilidade explicados e iniciar DVPs em rascunho vinculados ao lead.anon/authenticated revogado. O app consulta o banco apenas no servidor; as ações validam a sessão e filtram registros privados pelo dono ou participante. Em ambientes novos, aplique as migrações SQL de supabase/migrations em ordem cronológica.Os fluxos completos de co-corretagem, planos e PDFs ainda precisam de implementação e revisão antes de serem oferecidos como serviço em produção.
5433 (veja docker-compose.yml).npm install
npm run db:up
DATABASE_URL=postgresql://negocialar:negocialar_dev_password@localhost:5433/negocialar_db npm run db:migrate
npm run dev
Atenção: o .env.local de quem publica costuma apontar para o Supabase de produção. db:migrate e drizzle-kit recusam banco que não seja local sem confirmação explícita, e o seed só roda em localhost. Modelo das variáveis em .env.example.
Use npm test, npm run lint e npm run build para conferir as validações, a qualidade do código e a compilação de produção. Os testes de autorização entre contas só rodam quando NEGOCIAR_LAR_TEST_DATABASE_URL aponta para um banco descartável local cujo nome contenha test; eles não aceitam URL do Supabase.
Configure DATABASE_URL no .env.local para apontar ao banco de desenvolvimento. Sem essa variável, o app usa a conexão local de desenvolvimento definida em src/lib/db/index.ts.
Configure DATABASE_URL e NEGOCIAR_LAR_SESSION_SECRET no ambiente do servidor. Gere um segredo forte fora do repositório, por exemplo com openssl rand -hex 32. O app encerra a inicialização sem essas variáveis em produção; nunca coloque os valores no Git.
Em hospedagem Vercel, o limite por IP usa o cabeçalho de origem fornecido pela plataforma. Em outras hospedagens, os cadastros usam um limite compartilhado mais conservador até que a aplicação receba a origem por um proxy confiável. Verifique periodicamente no Supabase se todas as tabelas de public continuam com RLS ativo e sem privilégios diretos para anon e authenticated.
Cadastros públicos nunca recebem papel de administrador. Para provisionar o primeiro administrador, use acesso confiável ao banco e promova uma conta cuja identidade já foi verificada. Não execute essa alteração em uma conta sem conferência.
As contas antigas sem password_hash precisam usar Esqueci minha senha para definir uma senha.
src/lib/db/seed.ts apaga e recria tabelas de demonstração. Por segurança, ele só roda fora de produção e exige ALLOW_DESTRUCTIVE_NEGOCIAR_LAR_SEED=yes. Use apenas em um banco descartável.
Antes de executar esta versão em um banco existente, aplique a migração supabase/migrations/20261001120000_trial_and_subscription_referrals.sql. Ela acrescenta o ciclo de cobrança e os dados de indicação; mantém as contas existentes e identifica ciclos anuais pelas transações anteriores. Contas antigas ativas sem data de vencimento preservam o acesso anterior. O novo período gratuito aplica-se aos novos cadastros.
A confirmação Pix e o bônus devem ser homologados em banco descartável antes da publicação. O estorno (painel admin) desfaz exatamente o período e o bônus de indicação daquele pagamento, do mais recente para o mais antigo.
src/lib/actions.ts continuam disponíveis.Use npm run typecheck além de lint, testes e build. Para validar as ações em um banco PostgreSQL local descartável, configure NEGOCIAR_LAR_TEST_DATABASE_URL, rode npm run db:test:migrate e npm run test:integration. A URL precisa apontar para localhost/127.0.0.1/IPv6 local e o nome do banco precisa conter test. Nenhum comando de teste usa .env.local para escolher o banco.
O workflow .github/workflows/quality.yml cria PostgreSQL isolado, monta o banco só pelas migrations (as mesmas de produção, duas vezes, para provar que não há pendência) e executa testes, lint, tipos e build. Um teste confere que toda coluna do schema.ts existe depois das migrations. Nesse workflow, a falta do banco de testes causa falha em vez de pular os testes de autorização. As migrações Supabase continuam sendo a referência para as restrições de acesso direto à API; a suíte entre contas valida as ações do servidor.
A ficha white-label usa o WhatsApp do corretor conectado e permite copiar um resumo ou abrir uma prévia para imprimir/salvar como PDF pelo navegador. Ela não copia links para rotas públicas inexistentes nem simula a geração de PDF.
Em Imóveis → Meus imóveis, o captador pode consultar a própria carteira, editar todos os campos do cadastro e marcar o imóvel como disponível, em negociação, vendido ou arquivado. O arquivamento é reversível e remove o imóvel da vitrine e do Radar, preservando visitas e parcerias. Restaurar um anúncio disponível exige CRECI aprovado e assinatura com acesso válido. Contas com acesso expirado ainda podem editar e arquivar a própria carteira. O servidor verifica a titularidade mesmo para administradores e rejeita uma gravação baseada em versão antiga.
A opção Esqueci minha senha envia um link de uso único, válido por 30 minutos. O banco armazena apenas o hash do token. O token vai no fragmento do link e a tela o remove da barra de endereço ao carregar. A troca incrementa session_version, invalida sessões anteriores e os demais links de recuperação da conta. Há limites por conta e conexão; as respostas de solicitação não revelam se o e-mail existe.
RESEND_API_KEY=chave_do_servico
NEGOCIAR_LAR_EMAIL_FROM=NegociaLar <[email protected]>
NEGOCIAR_LAR_APP_URL=https://seu-dominio.com.br
O remetente precisa estar autorizado no Resend. A integração usa a API oficial de envio de e-mails. Não coloque essas variáveis em NEXT_PUBLIC_*. A origem dos links vem exclusivamente da configuração, nunca do cabeçalho da requisição; em produção deve usar HTTPS. Reinicie o servidor após configurar. Sem essa configuração, a interface mostra indisponibilidade, sem simular entrega.
O envio foi validado com um substituto local do provedor nos testes; configurar a chave e o remetente e testar a entrega real continuam necessários no ambiente de publicação. Falhas do provedor invalidam o novo token e registram um erro sem e-mail nem token nos logs. A infraestrutura deve monitorar essa mensagem.
O Next troca a mensagem de um erro lançado por uma ação do servidor por um texto técnico em produção ("Minified React error #441"). Por isso:
ActionError (src/lib/action-result.ts); qualquer outro erro vira uma mensagem genérica e vai para o log só com a primeira linha (sem os parâmetros da consulta);{ ok: true, data } ou { ok: false, error } via runAction; a tela usa unwrap(await acao(...)), que relança com a mensagem certa.Preços e capacidade de anúncios ficam só em src/lib/plans.ts (cadastro, renovação, landing, assinatura e painel leem dali). O limite de anúncios ativos (disponível ou em negociação) é garantido no servidor, com a linha do corretor travada, ao cadastrar e ao reativar um anúncio. Contas antigas com plano pro/enterprise contam como 40.
npm run db:migrate aplica supabase/migrations em ordem e registra cada arquivo em public.app_migrations. Em produção (Supabase), na primeira vez:
# 1) registra como já aplicadas as migrations que já estão no banco (até a de recuperação de senha)
npm run db:migrate -- --confirmar-remoto --baseline-ate=20261007180000_password_recovery.sql
# 2) ensaio: aplica as novas numa transação e desfaz (ROLLBACK)
npm run db:migrate -- --confirmar-remoto --ensaio
# 3) aplica de verdade, antes de publicar o código
npm run db:migrate -- --confirmar-remoto
O código novo lê colunas que as migrations acrescentam: o banco sobe antes do código. A migration 20261010122000_remove_stock_images.sql tira as fotos de banco de imagem que o app colocava sozinho nos imóveis e a foto de perfil igual dada a todo corretor novo.
Para o envio direto de fotos, configure na Vercel SUPABASE_URL (https://SEU-PROJETO.supabase.co) e SUPABASE_SERVICE_ROLE_KEY; o bucket imoveis é criado pela migration. Sem as variáveis, a tela pede o link da foto.