🍀BitBitGo🍀 Системный Анализ
3.47K subscribers
258 photos
182 videos
151 links
Курс «Системный анализ»
https://bitbitgo.by/
Пишем про системный анализ.
Поможем стартануть в карьере IT. Присоединяйся!
Download Telegram
💬 НЕ УПУСТИТЕ ВОЗМОЖНОСТЬ ПОЛУЧИТЬ ДОСТУП В ИНТЕРЕСНЫЕ КАНАЛЫ:

🔖 Про вещи, которые помогают в жизни и работе: идеи, кейсы, опыт и мысли, которые откликаются и
остаются.

🔖 Лучшие эксперты в своей сфере, только суть, без всякой воды.

🔖 В каналах самые актуальные новости и инсайды, не упускайте возможность получить доступ к эксклюзивной информации

🔖 Экспертная оценка, мнение профессионалов и прогнозы на будущее, читайте в папке


🤩 Инвестиции в недвижимость S&P development - Инвестиции коммерческую в недвижимость 30% годовых. Создания ГАБ с пятерочкой. Записки девелопера.
📲 мы в MAX

🤩 "КДО" КВАРТИРЫ ДОМА ОФИСЫ ваш гид в мире недвижимости!
🔵Новости, законы, полезные советы, видеообзоры, как выгодно купить квартиры, дома, офисы.

Подписывайтесь на канал с полезным контентом
📲Мы в MAX

🤩 Канал адвоката Артёма Сидорова. Юридические советы. Дела в арбитражных и других судах. Споры, связанные с недвижимостью. Долевое строительство.  Признание права собственности на самовольные постройки. Защита прав владельцев апартаментов. Оспаривание сделок. Споры, связанные со строительным подрядом. Банкротство застройщиков. Защита от субсидиарной ответственности. Бесплатные краткие консультации подписчикам.

🤩 Премьер Недвижимость
Расскажем честно о недвижимости Москвы и МО: как правильно выбрать недвижимость для инвестиций, как купить квартиру без первоначального взноса.
Подписывайтесь и получайте на нашем канале подборки выгодных предложений, которых нет в открытом
📲Мы в MAX

🤩 Сергей Дятлов. Primetr - Новости, ошибки, кейсы, лайфхаки инвестиций в коммерческую недвижимость: аренда, продажи, управление, налоги, ЖКХ.

Авторский блог миссионера пассивного дохода в коммерческой недвижимости.
📲Мы в MAX

В ПАПКЕ ЕЩЕ БОЛЬШЕ ПРОФЕССИОНАЛЬНЫХ КАНАЛОВ:

📌
Эксперты по ИИ
📌
Специалисты с многолетним опытом делятся своими кейсами
📌
Уникальный шанс получить доступ к лучшим ИИ каналам

🖥 Забрать папку

Организаторы: 🤩Green.Papka
Please open Telegram to view this post
VIEW IN TELEGRAM
🏗 Пост 1: OFFLINE-FIRST: КОГДА ИНТЕРНЕТ ПРОПАДАЕТ, А ПРИЛОЖЕНИЕ РАБОТАЕТ

Привет, коллеги! 👋 Представьте: курьер в отдалённом районе, связь ловится только у вышки. Он принимает заказ, но интернет обрывается. Приложение падает? Нет, если архитектура offline-first. Сегодня разберём реальный кейс и код. 🚀

📌 Кейс: «Доставка в глубинке»

Компания по доставке продуктов запустила приложение для курьеров в сёлах. Первая версия требовала постоянного соединения — при обрыве связи приложение вылетало, заказы терялись. Курьеры вернулись к блокнотам. 📝

Решение — offline-first:

Все данные (заказы, адреса) хранятся локально (SQLite).
Курьер работает с приложением даже без сети.
При появлении соединения изменения синхронизируются с сервером.

📌 Пример кода: локальное хранилище и синхронизация

// Room (Android) — локальное хранилище
@Entity(tableName = "orders")
data class Order(
@PrimaryKey val id: String,
val address: String,
val status: String,
val synced: Boolean = false
)

@Dao
interface OrderDao {
@Insert
suspend fun insert(order: Order)

@Query("SELECT * FROM orders WHERE synced = 0")
suspend fun getUnsyncedOrders(): List<Order>

@Update
suspend fun update(order: Order)
}

