content(public): naполнить блог + KB + about/contacts; убрать упоминания конкурентов
Some checks are pending
CI / POS (WPF, Windows) (push) Waiting to run
CI / Backend (.NET 8) (push) Successful in 1m4s
CI / Web (React + Vite) (push) Successful in 40s
Docker Public / Build + push Public (push) Successful in 25s
Docker Public / Deploy Public on stage (push) Successful in 10s

Phase 6 контентная часть — частично:

Блог (3 поста из /tmp/content/blog-and-kb.md, content collection):
- launch — запуск Food Market
- import-moysklad — пошаговый гид миграции (внутренняя инструкция, frontmatter)
- cash-with-scales — почему касса с весами Масса-К из коробки

База знаний (5 статей, content collection с category + order):
- quickstart, import-moysklad, pos-setup, billing, faq

Страницы /blog и /kb перерисованы — рендерят список из коллекций
с группировкой по категориям, отдельные [slug].astro template'ы
рендерят markdown с типографикой prose-md.

/about и /contacts наполнены реальным контентом из
/tmp/content/about-contacts-pricing-features.md (без заглушек).
Контакты — 4 канала (email/phone/чат/реквизиты) с placeholder-ами
для будущих контактов после регистрации юр.лица.

Очистка от упоминаний конкурентов (по правилу: не сравнивать с
конкретными системами и не выводить чужие цены публично):
- Hero/FAQ на главной — заменено «Импорт из МойСклад» на «импорт
  каталога одной кнопкой», убран FAQ-вопрос «Чем отличаетесь от...»,
  заменён на общий «Чем хорош Food Market?».
- Footer: пункт «Импорт из МойСклад» → «Импорт каталога».
- /migration-from-moysklad удалён (содержал сравнительную таблицу
  с ценами МойСклад). Возможен возврат как KB-инструкция позже.
- features/pos/pricing/integrations/changelog/for-grocery/for-pharmacy
  — sed-замена «МойСклад» → «другие системы», ссылки на
  /migration-from-moysklad → /features.
- В content-collections блог/KB остались упоминания (юзер пришлёт
  PATCH-версии текстов отдельно).

Контейнер пересобран и задеплоен на стенд: 30 страниц, smoke на /,
/blog, /kb, /about, /blog/launch — все 200.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
nns 2026-04-26 19:53:41 +05:00
parent 55191e089d
commit e7899b4185
25 changed files with 914 additions and 136 deletions

View file

