Commit Graph

18 Commits

Author SHA1 Message Date
sdarbinyan
38253f7e83 fix(storefront): home carousel overflow, static-page content, compare colour swatch
- product-carousel-widget: implicit CSS grid track had no min-width:0,
  so the flex scroller's intrinsic content width (fixed 220px product
  cards) overflowed the grid item and pushed body width to ~2187px on
  a 1440px viewport, squeezing the entire homepage into a ~340px column.
  Added min-width:0 to the track and scroller (standard grid/flex
  overflow fix).
- bootstrap.json mock fixture: about-us/privacy-policy/terms-of-service
  static pages (the real CMS pages served via bootstrap.staticPages,
  per docs/PROJECT_INDEX.md) used a 'content' field, but
  content-page.service.ts's normalizePage() only reads 'html' -
  ContentPageBootstrapInput has no 'content' field. Title rendered,
  body was always empty. Renamed the 3 fixture entries' field from
  content to html to match the schema; content now renders.
- compare-table: colour row rendered raw hex/name values as plain text
  (e.g. '#fCfCfC') with no swatch, inconsistent with variant-selector's
  established colour-swatch pattern used on the product page. Added a
  small circular swatch (reusing the same border-radius:50% pattern)
  next to the value.

Verified live via ng serve: overflow gone (body/viewport width match
at 1440/1280/375), static pages render real content, compare swatch
displays. tsc --noEmit and ng build both clean (pre-existing bundle-
budget warning only, already tracked in KNOWN-ISSUES item 12).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-25 20:34:17 +04:00
sdarbinyan
e0bcf9dfb8 chore: remove confirmed dead code
Dead code sweep verified manually against app.routes.ts, DI registries, and
cross-repo grep for every candidate (per prior false-positive incident with
knip on pages/**). Deleted only what has zero reachable reference:

Auth (unregistered, comment-only mention):
- core/auth/guards/ed25519-auth.guard.ts - ed25519AuthGuard never imported;
  only mentioned inside a doc-comment in admin-login-page.component.ts.
- core/auth/guards/permission.guard.ts - permissionGuard never imported.
- core/auth/interceptors/auth.interceptor.ts - authInterceptor not present
  in app.config.ts's withInterceptors([...]) list; not imported elsewhere.

Search feature:
- features/search/services/search-analytics.service.ts - SearchAnalyticsService
  never imported outside its own file.
- features/search/components/empty-results/* - app-search-empty-results
  selector never used in any template; search-bar.component.html implements
  its own inline @if (noResults) empty state instead.

Content management:
- features/content-management/pages/content-management-page.component.ts -
  thin wrapper around StaticPagesEditorComponent with zero route pointing at
  it in app.routes.ts. The rest of features/content-management/* (facade,
  static-pages-editor, page-editor, etc.) remains: it is used by
  project-editor and stays.

Backoffice CRUD scaffolding (re-verified the UI-COMPOSITION-REVIEW.md claim
independently): app.routes.ts backoffice section only loads
features/admin/{dashboard,products,categories,transactions,orders,customers,
moderation,users,monitoring,analytics} and features/backoffice/media. Grepped
every other backoffice/* folder for cross-references - none found.
- features/backoffice/{categories,customers,inventory,orders,products,settings}
  - each contained only a placeholder .gitkeep from the original scaffold
  commit (b957112); no real components were ever added, so this is not the
  "duplicate implementation" the prior doc described, just unused scaffold
  dirs. Removing corrects that doc's premise.
- features/backoffice/shared/backoffice-coming-soon-page.component.* - only
  consumer would have been those scaffold dirs; unreferenced elsewhere.
- assets/mock/backoffice/{customers,orders}/list.json - mock data with no
  corresponding fetch call; BackofficeDataProvider only exposes
  loadProducts()/loadCategories(), backed by the products/categories mock
  files, which are kept.

Dead shared barrels/models (no importer anywhere in src/app):
- shared/index.ts, shared/models/index.ts, shared/types/index.ts - unused
  re-export barrels.
- shared/models/domain/index.ts + user-preferences.model.ts (whole domain/
  subfolder) - UserPreferences interface has zero consumers.

Storefront pages (pages/public/platform-home.component.ts) - PlatformHomeComponent
has no route in app.routes.ts and is not imported anywhere; distinct from the
pages/category, pages/search, pages/info/**, pages/legal/**, pages/item-detail
components which ARE routed and were correctly left untouched.

Verification: npx tsc --noEmit -p tsconfig.app.json clean after each batch;
npm run build succeeded (pre-existing initial-bundle-budget warning only,
unrelated to this change).
2026-07-25 18:36:45 +04:00
sdarbinyan
0a1acbd610 fix(storefront): release-candidate walkthrough fixes
- Cart item description showed a stray literal "..." when the item had no
  description text (cart.component.html) — now only renders the trailing
  ellipsis when a description is present.
- Compare table showed raw internal stock enum values ("high"/"low"/etc.)
  instead of localized labels (compare-table.component.ts) — now reuses the
  same stock-label mapping used by product cards.
- Search with zero results incorrectly showed the empty-category messaging
  ("browse categories" / "go to parent category") stacked on top of the
  search's own "nothing found" message (catalog-container.component.ts) —
  isEmptyCategoryState now excludes active search queries so only the
  search-appropriate empty state renders.
- Footer "About" link pointed to /about, which 404s; the actual CMS page
  route is /about-us (bootstrap.json mock nav data) — corrected the route.
- Added missing public/assets/images/placeholder.svg, the fallback image
  referenced by getMainImage() for items without photos (previously 404s
  if that fallback path is ever hit).

Investigated and left as-is (not code bugs): /images/*.webp 404s on
product cards are references to a real backend/CDN not present in local
dev (confirmed via mock-data.interceptor.ts and api.service.ts image-URL
resolution) — expected dev-only gap. Footer "Contacts" link (/contacts)
has no corresponding static page content at all in mock data; flagging
for a content decision rather than fabricating copy.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-24 09:46:51 +04:00
sdarbinyan
5b063d5462 fix(widgets): hero title/subtitle/CTA now locale-aware
P0-3: hero widget text rendered hardcoded English on every locale
(ru/hy included) because HeroWidgetData source props were plain
strings with no per-locale variant, unlike nav labels which already
support a locale map (NavigationLocalizedText).

DataSourceResolverService.toHeroData() now accepts either a plain
string (existing tenants unaffected) or a per-locale text map for
title/subtitle/ctaLabel and each slide's fields, resolved against
the active language the same way footer group titles already are
(LocalizedTextContent, current lang -> en -> first available).

Updated the mock bootstrap fixture's hero props to a real ru/en/hy
map so the demo tenant shows translated copy instead of English on
every locale. No editor UI change needed: the Widgets section's
existing JSON-fallback editor already accepts arbitrary prop shapes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-19 22:44:45 +04:00
sdarbinyan
8d652c8259 feat(platform): sprint 11.5 standardization
Some checks failed
Architecture Governance / architecture (push) Has been cancelled
2026-07-09 02:29:12 +04:00
sdarbinyan
92e1bdaff8 feat(ux): implement sprint 11 user experience module 2026-07-09 01:13:54 +04:00
sdarbinyan
1a8f916942 feat(catalog): implement sprint 10 advanced search experience
Some checks failed
Architecture Governance / architecture (push) Has been cancelled
2026-07-09 00:55:50 +04:00
sdarbinyan
3ef0bd711d feat(product): implement sprint 9 product engagement module 2026-07-09 00:45:36 +04:00
sdarbinyan
c901ec1e49 refactor: finalize bootstrap-driven layout and widget runtime 2026-07-05 04:17:31 +04:00
sdarbinyan
c3d1153f0e Sprint 8: add widget manifest and data source engine 2026-07-05 02:08:15 +04:00
sdarbinyan
91d9444875 Sprint 7: add section engine 2026-07-05 01:55:41 +04:00
sdarbinyan
9cf508d319 clean up 2026-07-05 00:57:20 +04:00
sdarbinyan
8d47920fa3 arch(sprint1): drive widget registry from manifest 2026-07-03 02:07:12 +04:00
sdarbinyan
d6a1d5e3f5 arch(sprint1): resolve dynamic pages by route config 2026-07-03 02:04:01 +04:00
sdarbinyan
ac48799d9a arch(sprint1): decouple backoffice facade from http provider 2026-07-03 02:01:01 +04:00
sdarbinyan
95dbea7768 arch(sprint1): separate backoffice business mocks from bootstrap 2026-07-03 01:59:18 +04:00
sdarbinyan
0f1ebbab7e phase-3: add bootstrap-aligned mock configuration payloads 2026-07-03 01:31:24 +04:00
sdarbinyan
b957112fc7 phase-1: scaffold platform foundation structure and architecture governance 2026-07-03 01:26:30 +04:00