Redesign — fabioizidio.gitlab.io
Visual A + C (editorial com blocos), tema claro/escuro e menu fixo no topo, mais suporte a posts em Typst ao lado de Markdown e HTML.
O que há aqui
| Arquivo | Função |
|---|---|
_css/site.css | Todo o visual. Paletas clara e escura em variáveis CSS. |
_libs/theme.js | Alterna o tema, lembra a escolha e respeita a preferência do sistema. |
_libs/blog.js | Filtro por categoria na página do blog (/blog/?categoria=teologia). |
_layout/head.html, header.html, foot.html, page_foot.html | Layout com o menu fixo e o botão de tema. |
index.md | Página inicial (hero, blocos, textos recentes). |
blog/index.md | Listagem de posts com filtros. |
utils.jl | Funções {{post_list}}, {{recent_posts N}}, {{post_header}}, {{year}}. |
typst/post.typ | Modelo de post (PDF + HTML a partir do mesmo .typ). |
typst/posts/*.typ | Seus posts em Typst. |
scripts/build_typst.jl | Compila os .typ: gera o PDF e uma página .md para o Franklin. |
blog/exemplo-markdown.md, typst/posts/exemplo-typst.typ | Exemplos — apague ao publicar os seus. |
*.snippet.* | Trechos para mesclar nos seus config.md, .gitlab-ci.yml e .gitignore. |
Como aplicar no repositório
Copie
_css/,_libs/,_layout/,typst/,scripts/,index.md,blog/index.mdpara a raiz do repositório (faça backup de_layout/,index.mde do CSS atual antes).Copie as funções de
utils.jlpara o seuutils.jl(ou use o arquivo se não tiver um).Mescle
config.snippet.mdnoconfig.mde.gitlab-ci.snippet.ymlno.gitlab-ci.yml.Teste localmente (veja abaixo) e só então faça o commit.
Páginas internas (Sobre, Serviços, Web Rádio, Avaliações): continuam usando o mesmo
head.html/foot.html, mas o CSS novo não inclui Bootstrap. Se alguma delas usa classes do Bootstrap (row,col-*,card,btn-*…), ela precisará de ajustes. Para páginas largas (ferramentas com Apps Script) acrescente@def bodyclass = "wide"no topo do.md: o conteúdo deixa de ser limitado a 760 px.
Escrever posts
Todo post precisa das variáveis title, date, category e (opcional) descr. Categorias: matematica, programacao, teologia.
Markdown — arquivo blog/meu-post.md:
@def title = "Título"
@def date = Date(2026, 10, 26)
@def category = "matematica"
@def format = "markdown"
{{post_header}}
Texto do post…
HTML — igual ao Markdown, com @def format = "html" e o HTML dentro de um bloco ~~~ … ~~~.
Typst — arquivo typst/posts/meu-post.typ:
#import "../post.typ": *
#show: post.with(
title: "Título",
date: "2026-10-26",
category: "matematica",
description: "Resumo curto.",
)
= Seção
Texto com equação $a^2 + b^2 = c^2$.
#figure(diagrama[#circle(radius: 1cm)], caption: [Um círculo.])
Desenhos feitos com formas (rect, circle, polygon, pacotes de gráficos) precisam estar dentro de #diagrama[...] para aparecerem na página. Texto, títulos, listas, tabelas, código, links, notas e equações funcionam diretamente.
Rodar localmente
typst --version # precisa do Typst instalado
julia scripts/build_typst.jl # gera blog/<slug>.md e _assets/pdf/<slug>.pdf
julia -e 'using Franklin; serve()' # servidor de desenvolvimento
Rode o script de novo sempre que alterar um .typ.
Como o Typst vira página (estratégia híbrida)
typst querylê título, data e categoria do próprio.typ.O PDF é sempre gerado (botão "Baixar PDF" no post).
A página usa o HTML do Typst (texto real, equações em MathML, figuras em SVG).
Se a exportação HTML falhar, o script usa um SVG por página do PDF como plano B — o post continua sendo publicado.
As páginas geradas começam com a linha <!-- GERADO por scripts/build_typst.jl … -->; o script nunca sobrescreve um .md que não tenha essa marca.
Limites conhecidos
O script
build_typst.jle outils.jlforam escritos sem poder executar Julia/Franklin no ambiente de desenvolvimento. A parte Typst (PDF, HTML, consulta de metadados) foi testada com Typst 0.15.0; o layout, o tema, o menu fixo e o filtro foram testados no navegador com uma prévia que imita o Franklin. A primeira execução real dobuildpode pedir pequenos ajustes.No celular o menu ocupa duas linhas (nome + botão de tema; links abaixo, com rolagem lateral).
O realce de sintaxe do Typst é neutralizado no site (as cores vêm fixas para fundo claro).
Fontes vêm do Google Fonts (IBM Plex Sans e Source Serif 4). Para hospedar localmente, baixe-as para
_assets/fonts/e troque o<link>em_layout/head.html.