feat(seo): tenant-driven meta tags, sitemap/robots, reduced-motion, docs
Some checks failed
Architecture Governance / architecture (push) Has been cancelled
Some checks failed
Architecture Governance / architecture (push) Has been cancelled
Completes the rest of Sprint 28 on top of the earlier admin-scoped
a11y/skeleton pass (576f260):
- SeoService.resetToDefaults() now reads real bootstrap.seo.default /
branding instead of hardcoded placeholder text + a broken
/og-image.jpg reference; auto-reapplies via an effect() whenever
bootstrap (re)loads, same pattern as UiRuntimeFacade.
- New public/sitemap.xml (static baseline, documented per-tenant-dynamic
limitation) + public/robots.txt Sitemap directive and admin/editor
Disallow rules.
- Global prefers-reduced-motion override in styles.scss covering every
existing hover-transform/fade-in/shimmer animation in one place.
- New adminProducts/adminUsers/adminMonitoring/adminAnalytics
empty-state i18n keys (en/ru/hy) for this sprint's skeleton/empty-state
consistency fixes.
- docs/KNOWN-ISSUES.md: logged a newly-found, much larger pre-existing
gap (~178 missing adminXxx.* i18n keys across the whole admin
backoffice) - deferred to Sprint 29's translation validation, not
fixed here.
- docs/BACKEND.md: new item 17 (sitemap generation gap).
- docs/ADMIN.md, docs/SPRINT-PLAN.md: rewritten Sprint 28 sections to
describe the full, combined scope (both commits) instead of the
earlier admin-only framing.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -6,7 +6,37 @@ don't fix inline unless asked.
|
||||
|
||||
## Open
|
||||
|
||||
(none currently)
|
||||
1. **~179 untranslated raw i18n keys across the entire admin backoffice CRUD
|
||||
UI (products/categories/orders/transactions/users/monitoring/analytics).**
|
||||
`translations.ts`/`en.ts`/`ru.ts`/`hy.ts` have no `adminProducts.*`,
|
||||
`adminCategories.*`, `adminOrders.*`, `adminTransactions.*`,
|
||||
`adminUsers.*`, `adminMonitoring.*`, or `adminAnalytics.*` sections at all
|
||||
(confirmed: zero matches for any of these prefixes in any of the 4 i18n
|
||||
files). `TranslateService.t()` falls through to returning the raw dotted
|
||||
key string when a key isn't found (see `translate.service.ts`), so every
|
||||
templated string in these features (buttons, table headers, filters,
|
||||
badges, empty/placeholder text) renders literally as e.g.
|
||||
`adminProducts.create` instead of real copy - same root cause as the
|
||||
already-fixed dashboard Quick Actions bug below, just at the scale of
|
||||
almost the entire admin backoffice built across Sprints 20-27.
|
||||
- Counted by grepping all `'adminXxx.yyy'` translate-pipe usages under
|
||||
`src/app/features/admin/**`: `adminProducts` 72, `adminCategories` 23,
|
||||
`adminOrders` 24, `adminUsers` 21, `adminMonitoring` 13,
|
||||
`adminAnalytics` 12, `adminTransactions` 13 (≈178 distinct keys, ×3
|
||||
locales ≈ 534 strings to author).
|
||||
- Likely why it was never caught: every affected Sprint (20-27) explicitly
|
||||
noted live-browser click-through was blocked on the guarded admin route
|
||||
and verification was tsc/build/arch:check only - none of those catch
|
||||
missing i18n keys (pipe arguments are plain strings, not type-checked).
|
||||
- Found: 2026-07-15, during Sprint 28 manual audit (reading templates +
|
||||
grepping i18n files, not live browser).
|
||||
- **Deferred to Sprint 29** ("translation validation" is explicit Sprint 29
|
||||
scope per `docs/SPRINT-PLAN.md`) rather than fixed inline during Sprint
|
||||
28 polish - authoring ~534 correct strings across 3 languages is a large,
|
||||
separate, mechanical pass of its own and shouldn't be rushed inside a
|
||||
polish sprint. Sprint 28 only adds the handful of new keys it introduces
|
||||
itself (empty-state copy for the skeleton/empty-state consistency fix),
|
||||
it does not touch the ~178 pre-existing gap.
|
||||
|
||||
## Fixed
|
||||
|
||||
|
||||
Reference in New Issue
Block a user