Add privacy policy and terms of service pages

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-03 15:17:16 -04:00
parent d005080aca
commit 1f0effb902
5 changed files with 90 additions and 1 deletions
+8
View File
@@ -776,3 +776,11 @@ func (s *Server) handleDeleteSlot(w http.ResponseWriter, r *http.Request) {
}
pageTmpl["slots"].ExecuteTemplate(w, "slots-inner", data)
}
func (s *Server) handlePrivacy(w http.ResponseWriter, r *http.Request) {
pageTmpl["privacy"].ExecuteTemplate(w, "layout", nil)
}
func (s *Server) handleTerms(w http.ResponseWriter, r *http.Request) {
pageTmpl["terms"].ExecuteTemplate(w, "layout", nil)
}
+5 -1
View File
@@ -124,7 +124,7 @@ func main() {
// Parse each page with layout + shared partials
pageTmpl = make(map[string]*template.Template)
shared := []string{"templates/layout.html", "templates/slots.html"}
for _, page := range []string{"home", "event", "login", "dashboard", "name"} {
for _, page := range []string{"home", "event", "login", "dashboard", "name", "privacy", "terms"} {
files := append([]string{"templates/" + page + ".html"}, shared...)
pageTmpl[page] = template.Must(
template.New("").Funcs(funcMap).ParseFS(templateFS, files...),
@@ -172,6 +172,10 @@ func main() {
})
}
// Legal
r.Get("/privacy", srv.handlePrivacy)
r.Get("/terms", srv.handleTerms)
// Home / create event
r.Get("/", srv.handleHome)
if features.Auth {
+5
View File
@@ -477,5 +477,10 @@ document.body.addEventListener('closeModal', function() {
});
</script>
<div id="edit-modal"></div>
<footer style="border-top:2.5px solid var(--border);padding:16px 24px;text-align:center;font-size:0.8rem;color:#777;margin-top:auto;">
<a href="/privacy" style="color:#777;text-decoration:none;margin:0 8px;">Privacy</a>
<span style="color:#bbb;">·</span>
<a href="/terms" style="color:#777;text-decoration:none;margin:0 8px;">Terms</a>
</footer>
</body>
</html>{{end}}
+39
View File
@@ -0,0 +1,39 @@
{{define "title"}}Privacy Policy — bbq{{end}}
{{define "content"}}
<div class="page-wrap" style="max-width:680px;margin:48px auto;padding:0 24px 64px;">
<h1 style="font-size:2rem;font-weight:800;letter-spacing:-0.03em;margin-bottom:8px;">Privacy Policy</h1>
<p style="color:#555;font-size:0.9rem;margin-bottom:40px;">Last updated July 3, 2026</p>
<section style="margin-bottom:32px;">
<h2 style="font-size:1.1rem;font-weight:700;margin-bottom:12px;">What we collect</h2>
<p style="line-height:1.7;margin-bottom:12px;">When you RSVP or claim a slot at an event, we store your <strong>name</strong> and an optional <strong>note</strong> you provide. These are visible to anyone with the event link and to the event organizer.</p>
<p style="line-height:1.7;margin-bottom:12px;">If you create an event with an attendee cap, you may be asked to sign in with your <strong>email address</strong>. We store your email and a short-lived verification code to confirm it. We do not store passwords.</p>
<p style="line-height:1.7;">We do not collect addresses, phone numbers (unless you opt into SMS notifications on a specific event), or payment information.</p>
</section>
<section style="margin-bottom:32px;">
<h2 style="font-size:1.1rem;font-weight:700;margin-bottom:12px;">How we use it</h2>
<p style="line-height:1.7;">Your data is used only to run the event signup — showing who has claimed what, letting you manage your own RSVP, and letting the organizer see their guest list. We do not sell, share, or use your data for advertising.</p>
</section>
<section style="margin-bottom:32px;">
<h2 style="font-size:1.1rem;font-weight:700;margin-bottom:12px;">Third parties</h2>
<p style="line-height:1.7;">We load fonts from Google Fonts and the HTMX library from unpkg. These requests go to their servers and are subject to their privacy policies. We have no other third-party integrations and use no analytics or tracking tools.</p>
</section>
<section style="margin-bottom:32px;">
<h2 style="font-size:1.1rem;font-weight:700;margin-bottom:12px;">Cookies &amp; sessions</h2>
<p style="line-height:1.7;">If you sign in, a session token is stored in a cookie to keep you logged in. No other cookies are set.</p>
</section>
<section style="margin-bottom:32px;">
<h2 style="font-size:1.1rem;font-weight:700;margin-bottom:12px;">Data retention</h2>
<p style="line-height:1.7;">Event and RSVP data persists indefinitely unless an organizer deletes slots or the event is removed. There is no automated purge schedule. If you want your data removed, contact us.</p>
</section>
<section>
<h2 style="font-size:1.1rem;font-weight:700;margin-bottom:12px;">Contact</h2>
<p style="line-height:1.7;">Questions or deletion requests: <a href="mailto:ryan@torrtle.co" style="color:var(--ink);">ryan@torrtle.co</a></p>
</section>
</div>
{{end}}
+33
View File
@@ -0,0 +1,33 @@
{{define "title"}}Terms of Service — bbq{{end}}
{{define "content"}}
<div class="page-wrap" style="max-width:680px;margin:48px auto;padding:0 24px 64px;">
<h1 style="font-size:2rem;font-weight:800;letter-spacing:-0.03em;margin-bottom:8px;">Terms of Service</h1>
<p style="color:#555;font-size:0.9rem;margin-bottom:40px;">Last updated July 3, 2026</p>
<section style="margin-bottom:32px;">
<h2 style="font-size:1.1rem;font-weight:700;margin-bottom:12px;">What this is</h2>
<p style="line-height:1.7;">bbq is a simple potluck signup tool. You can create an event, share a link, and let people claim slots. That's it.</p>
</section>
<section style="margin-bottom:32px;">
<h2 style="font-size:1.1rem;font-weight:700;margin-bottom:12px;">Your responsibilities</h2>
<p style="line-height:1.7;margin-bottom:12px;">By using this service you agree not to use it for spam, harassment, illegal activity, or anything that would embarrass a reasonable person at a potluck.</p>
<p style="line-height:1.7;">Event organizers are responsible for the events they create and the information they share with guests. Guests are responsible for the names and notes they submit.</p>
</section>
<section style="margin-bottom:32px;">
<h2 style="font-size:1.1rem;font-weight:700;margin-bottom:12px;">No warranty</h2>
<p style="line-height:1.7;">This service is provided as-is, without any warranty. We make no guarantees about uptime, data durability, or fitness for any particular purpose. Use it at your own risk.</p>
</section>
<section style="margin-bottom:32px;">
<h2 style="font-size:1.1rem;font-weight:700;margin-bottom:12px;">Changes</h2>
<p style="line-height:1.7;">We may update these terms at any time. Continued use of the service after changes constitutes acceptance of the new terms.</p>
</section>
<section>
<h2 style="font-size:1.1rem;font-weight:700;margin-bottom:12px;">Contact</h2>
<p style="line-height:1.7;"><a href="mailto:ryan@torrtle.co" style="color:var(--ink);">ryan@torrtle.co</a></p>
</section>
</div>
{{end}}