Forwarded from AffPapa! Клуб спящих бизнесменов! Потрачено!
VELORA — новый бренд от MOTOR PARTNERS!
GEO: RU
🙂 Что получает партнер?
🔥 Станьте участником акции HOT SHARE от VELORA на эксклюзивных условиях:
🪙 Для игроков - розыгрыш 1кг золота, стоимостью в 132.000$
🪙 Для партнеров - сообщи промо PACAN и получи +10% к RS
✉️ Пиши менеджеру и начни лить трафик уже сегодня: @velora_partners
GEO: RU
✔️Новый бренд с чистой базой для эффективного старта
✔️Стабильные платежки (мин. депозит ₽100–300)
✔️Гибкие модели сотрудничества под любые источники трафика
➤ RevShare до 70%
➤ CPA до 120$
➤ Hybrid до $50 CPA + 50% RS
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from AffPapa! Клуб спящих бизнесменов! Потрачено!
This media is not supported in your browser
VIEW IN TELEGRAM
Совсем скоро запуск ШЕСТОГО проекта на RU GEO от создателей APEX, EVA, KUSH, BANDA и LEEBET!
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from AffPapa! Клуб спящих бизнесменов! Потрачено!
Там Бласк придумал сканировать/скриншотить сайты что бы мониторить размещения, по сути они нашли все сайты аффилиатов, каждый день скриншотят их и фиксируют, что бы контролировать размещения слота
ЧТо бы избежать хуйни когда менеджер раз в квартал присылает тебе один скрин "всё супер, лого стоит" — а по факту оно там провисело два дня из тридцати, и ты про это узнаёшь только когда партнёр уже слился
Пока выкатывают вроде как только Бразилию, но на очереди и другие ГЕО! Плюсы очевидны:
• смотреть на конкурентов (в Бразилии мы нашли 315 сайтов)
• смотреть, кто размещается у конкурентов
• смотреть обьем трафика
Тоже самое вайб кодить в NeBlask я не планирую, может чуть попозже, когда они все ГЕО выкатят и я смогу просто собрать все сайты котоыре они мониторят, короче если это кому надо, идем в Blask! А NeBlask подтянется позже!
P.S. На скрине - размещение бренда Bet da Sorte
ЧТо бы избежать хуйни когда менеджер раз в квартал присылает тебе один скрин "всё супер, лого стоит" — а по факту оно там провисело два дня из тридцати, и ты про это узнаёшь только когда партнёр уже слился
Пока выкатывают вроде как только Бразилию, но на очереди и другие ГЕО! Плюсы очевидны:
• смотреть на конкурентов (в Бразилии мы нашли 315 сайтов)
• смотреть, кто размещается у конкурентов
• смотреть обьем трафика
Тоже самое вайб кодить в NeBlask я не планирую, может чуть попозже, когда они все ГЕО выкатят и я смогу просто собрать все сайты котоыре они мониторят, короче если это кому надо, идем в Blask! А NeBlask подтянется позже!
P.S. На скрине - размещение бренда Bet da Sorte
Forwarded from AffPapa! Клуб спящих бизнесменов! Потрачено!
This media is not supported in your browser
VIEW IN TELEGRAM
Совсем скоро запуск ШЕСТОГО проекта на RU GEO от создателей APEX, EVA, KUSH, BANDA и LEEBET!
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Ебучий Google ADS 🤡
Media is too big
VIEW IN TELEGRAM
( Остров проклятых )
https://t.me/+_K1fUqPoJ8ExMWMy
https://t.me/+LdJ0ohSwKzQ5OWQ6
Please open Telegram to view this post
VIEW IN TELEGRAM
PHPUnit ломается не в тестах, а в договорённостях команды
Когда тесты становятся шумом, проблема обычно не в ассертах, а в стиле использования фреймворка: один тест проверяет пол-класса, другой зависим от порядка, третий подменяет всё подряд через мок.
Что держать в порядке:
— тестируйте поведение, а не реализацию;
— не смешивайте в одном тесте много причин падения;
— фикстуры делайте короткими и явными;
— моки ставьте только там, где есть внешний эффект или дорогая зависимость.
Отдельная ловушка — хрупкие assertions. Если тест проверяет массив целиком, строку целиком и ещё внутренние вызовы, он начинает падать от безобидного рефакторинга. Лучше проверять контракт: вход, выход, побочный эффект. Для Laravel-проектов это особенно заметно в сервисах, job’ах и интеграционных тестах.
И ещё правило: если тест нельзя прочитать за 10 секунд, его надо упростить. Хороший набор PHPUnit — это не максимум покрытия, а минимальный набор проверок, который ловит регрессии и не мешает двигать код.
Когда тесты становятся шумом, проблема обычно не в ассертах, а в стиле использования фреймворка: один тест проверяет пол-класса, другой зависим от порядка, третий подменяет всё подряд через мок.
Что держать в порядке:
— тестируйте поведение, а не реализацию;
— не смешивайте в одном тесте много причин падения;
— фикстуры делайте короткими и явными;
— моки ставьте только там, где есть внешний эффект или дорогая зависимость.
Отдельная ловушка — хрупкие assertions. Если тест проверяет массив целиком, строку целиком и ещё внутренние вызовы, он начинает падать от безобидного рефакторинга. Лучше проверять контракт: вход, выход, побочный эффект. Для Laravel-проектов это особенно заметно в сервисах, job’ах и интеграционных тестах.
И ещё правило: если тест нельзя прочитать за 10 секунд, его надо упростить. Хороший набор PHPUnit — это не максимум покрытия, а минимальный набор проверок, который ловит регрессии и не мешает двигать код.
Forwarded from high profit — low life
⚡️ AffPapa теперь официально принадлежит Иванову
Евгений Юрьич продолжает издеваться над опозорившимся этим летом AffPapa. Вслед за базой контактов к маэстро ушел еще и товарный знак конторы...
Как проверить:
1. Перейти по ссылке
2. Ввести 2026793242
3. Ахуеть от беспомощности AffPapa
Такие сегодня новости, такая life...
High Profit — Low Life | Прислать сплетню
Евгений Юрьич продолжает издеваться над опозорившимся этим летом AffPapa. Вслед за базой контактов к маэстро ушел еще и товарный знак конторы...
Как проверить:
1. Перейти по ссылке
2. Ввести 2026793242
3. Ахуеть от беспомощности AffPapa
Такие сегодня новости, такая life...
High Profit — Low Life | Прислать сплетню
Forwarded from В арбитраже денег нет?
ЕЮ Иванов продолжает кошмарить АффПапу, конторку, которая накинула говна на вентилятор этим летом. Тогда в AffPapa не знали, с каким говном идут бодаться, поэтому заслуженно проиграли. 😏
На этот раз ЕЮ зарегал товарный знак AffPapa — совсем скоро имя компании будет официально принадлежать ему. Чтобы убедиться в трушности мува, переходим по ссыл-Очке и вводим серийный номер: 2026793242. Там видим, что заявка на регистрацию подана лично Евгением Юрьичем.
Всё это выглядит забавно, но давайте не забывать, в какой сфере мы работаем и что реально может произойти с жирным троллем за воровство нейминга. Впрочем, толстому не привыкать отхватывать пиздов за проделки в интернете, поэтому ждем очередную фотку разбитого ебала и длинный пост с извинениями. 😏😏😏
В арбитраже денег нет 💵
На этот раз ЕЮ зарегал товарный знак AffPapa — совсем скоро имя компании будет официально принадлежать ему. Чтобы убедиться в трушности мува, переходим по ссыл-Очке и вводим серийный номер: 2026793242. Там видим, что заявка на регистрацию подана лично Евгением Юрьичем.
Всё это выглядит забавно, но давайте не забывать, в какой сфере мы работаем и что реально может произойти с жирным троллем за воровство нейминга. Впрочем, толстому не привыкать отхватывать пиздов за проделки в интернете, поэтому ждем очередную фотку разбитого ебала и длинный пост с извинениями. 😏😏😏
В арбитраже денег нет 💵
PHP в проде ломается не из-за синтаксиса, а из-за границ процесса
В PHP легко забыть, что каждый request — отдельная жизнь, но окружение вокруг него общее: FPM-пулы, opcache, очереди, cron, файловая система, Redis. Баги чаще сидят не в контроллере, а на стыке.
Проверяйте границы явно:
— таймауты HTTP-клиентов и БД не должны быть «по умолчанию»;
— запись файлов только через атомарную замену, не поверх существующего;
— lock для cron/queue-задач, которые нельзя выполнять параллельно;
— idempotency key для платежей, постбеков, вебхуков;
— отдельные лимиты памяти для воркеров, не копия настроек FPM.
Есть наблюдение которое стоит проверить: если код нельзя безопасно перезапустить в середине операции, это не бизнес-логика, а лотерея. Особенно в импортах, биллинге, рассылках и синхронизациях CRM.
Хороший PHP-сервис проектируется не вокруг «быстрого ответа», а вокруг повторяемости: упал процесс, повторился job, пришёл дубль вебхука — данные остались консистентными.
В PHP легко забыть, что каждый request — отдельная жизнь, но окружение вокруг него общее: FPM-пулы, opcache, очереди, cron, файловая система, Redis. Баги чаще сидят не в контроллере, а на стыке.
Проверяйте границы явно:
— таймауты HTTP-клиентов и БД не должны быть «по умолчанию»;
— запись файлов только через атомарную замену, не поверх существующего;
— lock для cron/queue-задач, которые нельзя выполнять параллельно;
— idempotency key для платежей, постбеков, вебхуков;
— отдельные лимиты памяти для воркеров, не копия настроек FPM.
Есть наблюдение которое стоит проверить: если код нельзя безопасно перезапустить в середине операции, это не бизнес-логика, а лотерея. Особенно в импортах, биллинге, рассылках и синхронизациях CRM.
Хороший PHP-сервис проектируется не вокруг «быстрого ответа», а вокруг повторяемости: упал процесс, повторился job, пришёл дубль вебхука — данные остались консистентными.
5 PHP-пакетов, которые стоит оценивать не по звуку, а по внедрению
В PHP легко залипнуть на «популярное». Но пакет в проде ценят не за звёзды, а за предсказуемость: понятный API, стабильные зависимости, нормальные тесты и вменяемую поверхность ошибок.
— если пакет тащит половину фреймворка ради одной задачи, он дорог в сопровождении;
— если у него нет явной точки расширения, вы быстро упрётесь в fork;
— если документация не объясняет edge cases, интеграция съест больше времени, чем сама разработка.
Смотрите на три вещи: как пакет живёт с Composer constraints, есть ли у него отдельные конфиги/контракты, и можно ли его отключить без переписывания домена. Хороший пакет не должен заставлять вас менять архитектуру под себя; он должен встраиваться в уже принятую модель.
Ещё один фильтр — тестируемость. Если сервис сложно мокать, события не изолируются, а side effects размазаны по хендлерам, пакет будет мешать CI и замедлять рефакторинг.
Берите только то, что можно удалить без боли: тогда пакет помогает продукту, а не становится его скрытой зависимостью.
В PHP легко залипнуть на «популярное». Но пакет в проде ценят не за звёзды, а за предсказуемость: понятный API, стабильные зависимости, нормальные тесты и вменяемую поверхность ошибок.
— если пакет тащит половину фреймворка ради одной задачи, он дорог в сопровождении;
— если у него нет явной точки расширения, вы быстро упрётесь в fork;
— если документация не объясняет edge cases, интеграция съест больше времени, чем сама разработка.
Смотрите на три вещи: как пакет живёт с Composer constraints, есть ли у него отдельные конфиги/контракты, и можно ли его отключить без переписывания домена. Хороший пакет не должен заставлять вас менять архитектуру под себя; он должен встраиваться в уже принятую модель.
Ещё один фильтр — тестируемость. Если сервис сложно мокать, события не изолируются, а side effects размазаны по хендлерам, пакет будет мешать CI и замедлять рефакторинг.
Берите только то, что можно удалить без боли: тогда пакет помогает продукту, а не становится его скрытой зависимостью.
Spatie — не “пакеты для красоты”, а готовые кирпичи для продакшена
У Spatie сильная сторона простая: почти каждый пакет закрывает один повторяющийся кусок инфраструктуры. Медиа-библиотека, роли и permissions, activity log, backup, sitemap, data transfer objects — вместо самописной обвязки берёте проверенный слой и не тратите недели на поддержку.
Есть правило, которое экономит много времени: сначала смотрим на границы домена, потом на пакет. Если задача сводится к “CRUD + хранение метаданных + события”, Spatie часто подходит. Если там жёсткая бизнес-логика, нестандартные права или сложные транзакции — пакет лучше использовать как низкоуровневую опору, а не как готовый фреймворк внутри фреймворка.
Перед подключением проверьте три вещи:
• как пакет хранит данные и можно ли жить с его схемой;
• есть ли у него события/хуки для вашей интеграции;
• не ломает ли он тесты, очереди и деплой из-за скрытой магии.
Самая частая ошибка — тащить Spatie “на всякий случай”. В таком режиме код быстро превращается в набор зависимостей, которые трудно менять. Нормальный подход другой: пакет должен убрать рутину, а не забрать архитектуру.
Если пакет можно объяснить одной фразой и он закрывает повторяющуюся боль без лишней магии — это хороший кандидат. Если приходится долго подгонять его под себя, дешевле собрать свой тонкий слой поверх понятных примитивов.
У Spatie сильная сторона простая: почти каждый пакет закрывает один повторяющийся кусок инфраструктуры. Медиа-библиотека, роли и permissions, activity log, backup, sitemap, data transfer objects — вместо самописной обвязки берёте проверенный слой и не тратите недели на поддержку.
Есть правило, которое экономит много времени: сначала смотрим на границы домена, потом на пакет. Если задача сводится к “CRUD + хранение метаданных + события”, Spatie часто подходит. Если там жёсткая бизнес-логика, нестандартные права или сложные транзакции — пакет лучше использовать как низкоуровневую опору, а не как готовый фреймворк внутри фреймворка.
Перед подключением проверьте три вещи:
• как пакет хранит данные и можно ли жить с его схемой;
• есть ли у него события/хуки для вашей интеграции;
• не ломает ли он тесты, очереди и деплой из-за скрытой магии.
Самая частая ошибка — тащить Spatie “на всякий случай”. В таком режиме код быстро превращается в набор зависимостей, которые трудно менять. Нормальный подход другой: пакет должен убрать рутину, а не забрать архитектуру.
Если пакет можно объяснить одной фразой и он закрывает повторяющуюся боль без лишней магии — это хороший кандидат. Если приходится долго подгонять его под себя, дешевле собрать свой тонкий слой поверх понятных примитивов.
PHP ломается не в синтаксисе, а в мелочах вокруг типов и ошибок
За неделю в репах: большая часть «непонятных багов» в PHP обычно сводится к трём вещам — смешали null и пустую строку, не зафиксировали тип на границе слоя, проглотили исключение и пошли дальше.
Есть наблюдение которое стоит проверить: код становится стабильнее не от «больше if-ов», а от жёстких правил на входе и выходе. Для этого:
— включайте strict types там, где это не ломает легаси;
— нормализуйте входные данные до бизнес-логики;
— не возвращайте mixed без причины;
— исключения либо обрабатываются, либо поднимаются выше, но не исчезают в логах-тишине.
Вторая зона риска — неочевидные преобразования. Строка "0", пустой массив и false в PHP легко дают разные ветки там, где автор кода ожидал один сценарий. Если условие влияет на деньги, права доступа или статус заказа, проверяйте его отдельно и явно.
Третья привычка, которая экономит часы: не смешивайте в одном методе валидацию, расчёт и запись в БД. Когда слой делает только одно дело, его проще тестировать, а баги быстрее локализуются.
Если хотите меньше сюрпризов в проде, начните не с переписывания всего проекта, а с границ: типы, ошибки, нормализация входа. Именно там PHP чаще всего показывает характер.
За неделю в репах: большая часть «непонятных багов» в PHP обычно сводится к трём вещам — смешали null и пустую строку, не зафиксировали тип на границе слоя, проглотили исключение и пошли дальше.
Есть наблюдение которое стоит проверить: код становится стабильнее не от «больше if-ов», а от жёстких правил на входе и выходе. Для этого:
— включайте strict types там, где это не ломает легаси;
— нормализуйте входные данные до бизнес-логики;
— не возвращайте mixed без причины;
— исключения либо обрабатываются, либо поднимаются выше, но не исчезают в логах-тишине.
Вторая зона риска — неочевидные преобразования. Строка "0", пустой массив и false в PHP легко дают разные ветки там, где автор кода ожидал один сценарий. Если условие влияет на деньги, права доступа или статус заказа, проверяйте его отдельно и явно.
Третья привычка, которая экономит часы: не смешивайте в одном методе валидацию, расчёт и запись в БД. Когда слой делает только одно дело, его проще тестировать, а баги быстрее локализуются.
Если хотите меньше сюрпризов в проде, начните не с переписывания всего проекта, а с границ: типы, ошибки, нормализация входа. Именно там PHP чаще всего показывает характер.
Forwarded from Natalia
ВПЕРВЫЕ! ТОЛЬКО ОДИН ВЕЧЕР!
🫥 ПИАР-ВОЙС В ЭТОМ ЧАТЕ🫥
Участников никто не знает.
Откуда они? Хуй его знает.
Темы — просто пиздец!
• Аналитика на двух лидах
• Слив анлим бюджетов
• Как просрать медийку
• Где найти нормальную работу
• Как закупиться себе в карман
⚡ Все это для тех, кто придет на ВОЙС
На котором обсудим:
Модераторы: @adv_god @natnetak
NO RESPECT CHAT • 27.08 • 19:00 GMT+3
Участников никто не знает.
Откуда они? Хуй его знает.
Темы — просто пиздец!
• Аналитика на двух лидах
• Слив анлим бюджетов
• Как просрать медийку
• Где найти нормальную работу
• Как закупиться себе в карман
Как делать PR, маркетинг и деньги в арбитраже трафика
На котором обсудим:
• На что компании еще готовы тратить деньги
• За чье внимание мы вообще конкурируем
• Что действительно работает, а что сливает бабки
• PR vs маркетинг
• Как измерить результаты кампейнов
• Что делать с запросом «хочу, чтобы про нас все знали»
Модераторы: @adv_god @natnetak
NO RESPECT CHAT • 27.08 • 19:00 GMT+3
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from AffPapa! Клуб спящих бизнесменов! Потрачено!
Иногда мне кажется, что я работаю не в iGaming, а в похоронном бюро.
Каждый день кто-то приносит очередной продукт и говорит: «У нас почему-то падает LTV.»
Потом открываешь аналитику и понимаешь, что игроки предупреждали об этом ещё месяц назад.
Просто никто не слушал.
Я — Head of Retention. И в своём канале разбираю ошибки, из-за которых команды месяцами теряют LTV, даже не замечая этого.
Каждый день кто-то приносит очередной продукт и говорит: «У нас почему-то падает LTV.»
Потом открываешь аналитику и понимаешь, что игроки предупреждали об этом ещё месяц назад.
Просто никто не слушал.
Я — Head of Retention. И в своём канале разбираю ошибки, из-за которых команды месяцами теряют LTV, даже не замечая этого.
7 PHP-пакетов, которые экономят часы на типовых веб-проектах
Если стек крутится вокруг Laravel или Symfony, часть рутины лучше отдавать пакетам, а не писать руками. Но брать нужно не «популярное», а то, что закрывает повторяемую боль и не тащит за собой лишнюю магию.
— spatie/laravel-permission: роли и права без самописных таблиц и хрупких проверок в контроллерах.
— spatie/laravel-data: DTO и валидация входа без каши из массивов.
— livewire/livewire: когда нужна реактивность без отдельного фронтенд-слоя.
— filament/filament: админки и внутренние панели быстрее, чем собирать CRUD вручную.
— league/flysystem: единый слой для файловых хранилищ, чтобы не привязываться к одному драйверу.
— symfony/process: безопаснее запускать внешние процессы и воркеры.
— pestphp/pest или phpunit/phpunit: тесты должны быть частью рутины, а не отдельной церемонией.
Есть наблюдение которое стоит проверить: пакет полезен только тогда, когда он уменьшает количество своего кода. Если ради одной фичи вы добавляете 5 абстракций и половину фреймворка — это уже не ускорение, а долг.
Перед подключением смотрите на API, частоту breaking changes, качество доков и то, можно ли жить без пакета через год. Лучший пакет — тот, который легко удалить, если он перестал быть нужен.
Если стек крутится вокруг Laravel или Symfony, часть рутины лучше отдавать пакетам, а не писать руками. Но брать нужно не «популярное», а то, что закрывает повторяемую боль и не тащит за собой лишнюю магию.
— spatie/laravel-permission: роли и права без самописных таблиц и хрупких проверок в контроллерах.
— spatie/laravel-data: DTO и валидация входа без каши из массивов.
— livewire/livewire: когда нужна реактивность без отдельного фронтенд-слоя.
— filament/filament: админки и внутренние панели быстрее, чем собирать CRUD вручную.
— league/flysystem: единый слой для файловых хранилищ, чтобы не привязываться к одному драйверу.
— symfony/process: безопаснее запускать внешние процессы и воркеры.
— pestphp/pest или phpunit/phpunit: тесты должны быть частью рутины, а не отдельной церемонией.
Есть наблюдение которое стоит проверить: пакет полезен только тогда, когда он уменьшает количество своего кода. Если ради одной фичи вы добавляете 5 абстракций и половину фреймворка — это уже не ускорение, а долг.
Перед подключением смотрите на API, частоту breaking changes, качество доков и то, можно ли жить без пакета через год. Лучший пакет — тот, который легко удалить, если он перестал быть нужен.
PHP-проект ломается не из-за фреймворка, а из-за этих 5 привычек
За неделю в репах: один и тот же набор ошибок. Код работает, пока проект маленький, а потом начинается магия с багами, долгими релизами и «у меня локально всё ок».
• Смешивают бизнес-логику с контроллерами и шаблонами — в итоге невозможно тестировать без боли.
• Не фиксируют зависимости в composer.lock и тянут случайные обновления через край.
• Пишут запросы к БД в циклах, а потом удивляются, почему всё тормозит.
• Игнорируют кэш, очереди и фоновые задачи, хотя именно они снимают нагрузку.
• Лепят глобальные helper’ы и статические вызовы там, где нужен явный контракт.
Есть наблюдение которое стоит проверить: чем меньше магии в PHP-коде, тем проще его сопровождать. Сервисный слой, DTO, понятные интерфейсы и тесты на границах системы почти всегда дешевле, чем «быстрое решение» на коленке.
Если проект уже вырос, начните не с переписывания всего, а с одного правила: каждый новый кусок кода должен быть проще того, что его окружает.
За неделю в репах: один и тот же набор ошибок. Код работает, пока проект маленький, а потом начинается магия с багами, долгими релизами и «у меня локально всё ок».
• Смешивают бизнес-логику с контроллерами и шаблонами — в итоге невозможно тестировать без боли.
• Не фиксируют зависимости в composer.lock и тянут случайные обновления через край.
• Пишут запросы к БД в циклах, а потом удивляются, почему всё тормозит.
• Игнорируют кэш, очереди и фоновые задачи, хотя именно они снимают нагрузку.
• Лепят глобальные helper’ы и статические вызовы там, где нужен явный контракт.
Есть наблюдение которое стоит проверить: чем меньше магии в PHP-коде, тем проще его сопровождать. Сервисный слой, DTO, понятные интерфейсы и тесты на границах системы почти всегда дешевле, чем «быстрое решение» на коленке.
Если проект уже вырос, начните не с переписывания всего, а с одного правила: каждый новый кусок кода должен быть проще того, что его окружает.
PHP-код медленно умирает не от фреймворка, а от невидимых границ
В коммерческом PHP главный источник боли — смешанные ответственности. Когда в одном методе живут HTTP, валидация, бизнес-решение, SQL и отправка события, тестировать уже нечего: остаётся молиться на happy path.
Минимальная схема, которая окупается даже в маленьком проекте:
— контроллер принимает запрос и отдаёт ответ;
— FormRequest/DTO нормализует вход;
— action/service принимает чистые данные;
— query object прячет сложный SELECT;
— событие или джоба уносит побочные эффекты.
Есть наблюдение которое стоит проверить: если метод нельзя вызвать из CLI или теста без Request, Auth и контейнерной магии — это не бизнес-логика, а обработчик веб-слоя. Такой код мешает переиспользованию в API, очередях и админке.
Не надо строить «энтерпрайз» ради формы на два поля. Но границы лучше вводить там, где есть деньги: создание лида, расчёт комиссии, смена статуса, биллинг, антифрод.
Хороший PHP-проект читается по направлению зависимостей: веб-слой снаружи, доменные решения внутри. Если это видно без открытия половины репозитория — команда уже сэкономила себе будущий рефакторинг.
В коммерческом PHP главный источник боли — смешанные ответственности. Когда в одном методе живут HTTP, валидация, бизнес-решение, SQL и отправка события, тестировать уже нечего: остаётся молиться на happy path.
Минимальная схема, которая окупается даже в маленьком проекте:
— контроллер принимает запрос и отдаёт ответ;
— FormRequest/DTO нормализует вход;
— action/service принимает чистые данные;
— query object прячет сложный SELECT;
— событие или джоба уносит побочные эффекты.
Есть наблюдение которое стоит проверить: если метод нельзя вызвать из CLI или теста без Request, Auth и контейнерной магии — это не бизнес-логика, а обработчик веб-слоя. Такой код мешает переиспользованию в API, очередях и админке.
Не надо строить «энтерпрайз» ради формы на два поля. Но границы лучше вводить там, где есть деньги: создание лида, расчёт комиссии, смена статуса, биллинг, антифрод.
Хороший PHP-проект читается по направлению зависимостей: веб-слой снаружи, доменные решения внутри. Если это видно без открытия половины репозитория — команда уже сэкономила себе будущий рефакторинг.
7 PHP-пакетов, которые экономят недели на CRM, трекинге и интеграциях
За неделю в репах чаще всего всплывают одни и те же задачи: логирование, очереди, вебхуки, экспорт, авторизация, поиск, отчёты. И почти в каждой из них не нужно писать своё с нуля — дешевле собрать стек из проверенных пакетов.
•
•
•
•
•
•
•
Есть наблюдение которое стоит проверить: пакет нужен не по популярности, а по повторяемости задачи. Если код вокруг него пишется второй раз за месяц — это кандидат на вынос в зависимость. Если вокруг пакета начинается магия и скрытые побочные эффекты — лучше оставить ручную реализацию.
Перед внедрением смотрите на три вещи: кто владеет пакетом, как он ведёт себя с обновлениями Laravel/Symfony, и можно ли легко заменить его без переписывания половины домена.
Выигрывают не те, кто набрал больше зависимостей, а те, кто оставил в проекте только те пакеты, которые реально снимают рутину.
За неделю в репах чаще всего всплывают одни и те же задачи: логирование, очереди, вебхуки, экспорт, авторизация, поиск, отчёты. И почти в каждой из них не нужно писать своё с нуля — дешевле собрать стек из проверенных пакетов.
•
spatie/laravel-permission — роли и права без самодельных таблиц и костылей в middleware •
spatie/laravel-query-builder — фильтры, сортировки и include без жирных контроллеров •
spatie/laravel-activitylog — аудит действий для CRM, админок и кабинетов •
maatwebsite/excel — импорт и экспорт, когда бизнес просит «просто выгрузить в Excel» •
laravel/sanctum — токены для внутренних API и сервисных интеграций •
laravel/horizon — наблюдаемость очередей, если фоновые задачи уже стали критичны •
guzzlehttp/guzzle — базовый HTTP-клиент для внешних API, когда нужен полный контрольЕсть наблюдение которое стоит проверить: пакет нужен не по популярности, а по повторяемости задачи. Если код вокруг него пишется второй раз за месяц — это кандидат на вынос в зависимость. Если вокруг пакета начинается магия и скрытые побочные эффекты — лучше оставить ручную реализацию.
Перед внедрением смотрите на три вещи: кто владеет пакетом, как он ведёт себя с обновлениями Laravel/Symfony, и можно ли легко заменить его без переписывания половины домена.
Выигрывают не те, кто набрал больше зависимостей, а те, кто оставил в проекте только те пакеты, которые реально снимают рутину.
Forwarded from AFF.TOP - про арбитраж трафика и CPA рынок!
This media is not supported in your browser
VIEW IN TELEGRAM
В роликах Youtube теперь можно рекламировать товары Amazone
➡️ Читайте на сайте: https://aff.top/blog/v-rolikakh-youtube-teper-mozhno-reklamirovat-tovary-amazone
🧠 Ещё больше инсайтов → в канале AFF.top
➡️ Читайте на сайте: https://aff.top/blog/v-rolikakh-youtube-teper-mozhno-reklamirovat-tovary-amazone
🧠 Ещё больше инсайтов → в канале AFF.top
Forwarded from AFF.TOP - про арбитраж трафика и CPA рынок!
This media is not supported in your browser
VIEW IN TELEGRAM
Google выпустил Gemini Omni 1.1 Flash
Google обновил Gemini Omni для генерации видео: модель умеет продолжать сцены с учётом до 10 секунд контекста и собирать ролик до 40 секунд, работать по референсу и делать переходы между кадрами. Главный вывод — инструмент стал практичнее для продакшена, а посекундная цена делает его заметно доступнее для тестов и рабочих задач.
➡️ Читайте на сайте: https://aff.top/blog/google-vypustil-gemini-omni-1-1-flash
🧠 Ещё больше инсайтов → в канале AFF.top
Google обновил Gemini Omni для генерации видео: модель умеет продолжать сцены с учётом до 10 секунд контекста и собирать ролик до 40 секунд, работать по референсу и делать переходы между кадрами. Главный вывод — инструмент стал практичнее для продакшена, а посекундная цена делает его заметно доступнее для тестов и рабочих задач.
➡️ Читайте на сайте: https://aff.top/blog/google-vypustil-gemini-omni-1-1-flash
🧠 Ещё больше инсайтов → в канале AFF.top
Forwarded from AFF.TOP - про арбитраж трафика и CPA рынок!
This media is not supported in your browser
VIEW IN TELEGRAM
Топ 5 PWA-сервисов для залива дейтинга
Статья показывает, что PWA выгодны не только для гемблы: в дейтинге они дают пуш-базу, больше траста и помогают маскировать оффер под бренд. Главный выбор зависит от цены инсталлов и теста GEO: для старта лучше бесплатные или дешёвые решения, а Progressier выделяется как самый практичный вариант для залива дейтинга.
➡️ Читайте на сайте: https://aff.top/blog/top-5-pwa-servisov-dlia-zaliva-deitinga
🧠 Ещё больше инсайтов → в канале AFF.top
Статья показывает, что PWA выгодны не только для гемблы: в дейтинге они дают пуш-базу, больше траста и помогают маскировать оффер под бренд. Главный выбор зависит от цены инсталлов и теста GEO: для старта лучше бесплатные или дешёвые решения, а Progressier выделяется как самый практичный вариант для залива дейтинга.
➡️ Читайте на сайте: https://aff.top/blog/top-5-pwa-servisov-dlia-zaliva-deitinga
🧠 Ещё больше инсайтов → в канале AFF.top