// Use this skill when creating, editing, or publishing news articles or educational content. Contains templates, rules, checklists, script examples, and content guidelines.
| name | article-creation |
| description | Use this skill when creating, editing, or publishing news articles or educational content. Contains templates, rules, checklists, script examples, and content guidelines. |
| allowed-tools | Read, Write, Edit, Bash, Grep, Glob |
This skill provides all necessary information for creating news articles and educational content in the Token Milagre Platform.
Total: 6 artigos completos
{
id: 'número_sequencial',
slug: 'titulo-do-artigo-em-kebab-case',
title: 'Título Completo do Artigo',
description: 'Breve descrição do conteúdo (1-2 frases)',
category: 'blockchain' | 'trading' | 'defi' | 'nfts' | 'seguranca' | 'desenvolvimento',
level: 'iniciante' | 'intermediario' | 'avancado',
type: 'Artigo' | 'Tutorial',
readTime: 'X min',
tags: ['tag1', 'tag2', 'tag3'],
author: 'Comunidade $MILAGRE',
publishedAt: 'YYYY-MM-DD',
content: `conteúdo em markdown`
}
Aplicam-se a TODOS os tipos de conteúdo (artigos educacionais E notícias):
NUNCA incluir título H1 no conteúdo
# Título do Artigo\n\nTexto...Texto introdutório direto...\n\n## Primeira SeçãoNUNCA incluir seção de fontes/referências
[1](url), **Fontes:**\n- [Nome](url) no finalEstrutura do conteúdo
As finanças descentralizadas (DeFi) representam uma revolução...
## O Que São Finanças Descentralizadas
DeFi é o conjunto de serviços...
### Contratos Inteligentes
Os contratos inteligentes são...
## Principais Vantagens
A principal vantagem é...
Armazenamento: Prisma + PostgreSQL (tabela Article)
Localização: Neon PostgreSQL
API: /api/articles (GET/POST)
{
id: string,
slug: string,
title: string,
excerpt: string, // Resumo/summary
content: string, // Markdown completo
category: string, // 'bitcoin' | 'ethereum' | 'defi' | 'politica' | etc
tags: string, // JSON array de keywords
sentiment: string, // 'positive' | 'neutral' | 'negative'
published: boolean,
authorId: string,
createdAt: DateTime,
updatedAt: DateTime
}
O template processa automaticamente. NUNCA incluir manualmente:
NUNCA incluir nota de transparência no conteúdo
NUNCA repetir o excerpt no início do content
excerpt: "Texto X..." + content: "Texto X...\n\n## Seção"excerpt: "Texto X..." + content: "## Seção\n\nTexto Y..."IMPORTANTE: O content deve começar direto nas seções (##), pois o excerpt já aparece como resumo destacado.
## Primeira Seção Principal
Conteúdo da primeira seção...
### Subseção (se necessário)
Detalhes adicionais...
## Segunda Seção Principal
Conteúdo continua...
## Conclusão
Parágrafo final sem nota de transparência ou fontes.
O template ArtigoClient.tsx automaticamente:
removeH1FromContent)removeSourcesSection)Fluxo narrativo ideal para notícias:
Fato → Contexto → Impacto → Visão → Reflexão → Desafios
Por que funciona:
Técnicas:
Número ideal de seções: 4 mínimo, 5-6 ideal, 7 máximo
// ✅ CORRETO - Usar caminho customizado
const { PrismaClient } = require('../lib/generated/prisma');
const prisma = new PrismaClient();
// ❌ ERRADO - Não usar caminho padrão
const { PrismaClient } = require('@prisma/client');
// ID dos usuários existentes:
// - Admin: 'cmggcrcp40000ijin7jhr67vf' (admin@tokenmilagre.xyz)
// - Editor: 'cmggcrcr40001ijinifhwp0zq' (editor@tokenmilagre.xyz)
// Usar o ID do Editor para notícias automáticas
authorId: 'cmggcrcr40001ijinifhwp0zq'
const { PrismaClient } = require('../lib/generated/prisma');
const { generateUniqueSlug, slugWithDate } = require('./helpers/generate-unique-slug');
const prisma = new PrismaClient();
async function main() {
// Gera slug base com data (formato: titulo-YYYYMMDD)
const baseSlug = slugWithDate('Título da Notícia');
// Gera slug único automaticamente (adiciona -2, -3, etc se já existir)
const slug = await generateUniqueSlug(baseSlug);
const article = await prisma.article.create({
data: {
slug, // Slug único garantido!
title: 'Título da Notícia',
excerpt: 'Resumo breve (1-2 frases)',
content: `## Primeira Seção
Conteúdo começa direto nas seções.
## Segunda Seção
Mais conteúdo...`,
category: 'bitcoin', // bitcoin | ethereum | defi | politica | nfts | altcoins
tags: JSON.stringify(['tag1', 'tag2', 'tag3']),
sentiment: 'neutral', // positive | neutral | negative
published: true,
authorId: 'cmggcrcr40001ijinifhwp0zq', // Editor
createdAt: new Date(), // Hora atual
updatedAt: new Date()
}
});
console.log('✅ Notícia criada!');
console.log('🔗 Slug:', article.slug);
console.log('🌐 URL: http://localhost:3000/dashboard/noticias/' + slug);
}
main()
.catch((e) => {
console.error('❌ Erro:', e);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});
Helper: scripts/helpers/generate-unique-slug.js
Funções:
titleToSlug('Bitcoin Recua') → bitcoin-recuaslugWithDate('Bitcoin Recua') → bitcoin-recua-20251022generateUniqueSlug(baseSlug) → Garante unicidade (adiciona -2, -3, etc)Benefícios:
scripts/publish-news-template.js# Gerar Prisma Client
npx prisma generate
# Executar script
node scripts/nome-do-script.js
# Listar usuários
node scripts/list-users.js
| Erro | Causa | Solução |
|---|---|---|
@prisma/client did not initialize | Cliente não gerado | npx prisma generate |
Foreign key constraint violated | authorId inválido | Usar ID válido de usuário existente |
Cannot find module '@prisma/client' | Caminho errado | Usar ../lib/generated/prisma |
Cannot find module '/path/scripts/...' | Script fora do projeto | SEMPRE criar em /tokenmilagre-platform/scripts/ |
| Notícia aparece "há X horas" | Data com timezone UTC errado | Usar new Date() sem parâmetros |
Sintoma:
Error: Cannot find module '../lib/generated/prisma'
Require stack: /tmp/check.js
Causa: Script criado fora da estrutura do projeto (ex: /tmp/, diretório pai)
Solução: SEMPRE criar scripts em tokenmilagre-platform/scripts/
Por quê?: O caminho relativo ../lib/generated/prisma é calculado a partir do diretório do script.
Localização: /app/educacao/[slug]/page.tsx
articles contém todos os artigosgetArticle(slug) busca artigo específicogetRelatedArticles(category, slug) busca relacionadosgenerateMetadata() para SEOClient Component: /app/educacao/[slug]/ArtigoEducacionalClient.tsx
Skill criada por: Claude Code Última atualização: 2025-11-04 (otimizado e consolidado)