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# {{ $.Property.Name }}
2
3**Property ID:** `{{ $.Property.ID }}`
4**Operator:** operator
5**Date range:** {{ $.Dash.DateStart }} → {{ $.Dash.DateEnd }} ({{ $.Dash.DateRange }} days){{ if $.Dash.FilterURL }}
6**Filter · url:** `{{ $.Dash.FilterURL }}`{{ end }}
7**Generated:** {{ $.ReportedAt }}
8**Live users (last 30m):** {{ $.Dash.LiveUsers }}
9
10---
11
12## Metrics · period vs previous
13
14| Metric | Value | Change |
15|---|---|---|
16{{ range $.Dash.EventCards }}| {{ .Name }} | `{{ .Value }}` | {{ if gt .PercentChange 0 }}+{{ end }}{{ .PercentChange }}% |
17{{ end }}
18
19## Events over time
20
21| Date | Count |
22|---|---|
23{{ range $.Dash.Graph }}| {{ .Label }} | {{ .Count }} |
24{{ end }}
25
26{{ if $.Dash.PageViewsByPageURL }}## Top pages · page views
27
28| URL | Views |
29|---|---|
30{{ range $.Dash.PageViewsByPageURL }}| `{{ .Label }}` | {{ .Count }} |
31{{ end }}
32{{ end }}
33{{ if $.Dash.ByPageURL }}## Top pages · all events
34
35| URL | Events |
36|---|---|
37{{ range $.Dash.ByPageURL }}| `{{ .Label }}` | {{ .Count }} |
38{{ end }}
39{{ end }}
40{{ if $.Dash.SessionsByReferrer }}## Top referrers
41
42| Referrer | Sessions |
43|---|---|
44{{ range $.Dash.SessionsByReferrer }}| `{{ .Label }}` | {{ .Count }} |
45{{ end }}
46{{ end }}
47{{ if $.Dash.ByCustomEvent }}## Top custom events
48
49| Event | Count |
50|---|---|
51{{ range $.Dash.ByCustomEvent }}| `{{ .Label }}` | {{ .Count }} |
52{{ end }}
53{{ end }}
54{{ if $.Dash.ByDevice }}## Device
55
56| Device | Events |
57|---|---|
58{{ range $.Dash.ByDevice }}| {{ .Label }} | {{ .Count }} |
59{{ end }}
60{{ end }}
61{{ if $.Dash.ByBrowser }}## Browser
62
63| Browser | Events |
64|---|---|
65{{ range $.Dash.ByBrowser }}| {{ .Label }} | {{ .Count }} |
66{{ end }}
67{{ end }}
68{{ if $.Dash.ByPlatform }}## Platform
69
70| Platform | Events |
71|---|---|
72{{ range $.Dash.ByPlatform }}| {{ .Label }} | {{ .Count }} |
73{{ end }}
74{{ end }}
75{{ if $.Dash.ByScreenSize }}## Screen size
76
77| Size | Events |
78|---|---|
79{{ range $.Dash.ByScreenSize }}| {{ .Label }} | {{ .Count }} |
80{{ end }}
81{{ end }}
82{{ if $.Dash.PageViewsByUTMSource }}## UTM source
83
84| Source | Views |
85|---|---|
86{{ range $.Dash.PageViewsByUTMSource }}| `{{ .Label }}` | {{ .Count }} |
87{{ end }}
88{{ end }}
89{{ if $.Dash.PageViewsByUTMMedium }}## UTM medium
90
91| Medium | Views |
92|---|---|
93{{ range $.Dash.PageViewsByUTMMedium }}| `{{ .Label }}` | {{ .Count }} |
94{{ end }}
95{{ end }}
96{{ if $.Dash.PageViewsByUTMCampaig }}## UTM campaign
97
98| Campaign | Views |
99|---|---|
100{{ range $.Dash.PageViewsByUTMCampaig }}| `{{ .Label }}` | {{ .Count }} |
101{{ end }}
102{{ end }}
103{{ if $.Dash.Bots.Total }}## Bot traffic (excluded from metrics above)
104
105**Total bot events:** {{ $.Dash.Bots.Total }}
106{{ if $.Dash.Bots.TopBots }}
107| Bot | Events |
108|---|---|
109{{ range $.Dash.Bots.TopBots }}| {{ .Label }} | {{ .Count }} |
110{{ end }}
111{{ end }}
112{{ if $.Dash.Bots.TopPages }}
113### Top pages hit by bots
114
115| URL | Events |
116|---|---|
117{{ range $.Dash.Bots.TopPages }}| `{{ .Label }}` | {{ .Count }} |
118{{ end }}
119{{ end }}
120{{ end }}
121---
122
123_Report generated by Analytics, self-hosted website analytics._