1package web
 2
 3import (
 4	"html/template"
 5	"net/http"
 6
 7	"github.com/charmbracelet/log/v2"
 8	"github.com/charmbracelet/soft-serve/pkg/backend"
 9	"github.com/charmbracelet/soft-serve/pkg/config"
10	"github.com/charmbracelet/soft-serve/pkg/proto"
11)
12
13type AboutData struct {
14	BaseData
15	Repo       proto.Repository
16	ReadmeHTML template.HTML
17}
18
19func about(w http.ResponseWriter, r *http.Request) {
20	ctx := r.Context()
21	logger := log.FromContext(ctx)
22	cfg := config.FromContext(ctx)
23	be := backend.FromContext(ctx)
24
25	if be == nil {
26		logger.Debug("backend not found in context")
27		renderInternalServerError(w, r)
28		return
29	}
30
31	readmeRaw, readmeHTML, err := getServerReadme(ctx, be)
32	if err != nil {
33		logger.Debug("failed to get server README", "err", err)
34		renderInternalServerError(w, r)
35		return
36	}
37
38	// Generate description from README or fallback
39	description := extractPlainTextFromMarkdown(readmeRaw, 200)
40	if description == "" {
41		description = "About " + cfg.Name
42	}
43
44	data := AboutData{
45		BaseData: BaseData{
46			ServerName:  cfg.Name,
47			ActiveTab:   "about",
48			Title:       "About | " + cfg.Name,
49			Description: description,
50		},
51		ReadmeHTML: readmeHTML,
52	}
53
54	renderHTML(w, "about.html", data)
55}