From b91e42d005dbeb109b2b929d811da694e1dbda81 Mon Sep 17 00:00:00 2001 From: Patrick Britton Date: Fri, 6 Feb 2026 14:40:37 -0600 Subject: [PATCH] Add coming soon landing page with waitlist signup, add waitlist API endpoint --- go-backend/cmd/api/main.go | 22 +++++++++++++ html_landing/index.html | 64 ++++++++++++++++++++++++++++---------- 2 files changed, 69 insertions(+), 17 deletions(-) diff --git a/go-backend/cmd/api/main.go b/go-backend/cmd/api/main.go index 552e4b3..3c27be4 100644 --- a/go-backend/cmd/api/main.go +++ b/go-backend/cmd/api/main.go @@ -177,6 +177,28 @@ func main() { v1 := r.Group("/api/v1") { + // Public waitlist signup (no auth required) + waitlist := v1.Group("/waitlist") + waitlist.Use(middleware.RateLimit(0.2, 3)) + { + waitlist.POST("", func(c *gin.Context) { + var req struct { + Email string `json:"email" binding:"required,email"` + } + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(400, gin.H{"error": "Valid email required"}) + return + } + _, err := dbPool.Exec(c.Request.Context(), + `INSERT INTO public.waitlist (email) VALUES ($1) ON CONFLICT (email) DO NOTHING`, req.Email) + if err != nil { + c.JSON(500, gin.H{"error": "Failed to join waitlist"}) + return + } + c.JSON(200, gin.H{"message": "You're on the list!"}) + }) + } + auth := v1.Group("/auth") auth.Use(middleware.RateLimit(0.5, 3)) { diff --git a/html_landing/index.html b/html_landing/index.html index 2b1b0ba..3aa8461 100644 --- a/html_landing/index.html +++ b/html_landing/index.html @@ -102,26 +102,56 @@ - -
-
-
- + +
+

Coming Soon

+

Be the first to know when Sojorn launches. Drop your email and we'll notify you.

+
+ + +
+
-

- Join the waitlist by emailing waitlist@sojorn.net +

+ Available soon on iOS, Android, and Web.

+ +