// Менеджер синхронизации
class SyncManager(private val dao: OrderDao, private val api: ApiService) {
suspend fun sync() {
val unsynced = dao.getUnsyncedOrders()
unsynced.forEach { order ->
try {
api.sendOrder(order)
dao.update(order.copy(synced = true))
} catch (e: Exception) {
// Оставляем synced = false для следующей попытки
}
}
}
}

Как это работает:

Курьер создаёт заказ — он сохраняется локально с флагом synced = false.
Фоновая задача при появлении сети вызывает sync().
Если сервер недоступен — заказ остаётся в очереди.

📌 Что должен сделать аналитик?

Зафиксировать требование: «Приложение должно работать без интернета не менее 8 часов, накапливать операции и синхронизировать их при восстановлении связи».
Указать сценарии конфликтов: например, один и тот же заказ меняли офлайн на двух устройствах — нужна стратегия разрешения (последнее изменение побеждает).
Определить объём локального хранилища: сколько заказов/фото может накопиться офлайн.

Результат: курьеры работают без сбоев, заказы не теряются, бизнес не терпит убытки. 💪

#ARCHITECTURE
1
Почему у одних ИТ‑проекты растут и приносят прибыль, а у других — бесконечные «созвоны о задачках»?

Разница почти всегда в системности — в умении выстраивать процессы, видеть взаимосвязи и считать не только сроки, но и логику бизнеса.

Мы собрали папку с экспертами и каналами, которые реально помогают расти в бизнес‑анализе, системном мышлении и управлении ИТ‑проектами. Это не теория, а люди, которых сами читаем, чтобы не терять темп и держать голову в фокусе.

Внутри — разборы подходов, кейсы, инструменты и даже свежие инсайты вроде ТОП‑5 рекламных площадок для привлечения клиентов в 2026‑м году.

📨 Для тех, кто работает в ИТ, управляет проектами или строит системный бизнес: сохранить подборку себе.
🏗 Пост: CIRCUIT BREAKER: КАК НЕ ДОВЕСТИ СИСТЕМУ ДО КОЛЛАПСА

Привет, коллеги! 👋 Знакомая ситуация: внешний API тормозит, запросы накапливаются, потоки приложения блокируются, и через 5 минут ложится вся система. Как этого избежать? Паттерн Circuit Breaker (предохранитель). Разберём реальный кейс и код. 🔌

📌 Кейс: «Платёжный шлюз завис»

Онлайн-кинотеатр принимал платежи через внешний шлюз. Однажды шлюз начал отвечать 30 секунд вместо 1. Запросы встали в очередь, потоки приложения исчерпались, и перестали работать даже страницы с расписанием. Сайт лёг полностью. 📉

Решение — Circuit Breaker:

Отслеживаем ошибки.
После 5 ошибок за 10 секунд «выбиваем пробку» — на 30 секунд все вызовы к шлюзу мгновенно возвращают fallback-ответ.
Через 30 секунд пробуем один реальный запрос. Если успех — восстанавливаем работу.

📌 Пример кода: реализация Circuit Breaker

import time
from threading import Lock

class CircuitBreaker:
def __init__(self, failure_threshold=5, timeout=30):
self.failure_threshold = failure_threshold
self.timeout = timeout
self.failures = 0
self.last_failure_time = 0
self.state = "CLOSED" # CLOSED, OPEN, HALF_OPEN
self.lock = Lock()

def call(self, func, fallback):
with self.lock:
if self.state == "OPEN":
if time.time() - self.last_failure_time > self.timeout:
self.state = "HALF_OPEN"
else:
return fallback()

try:
result = func()
if self.state == "HALF_OPEN":
self.state = "CLOSED"
self.failures = 0
return result
except Exception:
with self.lock:
self.failures += 1
self.last_failure_time = time.time()
if self.failures >= self.failure_threshold:
self.state = "OPEN"
return fallback()

# Использование
cb = CircuitBreaker(failure_threshold=3, timeout=15)

def risky_payment():
# вызов внешнего API
response = requests.post("https://payment-gateway/pay", timeout=5)
response.raise_for_status()
return response.json()

def fallback_payment():
return {"status": "pending", "message": "Сервис временно недоступен, повторите позже"}

result = cb.call(risky_payment, fallback_payment)

📌 Что должен заложить аналитик в требования?

