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>
This commit is contained in:
nns 2026-10-08 17:34:51 +05:00
parent 03bdf4d4f1
commit d1176e0fb1
50 changed files with 89 additions and 111 deletions

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 1 KiB

After

Width:  |  Height:  |  Size: 10 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 13 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 130 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 136 KiB

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 KiB

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 127 KiB

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 KiB

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 136 KiB

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View file

@ -11,18 +11,22 @@ const OUT = path.resolve(__dirname, '..', 'public', 'og')
const interReg = await fs.readFile(path.join(FONTS, 'Inter-Regular.ttf'))
const interBold = await fs.readFile(path.join(FONTS, 'Inter-Bold.ttf'))
// Логотип ALL MARKET (готовый файл бренда, color на прозрачном). viewBox 3:1.
const logoPng = await fs.readFile(path.join(__dirname, 'allmarket-logo-color.png'))
const logoUri = `data:image/png;base64,${logoPng.toString('base64')}`
const pages = [
{ file: 'home.png', title: 'Программа учёта и касса для розничных магазинов в Казахстане', sub: 'Касса с торговыми весами, импорт каталога, ОФД РК. Бесплатно 90 дней.' },
{ file: 'pos.png', title: 'Касса для Windows с поддержкой торговых весов', sub: 'Установка за 5 минут. Офлайн-режим. Стандартное оборудование.' },
{ file: 'pricing.png', title: 'Прозрачные тарифы Food Market', sub: 'От 5 000 ₸/мес. Все возможности на любом тарифе. 90 дней триал.' },
{ file: 'pricing.png', title: 'Прозрачные тарифы ALL MARKET', sub: 'От 5 000 ₸/мес. Все возможности на любом тарифе. 90 дней триал.' },
{ file: 'import.png', title: 'Перенесите каталог за один клик', sub: 'Excel, CSV, REST API. До 100 000 товаров. Бесплатно.' },
{ file: 'about.png', title: 'О Food Market', sub: 'Программа учёта розничной торговли, созданная в Казахстане.' },
{ file: 'for-grocery.png', title: 'Food Market для продуктового магазина', sub: 'Весовой товар, скоропорт, штрихкоды, ABC-анализ.' },
{ file: 'for-pharmacy.png', title: 'Food Market для аптеки', sub: 'Серии, сроки годности, рецептурный отпуск, контроль ЛП.' },
{ file: 'for-cafe.png', title: 'Food Market для кафе и общепита', sub: 'Модификаторы блюд, столики, печать на кухню.' },
{ file: 'for-alcohol.png', title: 'Food Market для алкомаркета', sub: 'Акцизные марки, контроль времени продаж, маркировка.' },
{ file: 'for-clothing.png', title: 'Food Market для магазина одежды', sub: 'Размерные сетки, цветовые матрицы, остатки по размерам.' },
{ file: 'for-household.png', title: 'Food Market для дома и быта', sub: 'Гарантийные сроки, серийные номера, характеристики.' },
{ file: 'about.png', title: 'О ALL MARKET', sub: 'Программа учёта розничной торговли, созданная в Казахстане.' },
{ file: 'for-grocery.png', title: 'ALL MARKET для продуктового магазина', sub: 'Весовой товар, скоропорт, штрихкоды, ABC-анализ.' },
{ file: 'for-pharmacy.png', title: 'ALL MARKET для аптеки', sub: 'Серии, сроки годности, рецептурный отпуск, контроль ЛП.' },
{ file: 'for-cafe.png', title: 'ALL MARKET для кафе и общепита', sub: 'Модификаторы блюд, столики, печать на кухню.' },
{ file: 'for-alcohol.png', title: 'ALL MARKET для алкомаркета', sub: 'Акцизные марки, контроль времени продаж, маркировка.' },
{ file: 'for-clothing.png', title: 'ALL MARKET для магазина одежды', sub: 'Размерные сетки, цветовые матрицы, остатки по размерам.' },
{ file: 'for-household.png', title: 'ALL MARKET для дома и быта', sub: 'Гарантийные сроки, серийные номера, характеристики.' },
]
const tmpl = ({ title, sub }) => ({
@ -31,40 +35,14 @@ const tmpl = ({ title, sub }) => ({
style: {
width: '1200px', height: '630px', display: 'flex', flexDirection: 'column',
justifyContent: 'space-between', padding: '64px',
background: 'linear-gradient(135deg, #ECFDF5 0%, #D1FAE5 60%, #A7F3D0 100%)',
background: 'linear-gradient(135deg, #FFFFFF 0%, #ECFDF5 100%)',
fontFamily: 'Inter',
},
children: [
// Logo + brand row
// Logo (готовый файл бренда на светлом фоне)
{
type: 'div',
props: {
style: { display: 'flex', alignItems: 'center', gap: '14px' },
children: [
{
type: 'div',
props: {
style: {
width: '56px', height: '56px', borderRadius: '14px',
background: '#00B207',
display: 'flex', alignItems: 'center', justifyContent: 'center',
color: '#FFFFFF', fontSize: '32px', fontWeight: 700,
},
children: 'F',
},
},
{
type: 'div',
props: {
style: { display: 'flex', flexDirection: 'column' },
children: [
{ type: 'span', props: { style: { color: '#0F172A', fontSize: '26px', fontWeight: 700, lineHeight: 1 }, children: 'Food Market' } },
{ type: 'span', props: { style: { color: '#475569', fontSize: '15px', fontWeight: 400, marginTop: '4px' }, children: 'Программа учёта · Касса · Касса для Windows' } },
],
},
},
],
},
type: 'img',
props: { src: logoUri, width: 300, height: 99 },
},
// Title + subtitle
{

View file

@ -2,8 +2,8 @@ import { useState } from 'react'
const ITEMS = [
{
q: 'Чем Food Market подходит моему магазину?',
a: 'Food Market — облачная программа учёта розничной торговли, созданная под казахстанский рынок. Поддерживает все типы магазинов: продуктовые, аптеки, общепит, алкомаркеты, одежду, бытовые товары. Включает кассу для Windows с нативной поддержкой торговых весов, интеграцию с ОФД РК, Kaspi Pay и казахстанскими банками.',
q: 'Чем ALL MARKET подходит моему магазину?',
a: 'ALL MARKET — облачная программа учёта розничной торговли, созданная под казахстанский рынок. Поддерживает все типы магазинов: продуктовые, аптеки, общепит, алкомаркеты, одежду, бытовые товары. Включает кассу для Windows с нативной поддержкой торговых весов, интеграцию с ОФД РК, Kaspi Pay и казахстанскими банками.',
},
{
q: 'Сколько стоит подписка?',

View file

@ -53,6 +53,6 @@ import Logo from './Logo.astro'
</div>
</div>
<div class="border-t border-slate-200 py-4 text-center text-xs text-slate-400">
© {new Date().getFullYear()} Food Market. Все права защищены.
© {new Date().getFullYear()} ALL MARKET. Все права защищены.
</div>
</footer>

View file

@ -3,4 +3,4 @@ interface Props { variant?: 'light' | 'dark'; class?: string }
const { variant = 'light', class: className = '' } = Astro.props
const src = variant === 'dark' ? '/logo-light.svg' : '/logo.svg'
---
<img src={src} alt="Food Market" class={`h-7 w-auto select-none ${className}`} draggable="false" />
<img src={src} alt="ALL MARKET" class={`h-8 w-auto select-none ${className}`} draggable="false" />

View file

@ -1,7 +1,7 @@
---
title: "Касса с поддержкой весов — почему это важно для магазина"
date: 2026-05-02
author: Команда Food Market
author: Команда ALL MARKET
category: feature
description: "Если вы продаёте на развес, работа с весами обычно — самое болезненное место при настройке кассы. Рассказываем, как мы сделали её простой."
cover_image: /photos/blog-scales.jpg
@ -17,7 +17,7 @@ cover_image: /photos/blog-scales.jpg
Мы написали обработку стандартных протоколов торговых весов прямо в кассу. Зато теперь весы работают нативно:
- Установили Касса Food Market для Windows
- Установили Касса ALL MARKET для Windows
- Подключили торговые весы через RS-232 или USB-COM кабель
- Запустили кассу — **всё**

View file

@ -1,15 +1,15 @@
---
title: "Food Market запустился — система учёта розницы для Казахстана"
title: "ALL MARKET запустился — система учёта розницы для Казахстана"
date: 2026-04-26
author: Команда Food Market
author: Команда ALL MARKET
category: news
description: "Сегодня мы запускаем Food Market — программу учёта розничной торговли, созданную в Казахстане для казахстанских магазинов."
description: "Сегодня мы запускаем ALL MARKET — программу учёта розничной торговли, созданную в Казахстане для казахстанских магазинов."
cover_image: /photos/blog-launch.jpg
---
# Food Market запустился
# ALL MARKET запустился
Сегодня мы открываем публичный доступ к Food Market — программе учёта розничной торговли, созданной командой казахстанских разработчиков и практиков ритейла.
Сегодня мы открываем публичный доступ к ALL MARKET — программе учёта розничной торговли, созданной командой казахстанских разработчиков и практиков ритейла.
## Что мы сделали
@ -20,7 +20,7 @@ cover_image: /photos/blog-launch.jpg
- **поддерживать локальное железо** — торговые весы нативно, без переходников и сторонних драйверов
- **позволять попробовать без риска** — настоящий триал, а не «14 дней с привязкой карты»
Мы воплотили эти принципы в Food Market.
Мы воплотили эти принципы в ALL MARKET.
## Что вы получаете

View file

@ -1,15 +1,15 @@
---
title: "Запустите магазин в Food Market за 15 минут"
title: "Запустите магазин в ALL MARKET за 15 минут"
date: 2026-04-30
author: Команда Food Market
author: Команда ALL MARKET
category: guide
description: "Пошаговая инструкция первого запуска: от регистрации до первой продажи."
cover_image: /photos/blog-quickstart.jpg
---
# Запустите магазин в Food Market за 15 минут
# Запустите магазин в ALL MARKET за 15 минут
Часто новые SaaS-сервисы требуют дней на настройку и обучение. Мы спроектировали Food Market так, чтобы вы могли начать продавать в день регистрации.
Часто новые SaaS-сервисы требуют дней на настройку и обучение. Мы спроектировали ALL MARKET так, чтобы вы могли начать продавать в день регистрации.
Реальное время от пустого экрана до первого пробитого чека — **15 минут**.
@ -21,7 +21,7 @@ cover_image: /photos/blog-quickstart.jpg
- Название магазина
- Выберите тариф (можно оставить «Триал» — 90 дней бесплатно)
Через 30 секунд после нажатия «Зарегистрироваться» вы окажетесь в админке Food Market с готовым к работе пустым магазином.
Через 30 секунд после нажатия «Зарегистрироваться» вы окажетесь в админке ALL MARKET с готовым к работе пустым магазином.
## Шаг 2. Загрузите каталог (5 минут)
@ -29,7 +29,7 @@ cover_image: /photos/blog-quickstart.jpg
**А. Импорт из Excel/CSV** — самый быстрый если у вас уже есть файл с товарами:
- «Импорт» → «Из файла» → загрузите .xlsx или .csv
- Сопоставьте колонки (название, штрихкод, цена) — Food Market подскажет правильное соответствие
- Сопоставьте колонки (название, штрихкод, цена) — ALL MARKET подскажет правильное соответствие
- Запустите импорт — 5 000 SKU перенесутся за минуту
**Б. Импорт через API** — если работаете в системе с открытым API:
@ -61,7 +61,7 @@ cover_image: /photos/blog-quickstart.jpg
4. Введите сумму полученных денег
5. Подтвердите — чек распечатается
🎉 Вы только что сделали первую продажу через Food Market.
🎉 Вы только что сделали первую продажу через ALL MARKET.
## Что дальше

View file

@ -14,7 +14,7 @@ order: 1
# Тарифы, оплата, изменение тарифа
Полная информация о подписках Food Market и порядке оплаты.
Полная информация о подписках ALL MARKET и порядке оплаты.
## Тарифы

View file

@ -14,7 +14,7 @@ order: 1
# Настройка кассы для Windows
Полная инструкция установки и настройки кассы Food Market для Windows. Время — 15-20 минут.
Полная инструкция установки и настройки кассы ALL MARKET для Windows. Время — 15-20 минут.
## Системные требования
@ -26,7 +26,7 @@ order: 1
## Скачивание установщика
1. Войдите в админку Food Market
1. Войдите в админку ALL MARKET
2. Откройте раздел «Касса» в боковом меню
3. Нажмите «Скачать кассу для Windows»
4. Сохраните файл `food-market-pos-setup.msi` (~80 МБ)
@ -43,7 +43,7 @@ order: 1
При первом запуске касса попросит ввести **ключ организации**.
1. В админке Food Market: «Касса» → «Ключ организации» — скопируйте 32-символьный код
1. В админке ALL MARKET: «Касса» → «Ключ организации» — скопируйте 32-символьный код
2. В кассе — вставьте ключ, нажмите «Активировать»
3. Касса синхронизирует каталог товаров с облаком (~30 секунд для 5000 SKU)

View file

@ -14,7 +14,7 @@ order: 1
# Быстрый старт за 15 минут
После регистрации в Food Market вам нужно сделать 4 простых шага, чтобы начать продавать.
После регистрации в ALL MARKET вам нужно сделать 4 простых шага, чтобы начать продавать.
## Шаг 1. Заполните данные магазина (1 мин)
@ -47,7 +47,7 @@ order: 1
В кассе нажмите «Открыть смену», введите начальный остаток наличных. Сосканируйте штрихкод любого товара — он появится в чеке. Нажмите «Оплата» → «Наличные» → подтвердите. Чек распечатается, сделка пройдёт в учёт.
🎉 Вы только что сделали первую продажу через Food Market.
🎉 Вы только что сделали первую продажу через ALL MARKET.
## Что дальше?

View file

@ -12,7 +12,7 @@ last_updated: 2026-04-26
---
Настоящим я, как субъект персональных данных, регистрируясь в сервисе **Food Market** (далее — «**Сервис**»), размещённом на сайте https://test.food-market.kz, и проставляя отметку в чекбоксе «Согласен с офертой и политикой обработки персональных данных» при создании учётной записи, в соответствии со статьёй 8 Закона Республики Казахстан от 21 мая 2013 года № 94-V «О персональных данных и их защите», свободно, своей волей и в своём интересе даю своё согласие **ТОО «[НАЗВАНИЕ ТОО]»**, БИН [БИН], юридический адрес: [Юр.адрес] (далее — «**Оператор**»), на сбор, обработку, хранение, использование, обезличивание и уничтожение моих персональных данных в нижеуказанном объёме и для нижеуказанных целей.
Настоящим я, как субъект персональных данных, регистрируясь в сервисе **ALL MARKET** (далее — «**Сервис**»), размещённом на сайте https://test.food-market.kz, и проставляя отметку в чекбоксе «Согласен с офертой и политикой обработки персональных данных» при создании учётной записи, в соответствии со статьёй 8 Закона Республики Казахстан от 21 мая 2013 года № 94-V «О персональных данных и их защите», свободно, своей волей и в своём интересе даю своё согласие **ТОО «[НАЗВАНИЕ ТОО]»**, БИН [БИН], юридический адрес: [Юр.адрес] (далее — «**Оператор**»), на сбор, обработку, хранение, использование, обезличивание и уничтожение моих персональных данных в нижеуказанном объёме и для нижеуказанных целей.
## 1. Перечень персональных данных, на обработку которых даётся согласие

View file

@ -1,10 +1,10 @@
---
title: Публичная оферта на использование сервиса Food Market
title: Публичная оферта на использование сервиса ALL MARKET
slug: offer
last_updated: 2026-04-26
---
# Публичная оферта на использование сервиса Food Market
# Публичная оферта на использование сервиса ALL MARKET
> **Внимание:** Настоящий документ является типовой публичной офертой и подлежит правовой экспертизе перед публичным использованием. Финальная редакция утверждается уполномоченным лицом Лицензиара.
@ -14,7 +14,7 @@ last_updated: 2026-04-26
## 1. Общие положения
1.1. Настоящий документ является публичной офертой (далее — «**Оферта**») в соответствии со статьями 395, 396 Гражданского кодекса Республики Казахстан (далее — «**ГК РК**»). Оферта адресована любому физическому или юридическому лицу (далее — «**Пользователь**»), желающему получить доступ к программно-аппаратному комплексу «Food Market» (далее — «**Сервис**»).
1.1. Настоящий документ является публичной офертой (далее — «**Оферта**») в соответствии со статьями 395, 396 Гражданского кодекса Республики Казахстан (далее — «**ГК РК**»). Оферта адресована любому физическому или юридическому лицу (далее — «**Пользователь**»), желающему получить доступ к программно-аппаратному комплексу «ALL MARKET» (далее — «**Сервис**»).
1.2. Лицензиаром Сервиса выступает **ТОО «[НАЗВАНИЕ ТОО]»**, БИН [БИН], зарегистрированное в соответствии с законодательством Республики Казахстан (далее — «**Лицензиар**»). Полные реквизиты Лицензиара указаны в разделе «Реквизиты» сайта.
@ -29,7 +29,7 @@ last_updated: 2026-04-26
## 2. Термины и определения
**Сервис** — программный продукт «Food Market», представляющий собой облачную систему учёта розничной торговли с функциями управления товарами, складом, продажами, кассовыми операциями, аналитикой и сопутствующими сервисами, размещённый по адресу https://test.food-market.kz и связанных с ним поддоменах.
**Сервис** — программный продукт «ALL MARKET», представляющий собой облачную систему учёта розничной торговли с функциями управления товарами, складом, продажами, кассовыми операциями, аналитикой и сопутствующими сервисами, размещённый по адресу https://test.food-market.kz и связанных с ним поддоменах.
**Учётная запись** — совокупность данных Пользователя, обеспечивающих его идентификацию и авторизацию в Сервисе.

View file

@ -13,7 +13,7 @@ last_updated: 2026-04-26
## 1. Общие положения
1.1. Настоящая Политика обработки персональных данных (далее — «**Политика**») определяет порядок обработки и защиты персональных данных, осуществляемой **ТОО «[НАЗВАНИЕ ТОО]»**, БИН [БИН] (далее — «**Оператор**»), при предоставлении доступа к программно-аппаратному комплексу «Food Market» (далее — «**Сервис**»).
1.1. Настоящая Политика обработки персональных данных (далее — «**Политика**») определяет порядок обработки и защиты персональных данных, осуществляемой **ТОО «[НАЗВАНИЕ ТОО]»**, БИН [БИН] (далее — «**Оператор**»), при предоставлении доступа к программно-аппаратному комплексу «ALL MARKET» (далее — «**Сервис**»).
1.2. Политика разработана в соответствии с:
- Конституцией Республики Казахстан;

View file

@ -28,19 +28,19 @@ const ymId = import.meta.env.PUBLIC_YM_ID ?? 'REPLACE_ME'
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<title>{title} · Food Market</title>
<title>{title} · ALL MARKET</title>
<meta name="description" content={description} />
<link rel="canonical" href={canonical} />
<meta property="og:type" content="website" />
<meta property="og:title" content={`${title} · Food Market`} />
<meta property="og:title" content={`${title} · ALL MARKET`} />
<meta property="og:description" content={description} />
<meta property="og:url" content={canonical} />
<meta property="og:image" content={new URL(ogImage, Astro.site).toString()} />
<meta property="og:locale" content="ru_KZ" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content={`${title} · Food Market`} />
<meta name="twitter:title" content={`${title} · ALL MARKET`} />
<meta name="twitter:description" content={description} />
<meta name="twitter:image" content={new URL(ogImage, Astro.site).toString()} />
@ -51,7 +51,7 @@ const ymId = import.meta.env.PUBLIC_YM_ID ?? 'REPLACE_ME'
<script type="application/ld+json" set:html={JSON.stringify({
'@context': 'https://schema.org',
'@type': 'SoftwareApplication',
name: 'Food Market',
name: 'ALL MARKET',
applicationCategory: 'BusinessApplication',
operatingSystem: 'Web, Windows',
offers: { '@type': 'Offer', price: '5000', priceCurrency: 'KZT' },

View file

@ -1,19 +1,19 @@
---
import BaseLayout from '@/layouts/BaseLayout.astro'
---
<BaseLayout title="О нас" description="Food Market — программа учёта и касса для розничных магазинов Казахстана. История, команда, принципы." ogImage="/og/about.png">
<BaseLayout title="О нас" description="ALL MARKET — программа учёта и касса для розничных магазинов Казахстана. История, команда, принципы." ogImage="/og/about.png">
<section class="relative overflow-hidden">
<img src="/photos/about-hero.jpg" alt="" class="absolute inset-0 w-full h-full object-cover" />
<div class="absolute inset-0 bg-gradient-to-r from-slate-900/85 via-slate-900/60 to-transparent"></div>
<div class="relative max-w-3xl mx-auto px-4 sm:px-6 py-20 lg:py-28">
<h1 class="text-4xl lg:text-5xl font-extrabold text-white drop-shadow-lg">О Food Market</h1>
<h1 class="text-4xl lg:text-5xl font-extrabold text-white drop-shadow-lg">О ALL MARKET</h1>
<p class="mt-4 text-lg text-emerald-50 max-w-xl">Программа учёта розничной торговли, созданная в Казахстане для казахстанских магазинов.</p>
</div>
</section>
<section class="max-w-3xl mx-auto px-4 sm:px-6 py-12 prose-md">
<h2>История</h2>
<p>Food Market запустился в 2026 году как ответ на запрос рынка: розничные магазины в Казахстане заслуживают современный, быстрый и честный инструмент для ведения бизнеса.</p>
<p>ALL MARKET запустился в 2026 году как ответ на запрос рынка: розничные магазины в Казахстане заслуживают современный, быстрый и честный инструмент для ведения бизнеса.</p>
<p>Команда основателей — практики розницы и разработчики, которые три года изнутри наблюдали как магазины ведут учёт, какие проблемы решают каждый день, чего им не хватает в существующих инструментах.</p>
<p>Мы поставили перед собой задачу сделать продукт, который работает с первого клика — без долгой настройки и платных консультаций; нативно поддерживает локальное железо (торговые весы из коробки, без переходников); соответствует реалиям РК (Kaspi Pay, ОФД, законодательство, поддержка на русском); и который можно попробовать без риска — настоящий триал, без привязки карты.</p>

View file

@ -4,7 +4,7 @@ import BaseLayout from '@/layouts/BaseLayout.astro'
const posts = (await getCollection('blog')).sort((a, b) => +b.data.date - +a.data.date)
const fmt = (d: Date) => d.toLocaleDateString('ru-KZ', { day: '2-digit', month: 'long', year: 'numeric' })
---
<BaseLayout title="Блог" description="Блог Food Market: новости, релизы, лучшие практики автоматизации розничных магазинов в Казахстане.">
<BaseLayout title="Блог" description="Блог ALL MARKET: новости, релизы, лучшие практики автоматизации розничных магазинов в Казахстане.">
<section class="max-w-3xl mx-auto px-4 sm:px-6 py-14">
<h1 class="text-4xl font-extrabold">Блог</h1>
<p class="text-slate-500 mt-2">Запуски, миграции, лучшие практики розницы.</p>

View file

@ -8,10 +8,10 @@ const releases = [
{ date: '2026-03', title: 'Phase 1 — Каталог и tenant-изоляция', items: ['Multi-tenant архитектура','Товары, группы, штрихкоды, остатки','Импорт из других систем'] },
]
---
<BaseLayout title="Changelog" description="История релизов Food Market: что нового в продукте.">
<BaseLayout title="Changelog" description="История релизов ALL MARKET: что нового в продукте.">
<section class="max-w-3xl mx-auto px-4 sm:px-6 py-14">
<h1 class="text-4xl font-extrabold">Changelog</h1>
<p class="text-slate-500 mt-2">История релизов Food Market.</p>
<p class="text-slate-500 mt-2">История релизов ALL MARKET.</p>
<div class="mt-10 space-y-8">
{releases.map((r) => (
<article class="rounded-xl border border-slate-200 bg-white p-5">

View file

@ -1,7 +1,7 @@
---
import BaseLayout from '@/layouts/BaseLayout.astro'
---
<BaseLayout title="Контакты" description="Команда поддержки Food Market в часовом поясе Астаны. Электронная почта, телефон, мессенджеры.">
<BaseLayout title="Контакты" description="Команда поддержки ALL MARKET в часовом поясе Астаны. Электронная почта, телефон, мессенджеры.">
<section class="bg-gradient-to-br from-brand-light/30 via-white to-white">
<div class="max-w-3xl mx-auto px-4 sm:px-6 py-14">
<h1 class="text-4xl font-extrabold">Контакты</h1>

View file

@ -9,7 +9,7 @@ const sections = [
{ id: 'finance', icon: '📊', title: 'Финансы и аналитика', items: ['Дашборд продаж','Отчёт по марже','Отчёт по остаткам','Аналитика клиентов (скоро)','API для BI-инструментов'] },
]
---
<BaseLayout title="Возможности" description="Полный список возможностей Food Market: каталог, касса, склад, закупки, CRM, аналитика.">
<BaseLayout title="Возможности" description="Полный список возможностей ALL MARKET: каталог, касса, склад, закупки, CRM, аналитика.">
<section class="max-w-5xl mx-auto px-4 sm:px-6 py-12">
<h1 class="text-4xl font-extrabold text-center">Возможности</h1>
<p class="text-center text-slate-500 mt-3">6 модулей вместо 40 функций. Группируем по сценариям.</p>

View file

@ -7,7 +7,7 @@ const features = [
{ icon: '🆔', title: 'Проверка возраста', text: 'Запрос подтверждения возраста на кассе перед продажей алкогольных позиций.' },
]
---
<BaseLayout title="Для алкогольных магазинов" description="Food Market для алкоголя: акцизные марки, ЕГАИС-ready, контроль времени продаж, проверка возраста." ogImage="/og/for-alcohol.png">
<BaseLayout title="Для алкогольных магазинов" description="ALL MARKET для алкоголя: акцизные марки, ЕГАИС-ready, контроль времени продаж, проверка возраста." ogImage="/og/for-alcohol.png">
<section class="relative overflow-hidden">
<img src="/photos/vertical-alcohol.jpg" alt="" class="absolute inset-0 w-full h-full object-cover" />
<div class="absolute inset-0 bg-gradient-to-r from-slate-900/85 via-slate-900/60 to-transparent"></div>

View file

@ -7,7 +7,7 @@ const features = [
{ icon: '📈', title: 'Анализ блюд', text: 'Какие блюда продаются, какие нет. Маржинальность по позиции.' },
]
---
<BaseLayout title="Для кафе и общепита" description="Food Market для кафе и общепита: модификаторы, комбо, тех.карты, заказы по столикам." ogImage="/og/for-cafe.png">
<BaseLayout title="Для кафе и общепита" description="ALL MARKET для кафе и общепита: модификаторы, комбо, тех.карты, заказы по столикам." ogImage="/og/for-cafe.png">
<section class="relative overflow-hidden">
<img src="/photos/vertical-cafe.jpg" alt="" class="absolute inset-0 w-full h-full object-cover" />
<div class="absolute inset-0 bg-gradient-to-r from-slate-900/80 via-slate-900/55 to-transparent"></div>

View file

@ -7,7 +7,7 @@ const features = [
{ icon: '🔄', title: 'Возвраты', text: 'Удобный возврат на кассе с возвратом денег или обменом на другой размер.' },
]
---
<BaseLayout title="Для магазина одежды" description="Food Market для одежды: размерные сетки, цвета, маркетплейсы, удобные возвраты." ogImage="/og/for-clothing.png">
<BaseLayout title="Для магазина одежды" description="ALL MARKET для одежды: размерные сетки, цвета, маркетплейсы, удобные возвраты." ogImage="/og/for-clothing.png">
<section class="relative overflow-hidden">
<img src="/photos/vertical-clothing.jpg" alt="" class="absolute inset-0 w-full h-full object-cover" />
<div class="absolute inset-0 bg-gradient-to-r from-slate-900/80 via-slate-900/55 to-transparent"></div>

View file

@ -7,7 +7,7 @@ const features = [
{ icon: '📊', title: 'ABC-анализ', text: 'Ходовые и неходовые позиции по сумме / марже / штукам. Решения по матрице за минуту.' },
]
---
<BaseLayout title="Для продуктового магазина" description="Food Market для продуктового магазина: весовой товар, штрихкоды, скоропорт, ABC-анализ." ogImage="/og/for-grocery.png">
<BaseLayout title="Для продуктового магазина" description="ALL MARKET для продуктового магазина: весовой товар, штрихкоды, скоропорт, ABC-анализ." ogImage="/og/for-grocery.png">
<section class="relative overflow-hidden">
<img src="/photos/vertical-grocery.jpg" alt="" class="absolute inset-0 w-full h-full object-cover" />
<div class="absolute inset-0 bg-gradient-to-r from-slate-900/80 via-slate-900/55 to-transparent"></div>

View file

@ -7,7 +7,7 @@ const features = [
{ icon: '📤', title: 'Маркетплейсы', text: 'Выгрузка на Kaspi Magazin, синхронизация цен и остатков (скоро).' },
]
---
<BaseLayout title="Для магазина дом и быт" description="Food Market для магазина товаров для дома: гарантийные сроки, серийные номера, комплекты, маркетплейсы." ogImage="/og/for-household.png">
<BaseLayout title="Для магазина дом и быт" description="ALL MARKET для магазина товаров для дома: гарантийные сроки, серийные номера, комплекты, маркетплейсы." ogImage="/og/for-household.png">
<section class="relative overflow-hidden">
<img src="/photos/vertical-household.jpg" alt="" class="absolute inset-0 w-full h-full object-cover" />
<div class="absolute inset-0 bg-gradient-to-r from-slate-900/80 via-slate-900/55 to-transparent"></div>

View file

@ -7,7 +7,7 @@ const features = [
{ icon: '🔒', title: 'Контроль доступа', text: 'Роли «Фармацевт» и «Заведующий» с разными правами. Логирование всех операций.' },
]
---
<BaseLayout title="Для аптеки" description="Food Market для аптеки: партионный учёт, серии и сроки годности, рецептурные препараты, МНН-группы." ogImage="/og/for-pharmacy.png">
<BaseLayout title="Для аптеки" description="ALL MARKET для аптеки: партионный учёт, серии и сроки годности, рецептурные препараты, МНН-группы." ogImage="/og/for-pharmacy.png">
<section class="relative overflow-hidden">
<img src="/photos/vertical-pharmacy.jpg" alt="" class="absolute inset-0 w-full h-full object-cover" />
<div class="absolute inset-0 bg-gradient-to-r from-slate-900/80 via-slate-900/55 to-transparent"></div>

View file

@ -2,8 +2,8 @@
import BaseLayout from '@/layouts/BaseLayout.astro'
const formats = [
{ icon: '📊', title: 'Excel и CSV', text: 'Загрузите файл с каталогом — Food Market распознает столбцы и подгрузит данные. Подходит для миграции из любой системы, которая умеет экспортировать в Excel/CSV. Требуемые столбцы: название, штрихкод, цена. Остальные опциональны.' },
{ icon: '🔌', title: 'API сторонних систем', text: 'Прямая интеграция через API для популярных систем учёта в Казахстане. Введите API-токен — Food Market подтянет товары, контрагентов, остатки и цены автоматически.' },
{ icon: '📊', title: 'Excel и CSV', text: 'Загрузите файл с каталогом — ALL MARKET распознает столбцы и подгрузит данные. Подходит для миграции из любой системы, которая умеет экспортировать в Excel/CSV. Требуемые столбцы: название, штрихкод, цена. Остальные опциональны.' },
{ icon: '🔌', title: 'API сторонних систем', text: 'Прямая интеграция через API для популярных систем учёта в Казахстане. Введите API-токен — ALL MARKET подтянет товары, контрагентов, остатки и цены автоматически.' },
{ icon: '📦', title: '1С: Бухгалтерия', text: 'Импорт через стандартную выгрузку 1С (XML/Excel). Каталог, контрагенты, остатки.' },
]
@ -19,7 +19,7 @@ const matrix: [string, string, string][] = [
]
const steps = [
{ title: 'Зарегистрируйтесь в Food Market', text: 'Заполните минимальную форму: email, название магазина, пароль. Триал 90 дней активируется автоматически.' },
{ title: 'Зарегистрируйтесь в ALL MARKET', text: 'Заполните минимальную форму: email, название магазина, пароль. Триал 90 дней активируется автоматически.' },
{ title: 'Подготовьте данные', text: 'Excel/CSV: экспортируйте каталог в .xlsx или .csv. Через API: получите API-токен в вашей текущей системе.' },
{ title: 'Запустите импорт', text: 'В админке: «Импорт» → выберите формат → загрузите файл или введите токен → нажмите «Запустить».' },
{ title: 'Проверьте результат', text: 'Откройте «Товары» — каталог должен быть полным. Проверьте 5-10 случайных товаров: цены, штрихкоды, остатки.' },

View file

@ -52,7 +52,7 @@ const integrations = [
<span class="w-3 h-3 rounded-full bg-yellow-400"></span>
<span class="w-3 h-3 rounded-full bg-green-400"></span>
</div>
<img src="/screenshots/dashboard-hero.png" alt="Дашборд Food Market" class="w-full block" loading="eager" />
<img src="/screenshots/dashboard-hero.png" alt="Дашборд ALL MARKET" class="w-full block" loading="eager" />
</div>
</div>
</section>
@ -62,7 +62,7 @@ const integrations = [
<div class="rounded-xl border border-slate-200 p-5">
<div class="text-3xl">🛒</div>
<h3 class="font-semibold mt-2">Касса с весами из коробки</h3>
<p class="text-sm text-slate-600 mt-1">Прямая поддержка торговых весов без переходников и драйверов. Подключите весы — Food Market распознает их автоматически. Поддержка штрихкодов, скидок, акций, лояльности.</p>
<p class="text-sm text-slate-600 mt-1">Прямая поддержка торговых весов без переходников и драйверов. Подключите весы — ALL MARKET распознает их автоматически. Поддержка штрихкодов, скидок, акций, лояльности.</p>
</div>
<div class="rounded-xl border border-slate-200 p-5">
<div class="text-3xl">⬇️</div>
@ -87,13 +87,13 @@ const integrations = [
<span class="w-2.5 h-2.5 rounded-full bg-green-400"></span>
<span class="ml-3 text-xs text-slate-500">app.food-market.kz / catalog / products</span>
</div>
<img src="/screenshots/catalog.png" alt="Каталог товаров Food Market — 29 540 SKU" class="w-full block rounded-b-md" loading="lazy" />
<img src="/screenshots/catalog.png" alt="Каталог товаров ALL MARKET — 29 540 SKU" class="w-full block rounded-b-md" loading="lazy" />
</div>
</section>
{/* 4. Для кого */}
<section class="max-w-7xl mx-auto px-4 sm:px-6 py-12">
<h2 class="text-3xl font-bold text-center mb-2">Для кого Food Market</h2>
<h2 class="text-3xl font-bold text-center mb-2">Для кого ALL MARKET</h2>
<p class="text-center text-slate-500 mb-8">Шесть вертикалей. Свои фишки в каждой.</p>
<div class="grid sm:grid-cols-2 lg:grid-cols-3 gap-4">
{verticals.map((v) => (
@ -215,7 +215,7 @@ const integrations = [
<section class="bg-slate-50 py-14">
<div class="max-w-3xl mx-auto px-4 sm:px-6 text-center">
<p class="text-xs uppercase tracking-wider text-slate-500 mb-4">Кейсы</p>
<p class="text-xl text-slate-700 italic">«Раздел в разработке. Здесь появятся истории магазинов, которые перешли на Food Market.»</p>
<p class="text-xl text-slate-700 italic">«Раздел в разработке. Здесь появятся истории магазинов, которые перешли на ALL MARKET.»</p>
</div>
</section>

View file

@ -8,7 +8,7 @@ const groups = [
{ title: 'Оборудование', items: ['Электронные торговые весы (USB/COM)', 'Сканеры штрихкодов USB', 'Денежные ящики', 'Дисплей покупателя'] },
]
---
<BaseLayout title="Интеграции" description="Кассы, банки, ОФД, маркетплейсы, учётные системы — все интеграции Food Market.">
<BaseLayout title="Интеграции" description="Кассы, банки, ОФД, маркетплейсы, учётные системы — все интеграции ALL MARKET.">
<section class="max-w-5xl mx-auto px-4 sm:px-6 py-12">
<h1 class="text-4xl font-extrabold text-center">Интеграции</h1>
<p class="text-center text-slate-500 mt-3">Стандартные подключения для розницы Казахстана.</p>

View file

@ -8,7 +8,7 @@ export async function getStaticPaths() {
const { article } = Astro.props
const { Content } = await article.render()
---
<BaseLayout title={article.data.title} description={`База знаний Food Market: ${article.data.title}.`}>
<BaseLayout title={article.data.title} description={`База знаний ALL MARKET: ${article.data.title}.`}>
<article class="max-w-[720px] mx-auto px-4 sm:px-6 py-12">
<a href="/kb" class="text-xs text-brand hover:underline">← Все статьи</a>
<p class="text-xs text-slate-500 mt-4">{article.data.category}</p>

View file

@ -9,10 +9,10 @@ for (const a of articles) {
byCat.get(a.data.category)!.push(a)
}
---
<BaseLayout title="База знаний" description="База знаний Food Market: пошаговые инструкции по работе с программой учёта и кассой.">
<BaseLayout title="База знаний" description="База знаний ALL MARKET: пошаговые инструкции по работе с программой учёта и кассой.">
<section class="max-w-3xl mx-auto px-4 sm:px-6 py-14">
<h1 class="text-4xl font-extrabold">База знаний</h1>
<p class="text-slate-500 mt-2">Пошаговые инструкции по работе с Food Market.</p>
<p class="text-slate-500 mt-2">Пошаговые инструкции по работе с ALL MARKET.</p>
<div class="mt-10 space-y-8">
{Array.from(byCat.entries()).map(([cat, items]) => (
<section>

View file

@ -11,7 +11,7 @@ const { doc } = Astro.props
const { Content } = await doc.render()
const updated = doc.data.last_updated.toLocaleDateString('ru-KZ', { day: '2-digit', month: 'long', year: 'numeric' })
---
<BaseLayout title={doc.data.title} description={`Юридический документ Food Market: ${doc.data.title}.`}>
<BaseLayout title={doc.data.title} description={`Юридический документ ALL MARKET: ${doc.data.title}.`}>
<article class="max-w-[720px] mx-auto px-4 sm:px-6 py-12">
<p class="text-xs text-slate-500 mb-2">Обновлено: {updated}</p>
<div class="prose-legal">

View file

@ -1,7 +1,7 @@
---
import BaseLayout from '@/layouts/BaseLayout.astro'
const features = [
{ icon: '⚖️', title: 'Нативная поддержка торговых весов', text: 'Подключите весы к компьютеру кассира — Food Market распознаёт их автоматически. Поддерживаются электронные весы стандартных протоколов через RS-232 или USB-COM. Никаких сторонних драйверов.' },
{ icon: '⚖️', title: 'Нативная поддержка торговых весов', text: 'Подключите весы к компьютеру кассира — ALL MARKET распознаёт их автоматически. Поддерживаются электронные весы стандартных протоколов через RS-232 или USB-COM. Никаких сторонних драйверов.' },
{ icon: '📡', title: 'Офлайн-режим без потери данных', text: 'Интернет пропал — касса продолжает работать. Все чеки записываются локально. Когда связь вернётся — данные подтянутся в облако автоматически.' },
{ icon: '🛒', title: 'Сканеры штрихкодов любых производителей', text: 'Поддерживаем все стандартные модели работающие как клавиатура (HID-эмуляция). Подключили — и работает. EAN-13/EAN-8/Code128/Datamatrix.' },
{ icon: '🖨️', title: 'Печать чеков на ОКП-совместимом оборудовании', text: 'Любые ОКП РК совместимые принтеры. Драйверы устанавливаются автоматически.' },
@ -20,12 +20,12 @@ const hardware = [
const steps = [
['Скачайте установщик', 'Один файл .msi ~80 МБ'],
['Запустите', 'Нажмите «Далее» три раза'],
['Введите ключ организации', 'Выдаётся в админке Food Market'],
['Введите ключ организации', 'Выдаётся в админке ALL MARKET'],
['Подключите оборудование', 'Касса автоматически распознает весы и сканер'],
['Откройте смену', 'И пробивайте первый чек'],
]
---
<BaseLayout title="Касса для Windows" description="Кассовая программа Food Market для Windows: поддержка торговых весов, офлайн-режим, фискальные чеки ОФД РК, Kaspi Pay." ogImage="/og/pos.png">
<BaseLayout title="Касса для Windows" description="Кассовая программа ALL MARKET для Windows: поддержка торговых весов, офлайн-режим, фискальные чеки ОФД РК, Kaspi Pay." ogImage="/og/pos.png">
<section class="relative overflow-hidden">
<img src="/photos/pos-hero.jpg" alt="" class="absolute inset-0 w-full h-full object-cover" />
<div class="absolute inset-0 bg-gradient-to-r from-slate-900/85 via-slate-900/65 to-slate-900/35"></div>
@ -51,7 +51,7 @@ const steps = [
<span class="w-2.5 h-2.5 rounded-full bg-yellow-400"></span>
<span class="w-2.5 h-2.5 rounded-full bg-green-400"></span>
</div>
<img src="/screenshots/supply-form.png" alt="Окно приёмки в Food Market" class="w-full block rounded-b-md" loading="lazy" />
<img src="/screenshots/supply-form.png" alt="Окно приёмки в ALL MARKET" class="w-full block rounded-b-md" loading="lazy" />
</div>
</section>

View file

@ -2,10 +2,10 @@
import BaseLayout from '@/layouts/BaseLayout.astro'
import BusinessTariffBuilder from '@/components/BusinessTariffBuilder.tsx'
---
<BaseLayout title="Тарифы" description="Простые тарифы Food Market: Старт от 5 000 ₸/мес, Бизнес-конструктор, Сеть по запросу. 90 дней бесплатно без банковской карты." ogImage="/og/pricing.png">
<BaseLayout title="Тарифы" description="Простые тарифы ALL MARKET: Старт от 5 000 ₸/мес, Бизнес-конструктор, Сеть по запросу. 90 дней бесплатно без банковской карты." ogImage="/og/pricing.png">
<section class="bg-gradient-to-br from-emerald-500 via-emerald-600 to-emerald-700 text-white py-16">
<div class="max-w-6xl mx-auto px-4 sm:px-6 text-center">
<h1 class="text-4xl lg:text-5xl font-extrabold drop-shadow">Прозрачные тарифы Food Market</h1>
<h1 class="text-4xl lg:text-5xl font-extrabold drop-shadow">Прозрачные тарифы ALL MARKET</h1>
<p class="text-emerald-50 mt-4 text-lg">Никаких скрытых доплат. CRM, финансы, лояльность — во всех тарифах.</p>
<p class="text-emerald-100/90 mt-2 text-sm">90 дней бесплатно. Без банковской карты. Отмена в любой момент.</p>
</div>

View file

@ -5,7 +5,7 @@ import SignupForm from '@/components/SignupForm.tsx'
const url = Astro.url
const plan = url.searchParams.get('plan') ?? 'start'
---
<BaseLayout title="Регистрация" description="Регистрация в Food Market — 90 дней бесплатно, без банковской карты.">
<BaseLayout title="Регистрация" description="Регистрация в ALL MARKET — 90 дней бесплатно, без банковской карты.">
<section class="max-w-md mx-auto px-4 sm:px-6 py-12">
<h1 class="text-3xl font-extrabold text-center">Создать аккаунт</h1>
<p class="text-center text-slate-500 mt-2">90 дней бесплатно. Без банковской карты.</p>

View file

@ -1,7 +1,7 @@
---
import BaseLayout from '@/layouts/BaseLayout.astro'
---
<BaseLayout title="Status" description="Статус систем Food Market: API, админка, касса.">
<BaseLayout title="Status" description="Статус систем ALL MARKET: API, админка, касса.">
<section class="max-w-2xl mx-auto px-4 sm:px-6 py-14">
<h1 class="text-4xl font-extrabold text-center">Статус систем</h1>
<ul class="mt-10 divide-y divide-slate-200 border border-slate-200 rounded-xl bg-white">