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

@@ -1,10 +1,56 @@
{{ define "main" }}
<ul class="post-list">
{{ range (where .Site.RegularPages "Type" "posts").ByDate.Reverse }}
<li>
<time datetime="{{ .Date.Format "2006-01-02" }}">{{ .Date.Format "2006-01-02" }}</time>
<a href="{{ .Permalink }}">{{ .Title }}</a>
</li>
{{ end }}
</ul>
{{ end }}
<div class="home-prompt">
<span class="prompt-line">whoami</span>
<span class="prompt-response">{{ .Site.Params.description | default "writing on technology, books, and ideas."
}}</span>
<span class="prompt-line"><span class="cursor"></span></span>
</div>
<div class="home-sections">
<section>
<div class="home-section-head">
<h2>writing</h2>
<a class="see-all" href="/posts/">all posts</a>
</div>
<ul class="post-list">
{{ range first 5 (where .Site.RegularPages "Section" "posts").ByDate.Reverse }}
<li>
<time datetime="{{ .Date.Format " 2006-01-02" }}">{{ .Date.Format "2006-01-02" }}</time>
<div class="post-entry">
<a href="{{ .RelPermalink }}">{{ .Title }}</a>
{{ with .Params.tags }}
<div class="tags">
{{ range . }}<a class="tag" href="/tags/{{ . | urlize }}/">{{ . }}</a>{{ end }}
</div>
{{ end }}
</div>
</li>
{{ end }}
</ul>
</section>
<section>
<div class="home-section-head">
<h2>reading</h2>
<a class="see-all" href="/reviews/">all reviews</a>
</div>
<ul class="review-list">
{{ range first 3 (where .Site.RegularPages "Section" "reviews").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>
</div>
</li>
{{ end }}
</ul>
</section>
</div>
{{ end }}