repos
/ orchard main

orchard

mirror

Every 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

2.5 KB · 71 lines Raw History
 1# Build output. Every generated asset lands under sites/<name>/build/: the Vite
 2# bundle, the blog's post PDFs and social cards, analytics' topojson.
 3#
 4# It sits inside the site rather than at the repo root because //go:embed cannot
 5# reference a path above its own package directory, and a release build embeds
 6# all of it.
 7build/
 8bin/
 9node_modules/
10# bun's local package cache. Only the two newest sites have one, because bun
11# changed its default, but it is 81MB and would have gone
12# into a public repository that already packs to about 95MB against the 100MB
13# Cloudflare refuses a push over. Committing it would have made this repo
14# unpushable through its own tunnel.
15.buncache/
16# and its scratch directory, which holds a half-written asset mid-build.
17.tmp/
18
19# Generated by `bun run images` from the committed sources in frontend/images/.
20# 22 variants that would otherwise churn the repo every time a quality setting
21# moved.
22/sites/*/frontend/public/images/
23
24# `go build .` inside a site directory writes an executable named after that
25# directory, which is how a 14MB binary once got committed. `make build` uses
26# -o bin/, but the bare command is the one people type.
27/sites/*/isaacbythewood.com
28/sites/*/*.com
29/sites/*/*.me
30!/sites/*.com/
31!/sites/*.me/
32
33# The same trap from the repo root: `go build ./sites/<name>/` writes the
34# executable into the working directory rather than next to its source, so the
35# rules above do not catch it.
36/*.com
37/*.me
38
39# Same rule for the resume: resume/content.yml and resume/resume.typ are the
40# source, this is the output.
41/sites/*/frontend/public/pdfs/
42/sites/*/frontend/public/og/
43
44# Playwright scratch
45.playwright-cli/
46
47# Tunnel credentials never touch the repo: they live in the named volume that
48# setup-tunnel.sh creates.
49credentials.json
50cert.pem
51*.pem
52.env
53# Also the temp file setup-ntfy.sh writes the token into before renaming it.
54# An interrupted run would otherwise leave a credential in the working tree of
55# a public repository with nothing stopping `git add -A`.
56.env.*
57!.env.example
58
59# Runtime state: the SQLite database, and the 131MB GeoIP mmdb the server
60# downloads on boot. In production both live in a named Docker volume.
61/sites/*/data/
62
63# Opt-in local port publishing for eyeballing a site before its DNS exists.
64# Machine-specific, never part of a deploy.
65docker-compose.local.yml
66
67# Generated by the workspace file, and only when a site's dependencies change.
68# go.work itself is committed because editors and the repo-wide make targets
69# need it; this is derived from it and is noise in a diff.
70go.work.sum