Порог ошибок: например, 5 ошибок за 10 секунд.
Время «отдыха» предохранителя: например, 30 секунд.
Fallback-стратегия: кэшированные данные, сообщение о временной недоступности, перевод в ручную обработку.
Логирование и метрики: количество срабатываний предохранителя, длительность открытого состояния.

Результат: при сбоях внешнего сервиса система остаётся живой, а пользователи получают понятный fallback вместо бесконечной загрузки. 🎯

#ARCHITECTURE
Media is too big
VIEW IN TELEGRAM
Когда создал заявку в рабочую тех поддержку (часть 2)
ПРОМТ, КОТОРЫЙ СОЗДАЁТ КРУТОЙ ОФФЕР В ЛЮБОЙ ИИ

А ещё …

- нормально сегментирует ЦА, а не пишет «женщины 30+»
- подскажет, как улучшить упаковку продукта


О том, какие каналы классического перформанс-маркетинга всё ещё хорошо работают в 2026 году, рассказали в свежем посте.

В одной ПАПКЕ с топовыми каналами по бизнесу, маркетингу и AI

▪️Юрист 2.0
▪️ Константин Сизов. Давайте об IT
▪️Как в IT повысить грейд, доход и удовлетворение от работы - Психолог с научным подходом Иван Ремизов

…. и ещё много полезных каналов, из которых вы получите

- нейросети, которые генерят контент за минуты, ведут переписки и приводят новых клиентов
- набор топовых инструментов для IT
- небанальные связки по привлечению трафика

Добавляйте ПАПКУ и забирайте

❗️через 3 дня удалю пост

ПОПАСТЬ В ПОДБОРКУ КАНАЛОВ
🏗 Пост: CIRCUIT BREAKER: КАК НЕ ДОВЕСТИ СИСТЕМУ ДО КОЛЛАПСА

Привет, коллеги! 👋 Знакомая ситуация: внешний API тормозит, запросы накапливаются, потоки приложения блокируются, и через 5 минут ложится вся система. Как этого избежать? Паттерн Circuit Breaker (предохранитель). Разберём реальный кейс и код. 🔌

📌 Кейс: «Платёжный шлюз завис»

Онлайн-кинотеатр принимал платежи через внешний шлюз. Однажды шлюз начал отвечать 30 секунд вместо 1. Запросы встали в очередь, потоки приложения исчерпались, и перестали работать даже страницы с расписанием. Сайт лёг полностью. 📉

Решение — Circuit Breaker:

Отслеживаем ошибки.
После 5 ошибок за 10 секунд «выбиваем пробку» — на 30 секунд все вызовы к шлюзу мгновенно возвращают fallback-ответ.
Через 30 секунд пробуем один реальный запрос. Если успех — восстанавливаем работу.
📌 Пример кода: реализация Circuit Breaker

import time
from threading import Lock

class CircuitBreaker:
def __init__(self, failure_threshold=5, timeout=30):
self.failure_threshold = failure_threshold
self.timeout = timeout
self.failures = 0
self.last_failure_time = 0
self.state = "CLOSED" # CLOSED, OPEN, HALF_OPEN
self.lock = Lock()

def call(self, func, fallback):
with self.lock:
if self.state == "OPEN":
if time.time() - self.last_failure_time > self.timeout:
self.state = "HALF_OPEN"
else:
return fallback()

try:
result = func()
if self.state == "HALF_OPEN":
self.state = "CLOSED"
self.failures = 0
return result
except Exception:
with self.lock:
self.failures += 1
self.last_failure_time = time.time()
if self.failures >= self.failure_threshold:
self.state = "OPEN"
return fallback()

# Использование
cb = CircuitBreaker(failure_threshold=3, timeout=15)

def risky_payment():
# вызов внешнего API
response = requests.post("https://payment-gateway/pay", timeout=5)
response.raise_for_status()
return response.json()

def fallback_payment():
return {"status": "pending", "message": "Сервис временно недоступен, повторите позже"}

result = cb.call(risky_payment, fallback_payment)

📌 Что должен заложить аналитик в требования?

Порог ошибок: например, 5 ошибок за 10 секунд.
Время «отдыха» предохранителя: например, 30 секунд.
Fallback-стратегия: кэшированные данные, сообщение о временной недоступности, перевод в ручную обработку.
Логирование и метрики: количество срабатываний предохранителя, длительность открытого состояния.

