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