readysite / website / main.go
2.4 KB
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()),
	)
}
← Back