main.go
package main
import (
"embed"
"github.com/readysite/readysite/pkg/application"
"github.com/readysite/readysite/pkg/frontend"
"github.com/readysite/readysite/pkg/frontend/esbuild"
"github.com/readysite/readysite/website/controllers"
"github.com/readysite/readysite/website/internal/content"
"github.com/readysite/readysite/website/internal/content/render"
"github.com/readysite/readysite/website/internal/search"
)
//go:embed views
var views embed.FS
func init() {
content.SeedAll()
search.Init()
go search.StartSync()
// Register search function for page template rendering (avoids import cycle)
render.SearchFunc = search.SearchResults
}
func main() {
application.Serve(views,
application.WithValue("theme", "dark"),
// Frontend bundler for React components
frontend.WithBundler(&esbuild.Config{
Entry: "frontend/index.js",
Include: []string{"frontend"},
}),
// Template functions for public site rendering
application.WithFunc("documents", content.Documents),
application.WithFunc("document", content.Document),
application.WithFunc("collection", content.Collection),
application.WithFunc("page", content.Page),
application.WithFunc("pages", content.Pages),
application.WithFunc("published_pages", content.PublishedPages),
application.WithFunc("partial", content.Partial),
application.WithFunc("partials", content.Partials),
application.WithFunc("site_name", content.SiteName),
application.WithFunc("site_description", content.SiteDescription),
application.WithFunc("search", search.SearchResults),
// Controllers (Site must be LAST - catch-all route)
application.WithController(controllers.Health()),
application.WithController(controllers.Setup()),
application.WithController(controllers.Auth()),
application.WithController(controllers.Workspace()),
application.WithController(controllers.Dashboard()),
application.WithController(controllers.Pages()),
application.WithController(controllers.Collections()),
application.WithController(controllers.Partials()),
application.WithController(controllers.Chat()),
application.WithController(controllers.ACL()),
application.WithController(controllers.Files()),
application.WithController(controllers.Audit()),
application.WithController(controllers.API()),
application.WithController(controllers.AdminAPI()),
application.WithController(controllers.Admin()),
application.WithController(controllers.Site()),
)
}