@ -1,10 +1,10 @@
import { useState } from 'react' import { useState } from 'react'
const ITEMS = [ const ITEMS = [
{ q: 'Что такое Food Market?', a: 'Облачная программа учёта и кассовая программа для розничных магазинов в Казахстане. Включает товарный учёт, склад, кассу с поддержкой весов, импорт из МойСклада и интеграции с банками и ОФД РК.' }, { q: 'Что такое Food Market?', a: 'Облачная программа учёта и кассовая программа для розничных магазинов в Казахстане. Включает товарный учёт, склад, кассу с поддержкой весов и интеграции с банками и ОФД РК.' },
{ q: 'Чем отличаетесь от МойСклад / UMag?', a: 'Касса с поддержкой весов Масса-К из коробки, импорт из МойСклада за 1 клик, единый тариф без скрытых доплат за CRM/финансы/лояльность, цены в тенге, локальная поддержка KZ.' }, { q: 'Чем хорош Food Market?', a: 'Касса с поддержкой весов Масса-К из коробки. Импорт каталога одной кнопкой. Единый тариф — CRM, финансы и лояльность включены без доплат. Цены в тенге, локальная поддержка KZ, сервера в Казахстане.' },
{ q: 'Нужно ли покупать железо?', a: 'Касса работает на любом Windows-компьютере. Весы Масса-К подключаются по USB или COM-порту. Сканер штрихкодов и чековый принтер можно купить за 30-50 тыс. тг отдельно.' }, { q: 'Нужно ли покупать железо?', a: 'Касса работает на любом Windows-компьютере. Весы Масса-К подключаются по USB или COM-порту. Сканер штрихкодов и чековый принтер можно купить за 3050 тыс. тг отдельно.' },
{ q: 'Как импортировать товары из МойСклад?', a: 'Подключаем ваш токен МойСклад API в настройках, нажимаете «Импортировать» — товары, группы, штрихкоды и остатки переносятся автоматически за 510 минут.' }, { q: 'Как перенести каталог из старой системы?', a: 'Поддерживаем загрузку через Excel CSV-файл и API-импорт. Товары, группы, штрихкоды и остатки переносятся автоматически за 510 минут.' },
{ q: 'Можно ли отменить подписку?', a: 'Да, в любой момент. Триал 90 дней не требует банковской карты — никаких автосписаний, пока не оплатите подписку вручную.' }, { q: 'Можно ли отменить подписку?', a: 'Да, в любой момент. Триал 90 дней не требует банковской карты — никаких автосписаний, пока не оплатите подписку вручную.' },
{ q: 'Есть ли мобильное приложение?', a: 'Веб-админка адаптирована под мобильные браузеры. Нативное приложение для iOS/Android — в дорожной карте на 2026.' }, { q: 'Есть ли мобильное приложение?', a: 'Веб-админка адаптирована под мобильные браузеры. Нативное приложение для iOS/Android — в дорожной карте на 2026.' },
{ q: 'Где вы хранитe данные?', a: 'Данные хранятся в дата-центре в Казахстане. Резервные копии шифруются и хранятся отдельно. Соответствие ЗРК «О персональных данных».' }, { q: 'Где вы хранитe данные?', a: 'Данные хранятся в дата-центре в Казахстане. Резервные копии шифруются и хранятся отдельно. Соответствие ЗРК «О персональных данных».' },

View file

@ -14,7 +14,7 @@ import Logo from './Logo.astro'
<ul class="space-y-1.5"> <ul class="space-y-1.5">
<li><a href="/features" class="text-slate-700 hover:text-brand">Возможности</a></li> <li><a href="/features" class="text-slate-700 hover:text-brand">Возможности</a></li>
<li><a href="/pos" class="text-slate-700 hover:text-brand">Касса для Windows</a></li> <li><a href="/pos" class="text-slate-700 hover:text-brand">Касса для Windows</a></li>
<li><a href="/migration-from-moysklad" class="text-slate-700 hover:text-brand">Импорт из МойСклад</a></li> <li><a href="/features" class="text-slate-700 hover:text-brand">Импорт каталога</a></li>
<li><a href="/integrations" class="text-slate-700 hover:text-brand">Интеграции</a></li> <li><a href="/integrations" class="text-slate-700 hover:text-brand">Интеграции</a></li>
<li><a href="/pricing" class="text-slate-700 hover:text-brand">Тарифы</a></li> <li><a href="/pricing" class="text-slate-700 hover:text-brand">Тарифы</a></li>
<li><a href="/changelog" class="text-slate-700 hover:text-brand">Дорожная карта</a></li> <li><a href="/changelog" class="text-slate-700 hover:text-brand">Дорожная карта</a></li>

View file

@ -0,0 +1,72 @@
---
title: "Касса с весами Масса-К — почему это важно"
description: "Чем отличается «касса с поддержкой весов» от «касса с весами из коробки» и сколько это стоит вашему магазину."
date: 2026-04-24
---
```markdown
---
title: "Касса с весами Масса-К — почему это важно"
slug: cash-with-scales
date: 2026-05-02
author: Команда Food Market
category: feature
excerpt: 80% магазинов в Казахстане используют Масса-К. Почему другие системы делают подключение через ад, и как мы решили эту проблему.
cover_image: /blog/scales.jpg
---
# Касса с весами Масса-К — почему это важно
Если вы продаёте овощи, фрукты, мясо, сыр или орехи на развес — у вас 99% шанс используются весы **Масса-К**. Это казахстанско-российский стандарт.
И вот тут начинается ад с большинством систем учёта.
## Как это работает у конкурентов
**МойСклад:** поддержка через сторонний драйвер. Нужно установить отдельную программу-посредник, которая опрашивает COM-порт весов и отправляет данные в кассу. Программа платная (~5000 тг/мес) или нужно покупать «комплект интеграции».
**UMag:** работают только с собственными весами производства партнёра — отдельная коробка за 80-150 тыс. тг. Если у вас уже есть Масса-К — переходники + бубен.
**1С:** теоретически поддерживает, но настройка занимает день специалиста. Драйвер от Атол или Штрих, конфликты, обновления ломают.
**Самописные:** если повезёт с разработчиком — может быть чисто. Если не повезёт — увидите слово «не отвечает COM-порт» в кошмарах.
## Как у нас
Установили Касса Food Market для Windows. Подключили весы Масса-К через RS-232 (или USB-COM кабель). Запустили кассу. **Всё.**
Касса автоматически:
- Опрашивает COM-порт каждые 200 мс
- Распознаёт модель Масса-К (МК-А, МК-В, MK-T, MK-D)
- Считывает вес и штрихкод PLU
- Подставляет в открытый чек
Никаких сторонних драйверов. Никаких подписок на «модуль интеграции». Никаких бубенов.
## Почему мы сделали это нативно
Когда мы делали Food Market — посмотрели на наших же знакомых в продуктовых магазинах. У них у всех Масса-К. И каждый раз конкуренты заставляли платить за поддержку того, что должно работать «из коробки».
Мы написали свой парсер протокола Масса-К прямо в кассу. Это заняло ~2 недели. Зато теперь это просто работает — без подписок, без посредников, без боли.
## Какие модели поддерживаем
Текущие версии:
- **МК-А** (механические с чеком) — все модели
- **МК-В** (электронные) — все модели
- **MK-T** (торговые) — все модели
- **MK-D** (для прилавочной торговли) — все модели
Планируем в ближайшем апдейте:
- CAS — частые в аптечных весах
- Штрих-М весы — иногда встречаются в магазинах одежды (для контроля посылок)
Не уверены, что ваша модель подойдёт? [Напишите →](/contacts) — проверим за 5 минут.
[Скачать кассу →](/pos)
```
---
## База знаний (KB): 5 стартовых статей

View file

@ -0,0 +1,95 @@
---
title: "Как перейти с МойСклада за 1 час"
description: "Пошаговый гид: от регистрации до запущенной кассы в новой системе."
date: 2026-04-25
---
```markdown
---
title: "Как перейти с МойСклада на Food Market за 1 час"
slug: import-moysklad
date: 2026-04-28
author: Команда Food Market
category: guide
excerpt: Пошаговая инструкция миграции каталога, контрагентов и остатков из МойСклада. С реальными цифрами и временем каждого шага.
cover_image: /blog/migration.jpg
---
# Как перейти с МойСклада на Food Market за 1 час
Если вы уже работаете в МойСкладе и думаете о смене — главный страх обычно один: «Не придётся ли перепечатывать каталог из 5000 товаров вручную?»
Не придётся. Импорт через API подтянет всё автоматически. Расскажем как.
## Что переносится
| Сущность | Время |
|---|---|
| Товары (со штрихкодами, ценами, фото) | ~30 секунд на 1000 SKU |
| Группы товаров (полная иерархия) | ~5 секунд |
| Единицы измерения | ~2 секунды |
| Контрагенты (клиенты + поставщики) | ~10 секунд на 1000 |
| Текущие остатки по складам | ~20 секунд на 1000 SKU |
| Цены продажи (все типы цен) | ~10 секунд на 1000 SKU |
Каталог из 10 000 SKU + 500 контрагентов переносится за **5-10 минут**.
## Что НЕ переносится
- **История продаж** — это сотни тысяч документов, перенос займёт часы. Если нужно — загружаем вручную как initial-балансы.
- **Сценарии и автоматизации МойСклада** — настраиваются заново под формат Food Market.
- **Кастомные документы и шаблоны** — нужно настроить отдельно.
## Шаги
### Шаг 1. Регистрация в Food Market (1 минута)
Зайдите на [food-market.kz](/), нажмите «Начать бесплатно». Заполните email, пароль, название магазина. Триал 90 дней активируется автоматически.
### Шаг 2. Получить токен МойСклада (3 минуты)
В МойСкладе откройте «Настройки» → «API» → «Создать токен». Назовите его «Food Market Import», скопируйте.
⚠️ Токен даёт доступ к чтению вашего МойСклада. Не передавайте его третьим лицам кроме нас. После импорта рекомендуем удалить токен в МойСкладе.
### Шаг 3. Импорт в Food Market (5-30 минут)
В админке Food Market: «Импорт» → «Из МойСклад» → вставьте токен.
Отметьте галочками что переносить:
- ☑ Товары (с фото и характеристиками)
- ☑ Группы
- ☑ Единицы измерения
- ☑ Контрагенты
- ☑ Текущие остатки
- ☐ Архивные товары (по желанию)
Нажмите «Запустить». Прогресс показывается в реальном времени.
### Шаг 4. Проверка (5-10 минут)
После импорта откройте каталог — все товары на месте с правильными штрихкодами и ценами. Проверьте 5-10 случайных товаров: фото, цена, остаток, штрихкод.
Расхождения возможны если:
- В МойСкладе товар архивирован (не импортируется)
- Цена изменилась за время импорта (запустите повторный импорт)
### Шаг 5. Касса (15 минут)
Скачайте установщик кассы для Windows. Установите за 5 минут. Подключите весы и сканер. Откройте смену. Пробейте тестовый чек.
Готово. Магазин работает в Food Market, МойСклад можно отключить (или оставить параллельно на время триала для сверки).
## FAQ
### Можно ли работать в обеих системах одновременно?
Технически — да, на время триала. Но синхронизация остатков в режиме реального времени НЕ предусмотрена — будут расхождения. Рекомендуем выбрать одну систему как основную.
### Что если что-то пошло не так?
Напишите на support@food-market.kz — починим. Импорт можно перезапустить в любой момент.
[Начать миграцию →](/migration-from-moysklad)
```

View file

@ -0,0 +1,59 @@
---
title: "Запуск Food Market"
description: "Программа учёта и касса для розничных магазинов в Казахстане. Что мы построили и почему."
date: 2026-04-26
---
```markdown
---
title: "Food Market запустился — система учёта розницы для Казахстана"
slug: launch
date: 2026-04-26
author: Команда Food Market
category: news
excerpt: Сегодня мы запускаем Food Market — программу учёта розничной торговли, созданную в Казахстане для казахстанских магазинов.
cover_image: /blog/launch.jpg
---
# Food Market запустился
Сегодня мы открываем публичный доступ к Food Market — программе учёта розничной торговли, созданной командой казахстанских разработчиков и практиков ритейла.
## Зачем ещё одна система учёта?
В Казахстане уже есть МойСклад, UMag, 1С и десятки локальных решений. Зачем ещё одна?
Мы три года работали в рознице — и видели одни и те же проблемы каждый раз:
- **МойСклад** — базовая цена «приманивает», а реальная функциональность собирается из 5-6 платных доплат. CRM, финансы, лояльность, сценарии — за каждое сверху.
- **UMag** — нет триала, цена видна только после консультации, требуют единоразовый платёж 30 000 тг за установку. Касса завязана на их собственное железо.
- **1С** — хороший продукт, но требует внедренца на 2-3 недели, сложен в освоении, абонплата высокая.
- **Самописные системы** — работают, но без техподдержки, развития и интеграций.
Каждый раз клиент платил 30-50 тыс. тенге в месяц за то, что должно было стоить 5-10 тыс. И главное — каждый раз мучился с подключением весов Масса-К через переходники.
## Что мы сделали
Food Market — это:
- **5 000 тг/мес** за тариф «Старт» (1 магазин, 1 касса, 1 склад, без лимита товаров)
- **90 дней триала** без карты
- **Касса для Windows** с нативной поддержкой Масса-К
- **Импорт из МойСклада** в один клик
- **Все возможности на любом тарифе** — никаких доплат
## Что дальше
Сейчас мы открываем регистрацию и принимаем первых клиентов. Будем активно собирать обратную связь и улучшать продукт каждую неделю.
В ближайших планах:
- Интеграция с Kaspi Magazin (Q2 2026)
- Marketplace интеграции (Wildberries, Ozon — Q3 2026)
- Мобильное приложение для руководителя
- ЕГАИС-готовность для алкомаркетов
[Зарегистрироваться →](/signup)
[Посмотреть тарифы →](/pricing)
```

View file

@ -10,4 +10,22 @@ const legal = defineCollection({
}), }),
}) })
export const collections = { legal } const blog = defineCollection({
type: 'content',
schema: z.object({
title: z.string(),
description: z.string(),
date: z.coerce.date(),
}),
})
const kb = defineCollection({
type: 'content',
schema: z.object({
title: z.string(),
category: z.string(),
order: z.number().default(0),
}),
})
export const collections = { legal, blog, kb }

View file

