package main import ( "io/fs" "path/filepath" "strings" "github.com/gofiber/fiber/v2" "github.com/gofiber/template/html/v2" ) func main() { app := fiber.New(fiber.Config{ Views: setupTemplates(), }) app.Static("/public", "./public") app.Get("/", func(ctx *fiber.Ctx) error { return ctx.Render("index", fiber.Map{}) }) app.Listen("localhost:4200") } func setupTemplates() *html.Engine { engine := html.New("./views", ".html") // TODO: enable only on DEV=true in env vars engine.Reload(true) assets := make(map[string]string) filepath.WalkDir("./public/assets", func(path string, d fs.DirEntry, err error) error { if !d.IsDir() { name := d.Name() parts := strings.Split(name, ".") var key string if len(parts) < 2 { key = name } else { key = parts[0] + "." + parts[len(parts)-1] } assets[key] = path } return nil }) engine.AddFunc("GetAsset", func(key string) string { return assets[key] }) // TODO: i18n return engine }