diff --git a/.github/instructions/lowcode-reference.instructions.md b/.github/instructions/lowcode-reference.instructions.md
index 77be9968..308ca4c7 100644
--- a/.github/instructions/lowcode-reference.instructions.md
+++ b/.github/instructions/lowcode-reference.instructions.md
@@ -1250,7 +1250,7 @@ ekranın kendi yetki hatasını gösterir; ayrıca gizlemek istiyorsan `designer
Gömülen görünüm, hedef ekranın `LayoutJson`'ında açık olmalıdır.
**Public site düğümleri** yalnızca public bileşenlerde (`PublicHeader`, `PublicFooter`, public
-sayfalar) anlamlıdır; veriyi uygulama konfigürasyonundan (`publicMenus`, tema, dil) okur:
+sayfalar) anlamlıdır; veriyi uygulama konfigürasyonundan (`menus.public`, tema, dil) okur:
| Düğüm | Prop'lar (varsayılan) |
| --- | --- |
@@ -1582,7 +1582,7 @@ Intranet de bu moduldedir: menü `Hr.Intranet`, ekran/yetki kodları `Hr.Intrane
(Developer Kit › Intranet Widgets) Saas'ta kalır; kayıtlarının `PermissionName` değerleri `Hr.Intranet.*.Widget`'tır.
İK yetkilerinin `Modules` değeri `Sas|Hr`'dir: host (`Sas`) her zaman görür, kiracı yalnızca modül
-listesinde `Hr` varsa görür (modül listesi boş kiracıda süzme yoktur — `MenuAppService`,
+listesinde `Hr` varsa görür (modül listesi boş kiracıda süzme yoktur — `MenuNavigationProvider`,
`RolesPermission.tsx`). Yetki ağacı: `Hr.Definitions` → `Hr.SkillType` (1),
`Hr.SkillLevel` (2), `Hr.Skill` (3), `Hr.Department` (4), `Hr.JobPosition` (5);
`Hr.OrgChart` grubun kökünde (2). ListForm ekranlarının alt yetkileri `.Create`, `.Update`,
@@ -1685,7 +1685,7 @@ yazma; tasarımcıda yeni bir Custom Component + `Pub` menü kaydı (`Pub.Header
| Route | Bileşen | Veri |
| --- | --- | --- |
| `/home` · `/about` · `/contact` | Custom Component (`PublicHomePage` · `PublicAboutPage` · `PublicContactPage`) | `data/Sas.DeveloperKit.CustomComponents/{Id}.json` · SEO bileşen kaydında |
-| (rotasız) | Custom Component (`PublicHeader` · `PublicFooter`) | Üst menü + alt bilgi hızlı bağlantıları: `Pub` menüsü `Pub.Header` (uygulama konfigürasyonunun `publicMenus` alanı) |
+| (rotasız) | Custom Component (`PublicHeader` · `PublicFooter`) | Üst menü + alt bilgi hızlı bağlantıları: `Pub` menüsü `Pub.Header` (uygulama konfigürasyonunun `menus.public` alanı) |
| `/products` · `/checkout` · `/payment` · `/success` | `views/public/{Products,Checkout,Payment,Success}` | `Sas_H_Product` · `Sas_H_PaymentMethod` · `Sas_H_InstallmentOption` · `Sas_H_Order` |
| `/blog` · `/blog/:id` | `views/public/{Blog,BlogDetail}` | `Sas_H_BlogPost` · `Sas_H_BlogCategory` |
| `/demo` | `views/public/Demo` | `Sas_H_Demo` |
diff --git a/CLAUDE.md b/CLAUDE.md
index 4d5b55bb..e52d0525 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -666,7 +666,7 @@ Bir çelişki varsa sıra: `ai.instructions.md` → `dotnet.instructions.md` →
silmek ya da yolunu değiştirmek çerçeve dışıdır.
- **Public site** → menü `Menu` tablosunda `ModuleId = "Pub"` altında (`PlatformConsts.PublicSite`);
`Pub.Header` hem üst menüyü hem alt bilgideki hızlı bağlantıları besler (ikisi de
- `PublicNav` düğümü) ve ziyaretçiye uygulama konfigürasyonunun `publicMenus` alanıyla taşınır
+ `PublicNav` düğümü) ve ziyaretçiye uygulama konfigürasyonunun `menus.public` alanıyla taşınır
(menü ucu `[Authorize]`). Sayfa ise Custom Component'tir: `/admin/` ile
başlamayan `RoutePath` otomatik public route olur ve aynı yolu paylaşan fiziksel route'u gölgeler;
`RoutePath` boş bırakılabilir (rotasız bileşen). Yeni public sayfa =
diff --git a/README.md b/README.md
index cf105ee2..afd9de69 100644
--- a/README.md
+++ b/README.md
@@ -98,7 +98,9 @@ React/C# kodu yazmadan, yalnızca konfigürasyon ile mümkündür.
```
**Akışın özeti:** Kullanıcı giriş yapar → ABP `application-configuration` yanıtına
-`PlatformApplicationConfigurationContributor` menü, route ve yetkileri ekler → `DynamicRouter`
+`PlatformApplicationConfigurationContributor` menüleri (`extraProperties.menus`: `public` ziyaretçi
+menüsü, `protected` kullanıcının yetkili yönetim navigasyonu — ayrı bir `/api/app/menu` isteği yoktur,
+süzgeç `MenuNavigationProvider`), route ve yetkileri ekler → `DynamicRouter`
route kayıtlarını React bileşenlerine bağlar → `/admin/list/{ListFormCode}` gibi bir ekran
açıldığında `ListFormsAppService` metadata'yı, `ListFormDataAppService` ise veriyi döner →
DevExtreme bileşenleri bu metadata'ya göre kendini kurar.
@@ -988,7 +990,8 @@ Route.Authority ──┘ └► Permission
`data/Sas.Menus.Module.json`): `Sas` → `Sas` (Saas), `Adm` → `Adm`,
`Hr` → `Hr` (İK), `Pub` → `Pub.Header` (public site). Tablo ön eki aynı modülden gelir
(`MenuPrefix`: `Sas_`, `Adm_`, `Hr_`; `TableNameResolver`). Her yetki satırı `Modules`
-(pipe ile ayrılmış) değeri taşır; kiracının modül listesi doluysa menü (`MenuAppService`) ve rol
+(pipe ile ayrılmış) değeri taşır; kiracının modül listesi doluysa menü (`MenuNavigationProvider`;
+hem `menus.protected` hem Menü Yönetimi listesi bu süzgeçten geçer) ve rol
yetki ekranı (`RolesPermission.tsx`) yalnızca kesişen modüllerin yetkilerini gösterir. Sözleşme:
`Sas` host'ta görünürlüğü, `Adm` ve `Hr` kiracıdaki görünürlüğü belirler — Saas/Administration
yetkileri `Sas|Adm`, İK yetkileri `Sas|Hr` taşır.
@@ -1133,9 +1136,9 @@ menü bir kez eklenir iki yerde birden görünür; alt kaydı olan bir menü üs
Alt bilgide `cta` kayıtları (Giriş) yer almaz: oradaki düğüm `source="navigation"` ile çizilir. `Url` sayfa yolu, `Icon`
react-icons adı, `Order` sıra, `IsDisabled` yayın anahtarı, `DisplayName` dil anahtarıdır;
`CssClass` içinde `cta` geçen kayıt düz bağlantı yerine vurgulu buton olarak çizilir. Menü ucu
-`[Authorize]` olduğu için menüler uygulama konfigürasyonunun `publicMenus` alanıyla taşınır
+`[Authorize]` olduğu için menüler uygulama konfigürasyonunun `menus.public` alanıyla taşınır
(`PlatformApplicationConfigurationContributor`), istemcide `usePublicMenu` okur. `Pub` modülü
-yönetim navigasyonuna girmez (`abpConfig.model.ts` menüyü kurarken bu modülü eler; Menü Yönetimi
+yönetim navigasyonuna (`menus.protected`) girmez (`MenuNavigationProvider` bu modülü eler; Menü Yönetimi
ekranı elemez, menüler oradan düzenlenir). Seed: `configs/seeds/data/Sas.Menus.Module.json` ve
`Sas.Menus.Menu.json`.
@@ -1954,6 +1957,9 @@ konfigürasyonu ile üretilir.
- **easy-peasy** global store: `auth`, `theme`, `locale`, `abpConfig`, `admin`, `client`, `base`.
Oturum ve tercih verileri `localStorage` yerine store üzerinden yönetilir (`stateSync.ts`).
+ Kenar çubuğu (`abpConfig.menu.mainMenu`) ayrı bir menü isteğiyle değil, `getConfig` içinde
+ application-configuration'ın `extraProperties.menus.protected` listesi + yüklü dil metinlerinden
+ kurulur; dil, yetki ya da menü kaydından sonra `getConfig` çağrısı menüyü de tazeler.
- **React Query**: sunucu verisi önbellekleme.
- **Context'ler**: `ComponentContext` (runtime bileşen kaydı), `DemoContext` (demo talebi diyaloğu).
diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Menus/MenuNavigationDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Menus/MenuNavigationDto.cs
new file mode 100644
index 00000000..55da28c7
--- /dev/null
+++ b/api/src/Sozsoft.Platform.Application.Contracts/Menus/MenuNavigationDto.cs
@@ -0,0 +1,17 @@
+namespace Sozsoft.Platform.Menus;
+
+///
+/// Yönetim navigasyonunun application-configuration ile taşınan menü satırı. Yalnızca
+/// istemcinin ağacı kurmak için okuduğu alanları taşır; düzenleme ekranı kullanır.
+///
+public class MenuNavigationDto
+{
+ public string Code { get; set; }
+ public string DisplayName { get; set; }
+ public int Order { get; set; }
+ public string Url { get; set; }
+ public string Icon { get; set; }
+ public string ParentCode { get; set; }
+ public string RequiredPermissionName { get; set; }
+ public string ModuleId { get; set; }
+}
diff --git a/api/src/Sozsoft.Platform.Application/Menu/MenuAppService.cs b/api/src/Sozsoft.Platform.Application/Menu/MenuAppService.cs
index d778d14f..f8887257 100644
--- a/api/src/Sozsoft.Platform.Application/Menu/MenuAppService.cs
+++ b/api/src/Sozsoft.Platform.Application/Menu/MenuAppService.cs
@@ -4,18 +4,14 @@ using System.Linq;
using System.Linq.Dynamic.Core;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
-using Microsoft.Extensions.Logging;
using Sozsoft.Languages.Caching;
using Sozsoft.Languages.Entities;
using Sozsoft.Languages.Languages;
using Sozsoft.Platform.Entities;
-using Sozsoft.Platform.Extensions;
using Sozsoft.Platform.ListForms;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Repositories;
-using Volo.Abp.PermissionManagement;
-using Volo.Abp.TenantManagement;
using static Sozsoft.Platform.Data.Seeds.SeedConsts;
using Volo.Abp;
@@ -31,8 +27,7 @@ public class MenuAppService : CrudAppService<
private readonly IRepository