diff --git a/handlers.go b/handlers.go index e4ee40f..7fcf28e 100644 --- a/handlers.go +++ b/handlers.go @@ -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) +} diff --git a/main.go b/main.go index 2af57e6..4fe15f3 100644 --- a/main.go +++ b/main.go @@ -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 { diff --git a/templates/layout.html b/templates/layout.html index 56f62d0..16bf62d 100644 --- a/templates/layout.html +++ b/templates/layout.html @@ -477,5 +477,10 @@ document.body.addEventListener('closeModal', function() { });
+ {{end}} diff --git a/templates/privacy.html b/templates/privacy.html new file mode 100644 index 0000000..84647df --- /dev/null +++ b/templates/privacy.html @@ -0,0 +1,39 @@ +{{define "title"}}Privacy Policy โ€” bbq{{end}} +{{define "content"}} +
+

Privacy Policy

+

Last updated July 3, 2026

+ +
+

What we collect

+

When you RSVP or claim a slot at an event, we store your name and an optional note you provide. These are visible to anyone with the event link and to the event organizer.

+

If you create an event with an attendee cap, you may be asked to sign in with your email address. We store your email and a short-lived verification code to confirm it. We do not store passwords.

+

We do not collect addresses, phone numbers (unless you opt into SMS notifications on a specific event), or payment information.

+
+ +
+

How we use it

+

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.

+
+ +
+

Third parties

+

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.

+
+ +
+

Cookies & sessions

+

If you sign in, a session token is stored in a cookie to keep you logged in. No other cookies are set.

+
+ +
+

Data retention

+

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.

+
+ +
+

Contact

+

Questions or deletion requests: ryan@torrtle.co

+
+
+{{end}} diff --git a/templates/terms.html b/templates/terms.html new file mode 100644 index 0000000..1300b5d --- /dev/null +++ b/templates/terms.html @@ -0,0 +1,33 @@ +{{define "title"}}Terms of Service โ€” bbq{{end}} +{{define "content"}} +
+

Terms of Service

+

Last updated July 3, 2026

+ +
+

What this is

+

bbq is a simple potluck signup tool. You can create an event, share a link, and let people claim slots. That's it.

+
+ +
+

Your responsibilities

+

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.

+

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.

+
+ +
+

No warranty

+

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.

+
+ +
+

Changes

+

We may update these terms at any time. Continued use of the service after changes constitutes acceptance of the new terms.

+
+ +
+

Contact

+

ryan@torrtle.co

+
+
+{{end}}