diff --git a/appview/pages/pages.go b/appview/pages/pages.go
--- a/appview/pages/pages.go
+++ b/appview/pages/pages.go
@@ -290,6 +290,14 @@
return p.execute("legal/privacy", w, params)
}
+type BrandParams struct {
+ LoggedInUser *oauth.User
+}
+
+func (p *Pages) Brand(w io.Writer, params BrandParams) error {
+ return p.execute("brand/brand", w, params)
+}
+
type TimelineParams struct {
LoggedInUser *oauth.User
Timeline []models.TimelineEvent
diff --git a/appview/state/router.go b/appview/state/router.go
--- a/appview/state/router.go
+++ b/appview/state/router.go
@@ -166,6 +166,7 @@
r.Get("/keys/{user}", s.Keys)
r.Get("/terms", s.TermsOfService)
r.Get("/privacy", s.PrivacyPolicy)
+ r.Get("/brand", s.Brand)
r.NotFound(func(w http.ResponseWriter, r *http.Request) {
s.pages.Error404(w)
diff --git a/appview/state/state.go b/appview/state/state.go
--- a/appview/state/state.go
+++ b/appview/state/state.go
@@ -212,6 +212,13 @@
})
}
+func (s *State) Brand(w http.ResponseWriter, r *http.Request) {
+ user := s.oauth.GetUser(r)
+ s.pages.Brand(w, pages.BrandParams{
+ LoggedInUser: user,
+ })
+}
+
func (s *State) HomeOrTimeline(w http.ResponseWriter, r *http.Request) {
if s.oauth.GetUser(r) != nil {
s.Timeline(w, r)
diff --git a/appview/pages/legal/privacy.md b/appview/pages/legal/privacy.md
--- a/appview/pages/legal/privacy.md
+++ b/appview/pages/legal/privacy.md
@@ -1,5 +1,3 @@
-# Privacy Policy
-
**Last updated:** September 26, 2025
This Privacy Policy describes how Tangled ("we," "us," or "our")
diff --git a/appview/pages/legal/terms.md b/appview/pages/legal/terms.md
--- a/appview/pages/legal/terms.md
+++ b/appview/pages/legal/terms.md
@@ -1,5 +1,3 @@
-# Terms of Service
-
**Last updated:** September 26, 2025
Welcome to Tangled. These Terms of Service ("Terms") govern your access
@@ -22,14 +20,14 @@
## 3. Account Termination
> **Important Notice**
->
+>
> **We reserve the right to terminate, suspend, or restrict access to
> your account at any time, for any reason, or for no reason at all, at
> our sole discretion.** This includes, but is not limited to,
> termination for violation of these Terms, inappropriate conduct, spam,
> abuse, or any other behavior we deem harmful to the Service or other
> users.
->
+>
> Account termination may result in the loss of access to your
> repositories, data, and other content associated with your account. We
> are not obligated to provide advance notice of termination, though we
diff --git a/appview/pages/templates/brand/brand.html b/appview/pages/templates/brand/brand.html
new file mode 100644
--- /dev/null
+++ b/appview/pages/templates/brand/brand.html
@@ -0,0 +1,224 @@
+{{ define "title" }}brand{{ end }}
+
+{{ define "content" }}
+
+
+
+
+
+
+
+
+
+ Tangled's logo and mascot is Dolly, the first ever cloned mammal. Please
+ follow the below guidelines when using Dolly and the logotype.
+
+
+ All assets are served as SVGs, and can be downloaded by right-clicking and clicking "Save image as".
+
+
+
+
+
+
+
+

+
+
+
+
Black logotype
+
For use on light-colored backgrounds.
+
+ This is the preferred version of the logotype, featuring dark text and elements, ideal for light
+ backgrounds and designs.
+
+
+
+
+
+
+
+
+

+
+
+
+
White logotype
+
For use on dark-colored backgrounds.
+
+ This version features white text and elements, ideal for dark backgrounds
+ and inverted designs.
+
+
+
+
+
+
+
+
+
+
+

+
+
+
+

+
+
+
+
+
Mark only
+
+ When a smaller 1:1 logo or icon is needed, Dolly's face may be used on its own.
+
+
+ Note: for situations where the background
+ is unknown, use the black version for ideal contrast in most environments.
+
+
+
+
+
+
+
+
+
+
+

+
+
+
+

+
+
+
+

+
+
+
+

+
+
+
+
+
Colored backgrounds
+
+ White logo mark on colored backgrounds.
+
+
+ The white logo mark provides contrast on colored backgrounds.
+ Perfect for more fun design contexts.
+
+
+
+
+
+
+
+
+
+
+

+
+
+
+

+
+
+
+

+
+
+
+

+
+
+
+
+
Lighter backgrounds
+
+ Dark logo mark on lighter, pastel backgrounds.
+
+
+ The dark logo mark works beautifully on pastel backgrounds,
+ providing crisp contrast.
+
+
+
+
+
+
+
+
+

+
+
+
+
Recoloring
+
+ Custom coloring of the logotype is permitted.
+
+
+ Recoloring the logotype is allowed as long as readability is maintained.
+
+
+ Example: Gray/sand colored logotype on a light yellow/tan background.
+
+
+
+
+
+
+
+
+

+
+
+
+
Dolly silhouette
+
A minimalist version of Dolly.
+
+ The silhouette can be used where a subtle brand presence is needed,
+ or as a background element. Works on any background color with proper contrast.
+ For example, we use this as the site's favicon.
+
+
+
+
+
+
+
+{{ end }}
diff --git a/appview/pages/templates/legal/privacy.html b/appview/pages/templates/legal/privacy.html
--- a/appview/pages/templates/legal/privacy.html
+++ b/appview/pages/templates/legal/privacy.html
@@ -1,11 +1,18 @@
{{ define "title" }}privacy policy{{ end }}
{{ define "content" }}
-
-
-
- {{ .Content }}
-
+
+
+
+
+
+ {{ .Content }}
+
-{{ end }}
\ No newline at end of file
+{{ end }}
diff --git a/appview/pages/templates/legal/terms.html b/appview/pages/templates/legal/terms.html
--- a/appview/pages/templates/legal/terms.html
+++ b/appview/pages/templates/legal/terms.html
@@ -1,11 +1,18 @@
{{ define "title" }}terms of service{{ end }}
{{ define "content" }}
-