feat(ui): add Learn view with concept and example documentation - #412
feat(ui): add Learn view with concept and example documentation#412JuanmaBM wants to merge 7 commits into
Conversation
Implement the Learn view spec: a global sidebar entry that renders static markdown content at build time. Includes landing page with card grids, detail pages with GFM rendering, Makefile pre-build copy step for Docker builds, and dual-path content resolution. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add user-facing concept documentation covering architecture, payloads, MCP integration, RBAC, work tracking, session sharing, multi-agent teams, and session config. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Restrict LearnCard href to /learn/ prefix to prevent stored XSS (CodeQL alert). Shorten work-tracking.md opening sentence to satisfy Vale sentence-length rule. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
| **CLI** — use `acpctl` to list tools or call them directly: | ||
|
|
||
| ```bash | ||
| acpctl mcp tools |
There was a problem hiding this comment.
Is this supposed to exist or planned?
There was a problem hiding this comment.
It's part of the repository documentation, so I guess it's correct. Right now it's not implemented, but not sure about the plans for it. Anyway, if we decide to not implemented, we'll remove it from the documentation.
Build the URL inside LearnCard using encodeURIComponent on the slug instead of accepting a raw href prop. Replace 'vTeam' references in multi-agent-teams.md to satisfy ACP.Terminology Vale rule. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add 'sandboxed' and 'Landlock' to cspell dictionary. Replace 'topbar' with 'notification' in work-tracking.md to avoid unknown word. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
.learn-content/ is gitignored and only populated by the Makefile pre-build step. Konflux builds directly from git where the directory does not exist, causing the COPY to fail. Replace with a conditional cp in a RUN step so the build succeeds with an empty /learn-content. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
jsell-rh
left a comment
There was a problem hiding this comment.
🤖 Amber Review
Clean implementation. Conventions followed throughout.
Checklist:
- ✅ Zero
anytypes in TypeScript - ✅ Shadcn components only (
Card,Button,CardHeader,CardTitle,CardDescription) - ✅
typeoverinterface(LearnItem,LearnCardProps,MarkdownRendererProps,PageProps) - ✅ Loading and empty states handled (
EmptyStatecomponent used) - ✅ Server-side filesystem reads — no
fetch()in components - ✅
encodeURIComponent(slug)on URL segments inLearnCard - ✅
getConceptBySlug/getExampleBySlugmatch against pre-enumerated slugs from disk — no path traversal risk - ✅
@tailwindcss/typography(required forproseclasses) already inpackage.json - ✅
react-markdownandremark-gfmalready inpackage.json - ✅
generateStaticParamsprovided — pages are statically generated at build time
One minor note (no action needed): getConceptBySlug(slug) calls loadConcepts() which re-reads the full directory. For a static learn section this is fine; if content ever grows large enough to matter, a module-level const concepts = loadConcepts() cache would fix it.
Makefile duplication: The mkdir/cp/rm block for .learn-content appears in both build-ambient-ui and kind-reload-ambient-ui. Extracting to a shared Make target or variable would keep it DRY, but not a blocker.
No blockers.
— Amber
Summary
docs/src/content/docs/concepts/andexamples/docs/🤖 Generated with Claude Code