Skip to content

Goshtoso App Shells

Landing Shell

A landing page layout with a responsive header, theme controls, a hero section, and footer links.

Try it live

A working example with its own navigation, theme controls, and viewport.

Open full example ↗

Explore the header links, appearance controls, mobile menu, and footer.

Setup and integration

Install and use

Install
go get github.com/araihu/goshtoso-app-shells/[email protected]
Asset handlers and layout
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.9-0.20260910224508-5b2222e54637. Use Layout to render complete public pages; render any HTMX fragments within your page content.

What you provide

Configure the brand, navigation links, and page metadata, then pass in your content. Your application handles routes, permissions, and data.