Um jornal diário inteiro, da capa ao edital assinado.
Site público desenhado para quem lê no celular, painel com 22 telas para a redação operar sozinha, módulo comercial que fotografa e comprova cada anúncio, e publicações legais com assinatura ICP-Brasil. Um sistema só, com oito anos de acervo dentro dele.
- Cliente
- Correio dos Campos
- Contexto
- Jornal diário · Ponta Grossa e Campos Gerais, PR
- Período
- Agosto e setembro de 2026
- O que fizemos
- Produto · Design · Desenvolvimento · Infraestrutura · Migração · Sustentação

A home no desktop, com a barra de data e hora que nasceu de uma necessidade comercial.
59.447
matérias no acervo, cada uma no endereço de sempre
346.100
arquivos de mídia sob gestão do próprio sistema
22
telas de painel, para a redação operar sem chamar a agência
141
testes automatizados antes de cada publicação
A obra
Não uma camada do jornal. O jornal inteiro.
- Site públicohome, editorias, matéria, busca, guia comercial e páginas institucionais
- Painel de redaçãoescrita, publicação, mídia, taxonomias, contas e permissões
- Comercialanúncios, agendamento, comprovante de veiculação e guia de anunciantes
- Publicações legaiseditais com assinatura digital ICP-Brasil
- InfraestruturaVPS, servidor web, CDN de mídia, certificados, automações e implantação
- Migraçãoo acervo desde 2017, com as URLs preservadas uma a uma
Seis frentes que costumam ser seis fornecedores, entregues como um sistema só: o site que o leitor vê, o painel onde a redação escreve, o módulo que sustenta a receita, as publicações legais com assinatura digital, a infraestrutura embaixo de tudo e o acervo de oito anos trazido inteiro. Uma linguagem visual, um lugar para operar, um caminho de publicação.
A direção visual foi fechada com o cliente em 27 de agosto, e é uma escolha editorial antes de ser estética: home cronológica agrupada por dia, base neutra com o vinho da marca reservado ao que é do jornal, e densidade espaçosa. O diário ganhou respiro de revista sem perder o ritmo de diário — menos matérias por tela, compensadas pelo agrupamento por dia e pelo carregamento incremental.
O jornal saiu de uma plataforma proprietária para ter a própria, e o acervo entrou junto: 59.447 matérias servidas pelo sistema novo, cada uma no endereço que já tinha. O site rodou em paralelo ao antigo até estar conferido, e só então recebeu o domínio.
O site público
Desenhado como jornal, não como blog.
O leitor do Correio lê no telefone, chega por busca e volta por assunto local. O layout foi desenhado para essa sessão curta e de alta frequência — e para parecer um jornal enquanto faz isso: chapéu, título, subtítulo, crédito de imagem e tempo de leitura em cada matéria.
A home é cronológica, agrupada por dia — é assim que um jornal diário se lê: o que saiu hoje, depois o que saiu ontem. Abaixo da abertura vieram seções próprias, cada uma com sua linguagem visual: Obituários, Vagas de Emprego, Publicações Oficiais e Guia Comercial.
Obituário e Vagas ficam fora da abertura de propósito. São serviço, não notícia: quem procura vai direto à seção, e quem não procura não tropeça neles entre as últimas matérias.
O conteúdo se organiza por duas taxonomias paralelas, e não por uma hierarquia. São 28 no total: 14 cidades, que definem a URL da matéria, e 14 editorias, que definem o assunto. As duas compartilham a mesma rota de seção, então cidade e editoria funcionam como seções equivalentes para o leitor. Criar uma editoria hoje é operação de painel, não de código.
Capturas do sistema em produção. Dados pessoais de terceiros foram apagados.
No celular e no tablet
Publicidade
A receita do jornal, tratada com o cuidado do editorial.
São seis posições, cada uma com o formato declarado na própria página Anuncie — com a medida de envio, a medida de tela e o diagrama na escala real.
Cada anúncio tem início e fim. Fora da janela ele não veicula, e o painel diz o motivo em português: o prazo venceu, sem criativo, pausado. Pausar tira do ar sem mexer nas datas, para segurar um anúncio sem perder o contrato, e a renovação de prazo é um clique.
Quando há vários anúncios ativos na mesma posição, o site sorteia a cada requisição em vez de mostrar sempre o primeiro. No sistema antigo, o campo de ordem fazia um anunciante levar todas as impressões.
O painel pede a arte no dobro da medida de tela, porque celular tem de 2 a 3 pixels por ponto. E a arte é guardada byte a byte, sem passar pelo conversor de foto: comprimir de novo um JPG que já veio comprimido borra texto pequeno e colorido, que é exatamente do que banner é feito. GIF animado é preservado com todos os quadros, e o rodapé fixo aceita um segundo criativo só para o telefone.
| Posição | Formato na tela | Onde aparece |
|---|---|---|
| Topo fixo | 920 × 150 | acima do conteúdo, em todas as páginas |
| Lateral | 300 × 600 | coluna da direita |
| Dentro da matéria | 300 × 250 | no meio do texto |
| Inferior | 920 × 150 | pé do conteúdo |
| Rodapé fixo | 1200 × 110, e 320 × 50 no celular | barra colada no rodapé |
| Horizontal | 920 × 150 | reservado, fora do ar |
Capturas do sistema em produção. Dados pessoais de terceiros foram apagados.
Comprovante
A prova de veiculação pronta antes de o anunciante pedir.
O anunciante quer ver o anúncio dele na página, e o jornal precisa provar que circulou. Um navegador sem tela abre o site, encontra cada anúncio no ar e fotografa a página inteira com o anúncio dentro dela — com a data e a hora visíveis na barra do topo, que existe justamente para isso. Os horários são 8h, 10h, 12h, 14h, 16h e 18h.
A matéria fotografada muda todo dia. No começo a captura pegava sempre a mesma, e o cliente recebia trinta prints idênticos no mês. Hoje a página varia, o que mostra o anúncio em contextos diferentes e comunica muito melhor.
Às 22h sai o envio. Cada anunciante recebe o comprovante dos próprios anúncios, no e-mail cadastrado; o comercial recebe o relatório interno completo, com a carteira inteira e também o que não circulou. O painel guarda o histórico com data, hora, destinatário, peso e quantos comprovantes iam anexados.
Uma regra de privacidade foi escrita dentro do gerador: o e-mail de um cliente nunca pode listar anúncio de outro. E os comprovantes ficam fora da raiz da mídia servida pelo CDN — a própria implantação se recusa a subir se essa pasta estiver dentro da pública.
Capturas do sistema em produção. Dados pessoais de terceiros foram apagados.
Publicações legais
O edital sai do painel já assinado, com validade jurídica.
Publicar edital é serviço regulado e fonte de receita: cartório, tribunal e órgão de controle precisam de um PDF com assinatura íntegra, não do HTML da página. O módulo de assinatura tinha ficado com o fornecedor antigo e foi refeito dentro do painel.
O redator envia o PDF pela própria tela da publicação. O servidor assina com o certificado A1 do jornal, no padrão ICP-Brasil, e vincula o arquivo à matéria — na mesma árvore de mídia dos 453 PDFs herdados, com o mesmo sufixo, para que antigos e novos fiquem indistinguíveis para quem baixa.
PDF que já chega assinado não é assinado de novo. Reassinar altera o documento e invalida a assinatura anterior: o arquivo pareceria assinado e falharia na conferência. O sistema detecta, guarda como está e avisa na tela.
O certificado é vigiado. O painel mostra a validade como índice operacional e avisa com 30 dias de antecedência; vencido, a tela diz que não dá para assinar até renovar, em vez de deixar o redator descobrir no erro.
Capturas do sistema em produção. Dados pessoais de terceiros foram apagados.
O painel
22 telas para a redação operar sozinha.
A tela de abertura não é decorativa: quatro indicadores ao vivo, um gráfico de 7 e 30 dias, o que mudou por último e os índices operacionais — anúncios no ar, publicações assinadas, validade do certificado.
Os papéis somam, em vez de formar escada. O modelo antigo era uma hierarquia: admin continha editor, que continha redator. Escada não descreve uma redação — quem cuida de anúncio não escreve matéria, e quem administra contas não necessariamente publica. Abaixo dos quatro papéis há 12 poderes granulares, e diante de qualquer valor inesperado no banco a regra cai para o menor privilégio, nunca para o maior.
O editor de matéria tem título, chapéu, subtítulo, corpo em texto rico, imagem com crédito, taxonomias, agendamento e pré-visualização. O texto colado de fora passa por uma limpeza que preserva o que é conteúdo e descarta o que é lixo de editor — com teste até para o caso de palavras se grudarem na fronteira das tags.
A biblioteca guarda 69.695 registros e 346.100 arquivos, organizados por data. Cada foto enviada gera cinco variantes, para o navegador escolher a mais leve que sirva. Cada tela explica a si mesma: os campos têm ajuda em português claro, dizendo o que acontece se ficarem em branco.
| Papel | O que alcança |
|---|---|
| Redator | escrever matéria e edital, enviar mídia |
| Editor | tudo do redator, mais excluir e gerir taxonomias |
| Comercial | anúncios e guia comercial, sem tocar no editorial |
| Admin | contas, assinantes e exclusão de publicação |
Capturas do sistema em produção. Dados pessoais de terceiros foram apagados.
Migração e infra
Oito anos de jornal mudaram de casa sem trocar de endereço.
Zero
endereços quebrados na virada. As 59.447 URLs do acervo, os 346.100 arquivos de mídia e os 453 PDFs herdados continuaram no mesmo lugar, e o sitemap saiu com 59.345 endereços em três arquivos.
São oito anos de matéria indexada no Google, compartilhada em rede social e citada em outros sites. Cada um desses endereços continuou respondendo exatamente como respondia antes, e a importação tem um script separado de conferência que compara o que entrou com o que existia.
Slugs corrompidos foram mantidos corrompidos, de propósito. O sistema anterior gravava acentuação com defeito, e corrigir teria quebrado todos os links que já circulavam por aí. O acervo ficou com o endereço torto; só as edições novas nascem com o slug correto. A mídia também manteve o caminho, porque a pasta por data está escrita dentro do HTML de cada matéria — reescrever o corpo de 59 mil textos seria arriscado e desnecessário.
Tudo roda numa VPS Ubuntu com 4 vCPU e 7,8 GB de RAM, dividida com outros dois sistemas da agência, e isso definiu quase todas as escolhas: nginx na frente com cache de página próprio, Node atrás como serviço do sistema operacional, MongoDB local e a mídia num subdomínio à parte com cache de um ano. As páginas são servidas estáticas e revalidadas a cada minuto — com 59.447 URLs, pré-gerar tudo a cada build seria inviável.
São 141 testes automatizados em 30 suítes, rodados antes de qualquer publicação. Eles cobrem justamente as funções onde o erro é silencioso e o build passa verde: montagem de permalink, janela de veiculação, acumulação de papéis, datas no fuso de Ponta Grossa, higienização de texto colado, preservação de arte e de GIF animado, aviso de vencimento do certificado.
A implantação é um caminho só, com volta: confere o ambiente, recusa subir se os comprovantes estiverem na pasta pública, roda os testes, guarda o build atual, constrói o novo, reinicia e espera o site responder. Se qualquer passo falhar, o build anterior volta e o site continua no ar — nunca fica no meio.
Detalhes
Cinco decisões que só aparecem de perto.
Stack
Tudo roda na própria máquina: nenhum serviço pago para busca, imagem ou envio.
- Next.js 15site e painel, com regeneração incremental
- React 19interface
- TypeScript 5.7tipagem conferida a cada build
- Tailwind CSS 3.4estilo, com as cores da marca como variáveis
- MongoDB e Mongoose 8banco, com 14 modelos
- sharpvariantes de imagem e detecção de GIF animado
- Puppeteercaptura dos comprovantes de veiculação
- @signpdf e pdf-libassinatura digital ICP-Brasil dos editais
- Nodemailercomprovantes, newsletter e redefinição de senha
- sanitize-htmlhigienização do texto colado no editor
- nginx e systemdservidor web, cache, serviços e automações
- Ubuntu 22.04 LTSVPS de 4 vCPU e 7,8 GB, dividida com outros sistemas
Seu sistema pode ser o próximo.
Conte o que a sua operação precisa resolver. A gente volta com o caminho — e com o que dá para colocar no ar primeiro.