[{"content":"Having fun with Spec Driven Development (SDD).\n","date":"21 August 2026","externalUrl":null,"permalink":"/","section":"Bem-vindo","summary":"","title":"Bem-vindo","type":"page"},{"content":" Diário de Castália # Castália é a província pedagógica e espiritual autônoma que serve de cenário central para O Jogo das Contas de Vidro. Situada por volta do século XXV em uma região indeterminada da Europa Central, ela representa o ideal supremo de uma república de intelectuais, matemáticos, músicos e filólogos dedicados à preservação da alta cultura e à busca da verdade desinteressada.\nA dualidade entre o Diária de Castália e o Diário da Capital sintetiza o dilema central de Hermann Hesse:\nDiário de Castália: Representa a Vita Contemplativa — o espírito, a atemporalidade, a ordem abstrata e a torre de marfim.\nDiário da Capital: Representa a Vita Activa — a matéria, a história, o conflito moral, a família e a responsabilidade cívica no mundo real.\nSite # https://www.castalia.net.br\n","date":"21 August 2026","externalUrl":null,"permalink":"/posts/diario-de-castalia/","section":"Posts","summary":"","title":"Diário de Castália","type":"posts"},{"content":"","date":"21 August 2026","externalUrl":null,"permalink":"/posts/","section":"Posts","summary":"","title":"Posts","type":"posts"},{"content":" Diário da Capital # A Cidade da Residência, habitualmente tratada como a Capital do país onde Castália está inserida, funciona como a antítese geográfica, política e filosófica da província pedagógica de Castália.\nA dualidade entre o Diária de Castália e o Diário da Capital sintetiza o dilema central de Hermann Hesse:\nDiário de Castália: Representa a Vita Contemplativa — o espírito, a atemporalidade, a ordem abstrata e a torre de marfim.\nDiário da Capital: Representa a Vita Activa — a matéria, a história, o conflito moral, a família e a responsabilidade cívica no mundo real.\nSite # https://clipping.willy.dev.br\nRepositório # https://github.com/willycornelissen/clipping\nRecursos # Jornal digital estático: edições com resumos (gerados por LLM) das últimas notícias de fontes cadastradas. Site público no GitHub Pages; edições geradas sob demanda pelo administrador via GitHub Actions.\nEdições sob demanda — o administrador dispara o workflow \u0026ldquo;Gerar Edição\u0026rdquo;; o bot coleta as notícias, gera os resumos com LLM, commita a edição e o site é republicado automaticamente. Fontes declarativas — cadastro de fontes em data/sources.yml, com suporte a RSS (preferível) e scraping via seletores CSS para sites sem feed. LLM plugável — qualquer API compatível com o esquema OpenAI (OpenAI, OpenRouter, DeepSeek, Groq, Ollama, Gemini) via secrets/variables do Actions. Resiliência — se uma fonte estiver fora do ar, a edição é gerada sem ela. Domínio próprio — publicado em clipping.willy.dev.br. Stack # Frontend: React 19 + Vite + React Router. Geração: scripts em Node (generator/) com rss-parser e cheerio. Deploy: GitHub Actions → GitHub Pages (source: GitHub Actions). Testes: Vitest + Testing Library. Estrutura # Caminho Conteúdo generator/ Scripts de geração das edições src/ Site React data/ Fontes (sources.yml) e edições .github/workflows/ Actions (deploy.yml, gerar-edicao.yml) ","date":"20 August 2026","externalUrl":null,"permalink":"/posts/diario-da-capital/","section":"Posts","summary":"","title":"Diário da Capital","type":"posts"},{"content":" Marcador # Gerenciador pessoal de bookmarks no estilo booky.io, espelhando a arquitetura do Estante: React + Vite, Firebase (Firestore + Auth), deploy no GitHub Pages com domínio próprio e import/export no formato Netscape HTML.\nRepositório # https://github.com/willycornelissen/marcador\nDemo Funcional # https://marcador.willy.dev.br\nRecursos # Leitura pública — qualquer visitante vê o catálogo; só o admin escreve. Coleções → Categorias → Bookmarks — o mesmo bookmark pode aparecer em várias categorias (relação many-to-many sem duplicar dados). Listagens em ordem alfabética — coleções, categorias e bookmarks são ordenados por nome (ignorando maiúsculas e acentos). Import/export Netscape — migre de qualquer navegador ou do booky.io. Tema dark — pedra + âmbar. Domínio próprio — publicado em marcador.willy.dev.br. Stack # Frontend: React 19 + Vite. Backend: Firebase Firestore + Firebase Auth. Deploy: GitHub Actions → GitHub Pages + CNAME. Seed: Node (firebase-admin) a partir de um backup Netscape. Estrutura # Caminho Conteúdo src/ App React (App.jsx) e lógica em src/lib/ (firebase, bookmarks, auth, netscape, colors) specification/ Idea, research, wireframes e mockups (HTML + PNG) scripts/seed-booky.mjs Popula o Firestore a partir de um backup Netscape public/ CNAME, favicon.svg e marcador.png booky_backup_2026-08-10.html Backup do booky.io usado como base .github/workflows/deploy.yml Pipeline de build e deploy Como rodar localmente # Instale as dependências:\nnpm install Configure o Firebase (plano Spark):\nAuthentication → sign-in method → E-mail/Senha → crie o usuário admin. Firestore → criar banco no modo produção. Crie o .env a partir do exemplo:\ncp .env.example .env Preencha com a config do seu app web (Console → Configurações do projeto → Seus apps → Config do SDK). O e-mail de admin é o valor de VITE_ADMIN_EMAIL; se vazio, o padrão é willy.cornelissen@gmail.com.\nDeploy das regras do Firestore (o admin precisa ter o mesmo e-mail do firestore.rules):\nnpx firebase-tools use \u0026lt;project-id\u0026gt; npx firebase-tools deploy --only firestore Inicie o servidor de desenvolvimento:\nnpm run dev Atenção: não abra dist/index.html direto pelo sistema de arquivos (file://). Os módulos ES são bloqueados por CORS fora de HTTP. Use npm run preview ou um servidor local.\nPopular a base # Opção A — pelo app: entre como admin e use Importar HTML… na sidebar, escolhendo booky_backup_2026-08-10.html.\nOpção B — seed em lote (script em Node, sem login):\nFIREBASE_PROJECT_ID=seu-projeto \\ GOOGLE_APPLICATION_CREDENTIALS=/caminho/service-account.json \\ npm run seed Sem as credenciais, o script apenas imprime as estatísticas do backup.\nBuild e preview # npm run build # gera dist/ npm run preview # serve o build localmente O vite.config.js usa base: './' (caminho relativo), então o build funciona em qualquer hospedagem — subpasta do GitHub Pages ou domínio próprio na raiz.\nDeploy (GitHub Pages) # O workflow .github/workflows/deploy.yml publica a cada push em main. Os secrets do repositório são:\nAPIKEY, AUTHDOMAIN, PROJECTID, STORAGEBUCKET, MESSAGINGSENDERID e APPID — valores da config do app web no Firebase. O domínio próprio marcador.willy.dev.br é configurado pelo arquivo public/CNAME. Se for usar sem CNAME, o site fica disponível em https://\u0026lt;usuario\u0026gt;.github.io/marcador/.\nSchema Firestore # Coleção Campos collections name, position, color?, uid, createdAt, updatedAt categories collectionId, name, position, color, uid, createdAt, updatedAt bookmarks name, url, note, favicon, uid, createdAt, updatedAt bookmark_categories bookmarkId, categoryId, position Scripts # Comando Descrição npm run dev Servidor local npm run build Build de produção em dist/ npm run preview Preview do build npm run lint Oxlint em src e scripts npm run seed Seed do Firestore a partir do backup ","date":"11 August 2026","externalUrl":null,"permalink":"/posts/marcador/","section":"Posts","summary":"","title":"Marcador","type":"posts"},{"content":" Estante # Gerenciador da biblioteca pessoal de livros físicos.\nRepositório # https://github.com/willycornelissen/estante\nFrontend: React + Vite\nHospedagem: GitHub Pages\nBanco de dados: Firebase (Firestore + Auth)\nDemo Funcional # https://estante.willy.dev.br\nFrontend: React + Vite Hospedagem: GitHub Pages Banco de dados: Firebase (Firestore + Auth) Rodar localmente # cp .env.example .env # preencha a chave do Google Books e o Firebase npm install npm run dev Sem chave do Google Books no .env, a busca usa o OpenLibrary como fallback (pode ser lenta). Com a chave, o Google Books é a fonte primária.\nFirebase (Firestore + Auth) # Crie um projeto em console.firebase.google.com (plano Spark).\nAuthentication → Sign-in method → Email/Senha → habilite.\nFirestore Database → Criar banco → modo produção.\nConfigurações do projeto → Seus apps → Web → copie as chaves para o .env.\nPublique as regras de segurança (firestore.rules). Com a Firebase CLI:\nnpm i -g firebase-tools firebase login firebase init firestore # use firestore.rules existente firebase deploy --only firestore Importante: em firestore.rules, troque SEU_EMAIL@exemplo.com pelo seu e-mail. As regras garantem que a estante é pública para leitura, mas só o admin (seu e-mail) pode adicionar/editar/remover livros.\nAuthentication → Users → Adicionar usuário e crie a conta do admin com o mesmo e-mail usado nas regras. O cadastro público foi removido: visitantes veem o catálogo, e só o admin entra.\nPreencha VITE_ADMIN_EMAIL no .env com o mesmo e-mail (usado só para mostrar/esconder os controles de edição no frontend — a segurança fica nas regras).\nDeploy # O workflow .github/workflows/deploy.yml publica em GitHub Pages a cada push. Como as variáveis VITE_* são embutidas no bundle em tempo de build, configure os mesmos valores de .env como Actions secrets/variables do repositório (Settings \u0026gt; Secrets and variables \u0026gt; Actions) antes do primeiro deploy.\nHabilite GitHub Pages em Settings \u0026gt; Pages com source GitHub Actions.\nDomínio próprio # O site é servido em estante.willy.dev.br (raiz do domínio). Para isso o CI builda com VITE_BASE='/' e o arquivo public/CNAME (contendo o subdomínio) é incluído no deploy. No DNS, crie um CNAME do subdomínio estante.willy.dev.br apontando para willycornelissen.github.io; no Settings \u0026gt; Pages, cadastre o domínio e marque Enforce HTTPS.\nEstrutura # src/lib/metadata.js — busca de metadados (Google Books → OpenLibrary) src/lib/firebase.js — inicialização do Firebase (opcional até configurar .env) src/lib/auth.js — autenticação e-mail/senha src/lib/books.js — CRUD de livros no Firestore src/App.jsx — busca, login e \u0026ldquo;Minha estante\u0026rdquo; firestore.rules — regras de segurança do banco ","date":"8 July 2026","externalUrl":null,"permalink":"/posts/estante/","section":"Posts","summary":"","title":"Estante","type":"posts"},{"content":" Adler Review Generator # O Adler Review Generator (também conhecido como Adler Review CLI) é uma ferramenta de linha de comando escrita em Go que automatiza a criação de resenhas literárias analíticas e profundas baseadas estritamente na renomada metodologia de Mortimer Adler exposta em seu clássico livro \u0026ldquo;Como Ler Livros\u0026rdquo; (1940).\nUtilizando a API do Google GenAI (Gemini), o utilitário identifica com precisão a obra desejada, confirma os metadados bibliográficos interativamente com o usuário e gera um documento estruturado em Markdown com alto rigor analítico e vocabulário erudito.\nRepositório # https://github.com/willycornelissen/adler-review\n🧠 A Metodologia Mortimer Adler # A resenha gerada segue rigorosamente a estrutura de leitura analítica proposta por Adler, dividida nas quatro perguntas fundamentais que todo leitor ativo deve fazer ao ler um livro:\nAbertura: Contextualização histórica e biográfica sobre o autor e a obra, ancorando o leitor no mundo real sem antecipar as respostas das seções seguintes. Sobre o que é o livro? (Classificação e Visão Panorâmica): Define o gênero e a categoria da obra (Teórico ou Prático), a tese central (1-3 frases) e a sua unidade estrutural. O que está sendo dito? (Estrutura e Proposições): Mapeamento neutro da organização interna da obra (capítulos, partes, progressão narrativa) e suas proposições/termos-chave. O livro está certo? (Julgamento Crítico Fundamentado): Uma avaliação intelectualmente honesta que julga a obra com base em quatro critérios objetivos de Adler: Onde o autor é desinformado (falta de dados). Onde o autor está mal informado (dados incorretos). Onde o autor é ilógico (contradições ou raciocínio falho). Onde a análise do autor é incompleta. Qual a importância? (Significado e Leitura Sintópica): Conecta a obra com o resto do mundo, abordando sua relevância, utilidade prática ou estética hoje e conexões com outros livros do mesmo tema. 🚀 Funcionalidades # Fluxo Interativo de Confirmação: Busca e valida detalhes bibliográficos (título oficial, autor, ano de publicação original, gênero e breve sinopse) com o Google AI antes de iniciar a escrita da resenha. Estruturação Markdown Impecável: Saída estruturada de forma limpa, ideal para publicação em blogs, repositórios de notas pessoais (Obsidian, Notion) ou publicação acadêmica. Seleção Inteligente de Modelo: Descobre e seleciona automaticamente os melhores modelos Pro disponíveis do Gemini (como o gemini-1.5-pro ou gemini-2.5-pro) para garantir uma análise literária densa e criativa. Prevenção de Erros de Escrita: Realiza testes de gravação no arquivo de saída antes de invocar APIs externas de longa duração, evitando a perda de créditos ou tempo em caso de caminhos inválidos ou falhas de permissão. 🛠️ Instalação e Compilação # Pré-requisitos # Go 1.25 ou superior instalado em seu sistema. Uma chave de API da Google AI (Gemini). Você pode obter uma gratuitamente no Google AI Studio. Compilação do Código Fonte # Clone o repositório ou navegue até o diretório do projeto:\ngit clone git@github.com:willycornelissen/adler-review.git cd adler-review Compile o binário do CLI:\ncd adler-review-cli go build -o adler-review ./cmd/adler-review Mova o executável gerado para o seu PATH global (opcional) ou execute-o localmente:\n./adler-review --help 📖 Como Usar # Configuração da Chave da API # A forma recomendada de fornecer as chaves de API é por meio de variáveis de ambiente:\nPara o Gemini: GEMINI_API_KEY Para a Groq: GROQ_API_KEY export GEMINI_API_KEY=\u0026#34;sua-chave-gemini-aqui\u0026#34; # ou export GROQ_API_KEY=\u0026#34;sua-chave-groq-aqui\u0026#34; Alternativamente, você pode fornecer a chave diretamente via flag ao executar o utilitário.\nSe nenhuma chave for encontrada nas variáveis de ambiente ou via flag, o utilitário solicitará a chave de forma interativa diretamente no terminal, permitindo que você digite ou cole a sua API Key do provedor correspondente para iniciar o processo.\nExecutando a Ferramenta # Para iniciar o fluxo interativo de criação de uma resenha:\n./adler-review Opções de Linha de Comando (Flags) # Flag (Longa) Flag (Curta) Tipo Descrição --provider -p string Provedor de LLM: gemini ou groq (Default: gemini) --output -o string Caminho personalizado para salvar o arquivo final (Default: \u0026lt;slug-do-titulo\u0026gt;.md) --key -k string Sobrescreve/fornece a Chave de API do provedor diretamente por comando --model -m string Sobrescrita manual para usar um modelo específico (ex: llama-3.3-70b-versatile para groq, ou gemini-1.5-pro para gemini) --help -h booleano Exibe o guia de ajuda e lista de comandos Exemplo de Uso com Groq: # ./adler-review --provider groq -o resenha_cristianismo.md Exemplo de Uso com Flags: # ./adler-review -o resenha_cristianismo_puro_e_simples.md -m gemini-1.5-pro Exemplo de Fluxo Interativo # --- Definição do Livro para Resenha --- Digite o título do livro: Cristianismo Puro e Simples Digite o autor do livro (opcional, pressione Enter para pular): C.S. Lewis Identificando o livro com o Google AI... --- Livro Identificado --- - **Título:** Cristianismo Puro e Simples - **Autor:** C.S. Lewis - **Ano de Publicação:** 1952 - **Gênero:** Apologética Cristã / Teologia / Filosofia da Religião - **Breve Descrição:** Uma defesa e explicação das crenças cristãs fundamentais baseada em palestras de rádio ministradas pelo autor durante a Segunda Guerra Mundial. -------------------------- Confirma este livro para a geração da resenha? (S/N): s Model selected: gemini-1.5-pro Processing review... (this may take up to 5 minutes) Success! Review generated and saved to: cristianismo-puro-e-simples.md 📁 Estrutura do Repositório # O projeto está organizado da seguinte forma:\n├── adler-review-cli/ # Código-fonte principal do CLI em Go │ ├── cmd/ │ │ └── adler-review/ # Ponto de entrada do programa (main.go) │ ├── internal/ │ │ ├── config/ # Carregamento e validação de configurações e flags │ │ ├── googleai/ # Wrapper de cliente para a API do Google AI (Gemini) │ │ └── reviewer/ # Motores de prompt, formatação de resenhas e lógica de Adler │ ├── go.mod # Arquivo de módulo Go │ └── go.sum # Somas de verificação de dependências Go ├── docs/ # Documentações adicionais, planos e especificações de design ├── openspec/ # Especificações técnicas e formatos do ecossistema OpenSpec └── README.md # Este arquivo guia do projeto 📝 Licença # Este projeto está licenciado sob a Licença MIT. Consulte o arquivo LICENSE para obter mais informações (se disponível).\nDesenvolvido com carinho para elevar o nível das discussões e leituras intelectuais. 🧠✍️\n","date":"21 June 2026","externalUrl":null,"permalink":"/posts/adler-review/","section":"Posts","summary":"","title":"Adler Review Generator","type":"posts"},{"content":" Photo Label # Um visualizador de imagens simples construído com Go e a biblioteca de interface gráfica Fyne.\nRepositório # https://github.com/willycornelissen/photo-label\nRecursos # Carregar imagens via linha de comando. Suporte para JPEG, PNG, GIF, BMP e WebP. Integração com desktop Linux (clique duplo para abrir imagens). Mantém a proporção da imagem ao redimensionar. Novo: Visualização de descrições (labels) em janelas flutuantes com suporte a Markdown. Novo: Integração com a API Google Gemini para descrever fotos automaticamente. Pré-requisitos # Go 1.22+ Compilador C (para o Fyne) Headers de desenvolvimento OpenGL Opcional: Variável de ambiente GOOGLE_API_KEY para as funções de IA. Compilação # go build -o photo-label src/main.go Instalação (Linux) # ./scripts/install-linux.sh ./photo-label ","date":"28 March 2026","externalUrl":null,"permalink":"/posts/photo-label/","section":"Posts","summary":"","title":"Photo Label","type":"posts"},{"content":" Portuguese TTS CLI # Uma ferramenta de linha de comando para converter arquivos de texto (.txt) em áudio MP3 em português utilizando o Piper TTS offline.\nRepositório # https://github.com/willycornelissen/pt-tts\nCaracterísticas # Converte .txt para .mp3 em português brasileiro e europeu. Escolha entre vozes masculina (Faber - BR) e feminina (Tugão - PT). Operação 100% offline. Interface simplificada com geração automática de nome de arquivo. Pré-requisitos # Python 3.9+ FFmpeg (necessário pelo pydub para codificação MP3) Instalação # Clone o repositório. Crie e ative um ambiente virtual. Instale as dependências: pip install . Uso # A forma mais simples de usar é fornecendo apenas o arquivo de texto:\npt-tts arquivo.txt Isso criará um arquivo arquivo.mp3 usando a voz feminina por padrão.\nOpções de Voz # Para usar voz masculina: pt-tts arquivo.txt -m Para usar voz feminina (explícito): pt-tts arquivo.txt -f Especificando o Arquivo de Saída # Você também pode especificar um nome personalizado para o arquivo de áudio:\npt-tts entrada.txt saida_customizada.mp3 Modelos # A ferramenta utiliza modelos Piper ONNX localizados no diretório models/:\nmodels/pt_BR-faber-medium.onnx (Masculino) models/pt_PT-tugao-medium.onnx (Feminino) ","date":"12 March 2026","externalUrl":null,"permalink":"/posts/pt-tts/","section":"Posts","summary":"","title":"Portuguese TTS","type":"posts"},{"content":" Bitcoin Panel CLI # Uma ferramenta de linha de comando (CLI) escrita em Go para consultar a cotação atual do Bitcoin em Dólar (USD) e Real (BRL), com suporte a fallback automático entre APIs.\nRepositório # https://github.com/willycornelissen/bitcoin-panel\n🚀 Funcionalidades # Cotação em tempo real: Mostra o valor do Bitcoin em USD e BRL. Resiliência: Se a API principal (CoinGecko) falhar, a aplicação consulta automaticamente uma fonte secundária (Blockchain.info). Saída Formatada: Exibe os dados em uma tabela limpa e organizada no terminal. Transparência: Informa qual fonte (API) foi utilizada para obter a cotação exibida. 🛠️ Tecnologias Utilizadas # Go (v1.22+) Cobra - Framework para aplicações CLI. Tablewriter - Formatação de tabelas no terminal. 📋 Pré-requisitos # Certifique-se de ter o Go instalado em sua máquina. Você pode verificar rodando:\ngo version 🔧 Instalação e Execução # Clonar o repositório ou baixar os arquivos:\ngit clone \u0026lt;url-do-repositorio\u0026gt; cd bitcoin-panel Instalar dependências:\ngo mod tidy Executar diretamente:\ngo run main.go 🏗️ Gerando o Executável # Para compilar a aplicação e gerar um binário:\ngo build -o bitcoin-panel main.go Após o build, você pode executar o programa usando:\n./bitcoin-panel 📊 Exemplo de Saída # +-------------+--------------+-----------------+ | MOEDA | VALOR | FONTE | +-------------+--------------+-----------------+ | Dólar (USD) | $ 67107.13 | CoinGecko | | Real (BRL) | R$ 347883.37 | CoinGecko | +-------------+--------------+-----------------+ ","date":"3 March 2026","externalUrl":null,"permalink":"/posts/bitcoin-panel/","section":"Posts","summary":"","title":"Bitcoin Panel","type":"posts"},{"content":" Visualizador de Xadrez PGN # Este projeto é uma aplicação desktop leve e intuitiva para visualizar jogos de xadrez armazenados em arquivos no formato PGN (Portable Game Notation).\nRepositório # https://github.com/willycornelissen/pgn-viewer\n🚀 Solução Tecnológica # A aplicação foi desenvolvida utilizando a linguagem Python 3, escolhida pela sua robustez no processamento de dados e vasta disponibilidade de bibliotecas especializadas. Os pilares da solução são:\npython-chess: Uma biblioteca poderosa que lida com toda a lógica das regras do xadrez, validação de movimentos e, crucialmente, o parsing (leitura) de arquivos PGN complexos. Pygame: Utilizado para a interface gráfica (GUI). O Pygame oferece controle total sobre a renderização de quadros, permitindo uma navegação fluida e responsiva entre as jogadas. Sistema Híbrido de Renderização: O código foi projetado para ser resiliente. Ele prioriza o uso de imagens PNG profissionais (se presentes na pasta assets/), mas possui um motor de desenho vetorial integrado que gera as peças matematicamente caso os arquivos de imagem estejam ausentes. 🛠️ Pré-requisitos # Python 3.10 ou superior. Ambiente Linux/WSL (recomendado) ou Windows/macOS. 📦 Instalação # Clone ou baixe este repositório. Crie e ative um ambiente virtual (recomendado para evitar conflitos): python3 -m venv venv source venv/bin/activate # No Linux/macOS # ou .\\venv\\Scripts\\activate # No Windows Instale as dependências: pip install pygame python-chess 🎨 Personalização Visual (Opcional) # Para obter um visual profissional (estilo Lichess/Chess.com), você pode baixar imagens das peças e colocá-las em uma pasta chamada assets/ no diretório raiz do projeto. O script reconhecerá automaticamente os seguintes nomes:\nBrancas: wK.png, wQ.png, wR.png, wB.png, wN.png, wP.png Pretas: bK.png, bQ.png, bR.png, bB.png, bN.png, bP.png 📖 Documentação do Usuário # Como Executar # Abra o terminal na pasta do projeto e execute o comando passando o caminho do arquivo PGN que deseja visualizar:\npython pgn_viewer.py caminho/do/seu/arquivo.pgn Controles de Navegação # Uma vez que a janela do tabuleiro abrir, utilize o teclado para interagir:\nSeta para a Direita (→): Avança para a próxima jogada do jogo. Seta para a Esquerda (←): Retrocede para a jogada anterior. Tecla ESC: Fecha a aplicação. Funcionalidades Especiais # Destaque de Movimento: O tabuleiro destaca automaticamente a casa de origem e a casa de destino do último movimento realizado, facilitando o acompanhamento da partida. Renderização Dinâmica: Se você não possuir arquivos de imagem, o sistema desenhará peças estilizadas automaticamente para garantir que você possa estudar suas partidas sem interrupções. ","date":"3 March 2026","externalUrl":null,"permalink":"/posts/pgn-viewer/","section":"Posts","summary":"","title":"PGN Viewer","type":"posts"},{"content":"","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"},{"content":"","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"}]