From 9d4c12a26c47db3c3e44d23051a555ad08727fea Mon Sep 17 00:00:00 2001 From: Adnaan Badr Date: Sun, 16 Aug 2026 12:45:46 +0000 Subject: [PATCH 1/3] docs(landing): give the last section a subject MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "Everything else" over "The rest of the docs covers the ordinary screens." was a heading about the documentation, not about the software. It told a reader nothing they hadn't already assumed. The reason it couldn't say anything: the section held three different taxonomies. The eyebrow was a non-label, the heading described the docs, the lead listed app types (admin panels, CRUD, dashboards) and the eight links listed capabilities (uploads, pubsub, sessions, errors, CLI, client, observability, scaling). No heading summarises three subjects. eyebrow What the wall skipped -> More capabilities heading The rest of the docs… -> Your app has file uploads and a login. Both are here. lead three sentences, three -> Admin screens, internal tools, CRUD lists and dashboards are the point. The lead was a table of contents for a grid that sits directly below it, where every link already carries its own gloss. Three sentences, each a list, and the middle one mixed three single-word nouns with a ten-word clause. It also opened with "the wall needed neither", which was false: the wall uses sessions and the browser client, both of which are in the grid. Cut to the one thing the grid cannot say, which is who this is for. Two of the eight links contradicted the new heading. "Shared views / Subscribe & Publish" is what the Multi-user section demonstrates, and "Forms & errors" is what the Validation section demonstrates. Both references now sit inside the section that shows them off, where a reader who wants the API is already standing. Their grid slots go to two genuine gaps: auth, which the old lead named without ever linking, and navigation, which nothing on the page mentioned. One draft of the lead promised "sessions that outlive a restart". That is wrong by default: reference/session documents the SessionStore as "in-memory or Redis", and every persistence claim on that page is scoped to surviving a page refresh, not a process restart. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_0166MK1arBYbVZq6wfm8EsQZ --- content/index.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/content/index.md b/content/index.md index bfc252f..1e362ed 100644 --- a/content/index.md +++ b/content/index.md @@ -35,7 +35,7 @@ layout: landing Pending state Multi-user How it compares - Everything else + More capabilities
@@ -206,7 +206,7 @@ func main() {

The HTML rule runs again in Go.

Both halves are in the app above. The input carries required, and ctx.ValidateForm() re-runs exactly that rule on the server — a client that skipped it, scripting off or a direct POST, gets the same answer. Then strings.EqualFold(name, "admin") adds the rule HTML has no way to state.

-

The template side is the other two lines you read: {{.lvt.AriaInvalid "name"}} marks the field, {{.lvt.ErrorTag "name"}} is where the message lands. Returning an error from Greet is the whole mechanism — there's nothing to route. Scroll up and type admin, or try the smaller app here.

+

The template side is the other two lines you read: {{.lvt.AriaInvalid "name"}} marks the field, {{.lvt.ErrorTag "name"}} is where the message lands. Returning an error from Greet is the whole mechanism — there's nothing to route, and the error handling reference has the rest. Scroll up and type admin, or try the smaller app here.

greet-validate · the same pair, on its own
@@ -310,7 +310,7 @@ func main() {
app.go · the server can start the same cycle
sess.TriggerAction("ServerRefresh", nil)
-

You already read the WithTopicACL in main that admits "wall" — developer topics are deny-all until you name one. This is the same publish path with no user action behind it: the "the server said hi at …" line in the cards above, pushed on a timer.

+

You already read the WithTopicACL in main that admits "wall" — developer topics are deny-all until you name one. This is the same publish path with no user action behind it: the "the server said hi at …" line in the cards above, pushed on a timer. The pubsub reference has the topic rules and the ACL in full.

@@ -334,14 +334,14 @@ func main() {
-
Everything else
-

The rest of the docs covers the ordinary screens.

-

Admin panels, internal tools, CRUD, dashboards, approvals, uploads, auth, and the occasional shared view. That is what this is for.

+
More capabilities
+

Your app has file uploads and a login. Both are here.

+

Admin screens, internal tools, CRUD and dashboards are the point.