Javis OS
Javis OS는 기업가를 돕는 에이전시 AI로, 업무를 지원하고 함께 성장합니다
고이아니아·인근 지역 일자리 창출을 위한 무료 도구
Ferramenta gratuita para gerar emprego em Goiânia e região: vagas, diárias e freelances perto de casa, com a distância e o tempo de ônibus, e empresas de todos os tamanhos achando profissionais do bai
비즈니스TypeScript · PLpgSQLGitHub @timarcelomendes온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Ferramenta gratuita para gerar emprego em Goiânia e região: vagas, diárias e freelances perto de casa, com a distância e o tempo de ônibus, e empresas de todos os tamanhos achando profissionais do bairro.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Vagas, freelances e serviços perto de você. De graça.
Site do Publike, uma ferramenta do povo para gerar emprego em Goiânia e região: quem procura acha vaga, diária ou freelance perto de casa (com a distância e o tempo de ônibus), e empresas de qualquer tamanho, do MEI à indústria, acham profissionais que moram perto. Quem precisa publica, quem faz curte, e quando os dois se curtem (match) o WhatsApp aparece. A missão está em /missao.
Feito com Next.js 16, Supabase (Postgres com PostGIS, login, fotos e tempo real) e MapLibre com mapas do OpenFreeMap.
?tipo=tudo). Na página do anúncio, "Voltar para a busca" leva de volta com os mesmos filtros; quem chegou direto (Google, WhatsApp) vê "Ver mais vagas perto de você". Quem chega sem dizer onde mora vê a pergunta "Onde você mora?" com o campo do CEP (ou "Usar minha localização", "Não sei o CEP" e "Agora não"); o navegador só pede a localização quando a pessoa toca. No celular, a lista tem só Blocos e Mapa; no computador, também Lista, Grade e Blocos + mapa. Quem tem conta tem o botão "Só os meus" embaixo da contagem: a busca (lista e mapa) mostra só os próprios anúncios no ar./vagas/[cidade] e /vagas/[cidade]/[area] (e o mesmo em /servicos), com título "Vagas de emprego em Goiânia", "Vagas de limpeza e diaristas em Goiânia"..., os anúncios no ar, links por área e por cidade, e dados estruturados (BreadcrumbList e ItemList). Área sem anúncio fica fora do índice (noindex); cidade ou área que não existe dá 404 (no proxy.ts). Todas entram no sitemap.xml; o rodapé liga as cidades principais. Cada vaga tem JobPosting (Google for Jobs). Verificação do Search Console: public/googleb0f816f2a734c818.html (não apague).public/sw.js) não guarda páginas: só mostra offline.html quando a internet cai. Atalhos no ícone: Vagas, Serviços, Publicar e Painel.VIACEP_URL e NOMINATIM_URL trocam os endereços.casas, que só a própria pessoa lê; sem conta, fica num cookie). Com ele, a busca vai do mais perto ao mais longe a partir de casa, cada vaga mostra o tempo estimado de ônibus (ou a pé), e dá para filtrar "Até 30 min de ônibus". O tempo é uma estimativa pela distância (src/lib/deslocamento.ts), sem serviço pago de rotas.BRASILAPI_URL troca o endereço./descobrir): as vagas uma de cada vez, em cartões para deslizar (direita curte, esquerda passa, para cima salva; também pelos botões e pelas setas do teclado). Cada cartão mostra quanto a vaga combina com a pessoa (de 1 a 99%) e por quê: perto de casa, a área do que ela faz, o horário, CNH, estudo. As regras não custam nada; com a ajuda da IA ligada (Admin > IA, "Ajuda da IA para quem usa o site"), a IA lê o "O que você procura?" e o currículo e afina a ordem (até 12 consultas por pessoa por dia, guardadas por 6 horas). Abas "No seu bairro" (bairro, região e cidade de quem procura), "Em alta" (curtidas e salvas da semana) e "Salvas"; a estrela de salvar também fica na página da vaga. Vaga passada some por 30 dias.Você precisa do Node.js 20.9 ou mais novo (recomendado: 22 LTS). No Mac: brew install node, ou baixe em nodejs.org.
cd ~/Developer/publike
npm install
npm run dev
Abra http://localhost:3000. Uma faixa amarela avisa que é o modo demonstração. Os anúncios são de exemplo e nada é salvo.
Crie uma conta em supabase.com e um New project:
No menu lateral, abra SQL Editor:
supabase/migrations/20261007120000_publike.sql inteiro.No topo do painel, clique em Connect. Copie a Project URL e a Publishable key (sb_publishable_…). Se o projeto só mostrar a chave anon antiga, ela também serve.
Na pasta do projeto, copie .env.example para um arquivo novo chamado .env.local e preencha:
NEXT_PUBLIC_SUPABASE_URL=https://SEU-PROJETO.supabase.co
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=sb_publishable_...
NEXT_PUBLIC_SITE_URL=http://localhost:3000
Pare o npm run dev (Ctrl+C) e rode de novo. A faixa amarela some e o site passa a usar o seu banco.
O plano grátis pausa o projeto depois de uma semana sem uso. Para religar, é só entrar no painel. Para o lançamento, passe para o Pro (US$ 25/mês): ele não pausa e tem backup diário.
Em Authentication → URL Configuration:
http://localhost:3000http://localhost:3000/** e, quando o site estiver no ar, https://SEU-DOMINIO/**.Os modelos de e-mail (Authentication → Emails) só podem ser editados depois de configurar um SMTP próprio (veja a nota abaixo). Com o SMTP pronto, cole os modelos do Publike:
supabase/emails/entrar.html, assunto "Seu link para entrar no Publike".supabase/emails/confirmar-cadastro.html, assunto "Confirme seu e-mail no Publike".supabase/emails/recuperar-senha.html, assunto "Crie uma senha nova no Publike" (o "Esqueci a senha" do "Entrar com senha").Com esses modelos, o botão do e-mail leva para o próprio site (/auth/callback e depois /auth/confirmar), e o link funciona em qualquer navegador ou celular, não só no que pediu. A entrada só acontece quando a página abre num navegador de verdade: antivírus de e-mail e prévias de mensagem que apenas abrem o link não gastam a entrada. O texto pode ser mudado no Supabase à vontade; só mantenha o endereço do botão ({{ .RedirectTo }}&token_hash={{ .TokenHash }}&type=email).
A logo no topo vem de https://publike.org/email/logo.png, que segue a logo escolhida no admin (E-mails → Logo nos e-mails). Se o domínio mudar, troque o endereço nos dois modelos. Para tirar a logo desses e-mails, apague a linha do <img>.
Publique o site antes de colar os modelos: o site no ar precisa já ter a página
/auth/confirmar. E-mails enviados antes da troca continuam funcionando, do jeito antigo (só no mesmo navegador).O envio de e-mail que vem com o Supabase é bem limitado (poucos e-mails por hora) e serve para testar. Antes de lançar, configure um SMTP próprio em Authentication → Emails → SMTP Settings. Resend e Brevo, por exemplo, têm faixas gratuitas.
Os três seguem o mesmo roteiro: criar um "app" na empresa, colar o ID e a chave dele no Supabase e ligar o botão no .env.local. O endereço de volta é o mesmo para os três:
https://SEU-PROJETO.supabase.co/auth/v1/callback
Ele aparece no Supabase em Authentication → Sign In / Providers, dentro de cada provedor, como Callback URL.
https://SEU-DOMINIO/privacidade).http://localhost:3000, http://localhost e o endereço do site (https://SEU-DOMINIO). Copie o ID do cliente para o .env.local em NEXT_PUBLIC_GOOGLE_CLIENT_ID. Com ele, o site usa o botão oficial do Google e o login acontece no próprio Publike..env.local: NEXT_PUBLIC_LOGIN_GOOGLE=true.public_profile e email estão lá. Sem o email, o login falha.https://SEU-DOMINIO/privacidade), URL de exclusão de dados (https://SEU-DOMINIO/apagar-dados; o Facebook abre o link para conferir, então só aceita depois que o site estiver no ar), ícone de 1024 × 1024 com fundo transparente (o Facebook recusa fundo branco) e categoria..env.local: NEXT_PUBLIC_LOGIN_FACEBOOK=true.O app nasce em modo de desenvolvimento: só quem tem uma função no app (você e os testadores em Funções do app) consegue entrar. Para liberar para todo mundo, publique o app (modo Ativo). A Meta pode pedir uma análise da permissão
.env.local: NEXT_PUBLIC_LOGIN_LINKEDIN=true.Depois de mudar o .env.local, pare o npm run dev (Ctrl+C) e rode de novo. O botão de cada rede só aparece quando a variável dela está true e o provedor está ativo no Supabase (o site confere sozinho, a cada poucos minutos).
Uma conta só. Se a pessoa entra com o Google e depois pelo link mágico do mesmo e-mail, o Supabase junta as duas formas na mesma conta. No primeiro acesso, o nome da rede social já vem preenchido no perfil; a foto, não (a pessoa escolhe a dela).
Logos nos botões. As marcas exigem o logo oficial, sem alteração. Os três já estão em
public/marcas/(google.png,facebook.pngelinkedin.png), tirados das páginas de marca do Google, do Facebook e do LinkedIn e só reduzidos de tamanho. O botão do Google usa o logo do próprio Google; ogoogle.pngaparece só no botão reserva, quando o script do Google não carrega. Para trocar um logo, salve o novo arquivo com o mesmo nome (SVG também serve).
Sem ela, um robô pode pedir milhares de links de acesso: gasta os créditos do Zoho e suja a reputação do domínio (os e-mails passam a cair no spam). O site já está pronto; falta ligar, nesta ordem (ligar no Supabase antes do site deixa ninguém entrar por e-mail):
Publike. Hostnames: publike.org e localhost (o site no seu computador usa o mesmo Supabase). Modo: Managed. Guarde a Site key (pública) e a Secret key (secreta).NEXT_PUBLIC_TURNSTILE_SITE_KEY, no .env.local e na Vercel (Production). Faça um deploy e confira que o login por e-mail continua funcionando.localhost.O que muda para quem usa: quase nada. A verificação fica invisível e só mostra uma caixinha quando o Cloudflare desconfia. Ela vale para o link por e-mail e o código por SMS; Google, Facebook e LinkedIn não passam por ela (o próprio provedor já confere). Se der problema, desligue no Supabase (passo 3) e o login volta ao normal na hora.
5562999999999=123456. Apague esses números antes de lançar..env.local, ligue NEXT_PUBLIC_LOGIN_CELULAR=true e reinicie.No SQL Editor do Supabase, cole supabase/migrations/20261008120000_admin.sql inteiro e clique em Run. Ela cria a suspensão de contas, a fila de e-mails, os textos dos e-mails, a moderação por IA e as funções do admin.
Depois, do mesmo jeito, rode supabase/migrations/20261009120000_prioridade_local.sql. Ela faz a busca mostrar primeiro os anúncios do bairro de quem procura, depois os da região (em Goiânia) e os da cidade. A pessoa escolhe onde mora em "Onde você mora?", na busca; quem tem conta já usa o bairro do perfil. As regiões de Goiânia ficam em src/lib/regioes.ts.
Por último, rode supabase/migrations/20261009150000_servicos.sql. Ela transforma "serviço" em oferta: o profissional monta a vitrine em Meu painel > Meus serviços (o que faz, preço ou "a combinar", fotos de trabalhos e onde atende), e cada serviço aparece separado na busca. Quem precisa contratar toca em "Quero contratar"; o profissional aceita e dá match. Ela também cria a pasta de fotos trabalhos no Storage. Os anúncios de serviço antigos (pedidos, do tempo de teste) são apagados.
Depois, rode supabase/migrations/20261009180000_avaliacoes.sql. Ela cria as avaliações: só avalia quem deu match com o serviço, com nota de 1 a 5 e comentário opcional; a média aparece a partir de 3 avaliações e o profissional responde uma vez. Com a moderação por IA ligada, todo comentário e toda resposta passam por ela antes de aparecer: texto com ofensa, ameaça, discriminação ou dados pessoais fica retido, quem escreveu leva uma advertência e o texto vai para Admin > Denúncias > Avaliações. De lá, a equipe publica ou remove; suspender ou banir continua na ficha da pessoa.
Por fim, rode supabase/migrations/20261009200000_curriculos.sql. Ela cria o currículo (tabela curriculos e a pasta privada curriculos no Storage, só PDF, até 5 MB) e a opção "Pedir currículo" na vaga. Quem vê: a própria pessoa e quem anunciou uma vaga que ela curtiu, enquanto a curtida existir. O PDF abre por link temporário de uma hora.
Depois, supabase/migrations/20261009210000_config_where.sql: corrige o Salvar configurações de E-mails e de IA no admin (o Supabase barra UPDATE sem WHERE pela API).
E supabase/migrations/20261009230000_desfazer_match.sql: o "Desfazer match", com motivo e justificativa (a justificativa só a equipe vê, em Admin > Usuários > ficha da pessoa). Depois dela, 20261009240000_negociar_depois.sql (a pergunta "toparia negociar em outro momento?" e a regra de que vaga que pede currículo só dá match com quem preencheu).
Por último, supabase/migrations/20261009250000_agencias.sql: a conta de agência de emprego / RH, com CNPJ, a empresa contratante na vaga e os limites maiores para agência verificada. Rode antes de publicar o código novo: o site passa a ler a coluna cnpj e a chamar salvar_perfil com o CNPJ. O código antigo continua funcionando com o banco novo. Depois, 20261009260000_cnpj_empresas.sql deixa comércio e empresa informarem o CNPJ, e 20261009270000_descobrir.sql cria o Descobrir (salvas, vagas passadas, "O que você procura?" e o limite da IA). Por fim, 20261009280000_enderecos.sql: endereço (CEP + número) nas vagas de comércio, empresa e agência, o CEP de casa (casas) e a busca do mais perto ao mais longe a partir de casa. Rode antes de publicar o código novo.
Depois, 20261009290000_logo_emails.sql: a logo no topo dos e-mails (Admin > E-mails > Logo nos e-mails) e a pasta pública marca no Storage. E 20261010120000_sugestoes_assistente.sql: a página Sugestões e erros (/sugerir, para qualquer pessoa, com ou sem conta), o quadro Admin > Sugestões (Novo, Em análise, Fazendo, Feito e Descartado) e o assistente de ajuda. As duas podem rodar antes ou depois de publicar o código: sem elas, o site usa a logo do Publike e esconde o assistente. Depois, 20261011120000_etapas_candidatos.sql: as etapas e anotações dos candidatos em cada vaga. Sem ela, a lista de quem curtiu funciona, mas a etapa não salva. Por último, 20261011150000_conversas.sql: a etapa à vista de quem curtiu (com aviso), as etapas dos serviços e as conversas (tabela mensagens no Realtime, e-mails "Etapa atualizada" e "Mensagem nova"). E 20261011170000_negociar_de_novo.sql: depois de um match desfeito, dá para tentar de novo; o bloqueio passa a ser de quem bloqueou ("não quero mais negociar com X"). E 20261011190000_intencao.sql: a resposta de "O que você quer fazer no Publike?" fica guardada na conta de quem está logado (sem ela, vale só o cookie do navegador).
O admin não tem login: ele só existe no seu computador, com o site rodando em npm run dev. No site publicado, /admin não abre para ninguém além dos moderadores (veja 4.6).
No Supabase, em Project Settings → API Keys → Secret keys, crie uma chave secreta chamada admin-mac e copie.
No .env.local do seu computador, acrescente:
PUBLIKE_ADMIN=1
SUPABASE_SECRET_KEY=sb_secret_...
Pare o npm run dev (Ctrl+C) e rode de novo. No terminal aparece:
Admin do Publike (abra neste computador):
http://localhost:3000/admin/entrar?chave=...
Abra esse link no navegador. Ele guarda um cookie que vale 30 dias neste navegador; depois disso, é só abrir http://localhost:3000/admin (o link Admin também aparece no topo do site). Se o cookie sumir ou vencer, o admin pede para abrir o link do terminal de novo.
Como fica protegido:
npm run dev só aceita conexões do próprio computador (ninguém na mesma rede Wi-Fi abre). Para testar o site no celular pela rede, use npm run dev:rede, que desliga o admin.SUPABASE_SECRET_KEY ou PUBLIKE_ADMIN na hospedagem, nem mande a chave por chat ou e-mail. Se ela vazar, apague no Supabase e crie outra.Os e-mails saem pelo Zoho CPaaS (o antigo ZeptoMail), feito para e-mails automáticos. O domínio publike.org já está verificado lá: a chave DKIM (8123133._domainkey) e o CNAME de devolução (bounce-zem) estão no DNS. Em Validação do cliente, no menu da esquerda, responda o questionário: o Zoho revisa a conta para liberar todo o envio.
Usuário e senha ficam em Agents → publike → SMTP/API. O usuário é sempre emailapikey; a senha é a do Agent (botão de copiar ao lado de Palavra-passe 1).
smtp.zeptomail.com, porta 465, usuário emailapikey, a senha do Agent, remetente [email protected] e nome Publike.SMTP_SERVIDOR=smtp.zeptomail.com
SMTP_PORTA=465
SMTP_USUARIO=emailapikey
SMTP_SENHA=... # a senha do Agent
[email protected] # quem aparece como remetente
Coloque no .env.local e, no site publicado, nas variáveis de ambiente da hospedagem. Depois, no admin, em E-mails:
Os textos de cada e-mail são editados no próprio admin, com prévia. Quem não quiser os avisos desmarca a opção no perfil (avisos de suspensão da conta vão mesmo assim). Os avisos só vão para o e-mail de login confirmado da pessoa (quem entra só pelo celular não recebe e-mail).
Os links dos e-mails usam o endereço do site no ar. No seu computador o site é localhost, que não abre no celular de ninguém; por isso, enquanto você não disser o endereço público, o admin daqui só manda o e-mail de teste, e os avisos para as pessoas esperam o site publicado mandar (aviso parado há mais de 3 dias é cancelado). Quando o site estiver no ar, acrescente no .env.local:
PUBLIKE_URL_PUBLICA=https://publike.org # o endereço do site no ar
No site publicado não precisa: lá o NEXT_PUBLIC_SITE_URL já é o endereço público (https).
O site publicado não guarda a chave secreta do Supabase. Para mandar os e-mails e rodar a IA, ele usa uma chave do servidor, que só serve para isso: não abre o admin nem lê os dados das pessoas.
Vercel) e clique em Gerar chave. Ela aparece uma vez só; o banco guarda só uma impressão dela.PUBLIKE_CHAVE_SERVIDOR com a chave e publique de novo.No seu computador ela não é necessária: o site local usa a chave secreta.
OPENAI_API_KEY=... no .env.local e na hospedagem.Custo aproximado com o GPT-6 Luna (US$ 0,10 por milhão de tokens de entrada e US$ 0,50 de saída, em outubro de 2026): US$ 0,15 para revisar mil anúncios e US$ 0,35 para mil pedidos de "Melhorar texto". O GPT-6.1 Sol escreve melhor e custa de 20 a 40 vezes mais (ele raciocina antes de responder).
O site pede à OpenAI para não guardar o texto dos anúncios (store: false) e manda só o texto, nunca o contato de ninguém.
Anúncio que a IA acha suspeito sai do ar e vai para Denúncias, com o motivo. Quem publicou recebe um aviso de que o anúncio está em análise; você decide se remove (com o motivo, que vai para a pessoa) ou libera.
/ajuda): as perguntas e respostas ficam em src/lib/ajuda.ts. Mudou alguma regra do site? Mude lá: a página e o assistente leem do mesmo lugar.PUBLIKE_CHAVE_SERVIDOR)./sugerir, link no rodapé, na ajuda e na página de erro): qualquer pessoa manda um erro, uma sugestão, um elogio ou uma melhoria. Tudo cai em Admin > Sugestões, um quadro em que você arrasta os cartões entre as colunas e anota o que foi feito.No admin, em Moderadores, ponha o e-mail de quem vai ajudar. A pessoa precisa já ter entrado no site e criado o perfil. Moderadores entram com o login deles, em Moderação no menu da conta, e veem só Denúncias e Anúncios: corrigem, removem com motivo e liberam. Contas, e-mails, IA e chaves ficam só com você.
Vercel, com o servidor em São Paulo (o mesmo lugar do banco no Supabase). O plano grátis (Hobby) é só para uso não comercial; o Pro custa US$ 20/mês.
.env.local, com NEXT_PUBLIC_SITE_URL=https://publike.org, menos SUPABASE_SECRET_KEY, PUBLIKE_ADMIN e PUBLIKE_URL_PUBLICA (essas ficam só no seu computador). Acrescente PUBLIKE_CHAVE_SERVIDOR (veja 4.4). Marque senhas e chaves como Sensitive. As variáveis NEXT_PUBLIC_… entram no site na hora do build: depois de mudar uma delas, publique de novo (Deployments → Redeploy).vercel.json (gru1, São Paulo). Cada push na branch main publica o site de novo.publike.org (o www passa a levar para ele). No DNS do domínio (GoDaddy), troque o registro A de @ e o CNAME de www pelos valores que a Vercel mostrar. Não mexa nos registros de e-mail (MX e TXT).https://publike.org e adicione https://publike.org/** nas Redirect URLs (deixe o http://localhost:3000/**, que é do seu computador).https://publike.org entra em Origens JavaScript autorizadas (sem isso, o botão do Google falha no site publicado); no Facebook, o domínio entra em Domínios do app, junto com a URL de exclusão de dados (/apagar-dados). Depois, tire os dois do modo de teste.E-mail do domínio. Os e-mails saem pelo Zoho CPaaS com o endereço [email protected] (veja 4.3). Para não caírem no spam, o DNS precisa ter os dois registros que o Zoho CPaaS pede ao verificar o domínio: a chave DKIM (TXT em 8123133._domainkey) e o CNAME de devolução (bounce-zem). Os dois já estão lá; não apague.
| Comando | O que faz |
|---|---|
npm run dev | Abre o site em http://localhost:3000 e atualiza sozinho enquanto você edita. Só aceita conexões do próprio computador; com PUBLIKE_ADMIN=1, abre o admin em /admin |
npm run dev:rede | Igual, mas aceita conexões da rede (para testar no celular). O admin fica desligado |
npm run build | Gera a versão de produção (também confere os tipos) |
npm run start | Roda a versão de produção |
npm run lint | Procura problemas no código |
npm run typecheck | Confere os tipos do TypeScript |
supabase/migrations/ o banco inteiro: tabelas, regras de segurança (RLS), funções e gatilhos
src/proxy.ts renova a sessão e protege as páginas que exigem login
src/app/ as páginas (cada pasta é um endereço do site)
page.tsx início: busca com mapa e lista
anuncio/[id]/ página do anúncio e denúncia
publicar/ publicar vaga ou serviço
painel/ meus anúncios, quem curtiu, curtidas, matches, editar
perfil/ meu perfil e perfil público
entrar/, auth/ login (e-mail, Google, Facebook, LinkedIn, celular)
admin/ admin (só no seu computador) e moderação (moderadores com login)
como-funciona/, privacidade/
src/components/ peças da interface (cards, mapa, formulários, botões)
src/lib/
dados.ts leituras do banco (e os dados de exemplo no modo demonstração)
acoes/ o que muda dados: publicar, curtir, responder, denunciar…
constantes.ts categorias, tipos de contratação, cidades e bairros sugeridos
validacao.ts regras dos formulários
login-social.ts Google, Facebook e LinkedIn: nomes, provedores do Supabase e quais estão ligados
admin/ leituras e textos do admin
email/ monta os e-mails a partir dos textos editados no admin
ia/ conversa com a OpenAI: moderação, melhorar texto, resumo
servidor/ variáveis do servidor e filas de e-mails e da IA
supabase/ conexão com o Supabase (com login, pública e a do admin) e tipos do banco
src/app/globals.css cores, fontes e estilos do Design System
public/logo/ a logo em SVG (o p é o pino com um check vermelho: colorida, escura, preta e branca) e o símbolo; no site, o componente Logo desenha a mesma logo
public/marcas/ logos oficiais do Google, Facebook e LinkedIn para os botões de login
Design System. As cores (terra, ipê, cerrado, like), as fontes (Bricolage Grotesque e Figtree) e os componentes seguem o Design System do Publike. Os tokens ficam em src/app/globals.css.
Mudar o banco. Crie um novo arquivo em supabase/migrations/ com as mudanças e rode no SQL Editor (ou use npx supabase db push). Depois atualize os tipos em src/lib/supabase/tipos-banco.ts. Dá para gerar automaticamente com:
npx supabase gen types typescript --project-id SEU_ID > src/lib/supabase/tipos-banco.ts
Regras importantes do banco
pg_cron; se ele não estiver ativo, os vencidos somem da busca do mesmo jeito.20261008120000_admin.sql, 20261009120000_prioridade_local.sql 20261009150000_servicos.sql, 20261009180000_avaliacoes.sql, 20261009200000_curriculos.sql, 20261009210000_config_where.sql, 20261009230000_desfazer_match.sql, 20261009240000_negociar_depois.sql, 20261009250000_agencias.sql, 20261009260000_cnpj_empresas.sql, 20261009270000_descobrir.sql, 20261009280000_enderecos.sql, 20261009290000_logo_emails.sql, 20261010120000_sugestoes_assistente.sql, 20261011120000_etapas_candidatos.sql, 20261011150000_conversas.sql, 20261011170000_negociar_de_novo.sql e 20261011190000_intencao.sql)SMTP_…), e-mail de teste chegando e "quem recebe os avisos" preenchidoPUBLIKE_CHAVE_SERVIDOR na hospedagem (e SUPABASE_SECRET_KEY só no seu computador)NEXT_PUBLIC_CONTATO_EMAIL preenchido (aparece na página de privacidade)/apagar-dados) depois que o site estiver no ar