Files
2026-10-21 03:30:38 +02:00

226 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Общее
Сервис продажи VPN. Ключи для приложений Happ (vless, histeria) и Wiregueard/Amnezia WG.
# Своими словами
Есть 2 сайта.
Один - продаёт Dedicated VPN, где каждому пользователю даётся свой IP.
Второй - более классический вариант, где на 1 IP множество пользователей.
Фундаментально они работают одинаково, это привязанные к пользователю ключи. Ключи уже открывают доступ либо к dedicated либо mass.
Скрипты - которыми обрабатывается оба сайта - общие.
Поэтому это одна база, один бэк, но разные домены. Отличаться они будут по доменам.
Дизайн отличается по цветам, но в общей концепции, но дизайны всё таки разные, тк по разному представлены данные и делать именно общий смысла нет.
- Фиолетовый - это dedicated.
- Зелёный - mass.
- Дизайн сделал в Claude Design лежит в файле VEILIX-handoff.zip.
Сайт x2
Личный кабинет x2
Личный кабинет в Telegram (MiniApp) x2
Бот в TG x2
veilix.app - dedicated
veilixvpn.com - mass
my.veilix.app - личный кабинет dedicated
my.veilixvpn.com - личный кабинет mass
tg.veilix.app - tg miniapp dedicated
tg.veilixvpn.com - tg miniapp mass
Сайты многоязычные.
Боты чтобы и миниапп были или в самом tg можно было командами всё делать.
# Стэк
- CMS Payload
- Next
- React
- SSR
- Postgres
Вопрос. Payload через докер ставится? Нужно чтобы он с базой и nginx которые на хосте работал, чтобы не ставить базу в докер. Это нормально или лучше чтобы база в докере тоже была?
# Сущности
- Сайты
- Домены
- Языки
- Страны
- Пользователи
- Тарифы
- Ключи
- Подключения
- Заказы
- Транзации счёта пользователя
# Сайты и Домены
Каждая из сущностей привязывается к Сайту.
Языки привязываются к Домену, Домены привязываются к сайтам.
Вопрос.
В Payload связка сайты/языки может какой то нативный мехнизм есть?
И в целом где-то переводы всего в базе тоже нужно иметь на разных языках или это есть тоже нативное?
# Языки
По умолчанию язык EN без постфикса в URL, остальные языки с postfix /de /es /jp /ru
Английский, немецкий, французский, испанский, португальский, японский и дальше RU.
Язык именно через URL везде проводить, те запомнить выбор можно в настройках пользователя или куки или localstorage, но в URL показывать именно с постфиксом.
Определять по MAXMIND LITE в Nginx.
# Telegram боты
Команды в ботах через n8n, чтобы можно было править логику ответов.
Вопрос.
n8n для этого подходит или есть другие варианты?
Miniapp я думаю имеет смысл напрямую делать без n8n?
# Авторизация и регистрация
По email по коду без паролей.
Одно поле email, проверять есть или нет. Либо регистрировать либо авторизовывать.
Защить Google Captcha.
Отправка будет через локально установленный listmonk.
# Оплата, заказы, транзации
У пользователя есть счёт.
Его можно пополнить криптой и картой, может ещё как то в итоге.
Привязка карты к счёту и рекурентная оплата в зависимости от суммы всех ключей.
Если положить на счёт деньги заранее, то ежемесячно списывается только сумма за вычетом того что есть на счёте.
Понять как лучше сделать в плане связки Заказы и Транзакции.
Оплачивает клиент Заказ, к заказу справочно привязывается Тариф и Ключ и Пользователь.
Юкасса Страйп (демо режимы пока)
Вопрос.
Заказы и Транзакции - не понятно, может одной сущности достаточно.
Нужна возможность делать оплату вручную, те то что генерируется при оплате с карточки или при рекурентном списании, чтобы любые из этих действий я мог добавить в админке payload и иницировались остальные действия, пользователь получил ключ или начисления на счёт и тп. Может по какой то галочке - "Провести как реальную оплату", тогда это будет не просто запись в коллекции, а произойдёт весь набор действий, который при реальной оплате.
# Ключи VPN
Страны привязыны к Тарифам.
Тэги привязаны к Тарифам.
Страны, чтобы на сайте отображать и возможно для получения с бэка в дальнейшем ключей.
Тэги, нужно будут для получения с бэка ключей для фильтраций каких-то произвольных.
Пользователь выбирает Тариф, на основе Тарифа ему подбирается свободный сервер и с бэка прилетают Подключения для ключа.
Подключения могут быть вручную добавлены, ссылка на подписку для happ, и ключ для wg.
Срок истечения у Ключа. Те следующий заказ продлевает этот же ключ.
К Ключу тоже привязывается Тариф, чтобы при достижении срока оплата списалась.
# ID и UUID
Не должно быть явных ID нигде, которые идут подряд, чтобы не было понятно, сколько и чего есть в базе.
Нужно использовать UUID, в тч при работе с API, чтобы и в консоли браузера нельзя было увидеть реальные ID.
Если payload предполагает автоикремент ID обычный, возможно не стоит городить кастом, и пусть так будет. Но нужно тогда всё равно всё обыграть все обращения по UUID.
Вопрос. Обсудить.
# Дополнительный софт
На этом же vps:
- N8N - для TG бота
- Listmonk - отправка транзакционных писем
На отдельном vps:
- Chatwoot - чат на сайте
- 12CRM - лиды собирать
# Этапы
Составить всю .md документацию и план. Далее, чтобы я мог запускать по этапам в отдельных сессиях.
В первую очередь собрать полноценный сайт с дизайном, всем функционалом (регистрация, авторизация, реферальная программа). Без эквайринга и ключей по внешним api.
При этом чтобы вручную я мог и добавить ключи и оплаты.
Далее интеграция с chatwoot, 12crm.
Далее listmonk.
Далее TG боты.
Далее эквайринг и ключи. Но ключи автоматизация пока с вопросами, это нужно оставить обсуждение к моменту запуска этапа.
Эквайринг тестовый режим страйпа и юкассы, я зарегистриуюсь, если они дают песочницу, то сначала так.
# Общее
- Отраслевые стандарты. Стараться придерживаться отраслевых стандартов и использовать максимально современные решения. Если я предлагаю решения, которые плохо связываются друг с другом или кастом, который может решается иными методами, то обсудить со мной. Я могу не знать, но с другой стороны может быть что нужно и делать кастом, в любом случае это повод для обсуждения.
- Нумерация пунктов в документации и чатаха с тобой - цифрами и латинскими буквами, чтобы не было путаницы, где А русская, где анлийская, гда B - толи БЭ латинская, толи ВЭ русская.
- Не писать никаких скриптов пока не будет всё утверждено, сначала обсуждаем.
- Если есть противоречия на любом этапе, сначала обсуждаем, потом делаем.
- Софт, который не достаёт и требуется установки от root - говоришь, я сделаю. Не нужно пытаться какие то обходные пути делать внутри пользователя, чтобы меня не беспокоить. Что нужно и правильно установить глобально на сервере - я установлю.
- Настройки на сервере - также как и софт, что правильнее сделать глобально, делаю глобально я.
- Доступ к root у меня есть, я в этом разбираюсь, нет никаких проблем и софт и настройки сделать.