<feed xmlns='http://www.w3.org/2005/Atom'>
<title>lectio.git/docs/superpowers/specs/2026-07-27-lectio-calendar-api-design.md, 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-27T19:18:47Z</updated>
<entry>
<title>docs: design spec for calendar API (JSON + iCal), security-first</title>
<updated>2026-07-27T19:18:47Z</updated>
<author>
<name>Lukasz Kasprzak</name>
<email>lukas@labunix.xyz</email>
</author>
<published>2026-07-27T19:18:47Z</published>
<link rel='alternate' type='text/html' href='https://git.labunix.xyz/lectio.git/commit/?id=512e6681418c354fea02761440e701c0f7ade693'/>
<id>urn:sha1:512e6681418c354fea02761440e701c0f7ade693</id>
<content type='text'>
Two surfaces, one engine: CLI --format json|ical (offline/pipeable) + thin
lectio-web /api/calendar.json + /calendar.ics endpoints. Pure internal/calfeed
renderer. Identity + reading citations (no full text). Security section:
range-cap DoS control (1830d web), RFC-5545 iCal injection escaping (custom
calendar names are untrusted), strict input validation, nosniff content types,
no file/layer injection over HTTP, GET-only.
</content>
</entry>
</feed>
