summaryrefslogtreecommitdiff
path: root/layouts
diff options
context:
space:
mode:
authorSivaldo <git@sivaldodavi.com>2026-06-29 18:36:52 -0300
committerSivaldo <git@sivaldodavi.com>2026-06-29 18:36:52 -0300
commitdd7670cf72b27c1b330d3732a483ca22e3a3db18 (patch)
tree16d4e458d93cd7181d4ebc950ed406b45038f53b /layouts
Commit inicial
Diffstat (limited to 'layouts')
-rw-r--r--layouts/404.html21
-rw-r--r--layouts/_default/list.html27
-rw-r--r--layouts/_default/single.html28
-rw-r--r--layouts/_default/terms.html15
-rw-r--r--layouts/curriculo/single.html522
-rw-r--r--layouts/index.html75
-rw-r--r--layouts/leituras/list.html90
-rw-r--r--layouts/leituras/single.html38
-rw-r--r--layouts/partials/footer.html10
-rw-r--r--layouts/partials/header.html33
-rw-r--r--layouts/partials/navbar.html17
-rw-r--r--layouts/shortcodes/img.html34
-rw-r--r--layouts/shortcodes/rawhtml.html1
-rw-r--r--layouts/shortcodes/video.html3
-rw-r--r--layouts/taxonomy/term.html21
15 files changed, 935 insertions, 0 deletions
diff --git a/layouts/404.html b/layouts/404.html
new file mode 100644
index 0000000..27f0e58
--- /dev/null
+++ b/layouts/404.html
@@ -0,0 +1,21 @@
+{{ partial "header.html" . -}}
+{{ partial "navbar.html" . -}}
+
+<main>
+ <section class="post-body" style="text-align:center;">
+ <p class="page-intro" style="margin:0 auto 8px; text-align:center;">Erro 404</p>
+ <h1 class="page-title" style="text-align:center;">Essa página não existe.</h1>
+ <p class="page-intro" style="margin:0 auto 40px; text-align:center;">
+ O link pode estar quebrado, ou a página foi movida.
+ </p>
+
+ <ul class="linklist" style="display:inline-block; text-align:left;">
+ <li><a href="/">← Página inicial</a></li>
+ <li><a href="/escritos/">Escritos</a></li>
+ <li><a href="/leituras/">Leituras</a></li>
+ <li><a href="/curriculo/">Currículo</a></li>
+ </ul>
+ </section>
+</main>
+
+{{ partial "footer.html" . }}
diff --git a/layouts/_default/list.html b/layouts/_default/list.html
new file mode 100644
index 0000000..5468281
--- /dev/null
+++ b/layouts/_default/list.html
@@ -0,0 +1,27 @@
+{{ partial "header.html" . -}}
+
+<main>
+ <section class="post-body">
+ <a class="back-link" href="/">← voltar</a>
+
+ <h1 class="page-title">{{ .Title | title }}</h1>
+
+ <ul class="recent-posts">
+ {{ range .RegularPages.ByDate.Reverse }}
+ <li>
+ <span class="recent-post-left">
+ <a href="{{ .Permalink }}">{{ .Title }}</a>
+ {{ with .Params.tags }}{{ range . }}
+ <a href="{{ "/tags/" | relURL }}{{ . | urlize }}/" class="post-tag">{{ . }}</a>
+ {{ end }}{{ end }}
+ </span>
+ {{ with .Params.date }}
+ <span class="recent-post-date">{{ . | time | dateFormat "2006-01-02" }}</span>
+ {{ end }}
+ </li>
+ {{ end }}
+ </ul>
+ </section>
+</main>
+
+{{ partial "footer.html" . }}
diff --git a/layouts/_default/single.html b/layouts/_default/single.html
new file mode 100644
index 0000000..e1272ce
--- /dev/null
+++ b/layouts/_default/single.html
@@ -0,0 +1,28 @@
+{{ partial "header.html" . -}}
+
+<article class="post-body">
+ <a class="back-link" href="/">← voltar</a>
+
+ <header class="post-header">
+ <h1>{{ .Title }}</h1>
+ {{ with .Params.excerpt }}
+ <p class="post-excerpt-lead">{{ . }}</p>
+ {{ end }}
+ {{ with .Date }}{{ if not .IsZero }}
+ <p class="post-date">{{ .Format "02/01/2006" }}</p>
+ {{ end }}{{ end }}
+ {{ with .Params.tags }}
+ <div class="post-tags-bar">
+ {{ range . }}
+ <a href="{{ "/tags/" | relURL }}{{ . | urlize }}/" class="post-tag">{{ . }}</a>
+ {{ end }}
+ </div>
+ {{ end }}
+ </header>
+
+ <div class="content">
+ {{ .Content }}
+ </div>
+</article>
+
+{{ partial "footer.html" . }}
diff --git a/layouts/_default/terms.html b/layouts/_default/terms.html
new file mode 100644
index 0000000..a3def21
--- /dev/null
+++ b/layouts/_default/terms.html
@@ -0,0 +1,15 @@
+{{ partial "header.html" . -}}
+{{ partial "navbar.html" . -}}
+
+<main>
+ <section class="post-body">
+ <h1 class="page-title">{{ .Title | title }}</h1>
+ <nav class="indice" style="margin-top:20px;">
+ {{ range .Data.Terms.Alphabetical }}
+ <a href="{{ .Page.RelPermalink }}">{{ .Term }} ({{ .Count }})</a>
+ {{ end }}
+ </nav>
+ </section>
+</main>
+
+{{ partial "footer.html" . }}
diff --git a/layouts/curriculo/single.html b/layouts/curriculo/single.html
new file mode 100644
index 0000000..048238c
--- /dev/null
+++ b/layouts/curriculo/single.html
@@ -0,0 +1,522 @@
+<!DOCTYPE html>
+<html lang="pt-br">
+<head>
+ <title>{{ .Title }} — Sivaldo Davi</title>
+ <meta name="robots" content="{{ if .Params.noindex }}noindex, nofollow{{ else }}index, follow{{ end }}">
+ <meta name="author" content="Sivaldo Davi">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta charset="utf-8">
+ <style>
+ :root {
+ --bg: #121212;
+ --fg: #dddddd;
+ --dim: #666;
+ --muted: #333;
+ --link: #599cab;
+ --border: #1e1e1e;
+ --border2: #2a2a2a;
+ --ui: "Inter", -apple-system, BlinkMacSystemFont, sans-serif;
+ --serif: "Georgia", serif;
+ }
+
+ * { box-sizing: border-box; margin: 0; }
+
+ body {
+ background: var(--bg);
+ color: var(--fg);
+ font-family: var(--ui);
+ font-size: 0.95rem;
+ line-height: 1.7;
+ max-width: 780px;
+ margin: 0 auto;
+ padding: 60px 24px 100px;
+ }
+
+ a { color: var(--link); text-decoration: none; }
+ a:hover { text-decoration: underline; }
+
+ .back {
+ display: inline-block;
+ font-size: 0.82rem;
+ color: var(--dim);
+ margin-bottom: 60px;
+ }
+ .back:hover { color: var(--fg); text-decoration: none; }
+
+ /* cabeçalho */
+ .cv-header {
+ border-left: 2px solid var(--border2);
+ padding-left: 22px;
+ margin-bottom: 56px;
+ }
+ .cv-header h1 {
+ font-family: var(--serif);
+ font-size: 1.7rem;
+ font-weight: normal;
+ color: #eee;
+ margin-bottom: 6px;
+ }
+ .cv-header .subtitulo {
+ font-size: 0.85rem;
+ color: var(--dim);
+ margin-bottom: 16px;
+ }
+ .cv-header .contatos {
+ font-size: 0.85rem;
+ color: #999;
+ display: flex;
+ flex-wrap: wrap;
+ gap: 6px 18px;
+ line-height: 2;
+ }
+ .cv-header .contatos a { color: #999; }
+ .cv-header .contatos a:hover { color: var(--link); text-decoration: none; }
+ .cv-header .sep { color: var(--muted); }
+ .pdf-link {
+ display: inline-block;
+ margin-top: 18px;
+ font-size: 0.8rem;
+ color: var(--dim);
+ border: 1px solid var(--border2);
+ padding: 5px 12px;
+ border-radius: 2px;
+ letter-spacing: 0.03em;
+ }
+ .pdf-link:hover { color: var(--fg); border-color: var(--dim); text-decoration: none; }
+
+ /* seções */
+ .cv-section { margin-bottom: 48px; }
+ .cv-section h2 {
+ font-size: 0.7rem;
+ font-weight: 600;
+ text-transform: uppercase;
+ letter-spacing: 1.6px;
+ color: var(--dim);
+ border-bottom: 1px solid var(--border);
+ padding-bottom: 7px;
+ margin-bottom: 24px;
+ }
+
+ /* objetivo */
+ .objetivo p {
+ color: #aaa;
+ font-size: 0.95rem;
+ line-height: 1.8;
+ max-width: 640px;
+ }
+
+ /* entradas */
+ .entrada {
+ display: grid;
+ grid-template-columns: 1fr auto;
+ gap: 2px 20px;
+ margin-bottom: 28px;
+ align-items: start;
+ }
+ .entrada:last-child { margin-bottom: 0; }
+ .entrada-titulo { font-size: 0.95rem; color: #ddd; font-weight: 500; grid-column: 1; }
+ .entrada-local { font-size: 0.85rem; color: var(--dim); grid-column: 1; }
+ .entrada-periodo {
+ font-size: 0.82rem;
+ color: var(--dim);
+ white-space: nowrap;
+ grid-column: 2;
+ grid-row: 1;
+ text-align: right;
+ padding-top: 3px;
+ }
+ .entrada-desc {
+ grid-column: 1 / -1;
+ font-size: 0.87rem;
+ color: #777;
+ margin-top: 4px;
+ line-height: 1.6;
+ }
+ .entrada-desc a { color: #777; border-bottom: 1px solid var(--border2); }
+ .entrada-desc a:hover { color: var(--link); border-color: var(--link); text-decoration: none; }
+
+ /* nota honesta */
+ .nota-honesta {
+ font-size: 0.87rem;
+ color: #555;
+ font-style: italic;
+ padding: 12px 0 12px 16px;
+ border-left: 2px solid var(--border2);
+ line-height: 1.7;
+ }
+ .nota-honesta a { color: #555; border-bottom: 1px solid var(--border2); }
+ .nota-honesta a:hover { color: var(--link); text-decoration: none; }
+
+ /* projetos */
+ .projeto {
+ border-left: 1px solid var(--border2);
+ padding-left: 16px;
+ margin-bottom: 28px;
+ }
+ .projeto:last-child { margin-bottom: 0; }
+ .projeto-cabecalho {
+ display: flex;
+ align-items: baseline;
+ justify-content: space-between;
+ gap: 16px;
+ margin-bottom: 4px;
+ flex-wrap: wrap;
+ }
+ .projeto-nome { font-size: 0.95rem; color: #ddd; font-weight: 500; }
+ .projeto-lang { font-size: 0.75rem; color: var(--dim); font-family: Menlo, Consolas, monospace; }
+ .projeto-desc { font-size: 0.87rem; color: #777; line-height: 1.6; margin-bottom: 6px; }
+ .projeto-desc a { color: #777; }
+ .projeto-desc a:hover { color: var(--link); }
+ .projeto-link { font-size: 0.78rem; color: var(--dim); }
+ .projeto-link a { color: var(--dim); }
+ .projeto-link a:hover { color: var(--link); }
+
+ /* presença */
+ .presenca { list-style: none; padding: 0; }
+ .presenca li {
+ padding: 10px 0;
+ border-bottom: 1px solid var(--border);
+ display: flex;
+ align-items: baseline;
+ gap: 14px;
+ flex-wrap: wrap;
+ }
+ .presenca li:last-child { border-bottom: none; }
+ .presenca-nome {
+ font-size: 0.9rem;
+ color: #ddd;
+ font-weight: 500;
+ min-width: 110px;
+ flex-shrink: 0;
+ }
+ .presenca-desc { font-size: 0.85rem; color: #777; }
+ .presenca-desc a { color: #777; }
+ .presenca-desc a:hover { color: var(--link); }
+
+ /* qualificações */
+ .cv-list { list-style: none; padding: 0; }
+ .cv-list li {
+ font-size: 0.9rem;
+ color: #aaa;
+ padding: 8px 0;
+ border-bottom: 1px solid var(--border);
+ display: flex;
+ gap: 14px;
+ }
+ .cv-list li:last-child { border-bottom: none; }
+ .item-label {
+ color: var(--dim);
+ font-size: 0.8rem;
+ min-width: 90px;
+ flex-shrink: 0;
+ padding-top: 1px;
+ }
+
+ /* interesses */
+ .interesses { display: flex; flex-wrap: wrap; gap: 8px; }
+ .interesse-tag {
+ font-size: 0.8rem;
+ color: #999;
+ border: 1px solid var(--border2);
+ padding: 4px 12px;
+ border-radius: 2px;
+ }
+
+ footer {
+ margin-top: 80px;
+ padding-top: 22px;
+ border-top: 1px solid var(--border);
+ display: flex;
+ justify-content: space-between;
+ font-size: 0.78rem;
+ color: var(--dim);
+ flex-wrap: wrap;
+ gap: 8px;
+ }
+ footer a { color: var(--dim); }
+ footer a:hover { color: var(--fg); }
+
+ @media (max-width: 560px) {
+ .entrada { grid-template-columns: 1fr; }
+ .entrada-periodo { grid-column: 1; grid-row: auto; text-align: left; }
+ .presenca li { flex-direction: column; gap: 4px; }
+ .projeto-cabecalho { flex-direction: column; gap: 2px; }
+ }
+ </style>
+</head>
+<body>
+
+ <a class="back" href="/">← sivaldodavi.com</a>
+
+ <header class="cv-header">
+ <h1>Sivaldo Davi Pereira</h1>
+ <div class="subtitulo">Bacharelando em Direito · Pinheiro, Maranhão</div>
+ <div class="contatos">
+ <a href="mailto:Sivaldodavi@disroot.org">Sivaldodavi@disroot.org</a>
+ <span class="sep">·</span>
+ <span>(98) 98141-7363</span>
+ <span class="sep">·</span>
+ <a href="https://www.linkedin.com/in/sivaldo-davi-pereira-156720405/" target="_blank" rel="noopener">LinkedIn</a>
+ <span class="sep">·</span>
+ <a href="http://lattes.cnpq.br/0213004367898500" target="_blank" rel="noopener">Lattes</a>
+ <span class="sep">·</span>
+ <a href="https://codeberg.org/sivaldodavi" target="_blank" rel="noopener">Codeberg</a>
+ </div>
+ <a class="pdf-link" href="/curriculo/arquivo.pdf" target="_blank">↓ versão PDF</a>
+ </header>
+
+ <main>
+
+ <section class="cv-section objetivo">
+ <h2>Objetivo</h2>
+ <p>
+ Bacharelando em Direito com interesse em Direito Digital. Busco oportunidade
+ para atuar em rotinas jurídicas e administrativas, aplicando competências em
+ redação técnica, pesquisa normativa e comunicação inclusiva.
+ </p>
+ </section>
+
+ <section class="cv-section">
+ <h2>Formação</h2>
+
+ <div class="entrada">
+ <span class="entrada-titulo">Graduação em Direito</span>
+ <span class="entrada-periodo">2026 – presente</span>
+ <span class="entrada-local">Faculdade Supremo Redentor (FACSUR) — 1º Período</span>
+ </div>
+
+ <div class="entrada">
+ <span class="entrada-titulo">Ensino Médio e Técnico em Agronegócio</span>
+ <span class="entrada-periodo">2022 – 2024</span>
+ <span class="entrada-local">Fundação Bradesco — Unidade Pinheiro, Maranhão</span>
+ <span class="entrada-desc">
+ Formação técnica com ênfase em análise de cadeias produtivas e gestão rural.
+ </span>
+ </div>
+ </section>
+
+ <section class="cv-section">
+ <h2>Produção acadêmica</h2>
+
+ <p class="nota-honesta">
+ Curso iniciado em 2026. Sem artigos ou publicações formais até o momento —
+ esta seção será atualizada conforme o desenvolvimento da graduação.
+ Textos de natureza jurídica são publicados no
+ <a href="https://sivaldodavi.substack.com" target="_blank" rel="noopener">Substack</a>
+ e em <a href="https://dir.sivaldodavi.com" target="_blank" rel="noopener">dir.sivaldodavi.com</a>.
+ </p>
+
+ <!--
+ ================================================================
+ PRODUÇÃO ACADÊMICA — descomentar quando houver publicações reais
+ ================================================================
+
+ <div class="entrada">
+ <span class="entrada-titulo">
+ LGPD e o acesso a dados pessoais no processo civil: limites e perspectivas
+ </span>
+ <span class="entrada-periodo">2027</span>
+ <span class="entrada-local">Artigo — Revista Res Severa Verum Gaudium (UFRGS), v. X, n. X</span>
+ <span class="entrada-desc">
+ Análise da aplicabilidade da Lei Geral de Proteção de Dados no âmbito do
+ processo civil, com foco nos limites ao acesso probatório e nas tensões com
+ o princípio da ampla defesa.
+ </span>
+ </div>
+
+ <div class="entrada">
+ <span class="entrada-titulo">
+ Soberania digital e o direito à autodeterminação informacional
+ </span>
+ <span class="entrada-periodo">2026</span>
+ <span class="entrada-local">Trabalho de conclusão de disciplina — FACSUR, 1º Período</span>
+ <span class="entrada-desc">
+ Paper desenvolvido na disciplina de Teoria Geral do Direito, relacionando o
+ conceito de soberania estatal com a emergência do direito à
+ autodeterminação informacional na era digital.
+ <a href="https://dir.sivaldodavi.com" target="_blank" rel="noopener">Versão publicada →</a>
+ </span>
+ </div>
+
+ <div class="entrada">
+ <span class="entrada-titulo">
+ Iniciação Científica: Direito Digital e regulação algorítmica no Brasil
+ </span>
+ <span class="entrada-periodo">2027 – 2028</span>
+ <span class="entrada-local">FACSUR — orientação: Prof. Me. [Nome do Orientador]</span>
+ <span class="entrada-desc">
+ Pesquisa sobre os marcos regulatórios da inteligência artificial no Brasil,
+ com ênfase no PL 2.338/2023 e suas implicações para a responsabilidade civil
+ de sistemas automatizados de decisão.
+ </span>
+ </div>
+
+ ================================================================
+ -->
+
+ </section>
+
+ <section class="cv-section">
+ <h2>Projetos</h2>
+
+ <div class="projeto">
+ <div class="projeto-cabecalho">
+ <span class="projeto-nome">direito</span>
+ <span class="projeto-lang">HTML · CSS · JS</span>
+ </div>
+ <p class="projeto-desc">
+ Site de estudos e materiais de Direito, hospedado em
+ <a href="https://dir.sivaldodavi.com" target="_blank" rel="noopener">dir.sivaldodavi.com</a>.
+ Construído com Hugo, reúne anotações, resumos e referências organizadas por disciplina.
+ </p>
+ <div class="projeto-link">
+ <a href="https://codeberg.org/sivaldodavi/direito" target="_blank" rel="noopener">codeberg.org/sivaldodavi/direito</a>
+ </div>
+ </div>
+
+ <div class="projeto">
+ <div class="projeto-cabecalho">
+ <span class="projeto-nome">sivas-academic</span>
+ <span class="projeto-lang">Typst</span>
+ </div>
+ <p class="projeto-desc">
+ Templates de trabalhos acadêmicos em Typst seguindo as normas ABNT —
+ inclui modelos para artigo científico, case e projeto de pesquisa,
+ com versões modulares e autocontidas. Inspirado no pacote Abntyp.
+ </p>
+ <div class="projeto-link">
+ <a href="https://codeberg.org/sivaldodavi/sivas-academic" target="_blank" rel="noopener">codeberg.org/sivaldodavi/sivas-academic</a>
+ </div>
+ </div>
+
+ <div class="projeto">
+ <div class="projeto-cabecalho">
+ <span class="projeto-nome">zap-go</span>
+ <span class="projeto-lang">Go</span>
+ </div>
+ <p class="projeto-desc">
+ Utilitário de linha de comando para automação de envio de mensagens via
+ WhatsApp e e-mail (SMTP). Configurado via arquivo TOML, sem dependências
+ de serviços de terceiros pagos.
+ </p>
+ <div class="projeto-link">
+ <a href="https://codeberg.org/sivaldodavi/zap-go" target="_blank" rel="noopener">codeberg.org/sivaldodavi/zap-go</a>
+ </div>
+ </div>
+
+ </section>
+
+ <section class="cv-section">
+ <h2>Presença &amp; publicações</h2>
+ <ul class="presenca">
+ <!--
+ ================================================================
+ Descomentar quando os perfis forem criados:
+
+ <li>
+ <span class="presenca-nome">Substack</span>
+ <span class="presenca-desc">
+ Textos sobre Direito Digital, LGPD e regulação —
+ <a href="https://sivaldodavi.substack.com" target="_blank" rel="noopener">sivaldodavi.substack.com</a>
+ </span>
+ </li>
+ <li>
+ <span class="presenca-nome">YouTube</span>
+ <span class="presenca-desc">
+ Vídeos sobre Direito e tecnologia —
+ <a href="https://youtube.com/@sivaldodavi" target="_blank" rel="noopener">youtube.com/@sivaldodavi</a>
+ </span>
+ </li>
+ <li>
+ <span class="presenca-nome">Instagram</span>
+ <span class="presenca-desc">
+ Conteúdo jurídico e acadêmico —
+ <a href="https://instagram.com/sivaldodavi" target="_blank" rel="noopener">instagram.com/sivaldodavi</a>
+ </span>
+ </li>
+ ================================================================
+ -->
+ <li>
+ <span class="presenca-nome">Site pessoal</span>
+ <span class="presenca-desc">
+ Escritos sobre teologia, filosofia e tecnologia —
+ <a href="https://sivaldodavi.com">sivaldodavi.com</a>
+ </span>
+ </li>
+ <li>
+ <span class="presenca-nome">Direito</span>
+ <span class="presenca-desc">
+ Estudos e materiais jurídicos —
+ <a href="https://dir.sivaldodavi.com" target="_blank" rel="noopener">dir.sivaldodavi.com</a>
+ </span>
+ </li>
+ <li>
+ <span class="presenca-nome">Codeberg</span>
+ <span class="presenca-desc">
+ Projetos com foco em soberania digital —
+ <a href="https://codeberg.org/sivaldodavi" target="_blank" rel="noopener">codeberg.org/sivaldodavi</a>
+ </span>
+ </li>
+ <li>
+ <span class="presenca-nome">Lattes</span>
+ <span class="presenca-desc">
+ <a href="http://lattes.cnpq.br/0213004367898500" target="_blank" rel="noopener">lattes.cnpq.br/0213004367898500</a>
+ </span>
+ </li>
+ </ul>
+ </section>
+
+ <section class="cv-section">
+ <h2>Qualificações</h2>
+ <ul class="cv-list">
+ <li>
+ <span class="item-label">Idiomas</span>
+ <span>Português (nativo) · Inglês básico (NewCenter Cursos) · LIBRAS intermediário (FIC — Fundação Bradesco)</span>
+ </li>
+ <li>
+ <span class="item-label">Escrita</span>
+ <span>Redação técnica e jurídica · Typst · Markdown</span>
+ </li>
+ <li>
+ <span class="item-label">Informática</span>
+ <span>Pacote Office · Google Workspace · Linux (Alpine, dwm) · Shell scripting · Go</span>
+ </li>
+ </ul>
+ </section>
+
+ <section class="cv-section">
+ <h2>Áreas de interesse</h2>
+ <div class="interesses">
+ <span class="interesse-tag">Direito Digital</span>
+ <span class="interesse-tag">LGPD</span>
+ <span class="interesse-tag">Segurança da Informação</span>
+ <span class="interesse-tag">Compliance</span>
+ <span class="interesse-tag">Legal Ops</span>
+ <span class="interesse-tag">Automação documental</span>
+ <span class="interesse-tag">Acessibilidade institucional</span>
+ <span class="interesse-tag">Soberania digital</span>
+ </div>
+ </section>
+
+ <section class="cv-section">
+ <h2>Informações adicionais</h2>
+ <ul class="cv-list">
+ <li>
+ <span class="item-label">Agronegócio</span>
+ <span>Experiência em análise de cadeias produtivas e gestão rural (Técnico em Agronegócio, Fundação Bradesco).</span>
+ </li>
+ <li>
+ <span class="item-label">Pesquisa</span>
+ <span>Facilidade com pesquisa técnica e jurídica, organização de arquivos e aprendizado de novos sistemas.</span>
+ </li>
+ </ul>
+ </section>
+
+ </main>
+
+ <footer>
+ <span>GPL 3.0 · CC BY-NC-SA 4.0</span>
+ </footer>
+
+</body>
+</html>
diff --git a/layouts/index.html b/layouts/index.html
new file mode 100644
index 0000000..2906524
--- /dev/null
+++ b/layouts/index.html
@@ -0,0 +1,75 @@
+{{ partial "header.html" . -}}
+{{ partial "navbar.html" . -}}
+
+<main>
+
+ <section class="hero">
+ <div class="hero-text">
+ <h1>Ave, sou Sivaldo Davi.</h1>
+ <p>
+ Estudante de Direito, leitor e entusiasta do Unix.
+ Penso sobre teologia, filosofia e tecnologia —
+ às vezes em separado, às vezes como se fossem a mesma coisa.
+ </p>
+ <p>
+ Por aqui também deixo o que uso e indico:
+ <a href="/software/">software</a>,
+ <a href="/hardware/">hardware</a>
+ e <a href="/websites/">websites</a>.
+ </p>
+ <p>
+ Pode me encontrar pelo
+ <a href="mailto:sivaldo@sivaldodavi.com">e-mail</a>
+ ou no <a href="https://codeberg.org/sivaldodavi">Codeberg</a>.
+ </p>
+ </div>
+ <div class="hero-photo">
+ <img src="/p/pic.webp" alt="Sivaldo Davi">
+ </div>
+ </section>
+
+ <hr>
+
+ <div class="grid">
+
+ <section>
+ <h2>Escritos recentes</h2>
+ {{ $meses := slice "jan." "fev." "mar." "abr." "mai." "jun." "jul." "ago." "set." "out." "nov." "dez." }}
+ <ul class="posts">
+ {{ range first 3 (where .Site.RegularPages "Section" "escritos") }}
+ <li>
+ <a href="{{ .Permalink }}">{{ .Title }}</a>
+ {{ with .Params.excerpt }}<div class="post-excerpt">{{ . }}</div>{{ end }}
+ <div class="post-meta">{{ .Date.Day }} {{ index $meses (sub .Date.Month 1) }} {{ .Date.Year }}</div>
+ </li>
+ {{ end }}
+ </ul>
+ <a class="ver-todos" href="/escritos/">todos os escritos →</a>
+ </section>
+
+ <section>
+ <h2>Leituras</h2>
+ <ul class="books">
+ {{ range first 3 (where (where .Site.RegularPages "Section" "leituras") "Params.destaque" true) }}
+ <li>
+ {{ if .Params.capa }}
+ <div class="book-capa"><img src="{{ .Params.capa }}" alt="Capa do livro {{ .Title }}"></div>
+ {{ else }}
+ <div class="book-capa"></div>
+ {{ end }}
+ <div class="book-info">
+ <a class="book-title" href="{{ .Permalink }}">{{ .Title }}</a>
+ <span class="book-author">{{ .Params.autor }}</span>
+ {{ with index .Params.tags 0 }}<span class="tag">{{ . }}</span>{{ end }}
+ </div>
+ </li>
+ {{ end }}
+ </ul>
+ <a class="ver-todos" href="/leituras/">todas as leituras →</a>
+ </section>
+
+ </div>
+
+</main>
+
+{{ partial "footer.html" . }}
diff --git a/layouts/leituras/list.html b/layouts/leituras/list.html
new file mode 100644
index 0000000..f6844cb
--- /dev/null
+++ b/layouts/leituras/list.html
@@ -0,0 +1,90 @@
+{{ partial "header.html" . -}}
+
+<main class="post-body">
+
+ <a class="back-link" href="/">← sivaldodavi.com</a>
+
+ <h1 class="page-title">Leituras</h1>
+ <p class="page-intro">
+ Livros que li, estou lendo, ou que comecei e parei — organizados por área.
+ </p>
+
+ {{/* Categorias e subcategorias são derivadas do conteúdo (frontmatter), e não
+ mais fixadas no template — basta adicionar "categoria" num novo livro
+ para que ele apareça automaticamente, sem editar este arquivo. */}}
+ {{ $livrosTodos := .RegularPages }}
+ {{ $categorias := slice }}
+ {{ range $livrosTodos }}
+ {{ with .Params.categoria }}
+ {{ $categorias = $categorias | append . }}
+ {{ end }}
+ {{ end }}
+ {{ $categorias = $categorias | uniq | sort }}
+
+ <nav class="indice">
+ {{ range $categorias }}
+ <a href="#{{ . | urlize }}">{{ . }}</a>
+ {{ end }}
+ </nav>
+
+ {{ range $categorias }}
+ {{ $categoria := . }}
+ {{ $livros := where $livrosTodos "Params.categoria" $categoria }}
+ <section class="categoria" id="{{ $categoria | urlize }}">
+ <h2>{{ $categoria }}</h2>
+
+ {{ $semSub := where $livros "Params.subcategoria" "" }}
+ {{ range $semSub.ByTitle }}
+ <div class="livro">
+ {{ if .Params.capa }}
+ <div class="livro-capa"><img src="{{ .Params.capa }}" alt="Capa do livro {{ .Title }}"></div>
+ {{ else }}
+ <div class="livro-capa sem-capa">sem capa</div>
+ {{ end }}
+ <div class="livro-info">
+ <a class="livro-titulo" href="{{ .Permalink }}">{{ .Title }}</a>
+ <span class="livro-autor">{{ .Params.autor }}</span>
+ </div>
+ {{ if and .Params.status (ne .Params.status "lido") }}
+ <span class="livro-status livro-status-{{ .Params.status | urlize }}">{{ .Params.status }}</span>
+ {{ end }}
+ </div>
+ {{ end }}
+
+ {{ $subcategorias := slice }}
+ {{ range $livros }}
+ {{ with .Params.subcategoria }}
+ {{ $subcategorias = $subcategorias | append . }}
+ {{ end }}
+ {{ end }}
+ {{ $subcategorias = $subcategorias | uniq | sort }}
+
+ {{ range $subcategorias }}
+ {{ $sub := . }}
+ {{ $livrosSub := where $livros "Params.subcategoria" $sub }}
+ <div class="subcategoria">
+ <h3>{{ $sub }}</h3>
+ {{ range $livrosSub.ByTitle }}
+ <div class="livro">
+ {{ if .Params.capa }}
+ <div class="livro-capa"><img src="{{ .Params.capa }}" alt="Capa do livro {{ .Title }}"></div>
+ {{ else }}
+ <div class="livro-capa sem-capa">sem capa</div>
+ {{ end }}
+ <div class="livro-info">
+ <a class="livro-titulo" href="{{ .Permalink }}">{{ .Title }}</a>
+ <span class="livro-autor">{{ .Params.autor }}</span>
+ </div>
+ {{ if and .Params.status (ne .Params.status "lido") }}
+ <span class="livro-status livro-status-{{ .Params.status | urlize }}">{{ .Params.status }}</span>
+ {{ end }}
+ </div>
+ {{ end }}
+ </div>
+ {{ end }}
+ </section>
+ {{ end }}
+
+</main>
+
+{{ partial "footer.html" . }}
diff --git a/layouts/leituras/single.html b/layouts/leituras/single.html
new file mode 100644
index 0000000..1f0b38c
--- /dev/null
+++ b/layouts/leituras/single.html
@@ -0,0 +1,38 @@
+{{ partial "header.html" . -}}
+
+<main class="post-body">
+
+ <a class="back-link" href="/leituras/">← leituras</a>
+
+ <div class="livro-header">
+ {{ if .Params.capa }}
+ <div class="livro-capa-grande"><img src="{{ .Params.capa }}" alt="Capa do livro {{ .Title }}, de {{ .Params.autor }}"></div>
+ {{ else }}
+ <div class="livro-capa-grande sem-capa">sem capa</div>
+ {{ end }}
+ <div class="livro-header-info">
+ <h1>{{ .Title }}</h1>
+ <span class="autor">{{ .Params.autor }}</span>
+ <div class="meta">
+ {{ with .Params.status }}<span class="status{{ if ne . "lido" }} status-{{ . | urlize }}{{ end }}">{{ . }}</span>{{ end }}
+ {{ range .Params.tags }}<span class="tag">{{ . }}</span>{{ end }}
+ </div>
+ {{ with .Params.link_externo }}
+ <a class="link-externo" href="{{ . }}" target="_blank" rel="noopener">↗ ver online</a>
+ {{ end }}
+ </div>
+ </div>
+
+ <hr>
+
+ <div class="resenha">
+ {{ if .Content }}
+ {{ .Content }}
+ {{ else }}
+ <p class="sem-resenha">Ainda sem resenha — só na estante por enquanto.</p>
+ {{ end }}
+ </div>
+
+</main>
+
+{{ partial "footer.html" . }}
diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html
new file mode 100644
index 0000000..8d9cf58
--- /dev/null
+++ b/layouts/partials/footer.html
@@ -0,0 +1,10 @@
+<footer>
+ <div class="footer-left">
+ Since 2026 | <a href="https://codeberg.org/sivaldodavi">Source (Git)</a>
+ </div>
+ <div class="footer-right">
+ GPL 3.0 | CC BY-NC-SA 4.0
+ </div>
+</footer>
+</body>
+</html>
diff --git a/layouts/partials/header.html b/layouts/partials/header.html
new file mode 100644
index 0000000..c29eabc
--- /dev/null
+++ b/layouts/partials/header.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html lang="{{ .Site.LanguageCode }}">
+ <head>
+ <title>{{ if not .IsHome }}{{ .Title | title }} | {{ end }}{{ .Site.Title }}</title>
+ <link rel="stylesheet" type="text/css" href="/index.css">
+ <link rel="icon" type="image/webp" href="/p/pic.webp">
+
+ {{ if or .Params.noindex (eq .Kind "404") }}
+ <meta name="robots" content="noindex, nofollow">
+ {{ else }}
+ <meta name="robots" content="index, follow">
+ {{ end }}
+
+ {{ $desc := "Ave, meu nome é Sivaldo Davi e este é meu site na internet." }}
+ {{ with .Params.descricao }}{{ $desc = . }}{{ end }}
+ {{ if and (not .Params.descricao) (not .IsHome) }}
+ {{ with .Summary }}{{ $desc = . | plainify | truncate 160 }}{{ end }}
+ {{ end }}
+ <meta name="description" content="{{ $desc }}">
+ <meta name="author" content="Sivaldo Davi">
+
+ <meta property="og:type" content="website">
+ <meta property="og:title" content="{{ if not .IsHome }}{{ .Title | title }} | {{ end }}{{ .Site.Title }}">
+ <meta property="og:description" content="{{ $desc }}">
+ <meta property="og:image" content="{{ if .Params.capa }}{{ .Params.capa | absURL }}{{ else }}{{ "/p/pic.webp" | absURL }}{{ end }}">
+ <meta property="og:url" content="{{ .Permalink }}">
+ <meta name="twitter:card" content="summary">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta charset="utf-8">
+ </head>
+ <body>
+
diff --git a/layouts/partials/navbar.html b/layouts/partials/navbar.html
new file mode 100644
index 0000000..83bf631
--- /dev/null
+++ b/layouts/partials/navbar.html
@@ -0,0 +1,17 @@
+<nav class="nav-container {{ if .IsHome }}home-nav{{ else }}post-nav{{ end }}">
+ {{ if .IsHome }}
+ <a href="{{ .Site.BaseURL }}escritos/">escritos</a>
+ <a href="{{ .Site.BaseURL }}leituras/">leituras</a>
+ <a href="{{ .Site.BaseURL }}curriculo/">currículo</a>
+ <a href="{{ .Site.BaseURL }}contact/">contato</a>
+ {{ else }}
+ <div class="centered-post-title">
+ <a href="{{ .Site.BaseURL }}">{{ .Site.Title }}</a>
+ </div>
+ <div class="post-nav-links">
+ <a href="{{ .Site.BaseURL }}escritos/">escritos</a>
+ <a href="{{ .Site.BaseURL }}leituras/">leituras</a>
+ <a href="{{ .Site.BaseURL }}curriculo/">currículo</a>
+ </div>
+ {{ end }}
+</nav>
diff --git a/layouts/shortcodes/img.html b/layouts/shortcodes/img.html
new file mode 100644
index 0000000..40002cf
--- /dev/null
+++ b/layouts/shortcodes/img.html
@@ -0,0 +1,34 @@
+<!--
+ class: class of figure
+ link: url of image
+ id: id of image
+ alt: alt text
+ caption: caption
+ mouse: text when moused over
+ width: fixed width (ex: 600px, 80%)
+ maxwidth: max width (ex: 800px)
+-->
+
+<figure {{ with .Get "class" }}class="{{.}}"{{ end -}}>
+ {{- with .Get "link"}}<a href="{{.}}">{{ end -}}
+ <img
+ src="{{ .Get "src" }}"
+ {{- with .Get "mouse" }} title="{{.}}"{{ end -}}
+ {{- with .Get "id" }} id="{{.}}"{{ end -}}
+ {{- with .Get "alt" }} alt="{{.}}"{{ end -}}
+ {{- if or (.Get "width") (.Get "maxwidth") }}
+ style="
+ {{- with .Get "width" }}width: {{.}};{{ end -}}
+ {{- with .Get "maxwidth" }}max-width: {{.}};{{ end -}}
+ height: auto;
+ "
+ {{- end -}}
+ >
+ {{- if .Get "link"}}</a>{{ end -}}
+
+ {{- with .Get "caption" -}}
+ <figcaption>
+ {{- . -}}
+ </figcaption>
+ {{- end -}}
+</figure>
diff --git a/layouts/shortcodes/rawhtml.html b/layouts/shortcodes/rawhtml.html
new file mode 100644
index 0000000..59448a1
--- /dev/null
+++ b/layouts/shortcodes/rawhtml.html
@@ -0,0 +1 @@
+{{ .Inner }}
diff --git a/layouts/shortcodes/video.html b/layouts/shortcodes/video.html
new file mode 100644
index 0000000..51be6ec
--- /dev/null
+++ b/layouts/shortcodes/video.html
@@ -0,0 +1,3 @@
+<video width="640" height="480" preload="none" controls>
+ <source src="{{ .Get "src" }}" type="video/webm">
+</video>
diff --git a/layouts/taxonomy/term.html b/layouts/taxonomy/term.html
new file mode 100644
index 0000000..d133caa
--- /dev/null
+++ b/layouts/taxonomy/term.html
@@ -0,0 +1,21 @@
+{{ partial "header.html" . -}}
+{{ partial "navbar.html" . -}}
+
+<main>
+ <section class="post-body">
+ <h1 class="page-title" style="text-align:center;">{{ .Title }}</h1>
+
+ <ul class="recent-posts">
+ {{ range .Pages.ByDate.Reverse }}
+ <li>
+ <a href="{{ .Permalink }}">{{ .Title }}</a>
+ {{ with .Params.date }}
+ <span class="recent-post-date">{{ . | time | dateFormat "2006-01-02" }}</span>
+ {{ end }}
+ </li>
+ {{ end }}
+ </ul>
+ </section>
+</main>
+
+{{ partial "footer.html" . }}