orchard
mirrorEvery site I host, in one repo, along with the Cloudflare Tunnel and Caddy that front them. It's all Go, Vite, and SQLite, and it runs on a desktop at home with nothing listening on an inbound port.
blogbuncaddycloudflare-tunneldockergogolanghomelabhtml-templatemonorepoself-hostedseosqlitestatic-sitetypstuptime-monitoringviteweb-analytics
1{{template "head" .}}
2
3<h2>
4 Calls
5 {{if .Caller}}<span class="filter">from {{.Caller}} <a href="/calls">clear</a></span>{{end}}
6</h2>
7
8{{if .Calls}}
9<p class="note">Newest {{len .Calls}} of the last {{.Limit}} asked for. Every prompt and every completion is here in full.</p>
10{{range .Calls}}
11<article class="call {{if .Err}}bad{{end}}">
12 <header>
13 <span class="who">{{if .Caller}}{{.Caller}}{{else}}unknown{{end}}</span>
14 <span class="faint">{{when .At}}</span>
15 <span class="faint">{{comma .PromptTok}} in, {{comma .OutputTok}} out</span>
16 {{if .DecodeTPS}}<span class="faint">{{printf "%.1f" .DecodeTPS}} tok/s</span>{{end}}
17 <span class="faint">{{.MS}} ms</span>
18 {{if .Tools}}<span class="tag">{{.Tools}}</span>{{end}}
19 {{if .Err}}<span class="tag bad">{{.Err}}</span>{{end}}
20 </header>
21 <details>
22 <summary>Prompt</summary>
23 <pre>{{.Messages}}</pre>
24 </details>
25 <details open>
26 <summary>Completion</summary>
27 <pre>{{.Completion}}</pre>
28 </details>
29</article>
30{{end}}
31{{else}}
32<p class="empty">Nothing logged{{if .Caller}} from {{.Caller}}{{end}} yet.</p>
33{{end}}
34
35{{template "foot" .}}