Habilidades para criar temas e blocos

Um repositório de habilidades do Claude Code para criar temas e componentes de blocos do Discourse:

:toolbox: O que está incluído

Habilidade de Criação de Temas — abrange um escopo completo para construir um tema do Discourse: scaffolding com o CLI discourse_theme, arquitetura SCSS, biblioteca de viewport, internacionalização, configurações, modificadores, transformadores de valor, ícones e variáveis CSS. Arquivos de referência detalhados para ícones, variáveis e transformadores estão incluídos separadamente e podem ser carregados sob demanda. SKILL.md

Habilidade de Criação de Blocos — abrange o lado do tema da API de Blocos: escrever componentes de bloco com o decorador @block, definir esquemas de argumentos, renderizar blocos nas saídas principais disponíveis, condições, blocos de contêiner e agrupamento de layout, e integrar traduções e configurações do tema aos argumentos do bloco. SKILL.md

Tema de Exemplo — um tema funcional com uma página inicial personalizada construída com blocos, demonstrando padrões reais para saídas, condições e composição de layout.


:jigsaw: Sobre a API de Blocos

A API de Blocos é o novo framework do Discourse para criar componentes de UI modulares e compostáveis em temas e plugins. Os blocos são componentes Glimmer registrados em saídas nomeadas — como homepage-blocks, hero-blocks ou sidebar-discovery — e podem ser exibidos condicionalmente com base na rota, usuário, viewport, configurações do site ou disponibilidade de plugins.

Uma força chave do sistema é que os blocos têm escopo pequeno e focado e padrões consistentes. Isso os torna bem adequados para desenvolvimento assistido por IA: um modelo com a habilidade de bloco pode criar um componente de bloco funcional, registrá-lo em uma saída e configurar as condições em uma única passada.

O tema de exemplo neste repositório demonstra uma página inicial que se adapta com base nos plugins e conteúdos disponíveis. Veja como a página inicial básica se parece, com um bloco de destaque e uma lista de tópicos em destaque:

Quando condições adicionais são atendidas (uma tag em destaque está configurada, o plugin Discourse Events está ativo e o plugin Discourse Leaderboard está disponível), blocos adicionais são renderizados condicionalmente no layout:

Os blocos não se limitam à página inicial. O tema de exemplo também usa a saída sidebar-blocks para adicionar um link Início, a saída sidebar-discovery para adicionar conteúdo específico da categoria na barra lateral e um bloco category-banner no topo das páginas de categoria:

O inspetor de blocos nas Ferramentas de Desenvolvedor mostra os rótulos das saídas e os identificadores dos blocos sobrepostos na página. Isso facilita entender a estrutura do layout e depurar o que está sendo renderizado onde:


:art: Usando com um MCP de plataforma de design

As habilidades funcionam bem com MCPs de plataformas de design (como o Penpot ou o Figma MCP). Com um conectado, o Claude pode ler especificações de componentes e tokens de design diretamente dos seus arquivos de design e implementá-los usando as convenções da habilidade. É um ciclo mais fechado entre design e código, especialmente ao trabalhar com um sistema de design estruturado.


:fork_and_knife: Faça um fork e ajuste

Algumas convenções nas habilidades são mais preferenciais do que convencionais, como a arquitetura de pastas SCSS. Você pode fazer um fork do repositório e ajustar as habilidades para corresponder ao seu próprio fluxo de trabalho e convenções.


:speech_balloon: Compartilhe o que você constrói

Experimente e nos conte como foi! Adoraríamos saber como você está usando as habilidades, o que construiu com elas e onde elas falham. Comentários, correções e forks são todos bem-vindos.

Haverá um tópico dedicado a Blocks ou é este?

Se for o último, talvez alguns trechos de código possam ajudar? Ou o que está no arquivo plugin-api.gjs são as documentações atuais?

Obrigado.

Ainda haverá documentação que cobre toda a API do Blocks, incluindo a implementação no núcleo e em plugins. Para temas com Blocks, o SKILL.md já deve abordar todos os aspectos relevantes. É compacto e muito legível.

O tema de exemplo inclui tanto arquivos de inicializador quanto blocos. Os arquivos de inicializador decloram o layout por BlockOutlet: discourse-theme-skills/javascripts/discourse/api-initializers at main · discourse/discourse-theme-skills · GitHub.

Estou me divertindo de verdade com isso :winking_face_with_tongue: … Como outras ferramentas de design com IA, é realmente eficiente para prototipar rapidamente ideias que seriam muito caras para esboçar manualmente.

Peça uma página inicial editorial em estilo brutalista, com conteúdo altamente incomum destacado da comunidade. Obtive este layout, que de fato tem algumas ideias bem interessantes para blocos em destaque. O mais engraçado é que ele batizou o tema de Jornal do Inferno :grinning_face_with_smiling_eyes:

Depois, pedi algo que sempre quis explorar: uma página inicial de portal no estilo japonês, com blocos densos, cores pastéis e muitas animações pequenas… Adorei essa primeira versão:

Na verdade, seria legal ter um screencast, porque todas aquelas pequenas animações tornam tudo muito mais legal:

flushy

Finalmente!!! Vou tentar o mais breve possível para atualizar meus componentes de tema experimentais :smiley:

Elmo cercado por fogo intenso

Este é um ótimo trabalho e muito criativo. Se fizermos um fork e desenvolvermos com base neste tema, há alguma consideração sobre o tema pai não permanecer atualizado com o Discourse ao longo do tempo? Estou tentando pensar como isso deve ser abordado.

Obrigado pelos recursos!

Obrigado, @BrianC!

Sobre a atualização do tema principal: o track de habilidades acompanha as APIs de tema e Blocos do Discourse, então, desde que as usemos ativamente, elas serão mantidas sincronizadas conforme as APIs evoluem. O tema de exemplo é mais um instantâneo para demonstrar padrões. Se você fizer um fork dele, será o dono do seu fork. Mas você pode consultar o track de habilidades ou novos exemplos ao atualizar seu tema.

Um objetivo central da própria API de Blocos é ter uma área de superfície pequena e estável, que ajude a manter as personalizações resilientes nas atualizações do Discourse. Então, se você principalmente adiciona blocos personalizados (como o tema de exemplo faz), já deve operar em um ambiente estável. A principal coisa a observar seriam mudanças nos nomes das saídas (outlets) ou nas assinaturas da API de blocos. Atualmente, a API ainda é considerada experimental, então pode haver alterações em nomes etc.

Eu resumiria a abordagem recomendada assim: faça um fork do tema livremente e use a documentação do track de habilidades como referência viva de como as coisas devem ser feitas daqui para frente.