package templates
import "strconv"
// HomePage is the landing page: the 90-second read.
templ HomePage(v HomeView) {
@Layout(v.Layout) {
Melbourne · twenty-five years · AI · platform · edge
{ v.Positioning }
{ v.Support }
{ strconv.Itoa(v.Areas) } areas
{ strconv.Itoa(v.Pages) } pages
{ strconv.Itoa(v.Artifacts) } linked artefacts
no page needs a model to render
@SearchForm("", "hero-search")
for _, c := range v.Cards {
@PillarCard(c)
}
How to read this site
- Level 1 is one screen per area: the claim, the numbers, the way in.
- Level 2 is what is actually run, with an evidence table and the trade-offs.
- Level 3 is the artefact: code, diagram, screenshot, log.
- Every claim carries a status, and finished, running, in-progress and abandoned are all shown as they are.
- Every artefact is at most three clicks from here, and the evidence index lists all of them on one page.
}
}
// DocPage renders an L1, L2 or L3 document.
templ DocPage(v DocView) {
@Layout(v.Layout) {
{ v.AreaTitle } · { v.LevelLabel }
{ v.Doc.Title }
{ v.Doc.Claim }
{ v.Doc.Confidence }
if v.Doc.Period != "" {
{ v.Doc.Period }
}
for _, m := range v.Metrics {
{ m.Value }
{ m.Label }
}
if len(v.Tech) > 0 {
for _, t := range v.Tech {
- { t }
}
}
@v.Body
if len(v.Evidence) > 0 {
Evidence for this page
Select a row to load the artefact into the presentation panel. Each row is also a link, so this works without JavaScript.
@EvidenceTable(evidenceRows(v.Evidence))
}
if len(v.Timeline) > 0 {
In time order
@Timeline(v.Timeline)
}
if len(v.SubPages) > 0 {
{ subHeading(v.Doc.Level) }
for _, s := range v.SubPages {
-
{ s.Label }
{ s.Kind }
}
}
if len(v.Backlinks) > 0 {
}
}
}
// EvidencePage is one page listing every artefact, grouped by area. It is the
// shortest path from the landing page to any proof.
templ EvidencePage(v EvidenceView) {
@Layout(v.Layout) {
Index
Evidence index
Every artefact this site claims, on one page. { strconv.Itoa(v.Total) } links, each one a file in the repository.
for _, g := range v.Groups {
}
}
}
// SearchPage is the keyword search. The results block is swapped by HTMX on the
// same page; with JavaScript off the form simply reloads the page.
templ SearchPage(v SearchView) {
@Layout(v.Layout) {
@SearchForm(v.Query, "page-search")
@SearchResults(v)
}
}
// SearchResults is swapped into #search-results by HTMX.
templ SearchResults(v SearchView) {
if v.Query == "" {
Try “zigbee”, “signage”, “routing”, “backups” or “guardrails”.
} else if v.Failed {
That query could not be run. Try fewer or simpler words.
} else if len(v.Results) == 0 {
No page matches { v.Query }
. The evidence index lists everything by area.
} else {
{ strconv.Itoa(len(v.Results)) } results for { v.Query }
for _, r := range v.Results {
-
{ r.Area }
L{ strconv.Itoa(r.Level) }
{ r.Confidence }
@SafeSnippet(r.Snippet)
}
}
}
// StreamPage proves the panel can be re-pointed at a stream. The layout and the
// panel markup are the ones every other page uses; only the binding differs.
templ StreamPage(v StreamView) {
@Layout(v.Layout) {
Design note · not a product feature
The panel takes content from a driver
This page renders the same layout and the same panel as every other page. Its panel is bound to an event stream instead of pre-rendered files, and no layout code changed.
The presentation panel is a content sink. In Mode A it takes pre-rendered fragments over
HTMX: you click a row in an evidence table and one file is swapped in. On this page the same
panel is bound to /api/stage/stream and receives { strconv.Itoa(v.Frames) } fragments
over server-sent events, one after another.
Fragments are pushed, not requested. Nothing about the panel — its markup, its fragment
view, its empty state — knows the difference. That is the point: the Phase 5 console
re-points this panel at retrieval output and the layout does not change.
This demonstration streams the artefacts already built for the site, with
no model in the loop. It exists to prove the transport, not to pretend an AI is answering.
if len(v.Fragment) > 0 {
Fragments in this stream
for _, f := range v.Fragment {
-
{ f.Label }
{ f.Kind }
}
}
}
}
// NotFoundPage is the 404.
templ NotFoundPage(v NotFoundView) {
@Layout(v.Layout) {
}
}
func evidenceRows(links []LinkView) []EvidenceRow {
rows := make([]EvidenceRow, 0, len(links))
for _, l := range links {
rows = append(rows, EvidenceRow{Label: l.Label, Href: l.Href, HXGet: l.HXGet, Kind: l.Kind, Confidence: l.Confidence})
}
return rows
}
func subHeading(level int) string {
if level == 1 {
return "Drill-downs in this area"
}
return "Artefacts behind this page"
}