diff --git a/internal/api/routes/web.go b/internal/api/routes/web.go
new file mode 100644
index 0000000..f35c9d8
--- /dev/null
+++ b/internal/api/routes/web.go
@@ -0,0 +1,39 @@
+package routes
+
+import (
+ "net/http"
+
+ "github.com/go-chi/chi/v5"
+
+ "Coves/internal/atproto/oauth"
+ "Coves/internal/core/users"
+ "Coves/internal/web"
+)
+
+// RegisterWebRoutes registers all web page routes for the Coves frontend.
+// This includes the landing page, account deletion flow, and static assets.
+func RegisterWebRoutes(r chi.Router, oauthClient *oauth.OAuthClient, userService users.UserService) {
+ // Initialize templates
+ templates, err := web.NewTemplates()
+ if err != nil {
+ panic("failed to load web templates: " + err.Error())
+ }
+
+ // Create handlers
+ handlers := web.NewHandlers(templates, oauthClient, userService)
+
+ // Landing page
+ r.Get("/", handlers.LandingHandler)
+
+ // Account deletion flow
+ r.Get("/delete-account", handlers.DeleteAccountPageHandler)
+ r.Post("/delete-account", handlers.DeleteAccountSubmitHandler)
+ r.Get("/delete-account/success", handlers.DeleteAccountSuccessHandler)
+
+ // Static files (images, etc.)
+ r.Get("/static/*", func(w http.ResponseWriter, r *http.Request) {
+ // Serve from project's static directory
+ fs := http.StripPrefix("/static/", http.FileServer(http.Dir("static")))
+ fs.ServeHTTP(w, r)
+ })
+}
diff --git a/internal/web/handlers.go b/internal/web/handlers.go
new file mode 100644
index 0000000..acff087
--- /dev/null
+++ b/internal/web/handlers.go
@@ -0,0 +1,175 @@
+package web
+
+import (
+ "log"
+ "log/slog"
+ "net/http"
+
+ "Coves/internal/atproto/oauth"
+ "Coves/internal/core/users"
+)
+
+// Handlers provides HTTP handlers for the Coves web interface.
+// This includes the landing page, static files, and account management.
+type Handlers struct {
+ templates *Templates
+ oauthClient *oauth.OAuthClient
+ userService users.UserService
+}
+
+// NewHandlers creates a new Handlers instance with the provided dependencies.
+func NewHandlers(templates *Templates, oauthClient *oauth.OAuthClient, userService users.UserService) *Handlers {
+ return &Handlers{
+ templates: templates,
+ oauthClient: oauthClient,
+ userService: userService,
+ }
+}
+
+// LandingPageData holds data for the landing page template.
+type LandingPageData struct {
+ // Title is the page title
+ Title string
+ // Description is the meta description for SEO
+ Description string
+ // AppStoreURL is the URL for the iOS App Store listing
+ AppStoreURL string
+ // PlayStoreURL is the URL for the Google Play Store listing
+ PlayStoreURL string
+}
+
+// LandingHandler handles GET / requests and renders the landing page.
+func (h *Handlers) LandingHandler(w http.ResponseWriter, r *http.Request) {
+ // Only handle exact root path - let other routes handle their own paths
+ if r.URL.Path != "/" {
+ http.NotFound(w, r)
+ return
+ }
+
+ data := LandingPageData{
+ Title: "Coves - Community-Driven Forums on atProto",
+ Description: "Coves is a forum-like social app built on the AT Protocol. Join communities, share content, and own your data.",
+ // App store URLs - update these when apps are published
+ AppStoreURL: "https://apps.apple.com/app/coves",
+ PlayStoreURL: "https://play.google.com/store/apps/details?id=social.coves.app",
+ }
+
+ if err := h.templates.Render(w, "landing.html", data); err != nil {
+ log.Printf("Failed to render landing page: %v", err)
+ http.Error(w, "Internal Server Error", http.StatusInternalServerError)
+ }
+}
+
+// DeleteAccountPageData contains the data for the delete account template
+type DeleteAccountPageData struct {
+ LoggedIn bool
+ Handle string
+ DID string
+}
+
+// DeleteAccountPageHandler renders the delete account page
+// GET /delete-account
+func (h *Handlers) DeleteAccountPageHandler(w http.ResponseWriter, r *http.Request) {
+ data := DeleteAccountPageData{
+ LoggedIn: false,
+ }
+
+ // Check for session cookie
+ cookie, err := r.Cookie("coves_session")
+ if err == nil && cookie.Value != "" {
+ // Try to unseal the session
+ sealed, err := h.oauthClient.UnsealSession(cookie.Value)
+ if err == nil && sealed != nil {
+ // Session is valid, get user info
+ user, err := h.userService.GetUserByDID(r.Context(), sealed.DID)
+ if err == nil && user != nil {
+ data.LoggedIn = true
+ data.Handle = user.Handle
+ data.DID = user.DID
+ } else {
+ slog.Warn("delete account: failed to get user by DID",
+ "did", sealed.DID, "error", err)
+ }
+ } else {
+ slog.Debug("delete account: invalid or expired session", "error", err)
+ }
+ }
+
+ if err := h.templates.Render(w, "delete_account.html", data); err != nil {
+ slog.Error("failed to render delete account template", "error", err)
+ http.Error(w, "Internal server error", http.StatusInternalServerError)
+ }
+}
+
+// DeleteAccountSubmitHandler processes the account deletion request
+// POST /delete-account
+func (h *Handlers) DeleteAccountSubmitHandler(w http.ResponseWriter, r *http.Request) {
+ ctx := r.Context()
+
+ // Verify session
+ cookie, err := r.Cookie("coves_session")
+ if err != nil || cookie.Value == "" {
+ slog.Warn("delete account submit: no session cookie")
+ http.Redirect(w, r, "/delete-account", http.StatusFound)
+ return
+ }
+
+ // Unseal the session
+ sealed, err := h.oauthClient.UnsealSession(cookie.Value)
+ if err != nil || sealed == nil {
+ slog.Warn("delete account submit: invalid session", "error", err)
+ h.clearSessionCookie(w)
+ http.Redirect(w, r, "/delete-account", http.StatusFound)
+ return
+ }
+
+ // Parse form to check confirmation checkbox
+ if err := r.ParseForm(); err != nil {
+ slog.Error("delete account submit: failed to parse form", "error", err)
+ http.Error(w, "Bad request", http.StatusBadRequest)
+ return
+ }
+
+ // Verify confirmation checkbox was checked
+ if r.FormValue("confirm") != "true" {
+ slog.Warn("delete account submit: confirmation not checked", "did", sealed.DID)
+ http.Redirect(w, r, "/delete-account", http.StatusFound)
+ return
+ }
+
+ // Delete the user's account
+ err = h.userService.DeleteAccount(ctx, sealed.DID)
+ if err != nil {
+ slog.Error("delete account submit: failed to delete account",
+ "did", sealed.DID, "error", err)
+ http.Error(w, "Failed to delete account", http.StatusInternalServerError)
+ return
+ }
+
+ slog.Info("account deleted successfully via web", "did", sealed.DID)
+
+ // Clear the session cookie
+ h.clearSessionCookie(w)
+
+ // Redirect to success page
+ http.Redirect(w, r, "/delete-account/success", http.StatusFound)
+}
+
+// DeleteAccountSuccessHandler renders the deletion success page
+// GET /delete-account/success
+func (h *Handlers) DeleteAccountSuccessHandler(w http.ResponseWriter, r *http.Request) {
+ if err := h.templates.Render(w, "delete_success.html", nil); err != nil {
+ slog.Error("failed to render delete success template", "error", err)
+ http.Error(w, "Internal server error", http.StatusInternalServerError)
+ }
+}
+
+// clearSessionCookie clears the session cookie
+func (h *Handlers) clearSessionCookie(w http.ResponseWriter) {
+ http.SetCookie(w, &http.Cookie{
+ Name: "coves_session",
+ Value: "",
+ Path: "/",
+ MaxAge: -1,
+ })
+}
diff --git a/internal/web/templates.go b/internal/web/templates.go
new file mode 100644
index 0000000..f41a4b4
--- /dev/null
+++ b/internal/web/templates.go
@@ -0,0 +1,58 @@
+// Package web provides HTTP handlers and templates for the Coves web interface.
+// This includes the landing page and static file serving for the coves.social website.
+package web
+
+import (
+ "embed"
+ "fmt"
+ "html/template"
+ "net/http"
+ "path/filepath"
+)
+
+//go:embed templates/*.html
+var templatesFS embed.FS
+
+// Templates holds the parsed HTML templates for the web interface.
+type Templates struct {
+ templates *template.Template
+}
+
+// NewTemplates creates a new Templates instance by parsing all embedded templates.
+func NewTemplates() (*Templates, error) {
+ tmpl, err := template.ParseFS(templatesFS, "templates/*.html")
+ if err != nil {
+ return nil, fmt.Errorf("failed to parse templates: %w", err)
+ }
+ return &Templates{templates: tmpl}, nil
+}
+
+// Render renders a named template with the provided data to the response writer.
+// Returns an error if the template doesn't exist or rendering fails.
+func (t *Templates) Render(w http.ResponseWriter, name string, data interface{}) error {
+ // Set content type before writing
+ w.Header().Set("Content-Type", "text/html; charset=utf-8")
+
+ // Check if template exists
+ tmpl := t.templates.Lookup(name)
+ if tmpl == nil {
+ return fmt.Errorf("template %q not found", name)
+ }
+
+ // Execute template
+ if err := tmpl.Execute(w, data); err != nil {
+ return fmt.Errorf("failed to execute template %q: %w", name, err)
+ }
+
+ return nil
+}
+
+// ProjectStaticFileServer returns an http.Handler that serves static files from the project root.
+// This is used for files that live outside the web package (e.g., /static/images/).
+func ProjectStaticFileServer(staticDir string) http.Handler {
+ absPath, err := filepath.Abs(staticDir)
+ if err != nil {
+ panic(fmt.Sprintf("failed to get absolute path for static directory: %v", err))
+ }
+ return http.StripPrefix("/static/", http.FileServer(http.Dir(absPath)))
+}
diff --git a/internal/web/templates/delete_account.html b/internal/web/templates/delete_account.html
new file mode 100644
index 0000000..1e9f2dd
--- /dev/null
+++ b/internal/web/templates/delete_account.html
@@ -0,0 +1,335 @@
+
+
+
+
+
+ Delete Your Account - Coves
+
+
+
+
+
+
+
Delete Your Account
+
+ {{if .LoggedIn}}
+
+
You are signed in as:
+
@{{.Handle}}
+
+
+
This will permanently delete:
+
+ All your posts on Coves
+ All your comments
+ All your votes
+ Your community subscriptions and memberships
+ Your profile data on Coves
+
+
+
+
+
Your atProto identity (DID and handle) will be preserved. You can still use your Bluesky account and other atProto apps. Only your Coves-specific data will be removed.
+
+
+
+
+
+
+ {{else}}
+
+
To delete your Coves account, you'll need to sign in first to verify your identity.
+
+
+
When you delete your account:
+
+ All your Coves data will be permanently removed (posts, comments, votes, subscriptions)
+ Your atProto identity (DID and handle) will be preserved
+ You can still use your Bluesky account and other atProto apps
+
+
+
+
+
+
+
+
+ Sign In
+
+
+
+ You'll be redirected to your atproto provider to authorize this action.
+
+
+
+ What is a handle?
+
+
+
+
+
+
+
What is a handle?
+
+ Your handle is your unique identifier on the atproto network, like alice.bsky.social .
+
+
+ If you don't have one yet, you can create an account at bsky.app .
+
+
+ Got it
+
+
+
+
+
+ {{end}}
+
+
+
diff --git a/internal/web/templates/delete_success.html b/internal/web/templates/delete_success.html
new file mode 100644
index 0000000..9b8be6b
--- /dev/null
+++ b/internal/web/templates/delete_success.html
@@ -0,0 +1,114 @@
+
+
+
+
+
+ Account Deleted - Coves
+
+
+
+
+
+
+
+
Account Deleted
+
Your Coves account has been successfully deleted.
+
+
+
Your atProto identity has been preserved. You can continue using your Bluesky account and other atProto applications. If you ever want to return to Coves, you can create a new account using the same identity.
+
+
+
Return to Homepage
+
+
+
diff --git a/internal/web/templates/landing.html b/internal/web/templates/landing.html
new file mode 100644
index 0000000..e711e9e
--- /dev/null
+++ b/internal/web/templates/landing.html
@@ -0,0 +1,554 @@
+
+
+
+
+
+ {{.Title}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Community-Driven Forums,
+ Truly Yours
+
+
+
+ Join topic-based communities, share what you love, and own your data.
+ Built on the AT Protocol—the same foundation as Bluesky—Coves brings forums to the decentralized web.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/internal/web/templates_test.go b/internal/web/templates_test.go
new file mode 100644
index 0000000..64fc28b
--- /dev/null
+++ b/internal/web/templates_test.go
@@ -0,0 +1,134 @@
+package web
+
+import (
+ "bytes"
+ "net/http/httptest"
+ "testing"
+)
+
+func TestNewTemplates(t *testing.T) {
+ templates, err := NewTemplates()
+ if err != nil {
+ t.Fatalf("NewTemplates() error = %v", err)
+ }
+ if templates == nil {
+ t.Fatal("NewTemplates() returned nil")
+ }
+}
+
+func TestTemplatesRender_LandingPage(t *testing.T) {
+ templates, err := NewTemplates()
+ if err != nil {
+ t.Fatalf("NewTemplates() error = %v", err)
+ }
+
+ data := LandingPageData{
+ Title: "Test Title",
+ Description: "Test Description",
+ AppStoreURL: "https://example.com/appstore",
+ PlayStoreURL: "https://example.com/playstore",
+ }
+
+ w := httptest.NewRecorder()
+ err = templates.Render(w, "landing.html", data)
+ if err != nil {
+ t.Fatalf("Render() error = %v", err)
+ }
+
+ body := w.Body.String()
+
+ // Check that key elements are present
+ if !bytes.Contains([]byte(body), []byte("Test Title")) {
+ t.Error("Rendered output does not contain title")
+ }
+ if !bytes.Contains([]byte(body), []byte("Test Description")) {
+ t.Error("Rendered output does not contain description")
+ }
+ if !bytes.Contains([]byte(body), []byte("https://example.com/appstore")) {
+ t.Error("Rendered output does not contain App Store URL")
+ }
+ if !bytes.Contains([]byte(body), []byte("https://example.com/playstore")) {
+ t.Error("Rendered output does not contain Play Store URL")
+ }
+ if !bytes.Contains([]byte(body), []byte("/static/images/lil_dude.png")) {
+ t.Error("Rendered output does not contain mascot image path")
+ }
+}
+
+func TestTemplatesRender_DeleteAccount(t *testing.T) {
+ templates, err := NewTemplates()
+ if err != nil {
+ t.Fatalf("NewTemplates() error = %v", err)
+ }
+
+ // Test logged out state
+ data := DeleteAccountPageData{
+ LoggedIn: false,
+ }
+
+ w := httptest.NewRecorder()
+ err = templates.Render(w, "delete_account.html", data)
+ if err != nil {
+ t.Fatalf("Render() error = %v", err)
+ }
+
+ body := w.Body.String()
+ if !bytes.Contains([]byte(body), []byte("Sign in with Bluesky")) {
+ t.Error("Logged out state does not show sign in button")
+ }
+
+ // Test logged in state
+ dataLoggedIn := DeleteAccountPageData{
+ LoggedIn: true,
+ Handle: "testuser.bsky.social",
+ DID: "did:plc:test123",
+ }
+
+ w2 := httptest.NewRecorder()
+ err = templates.Render(w2, "delete_account.html", dataLoggedIn)
+ if err != nil {
+ t.Fatalf("Render() error = %v", err)
+ }
+
+ body2 := w2.Body.String()
+ if !bytes.Contains([]byte(body2), []byte("@testuser.bsky.social")) {
+ t.Error("Logged in state does not show user handle")
+ }
+ if !bytes.Contains([]byte(body2), []byte("Delete My Account")) {
+ t.Error("Logged in state does not show delete button")
+ }
+}
+
+func TestTemplatesRender_DeleteSuccess(t *testing.T) {
+ templates, err := NewTemplates()
+ if err != nil {
+ t.Fatalf("NewTemplates() error = %v", err)
+ }
+
+ w := httptest.NewRecorder()
+ err = templates.Render(w, "delete_success.html", nil)
+ if err != nil {
+ t.Fatalf("Render() error = %v", err)
+ }
+
+ body := w.Body.String()
+ if !bytes.Contains([]byte(body), []byte("Account Deleted")) {
+ t.Error("Success page does not contain confirmation message")
+ }
+ if !bytes.Contains([]byte(body), []byte("Return to Homepage")) {
+ t.Error("Success page does not contain return link")
+ }
+}
+
+func TestTemplatesRender_NotFound(t *testing.T) {
+ templates, err := NewTemplates()
+ if err != nil {
+ t.Fatalf("NewTemplates() error = %v", err)
+ }
+
+ w := httptest.NewRecorder()
+ err = templates.Render(w, "nonexistent.html", nil)
+ if err == nil {
+ t.Fatal("Render() should return error for nonexistent template")
+ }
+}
diff --git a/static/images/app-icon.png b/static/images/app-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..ca619e3b3762172e6c40ad5642e877f8872163d8
GIT binary patch
literal 64934
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