Результат: при сбоях внешнего сервиса система остаётся живой, а пользователи получают понятный fallback вместо бесконечной загрузки. 🎯

#ARCHITECTURE
📈 Маркетологи, которые делают результат, а не «красивые отчёты»

Сохрани папку, пока она открыта.

Здесь не про теорию.
Здесь — про реальные кейсы, цифры и рост.

📌 Как привлекать клиентов, а не просто «лить трафик»
📌 Что нужно, чтобы Telegram приносил реальные продажи
📌 Мощный курс по личному бренду
📌 Инструменты, которые экономят бюджет и время

Никакой магиитолько стратегии, которые дают результат.

Если ты маркетолог, предприниматель или просто хочешь понимать, как продают в 2026 — тебе сюда.

Добавляй папку, чтобы не потерять👇

https://t.me/addlist/KJwPBSB44eg5NTli
БОЛЬШИНСТВО AI & IT КАНАЛОВ, НА КОТОРЫЕ ТЫ ПОДПИСАН — МАЛО ПОЛЕЗНЫ …

Одни пересказывают новости — другие копируют посты друг у друга. Ты читаешь десятки каналов, но новых идей почти нет.

Сегодня главная ценность - не количество информации, а сильные и качественные источники. Люди, которые действительно работают с технологиями и делятся практикой, а не пересказами.

Эта ПОДБОРКА для тебя, где нет пересказчиков. Только те, кто реально работает с AI & IT сам - руками, а не перьями. Внутри авторы, которые разбирают новые AI-инструменты, технологии и продукты, стартапы, вайб-кодинг и реальные ИИ кейсы. Это экономит время - не нужно искать хорошие каналы по одному.

Делимся знаниями и аудиторией - растём вместе ⚡️ Забирай бесплатно ПАПКУ с Каналами от лучших авторов.

Твой доступ к подборке и бонусам:
⬆️ Просто добавь ПАПКУ - никаких смс или регистраций. Отписаться можно в любой момент. Остаться — тоже ✔️ * Ссылка - https://t.me/addlist/6jvq2ugAARVhNjc0
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
🗄 Пост 1: ПОЧЕМУ SELECT * МЕДЛЕННЫЙ? ИНДЕКСЫ СПАСАЮТ

Привет, коллеги! 👋 Знакомая ситуация: есть индекс на (user_id, created_at), а запрос «последние 10 действий пользователя» тормозит. Почему? Потому что индекс не покрывающий. Сегодня разберём реальный кейс и покажем, как код помогает аналитику требовать правильные индексы. 🚀

📌 Кейс: «Логи действий грузятся 5 секунд»

В системе мониторинга таблица user_actions выросла до 100 млн записей. Запрос на последние 10 действий конкретного пользователя выполнялся 5 секунд, хотя индекс (user_id, action_time) был.

Проблема: в индексе есть только user_id и action_time, а запрос — SELECT *. СУБД сначала находит в индексе 10 записей, потом для каждой делает случайное чтение (lookup) из основной таблицы, чтобы достать остальные поля (action_type, details). Если эти 10 строк разбросаны по всему диску — получаем 10 медленных I/O.

📌 Пример кода: покрывающий индекс

Было (медленно):

CREATE INDEX idx_user_time ON user_actions(user_id, action_time);
-- SELECT * FROM user_actions WHERE user_id = 123 ORDER BY action_time DESC LIMIT 10;

Стало (быстро):

-- Включаем в индекс все часто запрашиваемые поля
CREATE INDEX idx_user_time_covering ON user_actions(user_id, action_time, action_type, details);

Теперь СУБД может ответить на запрос, читая только индекс, не прикасаясь к основной таблице. Время падает с 5 секунд до 5 мс.

📌 Что должен сделать аналитик?

Определить самые частые запросы и поля, которые в них участвуют (не только в WHERE, но и в SELECT).
Заложить в требования создание покрывающих индексов для критических сценариев.
Следить, чтобы SELECT * использовался только в исследовательских целях, а в прод-коде перечислялись конкретные поля.
Проверять планы выполнения через EXPLAIN (должно быть Index Only Scan).

Результат: приложение летает, пользователи не жалуются, нагрузка на базу снижается. 💪

