index — crispy-website @ 22e575ea2a4a547fc756bb6ff3c1f1c15ab9c180

My personal homepage (very crispy)

gen-blogrecs: add
crispy-caesus crispy@crispy-caesus.eu
Tue, 05 May 2026 23:44:46 +0200
commit

22e575ea2a4a547fc756bb6ff3c1f1c15ab9c180

parent

05a3fb7c305928154e554342a3c6be03c8aaab59

M cmd/server/genblog.gocmd/server/genblog.go

@@ -25,8 +25,8 @@ fmt.Println("Generating blog page...")

blogDataSlice := generateBlogPage() fmt.Println("Generating blog posts...") generateBlogPosts(blogDataSlice) - fmt.Println("Generating rss...") - genRSS(blogDataSlice) + fmt.Println("Generating blog rss...") + genRSSBlog(blogDataSlice) } func genBlogDir() {
A cmd/server/genrecs.go

@@ -0,0 +1,90 @@

+package main + +import ( + "fmt" + "os" + "strings" + "text/template" +) + +type ( + blogRec struct { + URL string + Title string + Author string + } +) + +func genRecs() { + fmt.Println("Generating blog recommendations...") + recList := genBlogRecs() + fmt.Println("Generating blog recommendation RSS...") + genRSSBlogRecs(recList) +} + +func readBlogRecs() []blogRec { + // read file + content, err := os.ReadFile("templates/blogrecs.txt") + if err != nil { + fmt.Printf("ERROR reading blogrecs file: %s\n", err) + } + + state := 0 // 1 url, 2 title, 3 author + var b strings.Builder // builder for string parsing + + var recList []blogRec + + for _, char := range content { + switch state { + case 0: + recList = append(recList, blogRec{}) + state = 1 + case 1: + if char == '\n' { + recList[len(recList)-1].URL = b.String() + b.Reset() + state = 2 + } + b.WriteByte(char) + case 2: + if char == '\n' { + recList[len(recList)-1].Title = b.String() + b.Reset() + state = 3 + } + b.WriteByte(char) + case 3: + if char == '\n' { + recList[len(recList)-1].Author = b.String() + b.Reset() + state = 0 + } + b.WriteByte(char) + } + } + + return recList +} + +func genBlogRecs() []blogRec { + recList := readBlogRecs() + + // template + tpl, err := template.ParseFiles("templates/blogrecs.html.gotmpl") + if err != nil { + fmt.Printf("ERROR creating template: %s\n", err) + } + + f, err := os.Create("html/en/blogrecs.html") + if err != nil { + fmt.Printf("ERROR creating html: %s\n", err) + panic(1) + } + + err = tpl.ExecuteTemplate(f, "blogrecs.html.gotmpl", recList) + if err != nil { + fmt.Printf("ERROR executing template: %s\n", err) + } + + return recList +}
M cmd/server/genrss.gocmd/server/genrss.go

@@ -13,7 +13,7 @@ Link string

} ) -func genRSS(blogDataSlice []blogData) { +func genRSSBlog(blogDataSlice []blogData) { var rssItemSlice []rssItem for _, post := range blogDataSlice { rssItemSlice = append(rssItemSlice, rssItem{

@@ -38,3 +38,21 @@ if err != nil {

fmt.Printf("ERROR executing template: %s\n", err) } } + +func genRSSBlogRecs(recList []blogRec) { + tpl, err := template.ParseFiles("templates/blogrecs.xml.gotmpl") + if err != nil { + fmt.Printf("ERROR creating template: %s\n", err) + } + + f, err := os.Create("html/en/blogrecs.xml.html") + if err != nil { + fmt.Printf("ERROR creating xml: %s\n", err) + panic(1) + } + + err = tpl.ExecuteTemplate(f, "blogrecs.xml.gotmpl", recList) + if err != nil { + fmt.Printf("ERROR executing template: %s\n", err) + } +}
M cmd/server/main.gocmd/server/main.go

@@ -26,6 +26,9 @@ return

case "blog": generateBlog() return + case "recs": + genRecs() + return } }
M templates/blogindex.html.gotmpltemplates/blogindex.html.gotmpl

@@ -16,5 +16,7 @@ {{end}}

</div> <div> <a href="/en/blog/rss.xml">RSS</a> + <br> + <a href="/en/blogrecs">recs</a> </div> </body>
A templates/blogrecs.html.gotmpl

@@ -0,0 +1,21 @@

+<!doctype html> +<html lang="en"> + <head> + <title>crispy blog recommendations</title> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <link rel="stylesheet" href="../static/global.css" /> + <link rel="stylesheet" href="../static/center.css" /> + <link rel="icon" type="image/png" href="/static/banan_icon.png" /> +</head> +<body> + <div> + <h2>some posts I've enjoyed reading and want to share</h2> + {{range .}} + <p><a href="{{.URL}}">{{.Title}}</a> - {{.Author}}</p> + {{end}} + </div> + <div> + <a href="/en/blogrecs.xml">RSS</a> + </div> +</body> +
A templates/blogrecs.xml.gotmpl

@@ -0,0 +1,23 @@

+<?xml version="1.0" encoding="UTF-8"?> +<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> +<channel> + <title>crispy blog recommendations</title> + <link>https://crispy-caesus.eu/en/blogrecs</link> + <description> + some posts I've enjoyed reading and want to share + </description> + <language>en-us</language> + <atom:link + href="https://crispy-caesus.eu/en/blogrecs.xml" + rel="self" + type="application/rss+xml" + /> + + {{range .}}<item> + <title>{{.Title}}</title> + <link>{{.URL}}</link> + <author>{{.Author}} + </item> + {{end}} +</channel> +</rss>