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{{ define "content" }}
2<div class="contact-background"></div>
3<div class="contact-grid">
4 <div class="contact-gridLeft">
5 <div class="contact-contactWrapper">
6 <h1 class="contact-heading">Contact Me</h1>
7 <h2 class="contact-shoutOut">Shoot me a message.</h2>
8 <h2 class="contact-shoutOut">If it's interesting, I'll respond.</h2>
9 <dl class="contact-contactList">
10 {{- range .Methods }}
11 <dt class="contact-contactKey">{{ .Key }}</dt>
12 <dd class="contact-contactValue">
13 <a
14 class="contact-contactLink"
15 href="{{ .Href }}"
16 {{- if .External }} rel="noopener noreferrer" target="_blank"{{ end }}
17 >{{ .Value }}</a>
18 </dd>
19 {{- end }}
20 </dl>
21 </div>
22 </div>
23 <!-- The chat is client-side and starts empty. It only repeats the contact
24 details on the left, so nothing is lost with JS off. -->
25 <div class="contact-gridRight">
26 <!-- The avatar path comes from the server, so images.json is the only
27 place the image format is decided. -->
28 <div class="contact-chat" data-avatar="{{ .AvatarSrc }}"></div>
29 </div>
30</div>
31{{ end }}