#DBMS
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
ИИ - УЖЕ НЕ «ПОТОМ». ОН ПРЯМО СЕЙЧАС ПЕРЕПИСЫВАЕТ ПРАВИЛА ...

Тексты, анализ, продажи, дизайн, экономия десятков часов в неделю — это не футурология. Это твой обычный вторник.

Вопрос давно не в том, заменит ли ИИ людей.
Вопрос в том, кто обгонит тебя, пока ты думаешь.

Хочешь быть среди первых, кто использует нейросети в полную силу?

ПОДБОРКА сильных экспертов по Нейросетям и ИИ — забирай, пока другие скролят новости:
Остаться или отписаться сможешь в любой момент ✔️ * Ссылка - https://t.me/addlist/6jvq2ugAARVhNjc0
👍2🔥1
Media is too big
VIEW IN TELEGRAM
Когда разговариваешь с коллегой из прошлой работы
😁4🔥1
Сейчас в IT ощущается переломная фаза: компании уже не просто «закрывают вакансию аналитика», а ищут людей, которые умеют говорить и на языке бизнеса, и на языке продукта, и на языке разработки, без лишней воды и формализма.
Это хороший знак: рынок перестаёт довольствоваться «человеком‑исполнителем» и всё больше ценит тех, кто понимает, зачем нужен каждый документ, схема и требование, и как всё это связано в одну систему.


Собрали папку, в которую складываем именно то, что реально помогает вникнуть в бизнес‑анализ и IT‑среду, а не просто «заполнить ленту».

Тут: разборы задач, примеры документов, чек‑листы, ссылки на качественные каналы и инструменты, которые помогают разобраться в профессии и не тонуть в потоке.

Сохранить папку себе 📨
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Как воспринимается конец рабочей недели
⏱️Папка скоро исчезнет. И это не кликбейт.

Если ты маркетолог и до сих пор откладываешь «посмотреть потом»потом может не наступить.

Здесь не просто файлы.
Здесь то, что экономит часы работы, спасает от выгорания и даёт идеи, за которые обычно платят.


📌 Готовые решения, которые можно брать и внедрять;
📌 Формулировки, которые реально продают;
📌 Подходы, которые выделяют тебя среди остальных.

☝️Но есть нюанс.

Доступ к папке закрывается.

Без громких анонсов, без второго шанса и без «ещё пару дней подержим».

Если ты понимаешь, что тебе это нужно — забирай сейчас👇

https://t.me/addlist/KJwPBSB44eg5NTli

Потом останется только читать чужие результаты.
🗄 Пост: SQL ИЛИ NOSQL? КЕЙС КАТАЛОГА ТОВАРОВ

Привет, коллеги! 👋 Выбор между реляционной БД и документной — вечная боль. Сегодня разберём реальный кейс интернет-магазина, где SQL сначала победил, а потом проиграл. И покажем, как код помогает принять решение. 🧐

📌 Кейс: «Товары с разными свойствами»

Магазин электроники: у смартфонов — диагональ экрана, у ноутбуков — объём RAM, у пылесосов — мощность всасывания. В реляционной БД это вылилось в таблицу product_attributes с EAV-моделью (сущность-атрибут-значение):

CREATE TABLE product_attributes (
product_id INT,
attr_name VARCHAR(50),
attr_value VARCHAR(255)
);

При каждом показе товара — 10–20 джойнов. Каталог тормозил. Перешли на документную MongoDB:

// Документ товара
{
"_id": 123,
"name": "iPhone 15",
"price": 799,
"attributes": {
"screen": "6.1 inch",
"storage": "128 GB",
"camera": "48 MP"
}
}

Результат: выборка товара — один запрос без джойнов. Время ответа сократилось с 800 мс до 30 мс.

📌 Когда SQL, а когда NoSQL?

SQL (PostgreSQL, MySQL) — если:

Данные строго структурированы, связи сложные (многие-ко-многим).
Нужны транзакции ACID (финансы, заказы).
Требуются сложные отчёты с JOIN и агрегатами.
NoSQL (MongoDB, Cassandra) — если:

Схема данных гибкая (разные атрибуты у разных сущностей).
Нужна высокая горизонтальная масштабируемость.
Допустима конечная согласованность (eventual consistency).

📌 Что должен зафиксировать аналитик?

