From a9392518bad72d19429e003ceeb06ab5500aadd4 Mon Sep 17 00:00:00 2001 From: Spiridonov Max Date: Wed, 27 May 2026 00:41:24 +0300 Subject: [PATCH] first commit --- LICENSE | 18 ++++++++ README.md | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++ changelog.md | 45 ++++++++++++++++++++ logo.png | Bin 0 -> 15395 bytes 4 files changed, 176 insertions(+) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 changelog.md create mode 100644 logo.png diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..089a6fe --- /dev/null +++ b/LICENSE @@ -0,0 +1,18 @@ +MIT License + +Copyright (c) 2026 rabitta + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and +associated documentation files (the "Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO +EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..56ee87c --- /dev/null +++ b/README.md @@ -0,0 +1,113 @@ +![Rabitta.Shop](logo.png) + +# Rabitta.Shop + +**Rabitta.Shop** — мини-приложение во [ВКонтакте](https://vk.com) для полноценной витрины: каталог, корзина, оформление заказа и онлайн-оплата. Учёт товаров, остатков и заказов ведётся **нативно в [МойСклад](https://www.moysklad.ru/)** — без ручной «склейки» каталогов и без дублирования номенклатуры в отдельной системе. + +> Продавайте там, где уже живут ваши подписчики, а заказы и склад остаются в привычном учёте. + +--- + +## Для кого этот продукт + +- Бренды и магазины, которые **продают через сообщество ВК** и хотят оформление как в интернет-магазине. +- Команды, которые **уже используют или готовы вести МойСклад** как источник правды по товарам, ценам и документам. +- Мерчанты на тарифах с **публикационным каталогом (PIM)** — отдельный слой витрины поверх складского каталога (названия, описания, цены для ВК без ломки учёта). + +--- + +## Что уже умеет продукт + +- Каталог с категориями и карточками товаров +- Корзина и оформление заказа +- **Постоянная синхронизация** с МойСклад: товары, остатки, изменения на витрине +- Онлайн-оплата (интеграция с **Т-Банк** и настройками в кабинете мерчанта) +- История и повторные заказы для покупателя +- При поддержке тарифа — **публикационный каталог**, маппинг с МойСклад, гибкое ценообразование для сообщества + +Подробнее о каталоге и PIM: [Каталог: МойСклад и PIM](https://gitjet.ru/rabitta/rabitta.ru/wiki/catalog). +Жизненный цикл заказа: [Заказы](https://gitjet.ru/rabitta/rabitta.ru/wiki/orders). +Оплата и доставка: [Оплата и доставка](https://gitjet.ru/rabitta/rabitta.ru/wiki/payments). + +--- + +## Документация (Wiki) + +Оглавление вики: [Rabitta.Shop — Wiki](https://gitjet.ru/rabitta/rabitta.ru/wiki). + +| Раздел | Зачем открыть | +|--------|----------------| +| [Быстрый старт](https://gitjet.ru/rabitta/rabitta.ru/wiki/getting-started) | От идеи до первого тестового заказа и запуска продаж | +| [Настройка вендор-части](https://gitjet.ru/rabitta/rabitta.ru/wiki/vendor-setup/Home.md) | Пошаговая настройка расширения в МойСклад и приложения ВК (со скриншотами) | +| [Каталог: МойСклад и PIM](https://gitjet.ru/rabitta/rabitta.ru/wiki/catalog) | Репликация, публикационный каталог, цены | +| [Заказы](https://gitjet.ru/rabitta/rabitta.ru/wiki/orders) | Как устроена продажа от витрины до МойСклад | +| [Оплата и доставка](https://gitjet.ru/rabitta/rabitta.ru/wiki/payments) | Т-Банк, доставка, на что обратить внимание | +| [Roadmap](https://gitjet.ru/rabitta/rabitta.ru/wiki/roadmap) | Публичные планы развития и как в них попасть | +| [Changelog](https://gitjet.ru/rabitta/rabitta.ru/wiki/changelog) | Что уже вышло в релизах | +| [Ограничения](https://gitjet.ru/rabitta/rabitta.ru/wiki/limitations) | Честно о том, что пока не поддерживаем | +| [Use cases](https://gitjet.ru/rabitta/rabitta.ru/wiki/use-cases) | Сценарии продаж и как поделиться своим кейсом | +| [Процесс задач в Issues](https://gitjet.ru/rabitta/rabitta.ru/wiki/issue-workflow) | Статусы (labels), как мы отвечаем мерчантам | + +--- + +## Участвуйте в развитии продукта + +Мы **развиваем Rabitta.Shop вместе с мерчантами**: приоритеты и формулировки фич зависят от реальных кейсов и обратной связи. + +**Единая точка входа для идей, багов и обсуждений:** [Issues — rabitta.ru](https://gitjet.ru/rabitta/rabitta.ru/issues). + +### Идеи и новые возможности + +- Опишите не только «хочу кнопку», а **бизнес-ситуацию**: кто вы, что продаёте, какой сейчас обходной путь. +- Как попасть в публичный план — см. раздел **«Как попасть в roadmap»** на странице [Roadmap](https://gitjet.ru/rabitta/rabitta.ru/wiki/roadmap). +- Мы стремимся **отвечать на каждый** запрос от мерчантов и при принятии в работу давать понятную связку с roadmap или конкретной задачей (подробнее: [Процесс задач](https://gitjet.ru/rabitta/rabitta.ru/wiki/issue-workflow)). + +### Сообщить об ошибке (баг) + +- Шаги воспроизведения, ожидаемое и фактическое поведение. +- Скрин или короткое видео, если уместно. +- Среда: МойСклад / ВК, тариф, версия расширения (если известна). +- Статусы задач (`new`, `need-info`, `in-discussion`, …): [Процесс задач в Issues](https://gitjet.ru/rabitta/rabitta.ru/wiki/issue-workflow). + +### Сообщить об уязвимости (безопасность) + +- **Не публикуйте** в открытом доступе пошаговый эксплойт, дампы данных и иные чувствительные детали до согласования с командой. +- Создайте задачу в [Issues](https://gitjet.ru/rabitta/rabitta.ru/issues) с префиксом **`[security]`** в заголовке и **кратким** описанием риска (тип данных, затронутый сценарий без PoC в первом сообщении). +- Если на платформе GitJet доступно создание **конфиденциальной** (private) задачи — используйте её для первичного отчёта. +- После первого контакта команда уточнит детали и согласует сроки исправления и публикации advisory при необходимости. + +### Поделиться сценарием продаж (use case) + +Истории мерчантов помогают другим понять продукт и формируют приоритеты в roadmap. Шаблон и инструкция: [Use cases](https://gitjet.ru/rabitta/rabitta.ru/wiki/use-cases). + +--- + +## Как мы работаем (кратко) + +1. Вы создаёте задачу в [Issues](https://gitjet.ru/rabitta/rabitta.ru/issues). +2. Мы уточняем контекст и приоритет. +3. Принятые идеи отражаем в [Roadmap](https://gitjet.ru/rabitta/rabitta.ru/wiki/roadmap) или связываем с конкретным issue. +4. Реализуем и фиксируем изменения в [Changelog](https://gitjet.ru/rabitta/rabitta.ru/wiki/changelog). + +--- + +## Быстрый старт + +Пошаговый онбординг: [Быстрый старт (Wiki)](https://gitjet.ru/rabitta/rabitta.ru/wiki/getting-started). + +--- + +## Закреп для описания репозитория или комментария в Issues + +Скопируйте при необходимости: + +```text +📚 Документация: https://gitjet.ru/rabitta/rabitta.ru/wiki +🧭 Roadmap: https://gitjet.ru/rabitta/rabitta.ru/wiki/roadmap +``` + +--- + +## Платформа Rabitta + +**Rabitta** — платформа мини-приложений для продаж внутри ВКонтакте. **Rabitta.Shop** — первый продукт линейки. Дальше в планах развития экосистемы: Rabitta.Booking, Rabitta.Services, Rabitta.Food и другие вертикали. diff --git a/changelog.md b/changelog.md new file mode 100644 index 0000000..56cf396 --- /dev/null +++ b/changelog.md @@ -0,0 +1,45 @@ +# Changelog + +Формат вдохновлён [Keep a Changelog](https://keepachangelog.com/ru/1.0.0/). + +## [Unreleased] + +### Планируется + +- *(Пусто — следующие изменения переносите сюда до публикации версии.)* + +--- + +## [1.0.0] — 2026-04-24 + +Первый публичный релиз Rabitta.Shop. + +### Добавлено + +#### Мини-приложение ВКонтакте + +- Каталог: поиск и разделы; в списке — название и цена товара; кнопка «В корзину» с изменением количества прямо в каталоге, без перехода в корзину. +- Карточка товара: галерея изображений, цена, название, описание, код; кнопка «В корзину» с тем же изменением количества без перехода в корзину. +- Профиль клиента: автоматическое подтягивание аватара, ФИО, телефона и почты из ВКонтакте. +- Профиль клиента — **История заказов**: все заказы клиента, повтор заказа, оплата неоплаченного заказа. +- Профиль клиента — **Баланс**: отображение актуального баланса (положительного или отрицательного). +- Профиль клиента — **Адреса доставки**: список адресов; выбор точки на интерактивной Яндекс.Карте; подсказки адресов через DaData. +- **Корзина**: изменение состава заказа, кнопка «Оформить заказ»; ограничение минимальной суммы заказа. +- **Оформление заказа**: выбор адреса доставки, способа оплаты, комментарий к заказу; при онлайн-оплате — оплата сразу после оформления или позже из списка в «Истории заказов». + +#### Настройки в решении МойСклад (кабинет мерчанта) + +- Пользователь МойСклад с правами **администратора** может полностью настроить приложение. +- Пользователь МойСклад **без** прав администратора может настраивать каталог **PIM** и работать с закладкой «Пользователи ВК». +- Закладка **«Настройки»**: использование остатков в мини-приложении ВК; разрешение пользователям настраивать каталоги; обновление справочников из МойСклад (редко меняющиеся данные — см. инструкцию). +- Закладка **«Интеграция ВК»**: таблица привязанных сообществ; управление сообществами (параметры, работа с остатками, привязка публикационных каталогов). +- Закладка **«Каталог PIM»** (если тариф включает PIM): создание и управление публикационными каталогами для администратора или пользователя — по настройкам прав. +- Закладка **«Платежи»**: настройка интеграций с платёжными системами (доступ администратора). +- Закладка **«Пользователи ВК»**: таблица пользователей, зарегистрировавшихся через ВК. + +--- + +## 💡 Не хватает функции? + +Создайте задачу и опишите ваш кейс: +https://gitjet.ru/rabitta/rabitta.ru/issues diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..34a055ca4f5cd6a9108fd07e808551cae8b18b19 GIT binary patch literal 15395 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 literal 0 HcmV?d00001