<feed xmlns='http://www.w3.org/2005/Atom'>
<title>lectio.git/internal/web/templates/lookup.html, branch main</title>
<subtitle>offline Catholic daily readings and liturgical calendar in Go, with CLI, TUI and web clients</subtitle>
<id>https://git.labunix.xyz/lectio.git/atom?h=main</id>
<link rel='self' href='https://git.labunix.xyz/lectio.git/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/'/>
<updated>2026-07-23T18:46:17Z</updated>
<entry>
<title>web: theme control boxes, one default version, drop search bar; traditional drops pl + all=readings-only</title>
<updated>2026-07-23T18:46:17Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-23T18:46:17Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=0b47572bc0addc5f59ebac3e70278ea435097565'/>
<id>urn:sha1:0b47572bc0addc5f59ebac3e70278ea435097565</id>
<content type='text'>
</content>
</entry>
<entry>
<title>web: HTMX server + lectio-web binary</title>
<updated>2026-07-23T12:39:31Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-23T12:39:31Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=4de7f7dca7485c9a6c94f6f86a53d01a974fce54'/>
<id>urn:sha1:4de7f7dca7485c9a6c94f6f86a53d01a974fce54</id>
<content type='text'>
NewServer wires B1's RenderReadings/Themes/themeCSS/embedded static+
templates FS into an http.ServeMux: GET / (full page), GET /readings
(HTMX reading-pane fragment), GET /lookup (bible.Lookup passage search
fragment), GET /theme.css (theme stylesheet, falling back through
cfg.WebTheme to the built-in default on an unknown name), GET /static/.
Run listens on cfg.WebPort (0 = OS-picked free port), prints the URL,
best-effort opens a browser, then serves. cmd/lectio-web is the binary
entry point (config.Load -&gt; web.Run).

Fold-in from the B1 review: hardened themeCSS's name guard to an
explicit ^[A-Za-z0-9_-]+$ allowlist (the old filepath.Base/ContainsAny
check let ".." through), plus guard-rejection and HTML-escaping
regression tests -- B2 is what makes /theme.css?name=&lt;raw&gt; reachable
from the network, so it owns closing this out.
</content>
</entry>
</feed>
