Skip to content

Goshtoso App Shells · v0.1.6

Landing Shell

A public-site frame for product and organization landing pages with responsive brand navigation and a structured footer.

What the package owns

Shell-owned structure stays stable while the application supplies its brand, navigation, routes, and content.

Public-site frame

Brand headerLogo, tagline, links, appearance control, repository link, and optional actions.
Hero slotThe consumer supplies the message, proof, art direction, and calls to action.
FooterStructured organization metadata and links remain separate from product content.

Install and compose

Install
go get github.com/araihu/goshtoso-app-shells/[email protected]
Assets and composition
import (
    "net/http"

    "github.com/araihu/goshtoso/assets"
    "github.com/araihu/goshtoso-app-shells/landingshell"
    shellassets "github.com/araihu/goshtoso-app-shells/landingshell/assets"
)

func registerAssets(mux *http.ServeMux) {
    mux.Handle("GET /assets/", assets.Handler())
    mux.Handle("GET /landingshell/assets/", shellassets.Handler())
}

cfg := landingshell.Config{
    Brand: landingshell.Brand{
        Name: "Product",
        HomeURL: "/",
        Tagline: "server-rendered Go UI",
    },
    Navigation: []landingshell.Link{{
        Label: "Docs", Href: "/docs", Primary: true,
    }},
    Appearance: landingshell.AppearanceConfig{
        DefaultTheme: "araihu",
        InitialColorScheme: landingshell.ColorSchemeSystem,
        PersistPreferences: true,
    },
}
page := landingshell.Page{
    Title: "Home",
    Description: "Product description",
    Hero: hero(),
    Content: content(),
}
view := landingshell.Layout(cfg, page)

Full-document response

landingshell has no Fragment API in v0.1.6. Use Layout to render complete public pages; keep any HTMX fragments inside consumer-owned content.

Consumer boundary

The shell owns the surrounding frame, responsive behavior, and lifecycle hooks. The consumer owns product vocabulary, authorization, data, navigation policy, metadata, and content.