Commit graph

5 commits

Author SHA1 Message Date
nns 466e546ae2 rebrand: кэш-бастинг логотипа (старое лого залипало в SW/кэше)
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
Docker Public / Build + push Public (test + latest) (push) Waiting to run
Docker Public / Deploy :test → test.food-market.kz (push) Blocked by required conditions
Docker Web / Build + push Web (push) Waiting to run
Docker Web / Deploy Web on stage (push) Blocked by required conditions
Причина: SW веб-админки прекэшировал /logo.svg и отдавал stale, CACHE_VERSION не
менялся при ребрендинге; публичный сайт отдавал лого/favicon без Cache-Control.

- sw.js: CACHE_VERSION fm-v2 → am-v3 (+ASSET_VERSION am3); activate чистит старые
  кэши, skipWaiting+clients.claim; прекэш бренд-ассетов версионирован; бренд в
  комментариях → ALL MARKET.
- ?v=am3 на нехэшированных бренд-ассетах: index.html, manifest, Logo.tsx,
  публичный Logo.astro + BaseLayout favicon.
- nginx web: index.html + бренд-ассеты + manifest → no-cache; /assets/* → immutable.
- nginx public: html + лого/favicon → no-cache; /_astro/* → immutable.

Проверено Playwright: старый клиент (SW fm-v2 + лого Food Market) → после выкладки
+ 1 перезагрузки кэш am-v3, fm-v2 удалён, лого ALL MARKET. Заметка на будущее про
очистку API_CACHE при logout — в прогресс-доке.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 19:47:41 +05:00
nns 57f36d8dee rebrand: веб-админка ALL MARKET (лого, favicon, PWA, тексты)
- Логотипы: logo.svg/logo-light.svg/favicon.svg → готовые файлы ALL MARKET;
  добавлены apple-touch-icon.png (180), favicon-32.png, icon-192/512.png (PWA maskable).
- index.html: <title>ALL MARKET, apple-touch-icon → png, favicon-32.
- manifest.webmanifest: name/short_name ALL MARKET, PNG-иконки 192/512.
- Logo.tsx: alt ALL MARKET, высота h-8; на экранах входа/восстановления — h-12 (охранное поле).
- Онбординг, SuperAdmin-настройки (имя отправителя/тест), offline.html → ALL MARKET.
- theme_color и цвета интерфейса не менялись.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 17:34:27 +05:00
nns 76a175f491 feat(pwa+mobile+s9): PWA owner read-only + mobile tweaks + S9 stage specs
Some checks are pending
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
Docker Web / Build + push Web (push) Waiting to run
Docker Web / Deploy Web on stage (push) Blocked by required conditions
Sprint 9 пункт 3 (mobile-адаптация):
- DataTable: min-w-max sm:min-w-[640px] → узкие таблицы (Loyalty, Promotions)
  влезают на 375px без horizontal-scroll, широкие (Products) скроллятся
  внутри overflow-auto родителя.
- Mobile-audit спека (stage-ui-s9-mobile-audit) — 20 screenshot'ов в
  reports/mobile/ (375 + 768 viewport × 10 страниц + seed-demo).
  Smoke: no console-errors, layouts читаемы.

Sprint 9 пункт 4 (P2-9 PWA):
- public/manifest.webmanifest — read-only PWA владельца. Shortcuts:
  Дашборд, Sales/Profit/Stock отчёты. display=standalone (homescreen icon).
- public/sw.js — service worker:
  • SPA navigate: network-first + offline-fallback на /offline.html.
  • GET /api/*: network-first + cache-fallback (read-only кеш).
  • CSS/JS/SVG: stale-while-revalidate.
  • Мутации (POST/PUT/DELETE): не вмешиваемся, сеть.
- public/offline.html — статический fallback с кнопкой «Открыть дашборд».
- index.html: <link rel='manifest'>, apple-touch-meta, lang=ru-KZ.
- main.tsx: navigator.serviceWorker.register('/sw.js') в production only
  (dev hot-reload не мешает).
- deploy/nginx.conf: /sw.js no-cache, /manifest.webmanifest правильный
  content-type, /offline.html static.

Stage e2e:
- stage-ui-s9-loyalty.spec (4/4 ✓): programs/cards/promotions endpoints
  + UI рендер + SALE20 на 500₸ → total=400 (валидно через API).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-31 21:22:30 +05:00
nurdotnet 5af8f74b5e feat(web): rebrand to FOOD MARKET green (#00B207) per mobile app logo
- Extract brand colors from food-market-app/.../AppIcon/appicon.svg
  (background #00B207, white FOOD, pale-green E8F5E9 MARKET)
- Add @theme custom colors in index.css:
  --color-brand #00B207, --color-brand-hover #009305, --color-brand-dark #007605,
  --color-brand-light #E8F5E9, --color-brand-tint #D7F2D9, --color-brand-foreground #FFFFFF
- Replace all violet-* Tailwind classes with var(--color-brand*) in:
  LoginPage, Button, Field (input+checkbox), SearchBar, AppLayout (nav active state)
- New Logo component: FM square badge + "FOOD" + "MARKET" typography in brand colors
- Put Logo in sidebar header and on LoginPage
- Replace Vite default favicon with branded SVG (green square + FOOD MARKET)
- Page title "FOOD MARKET", theme-color meta tag for mobile browsers

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 20:53:42 +05:00
nns fd2f5ae4f3 Phase 0: project scaffolding and end-to-end auth
- .NET 8 LTS solution with 7 projects (domain/application/infrastructure/api/shared/pos.core/pos[WPF])
- Central package management (Directory.Packages.props), .editorconfig, global.json pin to 8.0.417
- PostgreSQL 14 dev DB via existing brew service; food_market database created
- ASP.NET Identity + OpenIddict 5 (password + refresh token flows) with ephemeral dev keys
- EF Core 8 + Npgsql; multi-tenant query filter via reflection over ITenantEntity
- Initial migration: 13 tables (Identity + OpenIddict + organizations)
- AuthorizationController implements /connect/token; seeders create demo org + admin
- Protected /api/me endpoint returns current user + org claims
- React 19 + Vite 8 + Tailwind v4 SPA with TanStack Query, React Router 7
- Login flow with dev-admin placeholder, bearer interceptor + refresh token fallback
- docs/architecture.md, CLAUDE.md, README.md

Verified end-to-end: health check, password grant issues JWT with org_id,
web app builds successfully (310 kB gzipped).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 13:59:13 +05:00