blogCreator — Style Guide

Guia de referência completo para criação de posts. Aqui você encontra todos os markups disponíveis no Markdown e os componentes Vue que podem ser usados nos arquivos .mdx.


Sumário


Títulos

Títulos são criados com o símbolo #. Quanto mais #, menor o nível do título. Use # apenas uma vez por post (é o título principal). A hierarquia correta melhora tanto a leitura quanto o SEO.

# H1 — Título principal do post (use apenas uma vez)
## H2 — Seção principal
### H3 — Subseção
#### H4 — Tópico menor
##### H5 — Raramente necessário
###### H6 — Evite usar

Resultado:

H1 — Título principal

H2 — Seção principal

H3 — Subseção

H4 — Tópico menor

H5 — Raramente necessário
H6 — Evite usar

Ênfase e formatação de texto

Recursos para destacar partes do texto sem precisar de HTML.

**negrito** — para termos importantes
*itálico* — para ênfase suave ou títulos de obras
***negrito e itálico*** — use com moderação
~~tachado~~ — para indicar algo removido ou incorreto
`código inline` — para nomes de arquivos, comandos, variáveis

Resultado:

negrito — para termos importantes itálico — para ênfase suave ou títulos de obras negrito e itálico — use com moderação tachado — para indicar algo removido ou incorreto código inline — para nomes de arquivos, comandos, variáveis


Listas

Lista não ordenada

Use - ou * para itens sem ordem definida.

- Primeiro item
- Segundo item
- Terceiro item
  - Item aninhado
  - Outro aninhado
    - Terceiro nível

Resultado:

  • Primeiro item
  • Segundo item
  • Terceiro item
    • Item aninhado
    • Outro aninhado
      • Terceiro nível

Lista ordenada

Use números seguidos de . para sequências com ordem importa.

1. Instalar dependências
2. Configurar o ambiente
3. Rodar o projeto
   1. Subir o banco
   2. Subir a API
   3. Subir o frontend

Resultado:

  1. Instalar dependências
  2. Configurar o ambiente
  3. Rodar o projeto
    1. Subir o banco
    2. Subir a API
    3. Subir o frontend

