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

11 KiB
Raw Permalink Blame History

Общее

Сервис продажи 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 у меня есть, я в этом разбираюсь, нет никаких проблем и софт и настройки сделать.