Профиль нагрузки: чтение или запись преобладает?
Структура данных: стабильная схема или часто меняется?
Требования к транзакциям: нужны ли ACID-гарантии?
Прогноз роста: объём данных через год, необходимость шардирования.

Вывод: Универсального ответа нет. Аналитик, понимающий сильные стороны разных типов БД, поможет команде выбрать инструмент под конкретную задачу. 🔧



#SQL
🗄 Пост: ПАРТИЦИОНИРОВАНИЕ: КАК НЕ УТОНУТЬ В ДАННЫХ

Привет, коллеги! 👋 Через год после запуска таблица events выросла до 500 млн записей. Удаление старых данных через DELETE занимало часы и блокировало таблицу. Как быть? Партиционирование. Разберём реальный кейс. 📊

📌 Кейс: «Система логов падает раз в месяц»

Система логирования хранила все события в одной таблице. Раз в месяц запускали DELETE FROM events WHERE created_at < NOW() - INTERVAL '30 days'. Этот запрос:

Выполнялся 4 часа
Блокировал запись новых событий
Фрагментировал индексы
Решение — партиционирование по дням (PostgreSQL):

-- Создаём партиционированную таблицу
CREATE TABLE events (
id SERIAL,
user_id INT,
event_time TIMESTAMP,
payload JSONB
) PARTITION BY RANGE (event_time);


-- Создаём партиции для каждого дня
CREATE TABLE events_2025_04_01 PARTITION OF events
FOR VALUES FROM ('2025-04-01') TO ('2025-04-02');

-- Автоматическое создание партиций через pg_partman
SELECT create_parent('public.events', 'event_time', 'daily', p_retention => '30 days');
Что дало партиционирование?

Удаление старых данных — мгновенное: DROP TABLE events_2025_03_01
Запросы по датам читают только нужные партиции (partition pruning)
VACUUM практически не нужен, фрагментация исчезла

📌 Пример кода: автоматическое удаление партиций

-- Удаление партиций старше 30 дней (процедура)
CREATE OR REPLACE FUNCTION drop_old_partitions()
RETURNS void AS $$
DECLARE
partition_name TEXT;
BEGIN
FOR partition_name IN
SELECT tablename FROM pg_tables
WHERE tablename LIKE 'events_%'
AND tablename < 'events_' || TO_CHAR(NOW() - INTERVAL '30 days', 'YYYY_MM_DD')
LOOP
EXECUTE 'DROP TABLE ' || partition_name;
END LOOP;
END;
$$ LANGUAGE plpgsql;


📌 Что должен зафиксировать аналитик?

Ключ партиционирования: чаще всего дата (для логов, событий).
Интервал: день, неделя, месяц — в зависимости от частоты запросов.
Политика хранения: сколько времени данные хранятся в горячей таблице, когда удаляются или архивируются.
Индексы: локальные индексы на партициях, а не глобальные.

Результат: система перестала «тормозить» при очистке данных, запросы ускорились. 🚀

#SQL
Media is too big
VIEW IN TELEGRAM
Увольнение тех специалиста
😁2
This media is not supported in your browser
VIEW IN TELEGRAM
Заработай за месяц от 50000₽ на входящих заявках

Ниже делюсь экспертами, которые помогают выстроить систему продаж. Вы получаете гарантированный результат без выгораний и стресса.

Добавляй папку экспертов к себе и начинай зарабатывать уже сегодня

Все методы работают 💯. Начни делать продажи и ты

Все уже готово за тебя. Просто бери и делай https://t.me/addlist/yWaHGpxI5ethOGYy

Добавляй себе всю папку https://t.me/addlist/yWaHGpxI5ethOGYy и
Записывайся в подборку🫶
Please open Telegram to view this post
VIEW IN TELEGRAM
😁😆😁 Ты ведь тоже это замечаешь?

Пока одни «присматриваются» к нейросетям— другие уже зарабатывают на этом 💵

И самое интересное — порог входа сейчас минимальный.
Не нужно быть программистом.
Нужно только одно:
понимать, как именно использовать ИИ под свои задачи.


Я тут собрал папку с экспертами в этой теме.
Можешь добавиться и посмотреть, как это делают другие 👇

https://t.me/addlist/A0vy8zWBM1gyNTky
Please open Telegram to view this post
VIEW IN TELEGRAM