import HTML import Saga func renderPage(context: ItemRenderingContext) -> Node { let section = Section(rawValue: context.item.metadata.section ?? "") assert(section != nil) return baseLayout( canocicalURL: context.item.url, section: section!, title: context.item.title, extraHeader: section == .home ? generateHeader(.home) : Node.fragment([]) ) { switch section { case .home: renderHome(body: context.item.body) case .notFound: let articles = context.allItems .compactMap { $0 as? Item } .prefix(10) render404(body: context.item.body, articles: Array(articles)) default: renderNonHome(body: context.item.body) } } } func renderHome(body: String) -> Node { div { div(class: "my-24 font-avenir leading-[1.25] font-thin text-center [&>h1>strong]:font-bold") { Node.raw(body) } div { h2 { "Quick Links" } div(class: "grid lg:grid-cols-2 gap-6") { HomeLink.internal( "Articles", icon: "newspaper", href: "/articles/", description: "Click here to view articles." ) HomeLink.external( "Service Monitor", icon: "heart-pulse", href: "https://uptime.housh.dev/status/housh-dev", description: "Click here to view the service status." ) HomeLink.external( "Purchase Orders", icon: "calculator", href: "https://po.housh.dev", description: "Purchase orders application." ) HomeLink.external( "Excalidraw", icon: "pen-tool", href: "https://draw.housh.dev", description: "A drawing utility." ) HomeLink.external( "Gitea", icon: "git-branch", href: "https://git.housh.dev/explore/repos", description: "Explore source code." ) HomeLink.external( "Unifi Console", icon: "earth", href: "https://unifi.ui.com", description: "Network management." ) HomeLink.external( "Legacy Purchase Orders", icon: "file-archive", href: "https://legach-po.housh.dev", description: "Legacy purchase order application (pre-2025)." ) } } script(src: "https://unpkg.com/lucide@latest") Node.raw(""" """) } } func renderNonHome(body: String) -> Node { article { div(class: "font-avenir") { Node.raw(body) } } } func render404(body: String, articles: [Item]) -> Node { article(class: "prose") { Node.raw(body) ul { articles.map { article in li { a(href: article.url) { article.title } } } } div { a(href: "/articles/") { "› See all articles" } } } }