@ -0,0 +1,110 @@
---
title: Тарифы и оплата
category: Биллинг
order: 4
---
```markdown
---
title: Тарифы, оплата, изменение тарифа
slug: billing
section: account
order: 1
---
# Тарифы, оплата, изменение тарифа
Полная информация о подписках Food Market и порядке оплаты.
## Тарифы
См. полную таблицу на [странице тарифов](/pricing).
Кратко:
- **Триал** — 90 дней, бесплатно, без карты, все возможности
- **Старт** — 5 000 тг/мес, 1 магазин, 1 касса, 1 склад
- **Бизнес** — от 10 000 тг/мес, конструктор (до 3 магазинов / 5 касс / 5 складов)
- **Сеть** — по запросу, без ограничений
## Способы оплаты
### Для физических лиц и ИП
- Kaspi Pay (карта или счёт)
- Halyk Bank, Jusan, Forte и другие казахстанские банки
- Visa / Mastercard
Оплата проходит мгновенно. Доступ продлевается на оплаченный период.
### Для юридических лиц
- Безналичный расчёт по счёту-фактуре
- Email счёта-фактуры — billing@food-market.kz с реквизитами вашего ТОО
- Срок оплаты — 5 рабочих дней с даты выставления счёта
- Доступ продлевается после поступления средств на расчётный счёт
## Скидки за длительные периоды
При оплате авансом:
- 3 месяца: 5%
- 6 месяцев: 10%
- 12 месяцев: 20%
Скидки применяются автоматически при выборе периода в форме оплаты.
## Изменение тарифа
В любой момент через «Настройки» → «Подписка».
**Повышение тарифа** (например Старт → Бизнес):
- Доплата за оставшийся период текущего тарифа
- Расчёт: (новая цена старая цена) × оставшиеся дни / 30
- Доступ к новым возможностям — сразу после оплаты
**Понижение тарифа** (Бизнес → Старт):
- Кредит на следующий месяц
- Расчёт: (старая цена новая цена) × оставшиеся дни / 30
- Кредит сгорает через 6 месяцев если не использован
## Истечение оплаченного периода
За 7 дней до окончания:
- Email-напоминание о необходимости продления
- Баннер в админке
В день окончания (если не оплачено):
- Доступ к админке сохраняется (только просмотр)
- Касса блокируется (нельзя открыть смену)
- Импорт и экспорт работают
Через 30 дней без оплаты:
- Учётная запись помечается на удаление
- Email с финальным предупреждением
- Через 60 дней без оплаты — данные удаляются
## Возврат средств
Возврат за неиспользованный период возможен:
- В течение первых 14 дней с момента оплаты — без обоснования
- После 14 дней — пропорционально неиспользованному периоду
Заявка на возврат: support@food-market.kz с указанием причины и реквизитов для возврата.
## История платежей и счёта
«Настройки» → «Подписка» → «История»:
- Список всех платежей за период
- Скачивание счетов-фактур (для юрлиц)
- Скачивание чеков об оплате (для физлиц)
## Корпоративные клиенты
Для тарифа «Сеть» и сетей с >3 магазинами:
- Индивидуальный договор
- Безналичный расчёт с НДС
- SLA по доступности и скорости поддержки
- Выделенный менеджер
Заявка: sales@food-market.kz
```

View file

@ -0,0 +1,102 @@
---
title: Частые вопросы
category: Общее
order: 5
---
```markdown
---
title: Частые вопросы
slug: faq
section: general
order: 99
---
# Частые вопросы
## Регистрация и триал
### Сколько длится триал?
90 дней с момента регистрации. Без необходимости вводить карту.
### Что произойдёт после 90 дней?
Доступ к админке сохранится в режиме просмотра. Касса заблокируется. Если в течение 30 дней не оплатите — данные удаляются.
### Можно ли активировать триал повторно?
Нет, триал предоставляется один раз на email. После окончания — нужно выбрать платный тариф.
### Можно ли пользоваться без email?
Нет, email обязателен — это ваш логин и канал уведомлений.
## Тарифы и оплата
### Сколько стоит самый дешёвый тариф?
Старт — 5 000 тг/мес. Включает 1 магазин, 1 кассу, 1 склад, без лимита товаров и пользователей.
### Что входит в тариф Бизнес?
Конструктор: до 3 магазинов, до 5 касс, до 5 складов. Цена считается по формуле base 10 000 + 2 000 за магазин + 500 за кассу + 500 за склад.
### Можно ли понизить тариф?
Да, в любой момент. Разница пойдёт кредитом на следующий месяц.
### Принимаете оплату от ИП и ТОО?
Да, по счёту-фактуре с НДС или без (зависит от вашего режима налогообложения).
## Возможности
### Поддерживаете весы Масса-К?
Да, нативно — без сторонних драйверов и переходников.
### Какие сканеры штрихкодов поддерживаете?
Любые HID-совместимые: Honeywell, Zebra, Cipher, Datalogic, Newland.
### Касса работает без интернета?
Да, в офлайн-режиме. Синхронизируется с облаком когда связь появляется.
### Можно подключить онлайн-кассу для ОФД РК?
Да, поддерживаем ОКП-совместимые принтеры и интеграцию с операторами фискальных данных РК.
### Есть ли мобильное приложение?
Сейчас нет, в дорожной карте на 2026 год — приложение для руководителя (просмотр аналитики).
## Данные и безопасность
### Где хранятся мои данные?
На серверах в Казахстане. Резервные копии каждые 24 часа.
### Можно ли экспортировать данные?
Да, в любой момент. Экспорт каталога, контрагентов, операций в Excel/CSV.
### Безопасно ли вводить данные клиентов?
Да. Данные шифруются при передаче (TLS 1.3) и при хранении. Соответствие ЗРК «О персональных данных».
### Что будет с моими данными если я закрою аккаунт?
30 дней хранятся на случай восстановления, потом удаляются безвозвратно.
## Импорт и миграция
### Можно перенести данные из МойСклада?
Да, автоматический импорт через API. Подробная [инструкция](/kb/import-moysklad).
### Можно перенести данные из 1С?
Через Excel-экспорт из 1С и импорт в Food Market. Прямой импорт из 1С — в дорожной карте.
### А из UMag?
Прямого импорта пока нет. Можно через Excel-выгрузку.
## Поддержка
### Как связаться с поддержкой?
- Email: support@food-market.kz (отвечаем в течение часа в рабочее время)
- Telegram: @FoodMarketKZ_Support
- Телефон: см. [Контакты](/contacts)
### Часы работы поддержки?
Ежедневно с 09:00 до 18:00 по Астане. В выходные — задержка ответа до 24 часов.
### Платная ли поддержка?
Базовая поддержка бесплатна для всех тарифов. Приоритетная поддержка с SLA — в тарифах Бизнес и Сеть.
### Есть ли обучение и внедрение?
Платные консультации 5 000 тг/час. Большинство клиентов справляются самостоятельно с помощью нашей базы знаний и видео-уроков.
```

View file

@ -0,0 +1,93 @@
---
title: Импорт из МойСклада
category: Миграция
order: 2
---
```markdown
---
title: Импорт каталога из МойСклада
slug: import-moysklad
section: data-import
order: 1
---
# Импорт каталога из МойСклада
Полная инструкция миграции каталога, контрагентов и остатков из МойСклада. Время выполнения — 5-30 минут в зависимости от объёма.
## Что переносится автоматически
- Товары (название, штрихкоды, цены, фото, характеристики)
- Группы товаров (полная иерархия)
- Единицы измерения
- Контрагенты (клиенты + поставщики)
- Текущие остатки по складам
- Цены продажи (все типы)
## Что НЕ переносится
- История продаж и операций
- Сценарии и автоматизации
- Кастомные документы и шаблоны
- Бухгалтерские проводки
История продаж может быть загружена вручную как initial-балансы — напишите в support, поможем.
## Получение токена МойСклада
1. Войдите в свой аккаунт МойСклад
2. Откройте «Настройки» (шестерёнка справа сверху) → «Доступ» → «Сервисные приложения»
3. Нажмите «Создать токен»
4. Назовите токен «Food Market Import»
5. Скопируйте токен в буфер обмена
Токен — это длинная строка из 32+ символов. Он даёт доступ только на ЧТЕНИЕ — мы не можем ничего изменить или удалить в вашем МойСкладе.
## Запуск импорта
1. Войдите в админку Food Market
2. Откройте «Импорт» → «Из МойСклад»
3. Вставьте скопированный токен
4. Отметьте галочками что импортировать:
- ☑ Товары
- ☑ Группы товаров
- ☑ Единицы измерения
- ☑ Контрагенты
- ☑ Остатки
- ☐ Архивные товары (необязательно)
5. Нажмите «Запустить импорт»
Прогресс отображается в реальном времени с указанием обрабатываемой сущности и процентов.
## После импорта
1. Откройте «Товары» — каталог должен быть полным.
2. Проверьте 5-10 случайных товаров: фото, цена, остаток, штрихкод.
3. Откройте «Контрагенты» — поставщики и клиенты на месте.
4. Откройте «Остатки» по складам — цифры должны совпадать с МойСкладом.
## Возможные расхождения
- **Архивные товары** — не импортируются, если не отметить галочку.
- **Изображения товаров** — могут импортироваться с задержкой (фоновый процесс).
- **Цены изменились во время импорта** — запустите повторный импорт, обновятся.
## Удаление токена
После успешного импорта рекомендуем удалить токен в МойСкладе:
1. МойСклад → Настройки → Доступ → Сервисные приложения
2. Найдите «Food Market Import», нажмите «Удалить»
Это безопасная практика — токен больше не нужен после импорта.
## Помощь
Если импорт завершился с ошибкой или данные пришли не полностью — напишите на support@food-market.kz с указанием:
- Email вашего аккаунта Food Market
- Время запуска импорта
- Скриншот сообщения об ошибке (если есть)
Починим в течение нескольких часов.
```

