diff --git a/internal/routing/routing.go b/internal/routing/routing.go
index 1780b63..c1d44e0 100644
--- a/internal/routing/routing.go
+++ b/internal/routing/routing.go
@@ -97,6 +97,10 @@ func SetupRouter(cfg Config) http.Handler {
// Static files (must come after specific routes)
fs := http.FileServer(http.Dir("static"))
mux.Handle("GET /static/", http.StripPrefix("/static/", fs))
+ // Serve favicon.ico for pdsls
+ mux.HandleFunc("GET /favicon.ico", func(w http.ResponseWriter, r *http.Request) {
+ http.ServeFile(w, r, "static/favicon.ico")
+ })
// Catch-all 404 handler - must be last, catches any unmatched routes
mux.HandleFunc("/", h.HandleNotFound)
diff --git a/internal/web/components/shared.templ b/internal/web/components/shared.templ
index 5536cc5..e1b8a0c 100644
--- a/internal/web/components/shared.templ
+++ b/internal/web/components/shared.templ
@@ -176,13 +176,15 @@ templ WelcomeUnauthenticated() {
templ AboutInfoCard() {
✨ About Arabica
-
+
- 📝Add tasting notes and ratings to each brew
- 📊Track brewing variables like temperature, time, and grind size
- 🌍Organize beans by origin and roaster
- 🚀Portable: Own your coffee brewing history
- 🔒Decentralized: Your data lives in your Personal Data Server (PDS)
+ // TODO: include a link to the about page here somewhere
+ //
}
diff --git a/internal/web/pages/about.templ b/internal/web/pages/about.templ
index 17cb297..0465f8f 100644
--- a/internal/web/pages/about.templ
+++ b/internal/web/pages/about.templ
@@ -46,10 +46,10 @@ templ AboutContent(isAuthenticated bool) {
Community Feed
Share your best brews with the community (coming soon: likes and comments!)
-
-
Export Your Data
-
Export all your brews anytime in JSON format
-
+ //
+ //
Export Your Data
+ //
todo
+ //
diff --git a/justfile b/justfile
index 8d9875e..17352aa 100644
--- a/justfile
+++ b/justfile
@@ -11,6 +11,7 @@ templ-generate:
@templ generate
test:
+ @templ generate
@go test ./... -cover -coverprofile=cover.out
style:
diff --git a/static/favicon.ico b/static/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..9b1bf02438df04163e5bf37c228fbe9c0a8dc242
GIT binary patch
literal 165662
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
Ad;kCd
literal 0
HcmV?d00001