원클릭으로
umb-navigation
Implement shared site navigation and validate rendering with Playwright. Use when asked to add or improve navigation.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Implement shared site navigation and validate rendering with Playwright. Use when asked to add or improve navigation.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Add hero images to blog posts and render image previews on list and detail pages. Use when asked to add blog media.
Ensure sufficient authored blog entries for the demo. Use when asked to generate or expand blog content.
Run the end-to-end Umbraco blogging-site demo as a Conductor multi-agent workflow. Use when asked to build the full demo site via Conductor (the orchestrated, workflow-driven variant of the umbraco-demo agent).
Create Blog List and Blog page document types and templates, plus exactly one starter blog post. Use when asked to set up blog pages in Umbraco.
Create the Umbraco home page structure, template, styling, and published root content. Use when asked to scaffold or build the home page.
Run accessibility checks and fix issues until passing. Use when asked to test or improve website accessibility.
| name | umb-navigation |
| description | Implement shared site navigation and validate rendering with Playwright. Use when asked to add or improve navigation. |
Git: Before making changes, verify you are on a
develop/*branch (seegit.instructions.md).
src/MyProject/Views/Partials._Layout.cshtml (created in the home-page step), not separately inside each page template. Because every page already inherits _Layout.cshtml, adding the nav to the layout makes it appear on all pages automatically — do not paste the nav markup or Html.PartialAsync("Navigation") call into individual templates.Use this exact shape for src/MyProject/Views/Partials/Navigation.cshtml. It compiles first time. Re-style the markup/classes/labels to match your theme, but keep the data-access pattern identical. Do NOT replace it with your own "more dynamic" navigation — past runs that rewrote the data-access logic from scratch threw a Razor compilation exception (HTTP 500) and burned several minutes recovering. Start from this partial and change only the presentation:
@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage
@{
var home = Model.Root();
var blogList = home.Children().FirstOrDefault(x => x.ContentType.Alias == "blogList");
}
<nav>
<a href="@home.Url()" class="@(Model.Id == home.Id ? "active" : "")">Home</a>
@if (blogList != null)
{
<a href="@blogList.Url()" class="@(Model.Id == blogList.Id || Model.Parent?.Id == blogList.Id ? "active" : "")">Blog</a>
}
</nav>
Avoid these compile traps that have cost ~5 minutes of failed iteration on past runs (they throw a Razor compilation exception → site returns HTTP 500 / shows div#stackpage):
@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage. Without it Model.Root()/Model.Id won't resolve.home.Children() (the method, an Umbraco.Extensions extension) — NOT home.Children as a property.System.Linq (FirstOrDefault, Where) and Umbraco.Extensions are already globally available via _ViewImports.cshtml + implicit usings — do NOT add extra @using directives hunting for them; that is not the cause of compile errors.Model.Root() can be null very early; blogList may not exist yet) with ?. and an @if as shown — unguarded access is the usual real cause of the 500.Model.Id/Model.Parent?.Id to the nav node id (URL/string parsing is unnecessary and fragile)..cshtml — Razor views compile at runtime, so a save + browser refresh is enough. A 500 / div#stackpage immediately after a .cshtml edit is a Razor compilation error in the view you just changed, NOT a stale-process problem — restarting will NOT fix it and just wastes minutes. Never Stop-Process the dotnet site or run dotnet run to recover from a 500 here.src/MyProject/umbraco/Logs/UmbracoTraceLog.*.json and find the compilation error line + line number. Do NOT use Invoke-WebRequest/curl to probe the site or read the detached dotnet run console log — the compilation exception with its line number is in the Umbraco trace log. Fix the partial, then just refresh the browser.SITE_BASE_URL and verify:
After validation passes, commit all changes before considering this step done:
git add -A
git commit -m "Step 3: Navigation — <brief summary of what was added>"
This commit is mandatory. The step is not complete until the commit exists in the git log.