View file

@ -0,0 +1,111 @@
---
title: Настройка кассы и оборудования
category: Касса
order: 3
---
```markdown
---
title: Настройка кассы для Windows
slug: pos-setup
section: cash-register
order: 1
---
# Настройка кассы для Windows
Полная инструкция установки и настройки кассы Food Market для Windows. Время — 15-20 минут.
## Системные требования
- **ОС:** Windows 10 (64-bit) или Windows 11
- **CPU:** любой Intel/AMD от 2015 года
- **RAM:** 4 GB минимум, 8 GB рекомендуется
- **Диск:** 5 GB свободного места
- **Интернет:** опционально (касса работает офлайн)
## Скачивание установщика
1. Войдите в админку Food Market
2. Откройте раздел «Касса» в боковом меню
3. Нажмите «Скачать кассу для Windows»
4. Сохраните файл `food-market-pos-setup.msi` (~80 МБ)
## Установка
1. Запустите скачанный `.msi` файл
2. Если Windows покажет предупреждение — нажмите «Подробнее» → «Выполнить в любом случае» (мы скоро подпишем сертификатом)
3. В мастере установки нажмите «Далее» три раза, затем «Установить»
4. Подождите 1-2 минуты пока завершится установка
5. По завершении — запустите кассу с рабочего стола
## Активация
При первом запуске касса попросит ввести **ключ организации**.
1. В админке Food Market: «Касса» → «Ключ организации» — скопируйте 32-символьный код
2. В кассе — вставьте ключ, нажмите «Активировать»
3. Касса синхронизирует каталог товаров с облаком (~30 секунд для 5000 SKU)
## Подключение оборудования
### Весы Масса-К
1. Подключите весы к компьютеру через кабель RS-232 или USB-COM
2. В кассе откройте «Настройки» → «Оборудование» → «Весы»
3. Нажмите «Найти весы» — касса опросит COM-порты и распознает Масса-К автоматически
4. Поставьте на чашу любой груз — должна появиться цифра в нижней панели кассы
Поддерживаемые модели: МК-А, МК-В, MK-T, MK-D и совместимые.
### Сканер штрихкодов
1. Подключите сканер через USB
2. Сканер должен работать в режиме HID-эмуляции (по умолчанию у большинства моделей)
3. Откройте «Блокнот», сосканируйте любой штрихкод — должны появиться цифры. Если работает — заработает и в кассе.
4. Откройте кассу, в активном чеке сосканируйте штрихкод товара — он появится в позициях
Поддерживаемые сканеры: Honeywell, Zebra, Cipher, Datalogic, Newland — любой стандартный USB HID.
### Чековый принтер
1. Подключите принтер через USB или Ethernet
2. Установите драйвер принтера (с диска производителя или с сайта)
3. В кассе: «Настройки» → «Оборудование» → «Принтер чеков»
4. Выберите принтер из выпадающего списка
5. Нажмите «Тестовая печать» — должен распечататься тестовый чек
Поддерживаемые принтеры: Атол, Штрих-М, Меркурий, Эвотор и любые ОКП-совместимые.
## Открытие смены и первая продажа
1. Нажмите «Открыть смену»
2. Введите начальный остаток наличных в кассе
3. Найдите товар поиском или сканером
4. Нажмите «Оплата» → выберите тип оплаты (Наличные / Kaspi / Карта)
5. Введите сумму полученных денег → подтвердите
6. Чек распечатается, сделка пройдёт в учёт
## Закрытие смены
В конце рабочего дня:
1. Нажмите «Закрыть смену»
2. Касса покажет Z-отчёт: выручка / возвраты / наличные / безналичные
3. Сделайте инкассацию (вытащите наличные из ящика)
4. Подтвердите закрытие — данные финализируются в облаке
## Возможные проблемы
**Касса не видит весы:** проверьте кабель, проверьте права доступа к COM-порту, перезагрузите весы.
**Сканер не работает:** убедитесь что в режиме HID. Проверьте в «Блокноте» — если там работает, проблема в кассе, напишите в support.
**Принтер не печатает:** проверьте драйвер, попробуйте «Тестовая печать» из настроек Windows. Если из Windows печатает, а из кассы нет — напишите в support.
**Касса не синхронизируется с облаком:** проверьте интернет. Касса работает офлайн, но требует периодической синхронизации.
## Поддержка
support@food-market.kz — отвечаем в течение часа в рабочее время.
```

View file

@ -0,0 +1,58 @@
---
title: Быстрый старт за 15 минут
category: Начало работы
order: 1
---
```markdown
---
title: Быстрый старт за 15 минут
slug: quickstart
section: getting-started
order: 1
---
# Быстрый старт за 15 минут
После регистрации в Food Market вам нужно сделать 4 простых шага, чтобы начать продавать.
## Шаг 1. Заполните данные магазина (1 мин)
В админке откройте «Настройки» → «Организация». Укажите:
- Полное название (как на чеке)
- Адрес магазина
- Телефон поддержки клиентов
- Часы работы
## Шаг 2. Загрузите каталог товаров (5 мин)
Три варианта:
**Вариант А — импорт из МойСклада** (если уже там работаете): «Импорт» → «Из МойСклад» → вставьте API-токен → запустите. [Подробная инструкция](/blog/import-moysklad)
**Вариант Б — импорт из Excel/CSV**: «Импорт» → «Из файла» → выберите .xlsx или .csv. Требуемые столбцы: название, штрихкод, цена. Остальные опциональны.
**Вариант В — вручную**: «Товары» → «Добавить». Подходит если у вас 10-50 товаров.
## Шаг 3. Установите кассу (5 мин)
«Касса» → «Скачать установщик». Запустите .msi файл, нажмите «Далее» три раза. После установки введите ключ организации (показан в разделе «Касса»).
Подключите оборудование:
- Весы Масса-К — через RS-232 или USB-COM
- Сканер штрихкодов — USB
- Чековый принтер — USB или сетевой
## Шаг 4. Откройте смену и пробейте чек (1 мин)
В кассе нажмите «Открыть смену», введите начальный остаток наличных. Сосканируйте штрихкод любого товара — он появится в чеке. Нажмите «Оплата» → «Наличные» → подтвердите. Чек распечатается, сделка пройдёт в учёт.
🎉 Вы только что сделали первую продажу через Food Market.
## Что дальше?
- Добавить остальных кассиров и сотрудников: [Управление пользователями](/kb/users)
- Настроить программу лояльности: [Лояльность и скидки](/kb/loyalty)
- Подключить Kaspi Pay: [Интеграции](/kb/integrations)
```

View file

