package main import ( "embed" "html/template" "net/http" "time" ) //go:embed templates/index.html var indexHTML string //go:embed templates/404.html var notFoundHTML string //go:embed headshots/* var headshots embed.FS type Color struct { // may have .rgba() and .hex() and similar Hex string // something that can encode color } type Theme struct { AccentColor Color SecondaryColor Color BackgroundColor Color // possibly more? } type Testimonial struct { Name string Position string Quote string } type Page struct { Theme Theme Occupation string Tagline string WhatWeDo string ChandlerBio string EricBio string IsaacBio string Testimonials []Testimonial CurrentYear int } func getPageDataForHost(host string) Page { return Page{ Theme: Theme{ AccentColor: Color{ Hex: "#FF5733", }, SecondaryColor: Color{ Hex: "#33C1FF", }, BackgroundColor: Color{ // Creamy off-white Hex: "#FFF8E7", }, }, Occupation: "Web Design", Tagline: "Custom websites cooked to order", WhatWeDo: "Lorem Ipsum…", ChandlerBio: "Chandler has years of experience in the [...] sector", EricBio: "Eric is a seasoned professional in [...]", IsaacBio: "Isaac specializes in [...]", Testimonials: []Testimonial{ { Name: "Barack Obama", Position: "Poolhall acquaintance", Quote: "After the fiasco of the ACA Website, I know how important it is to get a website right on the first try, and boy do these gentlemen deliver!", }, { Name: "Ada Lovelace", Position: "Pioneer of Computing", Quote: "The elegance and functionality of the websites created by SVS Web Design are truly ahead of their time.", }, { Name: "Steve Jobs", Position: "Visionary Entrepreneur", Quote: "Design is not just what it looks like and feels like. Design is how it works. SVS Web Design understands this principle deeply.", }, }, CurrentYear: time.Now().Year(), } } var tmpl = template.Must(template.New("index").Parse(indexHTML)) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { host := r.Host pageData := getPageDataForHost(host) // Render indexHTML as template tmpl.Execute(w, pageData) }) // Serve embedded headshots file http.Handle("/headshots/", http.FileServer(http.FS(headshots))) http.ListenAndServe(":8080", nil) }