9 commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
0a23c0349b |
chore(site): переснятые скриншоты админки (Сводка/₸/без дубля групп/фасовки)
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
Витрина пересеяна с исправленной фасовкой; админка пересобрана с переводами и валютой ₸. Пересняты и пережаты в WebP: дашборд (Сводка/онлайн/Низкий остаток), каталог (₸, один «Все товары», корректная фасовка), карточка товара и остальные. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
d20cf15ca2 |
fix(ui): правки по ревью скриншотов — i18n, валюта, дубль групп, касса, фасовки
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 API / Build + push API (push) Waiting to run
Docker API / Deploy API on stage (push) Blocked by required conditions
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
1. Английские строки в админке → русский: ru.json dashboard.title «Dashboard»→ «Сводка», common.live/offline «live/offline»→«онлайн/офлайн»; дашборд-виджеты defaultValue «Low-stock alerts»→«Низкий остаток», «Live-обновление»→«Обновляется в реальном времени». 2. Каталог: системная группа «Все товары» больше не дублирует корень дерева (ProductGroupDto.IsSystem + ProductGroupTree прячет системные группы). 3. Валюта: розничная цена в каталоге теперь «₸», а не «KZT» (символ вместо кода). 4. Касса на сайте: вместо HTML-макета — НАСТОЯЩИЙ экран Avalonia-кассы (--screenshots) с витринными данными «Магазин у дома», кассир Виктория Ким, с логотипом; убран префикс «Магазин » в шапке (не было двойного «Магазин Магазин»). HTML-макет удалён из публичного пайплайна. 5. Витрина: фасовка/единица товара выводится из названия (кг→весовой, иначе штучный) — нет «Авокадо 1шт весовой» / «Бешбармак 1кг штучный». Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
f7f92261ca |
feat(site): свежие скриншоты ALL MARKET на витринных данных
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 API / Build + push API (push) Waiting to run
Docker API / Deploy API on stage (push) Blocked by required conditions
Docker Public / Build + push Public (test + latest) (push) Waiting to run
Docker Public / Deploy :test → test.food-market.kz (push) Blocked by required conditions
Пересняты скриншоты публичного сайта в интерфейсе ALL MARKET на витринной организации «Магазин у дома» (200 товаров, ~30 дней продаж, чистые данные без e2e/test-мусора). Светлая тема, 1440×900 @2x, WebP + srcset, alt по-русски. - screenshots.mjs: стенд + витринный владелец, 14 экранов (дашборд/каталог/ карточка/приёмки/остатки/инвентаризация/деньги/отчёты/контрагенты), скрытие баннеров стенда/«что нового»/MoM-дельты, резолв AsyncSelect-подписей - optimize-screenshots.mjs: PNG→WebP (1x 1440w / 2x 2880w) через canvas, все ≤300КБ - pos-mockup/pos-mockup.html: светлая касса ALL MARKET «Магазин у дома» (продажа+оплата) - index.astro: hero-дашборд + каталог + новый блок «Касса»; pos.astro: продажа+оплата - ShowcaseSeeder: стартовый завоз всех товаров (нет отрицательных остатков) - deploy/showcase-seed.sh: RESET=1 пересоздаёт витрину с нуля - исходные PNG не коммитятся (.gitignore), доставка — только WebP Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
||
|
|
d1176e0fb1 |
rebrand: публичный сайт ALL MARKET (лого, OG, тексты)
- Логотипы logo.svg/logo-light.svg/favicon.svg → готовые файлы ALL MARKET. - OG-картинки 1200×630 перегенерированы: реальный логотип ALL MARKET на светлом фоне (og.mjs теперь вставляет PNG-лого вместо «F»-плашки). Футер домена food-market.kz оставлен (домены — отдельная задача). - BaseLayout (title/og/twitter/JSON-LD), Logo.astro (alt, h-8), все .astro-страницы, блог/KB/legal-контент: «Food Market» → «ALL MARKET». - Юрлицо (плейсхолдер ТОО) и домены не менялись. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
0f59dfee69 |
feat(brand): новый логотип food-market wordmark + apple mark
Some checks are pending
CI / POS (WPF, Windows) (push) Waiting to run
CI / Backend (.NET 8) (push) Successful in 1m23s
CI / Web (React + Vite) (push) Successful in 38s
Docker Public / Build + push Public (push) Successful in 28s
Docker Web / Build + push Web (push) Successful in 33s
Docker Public / Deploy Public on stage (push) Successful in 10s
Docker Web / Deploy Web on stage (push) Successful in 11s
Источник — assets/brand/food-market-source.svg (1080x1080, FOOD #0DB70D
с яблоком вместо O, MARKET #4C4F54). Из source извлечены векторные
пути (Adobe-preview PNG-image теги вырезаны), собраны три варианта,
оптимизированы svgo.
Варианты в public/ обоих пакетов (food-market.web, food-market.public):
- logo.svg (2.1 KB) — full wordmark для светлого фона
- logo-light.svg (2.1 KB) — full wordmark белым (для тёмного фона)
- favicon.svg (1.0 KB) — mark-only: яблоко в зелёном круге,
читается с 16px (Astro favicon, web favicon)
Дополнительно (PWA maskable, food-market.web):
- logo-bg.svg (140 B) — solid #0DB70D 456x456 фон
- logo-fg.svg (1.0 KB) — белое яблоко на прозрачном, в safe-zone
Logo-компоненты переписаны:
- Logo.tsx (web) — было div+span с FOOD/MARKET буквами; теперь
<img src=/logo.svg|/logo-light.svg /> с одним пропом variant.
Сохранён API: variant=light|dark, className.
- Logo.astro (public) — то же; добавил пропс class для override-а.
Header.astro public-пакета использует <Logo />, не содержит
hardcoded текста — менять не нужно.
Все файлы под 2.2 KB после svgo.
|
||
|
|
79406e304e |
revert(domains): публичный сайт → test.food-market.kz, apex 404 до релиза
Some checks are pending
CI / POS (WPF, Windows) (push) Waiting to run
CI / Backend (.NET 8) (push) Successful in 53s
CI / Web (React + Vite) (push) Successful in 38s
Docker API / Build + push API (push) Successful in 1m9s
Docker Public / Build + push Public (push) Successful in 28s
Docker Web / Build + push Web (push) Successful in 33s
Docker API / Deploy API on stage (push) Successful in 17s
Docker Public / Deploy Public on stage (push) Successful in 10s
Docker Web / Deploy Web on stage (push) Successful in 11s
Публичный сайт ещё в разработке — выносим его с food-market.kz на test.food-market.kz. На корневом домене food-market.kz пока 404. admin.food-market.kz остаётся как есть. — Заменены https-URL в src/** и deploy/: https://food-market.kz → https://test.food-market.kz (admin.food-market.kz, app.food-market.kz и emails @food-market.kz не трогаем — sed строго по https-префиксу). — public Dockerfile ARG PUBLIC_SITE_URL → test.food-market.kz. — SignupForm/Header/NoOrganizationPage указывают на admin.food-market.kz для API (без изменений с прошлого коммита). — appsettings.json CORS: test + admin.food-market.kz. Nginx (на сервере): - /etc/nginx/conf.d/test.food-market.kz.conf — новый, серт LE issued. - food-market.kz.conf — apex теперь 404 (HTTPS), серт переиспользует пару (food-market.kz + admin.food-market.kz). - food-market.zat.kz и app.food-market.zat.kz — 301 на test/admin соответственно. Smoke: test/, /signup/, admin/health, admin/login = 200; apex = 404; zat → test/admin 301; sitemap.xml отдаёт https://test.food-market.kz/. |
||
|
|
58df887f1c |
feat(domains): миграция на food-market.kz / admin.food-market.kz
Some checks are pending
CI / POS (WPF, Windows) (push) Waiting to run
CI / Backend (.NET 8) (push) Successful in 58s
CI / Web (React + Vite) (push) Successful in 42s
Docker API / Build + push API (push) Successful in 1m38s
Docker Public / Build + push Public (push) Successful in 49s
Docker Web / Build + push Web (push) Successful in 37s
Docker API / Deploy API on stage (push) Successful in 18s
Docker Public / Deploy Public on stage (push) Successful in 9s
Docker Web / Deploy Web on stage (push) Successful in 11s
- Заменил все хардкоды URL в src/** и deploy/: food-market.zat.kz → food-market.kz (публичный сайт) app.food-market.zat.kz → admin.food-market.kz (админ-API + SPA) - public/SignupForm и Header: дефолт PUBLIC_APP_URL теперь https://admin.food-market.kz (раньше указывал на сам публичный домен, что было багом — фронт стучался не туда после переезда зон). - public/Dockerfile ARG PUBLIC_APP_URL → admin.food-market.kz. - API appsettings.json CORS — оставил только два прода-origin (localhost для dev живёт там же). - Program.cs: добавил opts.SetIssuer(uri) если задан OpenIddict:Issuer в конфиге — иначе iss вычислялся из текущего HTTP-запроса и ломался при nginx-прокси без X-Forwarded-Proto. - docker-compose стейджа: env OpenIddict__Issuer=https://admin.food-market.kz/ + Cors__AllowedOrigins[0,1]. Nginx (на сервере, не в репе): - /etc/nginx/conf.d/food-market.kz.conf, admin.food-market.kz.conf — новые конфиги с certbot-выданными сертификатами на оба домена (LetsEncrypt --webroot, действителен до 2026-07-29). - Старые food-market.zat.kz / app.food-market.zat.kz переведены в 301-редирект на новые домены (HTTP+HTTPS), серты zat.kz пока оставлены чтобы handshake шёл нормально. |
||
|
|
dcc3f9d61c |
content(public): живое наполнение — скриншоты, фото, OG, баннеры
Some checks are pending
CI / POS (WPF, Windows) (push) Waiting to run
CI / Backend (.NET 8) (push) Successful in 1m5s
CI / Web (React + Vite) (push) Successful in 39s
Docker Public / Build + push Public (push) Successful in 46s
Docker Public / Deploy Public on stage (push) Successful in 10s
— 6 реальных скриншотов админки в режиме tenant override (FOOD MARKET): dashboard, аналитика, каталог 29 540 SKU, карточка товара, контрагенты, форма приёмки. Снято Playwright через app.food-market.zat.kz. — 14 stock-фото с Unsplash (Unsplash License) для Hero-секций и CTA: pos, import, about, 6 вертикалей, blog covers, integrations, cta-banner. CREDITS.md с авторами/profile-ссылками. — 11 OG-картинок 1200x630 через satori + @resvg/resvg-js: home, pos, pricing, import, about, 6 вертикалей. Inter Bold/Regular, emerald градиент, лого + заголовок + sub + CTA-кнопка. — Hero-секции переделаны: full-width фото с dark-overlay-градиентом и белая card поверх; вертикали /for-* с одинаковым layout-баннером; /pricing с зелёным gradient hero; финальный CTA с emerald overlay 75%. — BaseLayout: ogImage передаётся пропом, twitter:image добавлен. Каждая страница указывает свой /og/<slug>.png. — Контентная зачистка: «торговые весы» вместо конкретных брендов, модели весов убраны со всех материалов. Блог-пост cash-with-scales переписан без брендов. Build: 30 страниц, smoke 20 URL — 200. |
||
|
|
ad09d48a89 |
feat(public): Phase 6 — публичный маркетинговый сайт food-market.public на Astro
Новый пакет src/food-market.public/ — отдельный фронт для маркетинга и
самостоятельной регистрации магазинов-клиентов в SaaS Food Market.
Существующая админка food-market.web НЕ затронута.
Стек: Astro 4 + React 19 islands + Tailwind v3 (палитра идентична
food-market.web — единый бренд), TypeScript 6, content collections для
юр.документов. Static-сайт через nginx, gzip + immutable cache на assets.
Карта страниц (23):
- / — главная (Hero + 3 выгоды + скриншот +
6 вертикалей + 6 модулей + Касса +
Интеграции + 3 тарифа + соцпруф +
FAQ + финальный CTA)
- /features — модули по сценариям
- /pricing — тарифы + интерактивный конструктор
«Бизнес» (per-unit: 10000 база +
2000/магазин + 500/касса + 500/склад,
слайдеры, передача params в /signup)
- /pos — УТП лендинг кассы для Windows + весов
- /migration-from-other-system — УТП лендинг миграции с сторонняя система
(сравнительная таблица + 3 шага)
- /integrations — список интеграций
- /for-grocery|pharmacy|cafe|alcohol|clothing|household — 6 вертикалей
с уникальными фишками (весовой,
серии/сроки, модификаторы и комбо,
акцизные марки, размерные сетки,
гарантийные сроки)
- /signup — регистрация (React-island форма)
- /about /contacts /kb /blog /status /changelog — компания + ресурсы
- /legal/{offer,privacy,consent,requisites} — реальные юр.документы
из /tmp/legal/ как Astro content
collection (markdown с frontmatter,
динамический [slug].astro template,
720px max-width, line-height 1.7,
prose-legal стили)
- /sitemap.xml — ручной генератор (sitemap-плагин
конфликтует с Astro 4.16, заменён
на простой APIRoute)
React-острова (3):
- BusinessTariffBuilder — слайдеры + расчёт total + ссылка на signup
- SignupForm — email/password/orgName/phone/plan + валидация + agree
- FAQ — accordion 7 вопросов
API: новый POST /api/auth/signup создаёт Organization + AppUser
(Identity Admin role) + Owner Employee + полный bootstrap через
DevDataSeeder.SeedTenantReferencesAsync (units, price-types, store,
cassa, 6 ролей). Токены НЕ выпускает — фронт сразу делает обычный
/connect/token (password grant) и получает access/refresh без
дублирования OpenIddict-логики. На signup-форме — auth-bridge:
токены передаются через URL fragment в админку
APP_URL/auth-bridge#access=...&refresh=...&welcome=1, AuthBridgePage
кладёт в localStorage и редиректит на /?welcome=signup.
URL-домены через env-переменные (юзер ещё выбирает финальный):
- PUBLIC_SITE_URL — canonical/OG/sitemap (default https://food-market.kz)
- PUBLIC_APP_URL — admin/API endpoint (default https://food-market.zat.kz)
Nginx-конфиг для деплоя сайта — заготовка-template в
deploy/nginx/food-market-public.conf.template, не применён —
ждёт решения по домену.
Dockerfile multi-stage (node:20-alpine build → nginx:1.27 runtime),
build-args PUBLIC_SITE_URL/PUBLIC_APP_URL, deploy/nginx.conf gzip +
immutable cache + try_files для pretty URLs.
SEO: OG-теги, twitter-card, canonical, JSON-LD SoftwareApplication
схема, robots.txt → sitemap-index, lang=ru-KZ.
Admin-side: /auth-bridge route в food-market.web — принимает токены
из URL fragment, кладёт в localStorage (fm.access_token / fm.refresh_token),
редиректит на /. Fragment чтобы access_token не попадал в Referer.
23 страницы билдятся без ошибок. Контейнер собирается. Деплой на
конкретный домен — отдельным шагом после решения юзера.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|