Lalabase
Tickets, Doku, Zeiterfassung und Kundengespräche an einem Ort, durchsuchbar per KI. Für Softwarefirmen mit Kundenprojekten. Open Source: auf deinem eigenen Server oder in unserer Cloud in Deutschland.
Translation pending
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
Translation pending
BusinessTypeScript · PLpgSQLGitHub @timarcelomendesOnlineOwner 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
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.
Translation pending
Taken from the repository README
Loading the full README.
Read the full 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