Add GoatCounter analytics, Miniflux, and update CLAUDE.md

- Add self-hosted GoatCounter via systemd binary service (stats.monotrope.au)
- Add Miniflux RSS reader via Docker Compose (reader.monotrope.au)
- Extend Ansible playbook with goatcounter and miniflux tags; all provisioning is idempotent
- Add Caddy reverse proxy blocks for both new services
- Inject GoatCounter script in baseof.html (production builds only)
- Add goatcounter and miniflux Makefile targets
- Rewrite CLAUDE.md to reflect actual project state

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Louis Simoneau
2026-04-09 15:09:53 +10:00
parent b090231557
commit 5a734d404b
20 changed files with 963 additions and 183 deletions

View File

@@ -0,0 +1,24 @@
{{ define "main" }}
<p class="section-label">reading</p>
<ul class="review-list">
{{ range .Pages.ByDate.Reverse }}
{{ $rating := .Params.rating | default 0 }}
<li>
<span class="review-date">{{ .Params.date_read | default (.Date.Format "2006-01") }}</span>
<div class="review-entry">
<a href="{{ .RelPermalink }}">{{ .Title }}</a>
{{ with .Params.book_author }}<span class="review-author">{{ . }}</span>{{ end }}
<span class="review-rating">
{{- strings.Repeat $rating "▓" -}}{{- strings.Repeat (sub 5 $rating) "░" -}}
<span style="color: var(--muted); font-size: 0.8em; margin-left: 0.4rem;">{{ $rating }}/5</span>
</span>
{{ with .Params.tags }}
<div class="tags">
{{ range . }}<a class="tag" href="/tags/{{ . | urlize }}/">{{ . }}</a>{{ end }}
</div>
{{ end }}
</div>
</li>
{{ end }}
</ul>
{{ end }}

View File

@@ -0,0 +1,32 @@
{{ define "main" }}
{{ $rating := .Params.rating | default 0 }}
<article>
<h1>{{ .Title }}</h1>
<div class="book-meta">
{{ with .Params.book_author }}
<span class="meta-key">author</span>
<span class="meta-val author">{{ . }}</span>
{{ end }}
<span class="meta-key">read</span>
<span class="meta-val">{{ .Params.date_read | default (.Date.Format "January 2006") }}</span>
<span class="meta-key">rating</span>
<span class="meta-val">
<span class="rating-blocks">{{- strings.Repeat $rating "▓" -}}{{- strings.Repeat (sub 5 $rating) "░" -}}</span>
<span class="rating-num">{{ $rating }}/5</span>
</span>
</div>
{{ .Content }}
{{ with .Params.tags }}
<div class="post-footer">
<div class="tags">
{{ range . }}<a class="tag" href="/tags/{{ . | urlize }}/">{{ . }}</a>{{ end }}
</div>
</div>
{{ end }}
</article>
{{ end }}