- TypeScript 80.5%
- CSS 14.9%
- Python 4.3%
- Dockerfile 0.2%
| Nome de arquivo | Última mensagem de commit | Última data de commit |
|---|---|---|
Substitui o README anterior por documentacao real e verificada do codigo: stack com versoes, arquitetura, funcionalidades, como rodar e variaveis de ambiente (apenas nomes). Preparatorio para migracao do repositorio do GitLab (evolx.mkt) para a organizacao BLITZAP no OmniGit. |
||
| .claude | ||
| app | ||
| components | ||
| docs | ||
| emails | ||
| hooks | ||
| lib | ||
| prisma | ||
| public | ||
| types | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| AGENTS.md | ||
| CLAUDE.md | ||
| docker-compose.yml | ||
| docker-entrypoint.sh | ||
| Dockerfile | ||
| eslint.config.mjs | ||
| middleware.ts | ||
| next.config.ts | ||
| package-lock.json | ||
| package.json | ||
| PDR-ATUALIZACOES.md | ||
| PDR-GERADOR-IA.md | ||
| PDR-UX-LAYOUT.md | ||
| PDR.md | ||
| prisma.config.ts | ||
| README.md | ||
| tsconfig.json | ||
Blitzap Blog
Plataforma de blog headless própria (sem WordPress) para a Blitzap — SaaS de disparos em massa no WhatsApp com API Oficial.
Desenvolvida para atrair tráfego orgânico e ranquear tanto no Google quanto nas respostas de IAs generativas (ChatGPT, Perplexity, Google AI Overviews), com um gerador de conteúdo IA multi-LLM integrado e painel administrativo completo. Em produção com 82 artigos publicados.
Stack
| Tecnologia | Versão | Uso |
|---|---|---|
| Next.js | 16.2.1 | Framework React (App Router, RSC, ISR) |
| React | 19.2.4 | UI |
| TypeScript | 5.x | Tipagem estática |
| Prisma | 7.5 | ORM com @prisma/adapter-pg |
| PostgreSQL | 15+ | Banco de dados com full-text search tsvector |
| NextAuth.js | v5 beta | Autenticação credentials + JWT |
| TipTap | 3.x | Editor rich text do admin |
| React Email + nodemailer | — | Emails transacionais (SMTP configurável no admin) |
| @google/genai, openai | — | Gateway multi-LLM (Gemini, OpenAI, Grok/xAI, DeepSeek) |
| sharp | 0.34 | Processamento de imagens (WebP, variantes) |
| cheerio, rss-parser, youtube-transcript | — | Coleta de fontes (RSS, HTML, YouTube) |
| CSS Modules + Custom Properties | — | Design system (sem Tailwind) |
| Docker | node:20-alpine | Deploy multi-stage, porta 8160 |
Funcionalidades
Blog público
- Homepage com artigo destaque e grid paginado (ISR 300s)
- Página de artigo com sumário (TOC), compartilhamento e artigos relacionados (ISR 3600s)
- Listagens por categoria, tag e autor com paginação
- Busca full-text PostgreSQL (
plainto_tsquery+ts_rank+ts_headline) com highlights - Glossário com páginas de definição (
/glossario/[slug]) e página institucional/sobre - Comentários aninhados (1 nível) com honeypot anti-spam e moderação
- Newsletter com double opt-in, múltiplos pontos de captura e exit-intent popup
- Design responsivo dark theme
SEO e GEO (otimização para LLMs)
- 24 modelos Prisma (prefixo
blog_), incluindo topic clusters, citações verificáveis, definições e interlinking NLP - Full-text search com índice GIN e dicionário
pg_catalog.portuguese(pesos A/B/C) - 9 schemas JSON-LD:
BlogPosting,FAQPage,BreadcrumbList,WebSite,Organization,HowTo,DefinedTermSet,Person,Speakable robots.tspermitindo AI crawlers (GPTBot, ClaudeBot, PerplexityBot etc.)llm.txtellms-full.txtpara consumo direto por grandes modelos de linguagem- Sitemap dinâmico via Prisma com imagens incluídas
- OG image dinâmica (1200x630) via
/api/og - Topic clusters, glossário/definition pages, interlinking assistido por NLP, citações verificáveis e sinais E-E-A-T
Gerador de conteúdo IA multi-LLM
- Gateway de LLMs em
lib/llm/com providers Gemini e OpenAI-compatível (OpenAI, Grok/xAI, DeepSeek) - Catálogo de modelos com custo por token (gemini-2.5-flash/pro, gpt-4o, grok-3, deepseek-chat e outros) e cost tracker com orçamento mensal (
BlogLLMUsage) - Pipeline completo: Fontes (RSS, YouTube, HTML scraper via cheerio) → Ideias → Geração (streaming SSE) → Revisão
- Endpoints CRON protegidos por
CRON_SECRET:/api/cron/sync-sources,/api/cron/generate-ideas,/api/cron/auto-generate
Painel admin (/admin)
- Dashboard com estatísticas reais do banco
- Artigos: listagem, editor TipTap com toolbar completa, painel SEO lateral e wizard de geração via IA (
/admin/artigos/gerar) - CRUD de categorias, tags e autores
- Moderação de comentários (Pendente/Aprovado/Rejeitado/Spam)
- Newsletter (subscribers, export CSV), mídia (upload + sharp), anúncios
- Dashboards de analytics (GA4, top artigos, views internos via
BlogPageView) e SEO (score por artigo) - Gestão de ideias, fontes e configurações de IA
Emails, analytics e performance
- Emails transacionais com React Email + nodemailer (SMTP configurável no admin):
ConfirmSubscription,WelcomeEmail,NewArticleNotification - Tracking: GA4, GTM, Microsoft Clarity, Meta Pixel, Google Search Console + analytics interno (
BlogPageViewcom scroll depth e time on page) - Server Components por padrão, ISR em todas as páginas públicas, imagens WebP com variantes e blur placeholder, standalone output para Docker
Estrutura
blitzap-blog/
├── app/
│ ├── (blog)/ # Páginas públicas (ISR)
│ │ ├── [slug]/ # Artigo (ISR 3600s)
│ │ ├── categoria/ tag/ autor/ busca/
│ │ ├── glossario/[slug]/ # Definition pages
│ │ └── sobre/
│ ├── admin/
│ │ ├── (auth)/ # Login
│ │ └── (dashboard)/ # artigos (inclui gerar/), categorias, tags, autores,
│ │ # comentarios, newsletter, midia, anuncios, analytics,
│ │ # seo, ideias, fontes, configuracoes
│ ├── api/
│ │ ├── articles/ categories/ tags/ authors/ comments/ newsletter/
│ │ ├── search/ upload/ media/ revalidate/ analytics/ og/ settings/
│ │ ├── ai/ # config, generate-article (SSE), generate-field, generate-image, usage
│ │ ├── ideas/ # CRUD de ideias + geração por ideia
│ │ ├── cron/ # sync-sources, generate-ideas, auto-generate
│ │ └── auth/ # NextAuth
│ ├── llm.txt/ llms.txt/ llms-full.txt/ # Rotas de conteúdo para LLMs
│ ├── robots.ts # Robots com AI crawlers
│ └── sitemap.ts # Sitemap dinâmico com imagens
├── components/ # admin/, blog/, seo/, newsletter/, comments/, ui/ ...
├── lib/
│ ├── llm/ # gateway, providers/, models, cost-tracker, crypto
│ ├── prisma.ts auth.ts search.ts seo.ts seo-score.ts upload.ts newsletter.ts
│ ├── interlinking.ts topic-clusters.ts citations.ts eeat.ts speakable.ts
│ └── llm-txt.ts llms-full.ts sitemap-images.ts stopwords-pt.ts
├── emails/ # Templates React Email
├── prisma/ # schema.prisma (24 modelos blog_), seed.ts, migrations/
├── docs/ # ARQUITETURA.md, API.md
├── Dockerfile # Multi-stage node:20-alpine
├── docker-entrypoint.sh # prisma migrate deploy + start na porta 8160
└── middleware.ts # Proteção de rotas /admin
~228 arquivos TypeScript/TSX.
Como rodar
Desenvolvimento
npm install
cp .env.example .env.local # preencher com as credenciais locais
npx prisma generate
npx prisma migrate dev
npx prisma db seed # admin, categorias, tags e configurações iniciais
npm run dev # http://localhost:3000
Docker (produção)
docker build -t blitzap-blog .
docker run -p 8160:8160 \
-e DATABASE_URL="postgres://..." \
-e NEXTAUTH_SECRET="..." \
-e NEXTAUTH_URL="https://blog.blitzap.com.br" \
blitzap-blog
O docker-entrypoint.sh executa prisma migrate deploy automaticamente antes de iniciar o servidor Next.js na porta 8160.
Não inclua valores de segredos em commits, issues ou PRs. Todos os exemplos acima são placeholders.
Variáveis de ambiente
Lista completa em .env.example (apenas nomes — nunca versionar valores):
| Variável | Descrição |
|---|---|
DATABASE_URL |
Connection string PostgreSQL |
NEXTAUTH_SECRET |
Secret do JWT (mín. 32 caracteres) |
NEXTAUTH_URL |
URL base da aplicação |
NEXT_PUBLIC_SITE_URL |
URL pública do blog |
NEXT_PUBLIC_LP_URL |
URL da landing page Blitzap |
CRON_SECRET |
Secret dos endpoints /api/cron/* |
REVALIDATION_SECRET |
Secret da revalidação ISR on-demand |
GEMINI_API_KEY |
Chave do provider Gemini |
RESEND_API_KEY |
Chave do Resend (envio de emails) |
EMAIL_FROM |
Remetente dos emails transacionais |
NEXT_PUBLIC_GA_ID |
Google Analytics 4 |
NEXT_PUBLIC_GTM_ID |
Google Tag Manager |
NEXT_PUBLIC_CLARITY_ID |
Microsoft Clarity |
NEXT_PUBLIC_META_PIXEL_ID |
Meta/Facebook Pixel |
NEXT_PUBLIC_GSC_VERIFICATION |
Google Search Console |
UPLOAD_DIR |
Diretório de uploads de mídia |
ADMIN_EMAIL / ADMIN_PASSWORD |
Credenciais do admin inicial (seed) |
Chaves de providers LLM adicionais (OpenAI, Grok/xAI, DeepSeek) e o SMTP de emails são configurados pelo painel admin (armazenamento criptografado).
Documentação
PDR.md— Documento de requisitos do produtoPDR-ATUALIZACOES.md— Histórico de atualizaçõesPDR-GERADOR-IA.md— Especificação do gerador de conteúdo IAPDR-UX-LAYOUT.md— Diretrizes de UX e layoutdocs/ARQUITETURA.md— Arquitetura da aplicaçãodocs/API.md— Referência de endpoints
Origem do repositório
Este repositório foi migrado do GitLab (gitlab.com/evolx.mkt/blitzap-blog) para o OmniGit em 22/10/2026, com o histórico completo de commits preservado.
- Atual: https://omnigit.dev/BLITZAP/blitzap-blog
- Origem (arquivada): https://gitlab.com/evolx.mkt/blitzap-blog
© EVOLX / Blitzap. Todos os direitos reservados.