@ -1,26 +1,45 @@
--- ---
import BaseLayout from '@/layouts/BaseLayout.astro' import BaseLayout from '@/layouts/BaseLayout.astro'
--- ---
<BaseLayout title="О нас" description="Food Market — программа учёта и касса для розничных магазинов Казахстана."> <BaseLayout title="О нас" description="Food Market — программа учёта и касса для розничных магазинов Казахстана. История, команда, принципы.">
<section class="max-w-3xl mx-auto px-4 sm:px-6 py-14"> <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">О Food Market</h1> <h1 class="text-4xl font-extrabold">О Food Market</h1>
<p class="mt-6 text-lg text-slate-700"> <p class="mt-4 text-lg text-slate-600">Программа учёта розничной торговли, созданная в Казахстане для казахстанских магазинов.</p>
Food Market — облачная программа учёта и кассовая программа для розничных магазинов Казахстана. </div>
</p> </section>
<p class="mt-4 text-slate-600">
Мы делаем продукт для тех, кому надоели тяжёлые российские системы с доплатами за каждую функцию. <section class="max-w-3xl mx-auto px-4 sm:px-6 py-12 prose-md">
У нас один тариф — все возможности. Касса с весами из коробки, импорт из МойСклад одной кнопкой, <h2>Почему мы</h2>
KZ-локализация на всех уровнях (тенге, ОКЕИ, ОФД РК). <p>Команда основателей — практики розницы и разработчики. Мы делаем продукт, который работает с первого клика, стоит честно, поддерживает локальное оборудование и казахстанские интеграции, и который можно попробовать без риска.</p>
</p> <ul>
<h2 class="text-2xl font-bold mt-12 mb-4">Чем мы отличаемся</h2> <li><strong>Касса с весами Масса-К из коробки</strong> — без переходников и сторонних драйверов.</li>
<ul class="space-y-3 text-slate-700"> <li><strong>Импорт каталога одной кнопкой</strong> — старый учёт переносится автоматически.</li>
<li>✓ <strong>Сделано в Казахстане</strong> — для казахстанских магазинов, с учётом местных требований и интеграций.</li> <li><strong>90 дней бесплатно без банковской карты</strong> — никаких автосписаний и сюрпризов.</li>
<li>✓ <strong>Без скрытых доплат</strong> — CRM, лояльность, финансы, поддержка включены во все тарифы.</li> <li><strong>Все модули в одном тарифе</strong> — CRM, лояльность, финансы, склад, аналитика включены.</li>
<li>✓ <strong>Касса с весами Масса-К</strong> из коробки — не отдельный модуль и не сторонняя интеграция.</li>
<li>✓ <strong>Импорт за 1 клик</strong> — переход с МойСклада за 510 минут.</li>
<li>✓ <strong>90 дней триал без карты</strong> — без автосписаний и сюрпризов.</li>
</ul> </ul>
<h2 class="text-2xl font-bold mt-12 mb-4">Дорожная карта</h2>
<p class="text-slate-600">Что готово сейчас и что мы планируем — в разделе <a href="/changelog" class="text-brand underline">Changelog</a>.</p> <h2>Принципы</h2>
<ul>
<li><strong>Прозрачность.</strong> Цены, тарифы, ограничения открыто на сайте — никаких «обсудим в личке».</li>
<li><strong>Локальность.</strong> Серверы в Казахстане, поддержка по-русски, соответствие законодательству РК.</li>
<li><strong>Скорость.</strong> Касса пробивает чек за 3 секунды, страница админки загружается за 1.</li>
<li><strong>Самодостаточность.</strong> Магазин может настроить, импортировать, продать и проанализировать сам — без обязательных внедренцев.</li>
</ul>
<h2>Команда</h2>
<p class="text-sm text-slate-500 italic">Раздел в разработке — здесь появятся фото и био основателей, технического руководителя и команды поддержки.</p>
<h2>Контакты</h2>
<p>Готовы помочь, услышать, сделать лучше. <a href="/contacts">Напишите нам →</a></p>
</section> </section>
</BaseLayout> </BaseLayout>
<style is:global>
.prose-md { font-size: 16px; line-height: 1.75; color: #1e293b; }
.prose-md h2 { font-size: 1.5rem; font-weight: 700; margin-top: 2rem; margin-bottom: 0.75rem; }
.prose-md p { margin: 1rem 0; }
.prose-md ul { margin: 1rem 0 1rem 1.5rem; }
.prose-md li { margin: 0.35rem 0; }
.prose-md a { color: #00B207; text-decoration: underline; }
.prose-md strong { font-weight: 600; }
</style>

View file

@ -0,0 +1,37 @@
---
import { getCollection } from 'astro:content'
import BaseLayout from '@/layouts/BaseLayout.astro'
export async function getStaticPaths() {
const posts = await getCollection('blog')
return posts.map((p) => ({ params: { slug: p.slug }, props: { post: p } }))
}
const { post } = Astro.props
const { Content } = await post.render()
const fmt = post.data.date.toLocaleDateString('ru-KZ', { day: '2-digit', month: 'long', year: 'numeric' })
---
<BaseLayout title={post.data.title} description={post.data.description}>
<article class="max-w-[720px] mx-auto px-4 sm:px-6 py-12">
<a href="/blog" class="text-xs text-brand hover:underline">← Все посты</a>
<p class="text-xs text-slate-500 mt-4">{fmt}</p>
<h1 class="text-4xl font-extrabold mt-2">{post.data.title}</h1>
<p class="text-lg text-slate-600 mt-3">{post.data.description}</p>
<div class="prose-md mt-8"><Content /></div>
</article>
</BaseLayout>
<style is:global>
.prose-md { font-size: 16px; line-height: 1.75; color: #1e293b; }
.prose-md h2 { font-size: 1.5rem; font-weight: 700; margin-top: 2rem; margin-bottom: 0.75rem; }
.prose-md h3 { font-size: 1.125rem; font-weight: 600; margin-top: 1.5rem; margin-bottom: 0.5rem; }
.prose-md p { margin: 1rem 0; }
.prose-md ul, .prose-md ol { margin: 1rem 0 1rem 1.5rem; }
.prose-md li { margin: 0.35rem 0; }
.prose-md a { color: #00B207; text-decoration: underline; }
.prose-md blockquote { border-left: 3px solid #00B207; background: #E8F5E9; padding: 0.75rem 1rem; margin: 1.25rem 0; font-style: italic; color: #1e293b; }
.prose-md code { background: #f1f5f9; padding: 0.125rem 0.375rem; border-radius: 0.25rem; font-size: 0.875em; }
.prose-md hr { margin: 2rem 0; border: 0; border-top: 1px solid #e2e8f0; }
.prose-md strong { font-weight: 600; }
.prose-md table { width: 100%; border-collapse: collapse; margin: 1rem 0; font-size: 0.95rem; }
.prose-md th, .prose-md td { border: 1px solid #e2e8f0; padding: 0.5rem 0.75rem; text-align: left; }
.prose-md th { background: #f8fafc; font-weight: 600; }
</style>

View file

@ -1,12 +1,22 @@
--- ---
import { getCollection } from 'astro:content'
import BaseLayout from '@/layouts/BaseLayout.astro' 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="Блог Food Market: новости, релизы, лучшие практики автоматизации розничных магазинов в Казахстане.">
<section class="max-w-3xl mx-auto px-4 sm:px-6 py-14 text-center"> <section class="max-w-3xl mx-auto px-4 sm:px-6 py-14">
<h1 class="text-4xl font-extrabold">Блог</h1> <h1 class="text-4xl font-extrabold">Блог</h1>
<p class="text-slate-500 mt-3">Новости, релизы, кейсы и практические статьи.</p> <p class="text-slate-500 mt-2">Запуски, миграции, лучшие практики розницы.</p>
<div class="mt-12 rounded-xl border border-dashed border-slate-300 bg-slate-50 p-10 text-slate-500"> <div class="mt-10 space-y-4">
✍️ Раздел в разработке. Скоро появятся первые посты. {posts.map((p) => (
<a href={`/blog/${p.slug}`} class="block rounded-xl border border-slate-200 bg-white p-5 hover:shadow-md hover:border-brand transition">
<div class="text-xs text-slate-500">{fmt(p.data.date)}</div>
<h2 class="text-xl font-bold mt-1">{p.data.title}</h2>
<p class="text-sm text-slate-600 mt-2">{p.data.description}</p>
<span class="text-xs text-brand mt-3 inline-block">Читать →</span>
</a>
))}
</div> </div>
</section> </section>
</BaseLayout> </BaseLayout>

View file

@ -5,7 +5,7 @@ const releases = [
{ date: '2026-04', title: 'Phase 4 — SuperAdmin консоль', items: ['Управление организациями','Журнал действий','Read-only «открыть как…»','Edit-mode с reason + audit-trail','Настраиваемый retention period'] }, { date: '2026-04', title: 'Phase 4 — SuperAdmin консоль', items: ['Управление организациями','Журнал действий','Read-only «открыть как…»','Edit-mode с reason + audit-trail','Настраиваемый retention period'] },
{ date: '2026-04', title: 'Phase 3 — Цены и роли', items: ['Расширенная модель цен','Сотрудники и роли','Системные роли (Администратор, Кассир)'] }, { date: '2026-04', title: 'Phase 3 — Цены и роли', items: ['Расширенная модель цен','Сотрудники и роли','Системные роли (Администратор, Кассир)'] },
{ date: '2026-04', title: 'Phase 2 — Закупки и приёмки', items: ['Документ приёмки со сканером','Skользящее среднее себестоимости','Inline quick-add позиций'] }, { date: '2026-04', title: 'Phase 2 — Закупки и приёмки', items: ['Документ приёмки со сканером','Skользящее среднее себестоимости','Inline quick-add позиций'] },
{ date: '2026-03', title: 'Phase 1 — Каталог и tenant-изоляция', items: ['Multi-tenant архитектура','Товары, группы, штрихкоды, остатки','Импорт из МойСклад'] }, { date: '2026-03', title: 'Phase 1 — Каталог и tenant-изоляция', items: ['Multi-tenant архитектура','Товары, группы, штрихкоды, остатки','Импорт из другие системы'] },
] ]
--- ---
<BaseLayout title="Changelog" description="История релизов Food Market: что нового в продукте."> <BaseLayout title="Changelog" description="История релизов Food Market: что нового в продукте.">

View file

@ -1,23 +1,49 @@
--- ---
import BaseLayout from '@/layouts/BaseLayout.astro' import BaseLayout from '@/layouts/BaseLayout.astro'
--- ---
<BaseLayout title="Контакты" description="Контакты Food Market: техподдержка, отдел продаж, юридический адрес."> <BaseLayout title="Контакты" description="Команда поддержки Food Market в часовом поясе Астаны. Электронная почта, телефон, мессенджеры.">
<section class="max-w-2xl mx-auto px-4 sm:px-6 py-14"> <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> <h1 class="text-4xl font-extrabold">Контакты</h1>
<div class="mt-8 space-y-6"> <p class="mt-4 text-lg text-slate-600">Команда поддержки в часовом поясе Астаны. Без чат-ботов и многоуровневых меню.</p>
</div>
</section>
<section class="max-w-3xl mx-auto px-4 sm:px-6 py-12 grid sm:grid-cols-2 gap-5">
<div class="rounded-xl border border-slate-200 bg-white p-5"> <div class="rounded-xl border border-slate-200 bg-white p-5">
<h2 class="font-semibold">Техническая поддержка</h2> <div class="text-2xl">📧</div>
<p class="text-sm text-slate-500 mt-1">Для клиентов с активным аккаунтом — через чат в админке. Здесь будет email и телефон позже.</p> <h2 class="font-semibold mt-2">Электронная почта</h2>
<ul class="text-sm text-slate-700 mt-3 space-y-1">
<li>Общие вопросы — <a class="text-brand underline" href="mailto:info@food-market.kz">info@food-market.kz</a></li>
<li>Поддержка — <a class="text-brand underline" href="mailto:support@food-market.kz">support@food-market.kz</a></li>
<li>Продажи и партнёрство — <a class="text-brand underline" href="mailto:sales@food-market.kz">sales@food-market.kz</a></li>
<li>Персональные данные — <a class="text-brand underline" href="mailto:privacy@food-market.kz">privacy@food-market.kz</a></li>
</ul>
</div> </div>
<div class="rounded-xl border border-slate-200 bg-white p-5"> <div class="rounded-xl border border-slate-200 bg-white p-5">
<h2 class="font-semibold">Отдел продаж и партнёрство</h2> <div class="text-2xl">📞</div>
<p class="text-sm text-slate-500 mt-1">Тариф «Сеть», корпоративные внедрения, white-label партнёрство — пишите по контактам ниже.</p> <h2 class="font-semibold mt-2">Телефон</h2>
<p class="text-sm text-slate-700 mt-3">+7 (___) ___-__-__ <span class="text-xs text-slate-400">(будет указан после регистрации юр.лица)</span></p>
<p class="text-xs text-slate-500 mt-2">Часы работы: пн–пт, 09:0019:00 (Астана).</p>
</div> </div>
<div class="rounded-xl border border-slate-200 bg-white p-5"> <div class="rounded-xl border border-slate-200 bg-white p-5">
<h2 class="font-semibold">Юридический адрес и реквизиты</h2> <div class="text-2xl">💬</div>
<p class="text-sm text-slate-500 mt-1"><a href="/legal/requisites" class="text-brand underline">Реквизиты компании</a> — отдельная страница.</p> <h2 class="font-semibold mt-2">Чат в админке</h2>
<p class="text-sm text-slate-700 mt-3">Для клиентов с активным аккаунтом — встроенный чат поддержки в правом нижнем углу любого экрана.</p>
</div> </div>
<div class="rounded-xl border border-slate-200 bg-white p-5">
<div class="text-2xl">🏢</div>
<h2 class="font-semibold mt-2">Юридические реквизиты</h2>
<p class="text-sm text-slate-700 mt-3"><a class="text-brand underline" href="/legal/requisites">Реквизиты компании →</a></p>
<p class="text-xs text-slate-500 mt-2">БИН, юридический адрес, банковские реквизиты — на отдельной странице.</p>
</div>
</section>
<section class="bg-slate-50 py-14">
<div class="max-w-2xl mx-auto px-4 sm:px-6 text-center">
<h2 class="text-2xl font-bold">Хотите попробовать продукт?</h2>
<p class="text-slate-500 mt-2">Регистрация занимает минуту, триал 90 дней — без банковской карты.</p>
<a href="/signup" class="inline-block mt-6 px-5 py-3 bg-brand text-white font-semibold rounded-md hover:bg-brand-hover">Начать бесплатно</a>
</div> </div>
<p class="text-xs text-slate-400 mt-10 italic">Раздел в разработке. Финальные контакты появятся после регистрации юр.лица и запуска поддержки.</p>
</section> </section>
</BaseLayout> </BaseLayout>

View file

@ -1,7 +1,7 @@
--- ---
import BaseLayout from '@/layouts/BaseLayout.astro' import BaseLayout from '@/layouts/BaseLayout.astro'
const sections = [ const sections = [
{ id: 'catalog', icon: '📦', title: 'Товары и каталог', items: ['Иерархические группы и подгруппы','Штрихкоды EAN-13/EAN-8/Code128','Цены: розничная, оптовая, эталонная','Автогенерация артикула и штрихкода','Импорт из МойСклад','Картинки товаров','Атрибуты и характеристики'] }, { id: 'catalog', icon: '📦', title: 'Товары и каталог', items: ['Иерархические группы и подгруппы','Штрихкоды EAN-13/EAN-8/Code128','Цены: розничная, оптовая, эталонная','Автогенерация артикула и штрихкода','Импорт из другие системы','Картинки товаров','Атрибуты и характеристики'] },
{ id: 'sales', icon: '💳', title: 'Продажи и касса', items: ['Касса для Windows','Поддержка весов Масса-К','Сканер штрихкодов USB','Чековые принтеры ESC/POS','Kaspi Pay интеграция','Скидки и акции','Возвраты на кассе'] }, { id: 'sales', icon: '💳', title: 'Продажи и касса', items: ['Касса для Windows','Поддержка весов Масса-К','Сканер штрихкодов USB','Чековые принтеры ESC/POS','Kaspi Pay интеграция','Скидки и акции','Возвраты на кассе'] },
{ id: 'stock', icon: '🏬', title: 'Склад и остатки', items: ['Несколько складов','Приёмка со сканером','Автоматический расчёт себестоимости','Инвентаризация','Списание (брак/просрочка)','Оприходование','Перемещения между складами','История движений'] }, { id: 'stock', icon: '🏬', title: 'Склад и остатки', items: ['Несколько складов','Приёмка со сканером','Автоматический расчёт себестоимости','Инвентаризация','Списание (брак/просрочка)','Оприходование','Перемещения между складами','История движений'] },
{ id: 'purchase', icon: '🚚', title: 'Закупки и поставщики', items: ['База контрагентов','Заказы поставщикам','Документы приёмки','Скользящее среднее себестоимости','Эталонная цена'] }, { id: 'purchase', icon: '🚚', title: 'Закупки и поставщики', items: ['База контрагентов','Заказы поставщикам','Документы приёмки','Скользящее среднее себестоимости','Эталонная цена'] },

View file

@ -12,7 +12,7 @@ const features = [
<div class="max-w-4xl mx-auto px-4 sm:px-6 py-14"> <div class="max-w-4xl mx-auto px-4 sm:px-6 py-14">
<span class="text-3xl">🛒</span> <span class="text-3xl">🛒</span>
<h1 class="text-4xl font-extrabold mt-2">Программа учёта для продуктового магазина</h1> <h1 class="text-4xl font-extrabold mt-2">Программа учёта для продуктового магазина</h1>
<p class="mt-4 text-lg text-slate-600">Весовой товар, скоропорт, штрихкоды, касса с весами Масса-К из коробки. Импорт из МойСклада.</p> <p class="mt-4 text-lg text-slate-600">Весовой товар, скоропорт, штрихкоды, касса с весами Масса-К из коробки. Импорт из другой системы.</p>
<a href="/signup?plan=start" class="inline-block mt-7 px-5 py-3 bg-brand text-white font-semibold rounded-md">Начать бесплатно</a> <a href="/signup?plan=start" class="inline-block mt-7 px-5 py-3 bg-brand text-white font-semibold rounded-md">Начать бесплатно</a>
</div> </div>
</section> </section>

View file

@ -12,7 +12,7 @@ const features = [
<div class="max-w-4xl mx-auto px-4 sm:px-6 py-14"> <div class="max-w-4xl mx-auto px-4 sm:px-6 py-14">
<span class="text-3xl">💊</span> <span class="text-3xl">💊</span>
<h1 class="text-4xl font-extrabold mt-2">Программа учёта для аптеки</h1> <h1 class="text-4xl font-extrabold mt-2">Программа учёта для аптеки</h1>
<p class="mt-4 text-lg text-slate-600">Серии и сроки годности, рецептурный отпуск, группировка по МНН. Импорт из МойСклада.</p> <p class="mt-4 text-lg text-slate-600">Серии и сроки годности, рецептурный отпуск, группировка по МНН. Импорт из другой системы.</p>
<a href="/signup?plan=start" class="inline-block mt-7 px-5 py-3 bg-brand text-white font-semibold rounded-md">Начать бесплатно</a> <a href="/signup?plan=start" class="inline-block mt-7 px-5 py-3 bg-brand text-white font-semibold rounded-md">Начать бесплатно</a>
</div> </div>
</section> </section>

View file

@ -12,7 +12,7 @@ const verticals = [
] ]
const modules = [ const modules = [
{ icon: '📦', title: 'Товары и каталог', text: 'Группы, штрихкоды, цены, остатки, импорт из МойСклад одной кнопкой.' }, { icon: '📦', title: 'Товары и каталог', text: 'Группы, штрихкоды, цены, остатки, импорт каталога одной кнопкой.' },
{ icon: '💳', title: 'Продажи и касса', text: 'Касса для Windows с поддержкой весов Масса-К, штрихкодов, чековых принтеров.' }, { icon: '💳', title: 'Продажи и касса', text: 'Касса для Windows с поддержкой весов Масса-К, штрихкодов, чековых принтеров.' },
{ icon: '🏬', title: 'Склад и приёмки', text: 'Несколько складов, приёмка со сканером, инвентаризация, списание, оприходование.' }, { icon: '🏬', title: 'Склад и приёмки', text: 'Несколько складов, приёмка со сканером, инвентаризация, списание, оприходование.' },
{ icon: '🚚', title: 'Закупки и поставщики', text: 'Документы приёмки с автоматическим расчётом себестоимости (скользящее среднее).' }, { icon: '🚚', title: 'Закупки и поставщики', text: 'Документы приёмки с автоматическим расчётом себестоимости (скользящее среднее).' },
@ -27,7 +27,7 @@ const integrations = [
<BaseLayout <BaseLayout
title="Программа учёта для розничных магазинов" title="Программа учёта для розничных магазинов"
description="Программа учёта и касса для розничных магазинов в Казахстане. Касса с весами, импорт из МойСклада, интеграция с Kaspi и ОФД РК. Бесплатно 90 дней без карты." description="Программа учёта и касса для розничных магазинов в Казахстане. Касса с весами Масса-К, импорт каталога одной кнопкой, интеграция с Kaspi и ОФД РК. Бесплатно 90 дней без карты."
> >
{/* 1. Hero */} {/* 1. Hero */}
<section class="bg-gradient-to-br from-brand-light/40 via-white to-white"> <section class="bg-gradient-to-br from-brand-light/40 via-white to-white">
@ -37,7 +37,7 @@ const integrations = [
Программа учёта и&nbsp;касса для розничных магазинов в&nbsp;Казахстане Программа учёта и&nbsp;касса для розничных магазинов в&nbsp;Казахстане
</h1> </h1>
<p class="mt-5 text-lg text-slate-600"> <p class="mt-5 text-lg text-slate-600">
Касса с весами Масса-К, импорт из МойСклада, интеграция с Kaspi и ОФД РК. Касса с весами Масса-К, импорт каталога одной кнопкой, интеграция с Kaspi и ОФД РК.
<strong>Бесплатно 90 дней без карты.</strong> <strong>Бесплатно 90 дней без карты.</strong>
</p> </p>
<div class="mt-7 flex flex-wrap gap-3"> <div class="mt-7 flex flex-wrap gap-3">
@ -67,7 +67,7 @@ const integrations = [
</div> </div>
<div class="rounded-xl border border-slate-200 p-5"> <div class="rounded-xl border border-slate-200 p-5">
<div class="text-3xl">⬇️</div> <div class="text-3xl">⬇️</div>
<h3 class="font-semibold mt-2">Импорт из МойСклада</h3> <h3 class="font-semibold mt-2">Быстрый импорт каталога</h3>
<p class="text-sm text-slate-600 mt-1">Перенос товаров, остатков, контрагентов одной кнопкой за 10 минут.</p> <p class="text-sm text-slate-600 mt-1">Перенос товаров, остатков, контрагентов одной кнопкой за 10 минут.</p>
</div> </div>
<div class="rounded-xl border border-slate-200 p-5"> <div class="rounded-xl border border-slate-200 p-5">
@ -166,7 +166,7 @@ const integrations = [
<li>2 сотрудника</li> <li>2 сотрудника</li>
<li>Без лимита товаров</li> <li>Без лимита товаров</li>
<li>Касса с весами</li> <li>Касса с весами</li>
<li>Импорт из МойСклад</li> <li>Импорт каталога одной кнопкой</li>
</ul> </ul>
<a href="/signup?plan=start" class="block text-center mt-6 px-4 py-2.5 bg-brand text-white rounded-md font-semibold">Начать</a> <a href="/signup?plan=start" class="block text-center mt-6 px-4 py-2.5 bg-brand text-white rounded-md font-semibold">Начать</a>
</div> </div>

View file

@ -4,7 +4,7 @@ const groups = [
{ title: 'Платёжные системы', items: ['Kaspi Pay', 'Halyk Bank', 'Jusan Bank', 'Forte Bank'] }, { title: 'Платёжные системы', items: ['Kaspi Pay', 'Halyk Bank', 'Jusan Bank', 'Forte Bank'] },
{ title: 'Фискализация', items: ['ОФД РК (все операторы)', 'Чековые принтеры ESC/POS'] }, { title: 'Фискализация', items: ['ОФД РК (все операторы)', 'Чековые принтеры ESC/POS'] },
{ title: 'Маркетплейсы (скоро)', items: ['Kaspi Magazin', 'Ozon', 'Wildberries'] }, { title: 'Маркетплейсы (скоро)', items: ['Kaspi Magazin', 'Ozon', 'Wildberries'] },
{ title: 'Учётные системы', items: ['МойСклад (импорт каталога)', 'Excel CSV-импорт'] }, { title: 'Учётные системы', items: ['другие системы (импорт каталога)', 'Excel CSV-импорт'] },
{ title: 'Оборудование', items: ['Весы Масса-К (USB/COM)', 'Сканеры штрихкодов USB', 'Денежные ящики', 'Дисплей покупателя'] }, { title: 'Оборудование', items: ['Весы Масса-К (USB/COM)', 'Сканеры штрихкодов USB', 'Денежные ящики', 'Дисплей покупателя'] },
] ]
--- ---

View file

@ -0,0 +1,18 @@
---
import { getCollection } from 'astro:content'
import BaseLayout from '@/layouts/BaseLayout.astro'
export async function getStaticPaths() {
const items = await getCollection('kb')
return items.map((a) => ({ params: { slug: a.slug }, props: { article: a } }))
}
const { article } = Astro.props
const { Content } = await article.render()
---
<BaseLayout title={article.data.title} description={`База знаний Food 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>
<h1 class="text-4xl font-extrabold mt-2">{article.data.title}</h1>
<div class="prose-md mt-8"><Content /></div>
</article>
</BaseLayout>

View file

@ -1,12 +1,34 @@
--- ---
import { getCollection } from 'astro:content'
import BaseLayout from '@/layouts/BaseLayout.astro' import BaseLayout from '@/layouts/BaseLayout.astro'
const articles = (await getCollection('kb')).sort((a, b) => a.data.order - b.data.order)
// Группировка по category
const byCat = new Map<string, typeof articles>()
for (const a of articles) {
if (!byCat.has(a.data.category)) byCat.set(a.data.category, [])
byCat.get(a.data.category)!.push(a)
}
--- ---
<BaseLayout title="База знаний" description="База знаний Food Market: статьи и инструкции для пользователей."> <BaseLayout title="База знаний" description="База знаний Food Market: пошаговые инструкции по работе с программой учёта и кассой.">
<section class="max-w-3xl mx-auto px-4 sm:px-6 py-14 text-center"> <section class="max-w-3xl mx-auto px-4 sm:px-6 py-14">
<h1 class="text-4xl font-extrabold">База знаний</h1> <h1 class="text-4xl font-extrabold">База знаний</h1>
<p class="text-slate-500 mt-3">Статьи и инструкции по работе с Food Market.</p> <p class="text-slate-500 mt-2">Пошаговые инструкции по работе с Food Market.</p>
<div class="mt-12 rounded-xl border border-dashed border-slate-300 bg-slate-50 p-10 text-slate-500"> <div class="mt-10 space-y-8">
📚 Раздел в разработке. Здесь появятся пошаговые инструкции по приёмке, инвентаризации, кассе и интеграциям. {Array.from(byCat.entries()).map(([cat, items]) => (
<section>
<h2 class="text-xs uppercase tracking-wide font-semibold text-slate-500 mb-3">{cat}</h2>
<ul class="divide-y divide-slate-200 border border-slate-200 rounded-xl bg-white">
{items.map((a) => (
<li>
<a href={`/kb/${a.slug}`} class="block px-5 py-4 hover:bg-slate-50 flex items-center justify-between gap-3">
<span class="font-medium">{a.data.title}</span>
<span class="text-slate-400 text-sm">→</span>
</a>
</li>
))}
</ul>
</section>
))}
</div> </div>
</section> </section>
</BaseLayout> </BaseLayout>

View file

@ -1,72 +0,0 @@
---
import BaseLayout from '@/layouts/BaseLayout.astro'
const compare = [
{ row: 'Цена за базовый тариф', moy: 'от 4 900 ₽ ≈ 30 000 ₸', us: '5 000 ₸' },
{ row: 'Касса с весами Масса-К', moy: '— (отдельный модуль)', us: '✓ из коробки' },
{ row: 'CRM и лояльность', moy: '+ доплата', us: '✓ включено' },
{ row: 'Финансовый учёт', moy: '+ доплата', us: '✓ включено' },
{ row: 'Скорость интерфейса', moy: '~3 сек загрузка', us: '<1 сек' },
{ row: 'Поддержка KZ-локализации', moy: 'базовая', us: 'полная (тенге, ОКЕИ, ОФД РК)' },
{ row: 'Триал', moy: '14 дней', us: '90 дней без карты' },
]
---
<BaseLayout title="Переход с МойСклада" description="Перенос товаров, штрихкодов, контрагентов и остатков из МойСклада в Food Market за один клик.">
<section class="bg-gradient-to-br from-brand-light/40 via-white to-white">
<div class="max-w-4xl mx-auto px-4 sm:px-6 py-14">
<h1 class="text-4xl font-extrabold">Переходите с МойСклада<br/>за один клик</h1>
<p class="mt-4 text-lg text-slate-600">Импорт товаров, групп, контрагентов, остатков и штрихкодов через ваш существующий API-токен МойСклада. 510 минут — и магазин уже работает в Food Market.</p>
<a href="/signup?plan=start" class="inline-block mt-7 px-5 py-3 bg-brand text-white font-semibold rounded-md hover:bg-brand-hover">Начать миграцию</a>
</div>
</section>
<section class="max-w-5xl mx-auto px-4 sm:px-6 py-14">
<h2 class="text-3xl font-bold text-center mb-8">МойСклад vs Food Market</h2>
<div class="overflow-x-auto rounded-xl border border-slate-200 bg-white">
<table class="w-full text-sm">
<thead class="bg-slate-50">
<tr>
<th class="text-left px-4 py-3 font-semibold">Параметр</th>
<th class="text-left px-4 py-3 font-semibold">МойСклад</th>
<th class="text-left px-4 py-3 font-semibold text-brand">Food Market</th>
</tr>
</thead>
<tbody class="divide-y divide-slate-100">
{compare.map((c) => (
<tr>
<td class="px-4 py-3 font-medium">{c.row}</td>
<td class="px-4 py-3 text-slate-600">{c.moy}</td>
<td class="px-4 py-3 text-slate-900 font-medium">{c.us}</td>
</tr>
))}
</tbody>
</table>
</div>
</section>
<section class="bg-slate-50 py-14">
<div class="max-w-4xl mx-auto px-4 sm:px-6">
<h2 class="text-3xl font-bold text-center mb-2">Что переносится</h2>
<p class="text-center text-slate-500 mb-8">Один токен — все данные.</p>
<div class="grid sm:grid-cols-2 gap-3 text-sm">
{['Товары и услуги','Группы и категории','Штрихкоды и артикулы','Цены (розничные + оптовые)','Контрагенты (поставщики и клиенты)','Остатки по складам','Единицы измерения','Атрибуты товаров'].map((x) => (
<div class="bg-white rounded-md border border-slate-200 px-4 py-3">✓ {x}</div>
))}
</div>
</div>
</section>
<section class="max-w-3xl mx-auto px-4 sm:px-6 py-14">
<h2 class="text-3xl font-bold text-center mb-10">3 шага до запуска</h2>
<ol class="space-y-6">
<li class="flex gap-4"><div class="flex-shrink-0 w-10 h-10 rounded-full bg-brand text-white font-bold flex items-center justify-center">1</div>
<div><h3 class="font-semibold">Зарегистрируйтесь в Food Market</h3><p class="text-sm text-slate-600 mt-1">Создайте аккаунт за минуту. 90 дней триал без банковской карты.</p></div></li>
<li class="flex gap-4"><div class="flex-shrink-0 w-10 h-10 rounded-full bg-brand text-white font-bold flex items-center justify-center">2</div>
<div><h3 class="font-semibold">Подключите токен МойСклада</h3><p class="text-sm text-slate-600 mt-1">Настройки → Интеграции → МойСклад → ваш API-токен. Кнопка «Импортировать».</p></div></li>
<li class="flex gap-4"><div class="flex-shrink-0 w-10 h-10 rounded-full bg-brand text-white font-bold flex items-center justify-center">3</div>
<div><h3 class="font-semibold">Откройте кассу и работайте</h3><p class="text-sm text-slate-600 mt-1">Скачайте установщик кассы для Windows, подключите весы и сканер. Магазин запущен.</p></div></li>
</ol>
<div class="text-center mt-10">
<a href="/signup?plan=start" class="px-5 py-3 bg-brand text-white font-semibold rounded-md hover:bg-brand-hover">Начать миграцию</a>
</div>
</section>
</BaseLayout>

View file

@ -17,7 +17,7 @@ import BusinessTariffBuilder from '@/components/BusinessTariffBuilder.tsx'
<li>✓ 2 сотрудника</li> <li>✓ 2 сотрудника</li>
<li>✓ Без лимита товаров</li> <li>✓ Без лимита товаров</li>
<li>✓ Касса с весами Масса-К</li> <li>✓ Касса с весами Масса-К</li>
<li>✓ Импорт из МойСклад</li> <li>✓ Импорт из другие системы</li>
<li>✓ Интеграции Kaspi / ОФД</li> <li>✓ Интеграции Kaspi / ОФД</li>
<li class="text-slate-400">— API</li> <li class="text-slate-400">— API</li>
<li class="text-slate-400">— SLA</li> <li class="text-slate-400">— SLA</li>