package internal import ( "log" "github.com/labstack/echo/v4" "github.com/labstack/echo/v4/middleware" ) type Server struct { echo *echo.Echo tmpl *TemplateEngine } func NewServer() *Server { tmpl, err := NewTemplateEngine() if err != nil { log.Fatalf("Error loading templates: %v", err) } e := echo.New() e.Use(middleware.Logger()) e.Use(middleware.Recover()) e.Renderer = tmpl e.Static("/css", "css") e.Static("/js", "js") s := &Server{ echo: e, tmpl: tmpl, } s.setupRoutes() return s } func (s *Server) setupRoutes() { s.echo.GET("/", s.handleHome) s.echo.GET("/:page", s.handlePage) s.echo.GET("/:page/:section", s.handlePageSection) s.echo.GET("/api/:page", s.handleHTMXPage) s.echo.GET("/api/:page/:section", s.handleHTMXSection) } func (s *Server) Start(addr string) error { return s.echo.Start(addr) }