[texto visível](https://url-do-link.com)
[link com título](https://url.com "Aparece no hover")
[link interno](#títulos)

Resultado:

texto visívellink com títulolink interno


Imagens

![texto alternativo](https://url-da-imagem.com/foto.jpg)
![logo do projeto](./assets/logo.png "Título opcional")

Resultado:

descrição

💡 Dica: sempre preencha o texto alternativo — ele é importante para acessibilidade e SEO.


Código

Inline

Use crase simples para mencionar código dentro de um parágrafo.

Execute `npm install` antes de rodar o projeto.
O arquivo de config fica em `nuxt.config.ts`.

Resultado:

Execute npm install antes de rodar o projeto. O arquivo de config fica em nuxt.config.ts.


Bloco de código

Use três crases e informe a linguagem para ativar o syntax highlight.

```javascript
const tunnel = {
  id: 'fbd983b2-24fd-4aa7-a358-25944befdc59',
  name: 'globe',
  url: 'https://globe.icoms.com.br'
}
```

Resultado:

const tunnel = {
  id: 'fbd983b2-24fd-4aa7-a358-25944befdc59',
  name: 'globe',
  url: 'https://globe.icoms.com.br'
}

Linguagens suportadas mais comuns:

IdentificadorLinguagem
javascriptJavaScript / JS
typescriptTypeScript
vueVue SFC
bashTerminal / Shell
powershellPowerShell
sqlSQL
jsonJSON
yamlYAML
htmlHTML
cssCSS
mdMarkdown
textTexto puro

Tabelas

Tabelas são criadas com | para separar colunas e --- para definir o cabeçalho. O alinhamento é controlado pelos : na linha do separador.

| Coluna 1      | Coluna 2       | Coluna 3       |
|---------------|:--------------:|---------------:|
| alinhado esq  | centralizado   | alinhado dir   |
| valor         | valor          | valor          |

Resultado:

Coluna 1Coluna 2Coluna 3
alinhado esqcentralizadoalinhado dir
valorvalorvalor

💡 Dica: para tabelas DNS, registros ou dados técnicos, prefira o componente ::dns-table — ele é muito mais elegante visualmente.


Citações

Use > para criar blocos de citação. Útil para destacar frases, notas ou trechos de outras fontes.

> Esta é uma citação simples.

> Esta é uma citação mais longa que pode ocupar
> várias linhas no arquivo fonte.
>
> E pode ter múltiplos parágrafos.

>> Citação aninhada dentro de outra citação.

Resultado:

Esta é uma citação simples.

Esta é uma citação mais longa que pode ocupar várias linhas no arquivo fonte.

E pode ter múltiplos parágrafos.

Citação aninhada dentro de outra citação.


Divisores

Use --- para criar uma linha horizontal que separa seções visualmente.

Seção A

---

Seção B

⚠️ Deixe sempre uma linha em branco antes e depois do ---, caso contrário o parser pode interpretá-lo como um título H2.


Checkboxes

Útil para listas de tarefas, checklists de configuração ou pré-requisitos.

- [x] Instalar Node.js
- [x] Instalar Cloudflared
- [ ] Criar conta na Cloudflare
- [ ] Configurar o DNS
- [ ] Testar o túnel

Resultado:

  • Instalar Node.js
  • Instalar Cloudflared
  • Criar conta na Cloudflare
  • Configurar o DNS
  • Testar o túnel

Frontmatter

O frontmatter fica no topo do arquivo entre --- e define os metadados do post. O Nuxt Content lê esses dados e os disponibiliza para o layout da página.

---
title: "Título do Post"
description: "Descrição curta para SEO e listagens"
date: 2026-03-31
category: "tutoriais"
tags: ["Tag1", "Tag2", "Tag3"]
cover: "https://url-da-imagem-de-capa.com/foto.jpg"
readTime: 8
draft: false
---
CampoTipoDescrição
titlestringTítulo do post
descriptionstringResumo para SEO e cards de listagem
datedateData de publicação YYYY-MM-DD
categorystringCategoria principal
tagsstringArray de tags
coverstringURL da imagem de capa
readTimenumberTempo estimado de leitura em minutos
draftbooleantrue = não aparece na listagem pública

Componentes Vue

Os componentes abaixo são usados em blocos MDC (::nome-do-componente{...}::) nos ficheiros de conteúdo. Com markdown.mdc: true no Nuxt (este projeto), isso funciona em .md e .mdx. Os ficheiros Vue ficam em app/components/ e são auto-importados pelo Nuxt.


Callout

Blocos de destaque para informações importantes, avisos e dicas. Existem quatro variantes visuais controladas pela prop type.

Props:

PropTipoValoresPadrão
typestringinfo warning success errorinfo

Uso:

::callout{type="info"}
**Informação** — Use para dicas, contexto adicional ou observações neutras.
::

::callout{type="warning"}
**Atenção** — Use para alertar sobre comportamentos inesperados ou cuidados necessários.
::

::callout{type="success"}
**Sucesso** — Use para confirmar que algo está correto ou funcionando.
::

::callout{type="error"}
**Erro** — Use para indicar algo que não deve ser feito ou que causará problemas.
::

Resultado:

ℹ️

Informação — Use para dicas, contexto adicional ou observações neutras.

⚠️

Atenção — Use para alertar sobre comportamentos inesperados ou cuidados necessários.

Sucesso — Use para confirmar que algo está correto ou funcionando.

🚫

Erro — Use para indicar algo que não deve ser feito ou que causará problemas.


DiagramFlow

Diagrama de fluxo vertical interativo. Ideal para mostrar arquiteturas, pipelines e sequências de etapas. Cada nó aceita ícone, label, sublabel e variante visual.

Props do array nodes:

CampoTipoDescrição
labelstringNome principal do nó
substringDetalhe secundário (porta, endereço, tecnologia)
iconstringEmoji ou símbolo do nó
typestringhighlight (escuro) · accent (laranja) · padrão

Uso:

::diagram-flow
---
nodes:
  - label: "Browser"
    sub: "Usuário final"
    icon: "🌐"
    type: "highlight"
  - label: "Cloudflare Edge"
    sub: "CDN + TLS"
    icon: "🔶"
  - label: "Túnel criptografado"
    sub: "cfargotunnel.com"
    icon: "🔒"
    type: "accent"
  - label: "Sua aplicação"
    sub: "localhost:5173"
    icon: "💻"
    type: "highlight"
---
::

Resultado:

fluxo completo da requisição

🌐
Browser
Usuário final
🔶
Cloudflare Edge
CDN + TLS
🔒
Túnel criptografado
cfargotunnel.com
💻
Sua aplicação
localhost:5173

DnsTable

Tabela elegante para exibir registros DNS. Gera badges coloridos automaticamente por tipo de registro (A, CNAME, MX, TXT, etc.).

Props do array rows:

CampoTipoDescrição
typestringTipo do registro: A CNAME MX TXT AAAA NS
namestringNome/host do registro
valuestringValor/destino do registro

Uso:

::dns-table
---
rows:
  - type: "CNAME"
    name: "globe.icoms.com.br"
    value: "fbd983b2-24fd-4aa7-a358-25944befdc59.cfargotunnel.com"
  - type: "A"
    name: "icoms.com.br"
    value: "192.0.2.1"
  - type: "MX"
    name: "icoms.com.br"
    value: "mail.icoms.com.br"
  - type: "TXT"
    name: "icoms.com.br"
    value: "v=spf1 include:_spf.google.com ~all"
---
::

Resultado:

TipoNomeValor
CNAMEglobe.icoms.com.brfbd983b2-24fd-4aa7-a358-25944befdc59.cfargotunnel.com
Aicoms.com.br192.0.2.1
MXicoms.com.brmail.icoms.com.br
TXTicoms.com.brv=spf1 include:_spf.google.com ~all

AdvantageGrid

Grid de cards para destacar vantagens, features ou características de uma solução. Os cards aparecem com animação escalonada e têm hover interativo.

Props do array items:

CampoTipoDescrição
iconstringEmoji representativo
titlestringTítulo curto do card
descstringDescrição de uma linha

Uso:

::advantage-grid
---
items:
  - icon: "🚀"
    title: "Alta performance"
    desc: "Respostas em menos de 100ms"
  - icon: "🔒"
    title: "Seguro por padrão"
    desc: "TLS em todas as conexões"
  - icon: "📦"
    title: "Fácil de instalar"
    desc: "Um comando e está rodando"
  - icon: "🌐"
    title: "Funciona em qualquer rede"
    desc: "Sem necessidade de IP fixo"
---
::

Resultado:

🚀
Alta performance
Respostas em menos de 100ms
🔒
Seguro por padrão
TLS em todas as conexões
📦
Fácil de instalar
Um comando e está rodando
🌐
Funciona em qualquer rede
Sem necessidade de IP fixo

BadgeGroup

Grupo de tags/badges coloridas para o rodapé do post. As cores são atribuídas automaticamente em rotação a partir de uma paleta de 6 cores.

Props:

PropTipoDescrição
tagsstring[]Array com os nomes das tags

Uso:

::badge-group{:tags='["Cloudflare", "Node.js", "Vue", "Nuxt", "DNS", "Firebird"]'}
::

Resultado:

CloudflareNode.jsVueNuxtDNSFirebird

ArticleFigure

Imagem com legenda opcional, largura em percentagem da coluna do artigo, alinhamento (esquerda / centro / direita) e modo bloco ou flutuante: com float-*, o texto dos parágrafos Markdown que vêm logo a seguir pode ficar ao lado da imagem (em ecrãs largos; em viewports estreitas a figura volta a ocupar a largura útil).

Props:

PropTipoValores / notas
srcstringURL da imagem (ex.: /images/foo.jpg) — obrigatório
altstringTexto alternativo
captionstringLegenda sob a imagem
widthnumber | stringLargura em % da coluna (1–100). Padrão: 50
alignstringleft · center · right — só com layout="block" (em float-* é ignorado)
layoutstringblock (linha própria) · float-left · float-right — padrão: block

Notas:

  • Com layout="block", width e align posicionam o bloco (ex.: 48% à esquerda).
  • Com float-left ou float-right, não coloques --- nem um título entre a figura e o texto que queres ao lado; o fluxo Markdown tem de ser contínuo.
  • HTML alternativo: <figure class="article-figure"></figure> continua válido; o CSS global aplica o estilo “simples” (aprox. ~50% centralizado) a figuras sem o atributo data-article-figure gerado por este componente.

Uso:

::article-figure{src="/images/exemplo.jpg" alt="Descrição" caption='Legenda visível' width="52" align="center" layout="block"}
::
::article-figure{src="/images/exemplo.jpg" alt="Mini" caption="Texto ao lado" width="36" layout="float-right"}
::

Resultado (exemplo):

Exemplo ArticleFigure
width 40%, centro, bloco

Referência rápida

Markup / ComponenteSintaxeArquivo
Título H1# Título.md .mdx
Título H2## Título.md .mdx
Negrito**texto**.md .mdx
Itálico*texto*.md .mdx
Código inline`código`.md .mdx
Bloco de código```linguagem.md .mdx
Link[texto](url).md .mdx
Imagem![alt](url).md .mdx
Lista- item.md .mdx
Tabela| col | col |.md .mdx
Citação> texto.md .mdx
Divisor---.md .mdx
Checkbox- [ ] item.md .mdx
Callout::callout{type="info"}.md .mdx
DiagramFlow::diagram-flow.md .mdx
DnsTable::dns-table.md .mdx
AdvantageGrid::advantage-grid.md .mdx
BadgeGroup::badge-group{:tags='[...]'}.md .mdx
ArticleFigure::article-figure{src="..." width="50"}.md .mdx
Figura HTML<figure class="article-figure">.md .mdx