Сообщения

Сообщения за август, 2026

Анатомия одной попытки: как подключить внешний API к Squarespace и не слить ключи

Анатомия одной попытки: как подключить внешний API к Squarespace и не слить ключи Год назад ко мне пришел владелец нишевого магазина мебели на Squarespace 7.1. Задача звучала невинно: сделать калькулятор доставки прямо в карточке товара, запрашивая точный расчет через API транспортной компании. Штатный верстальщик заказчика предпринял смелую попытку решить задачу «в лоб». Он открыл Code Injection, написал пару десятков строк на чистом JavaScript с обычным fetch() и зашил туда боевой Bearer-токен сервиса. Через четыре дня баланс аккаунта транспортной компании улетел в минус на 92 000 рублей. Скрипт-кидди просто открыли вкладку Network в Chrome DevTools, скопировали ключ и прогнали через него сотни тысяч своих тяжелых запросов. Это классика. Первая попытка подружить закрытый конструктор с внешним миром почти всегда заканчивается либо дырой в безопасности, либо разбитыми надеждами. Две стены Squarespace: CORS и браузерный публичный код Когда создается нестандартная squarespace ap...

How a Single Bubble Workflow Cost My Client $3,400 (And How to Prevent It)

How a Single Bubble Workflow Cost My Client $3,400 (And How to Prevent It) It was 3:14 AM on a Tuesday in April 2023 when my phone started buzzing. It wasn't a standard notification. It was a PagerDuty alert from a real estate platform we had built for a client named Sarah. The alert read: "Bubble Daily WU Limit Exceeded (95%)." I sat up, rubbed my eyes, and opened the Bubble editor. Sarah’s app, which usually cruised along comfortably on a legacy plan for about $115 a month, had consumed 3.2 million Workload Units in less than twelve hours. At the new rate, her projected bill for the month was shaping up to be over $3,400. I was sweating. Sarah was a bootstrapper. A bill like that would kill her startup before it even launched. The culprit? A seemingly innocent backend recursive workflow. It was designed to update a "days on market" counter for her listings. But a junior developer on our team had missed a termination condition. The workflow was running ...

Why Your European Amazon Store is Bleeding Cash (And It's Not the Demand)

Why Your European Amazon Store is Bleeding Cash (And It's Not the Demand) I remember sitting in a drafty warehouse in 2019, staring at 4,000 units of custom-designed silicone baking mats that wouldn't sell. We had killed it on the UK marketplace. We were cocky. So, we figured we would just copy-paste our listing, run the text through a basic translator, and launch on amazon de . We turned on the ads and waited for the cash register to ring. It didn't. We burned €14,200 on PPC in exactly twenty-two days. We got clicks, sure. But our conversion rate sat at a miserable 1.2%. I almost walked away from the continent entirely, convinced that European buyers just didn't want what we were selling. I was wrong. The demand was there. The problem was our listing looked like a cheap, translated scam to a discerning buyer in Munich or Frankfurt. We treated amazon europe like a single, English-speaking monolith. It is not. The Illusion of the English-Speaking European Most...

Как ускорить медленный сайт и пройти Core Web Vitals

Пошаговое руководство по ускорению сайта: от замеров до продакшена Скорость загрузки — это не про «зеленые цифры» в PageSpeed Insights, а про конверсию и SEO. Если ваш сайт грузится дольше 2.5 секунд, вы теряете до 40% трафика. Ниже — мой рабочий алгоритм, который я применяю на проектах. 1. Замеры: где болит? Нельзя оптимизировать то, что нельзя измерить. Забудьте про субъективное «вроде быстрее стало». Инструменты: PageSpeed Insights (для лабораторных данных), Lighthouse (в консоли разработчика), WebPageTest (для waterfall-диаграмм). Что смотрим: LCP (Largest Contentful Paint): Время отрисовки самого большого элемента (цель < 2.5с). CLS (Cumulative Layout Shift): Сдвиги макета (цель < 0.1). INP (Interaction to Next Paint): Отклик на действия пользователя (цель < 200мс). TTFB (Time to First Byte): Время ответа сервера (цель < 0.6с). Ошибка: Оптимизировать сайт только под мобильные или только под десктоп. Всегда смотрите на «медленные» 3G-сети в настр...

Why I Stopped Trusting the OkayCMS Built-in Import for Price Updates

Why I Stopped Trusting the OkayCMS Built-in Import for Price Updates It was a Tuesday morning, 9:14 AM, when my phone started vibrating itself off the desk. It was Andrey, a client running a busy home appliances store on OkayCMS. His site was crawling. Pages were taking twelve seconds to load, and checkout attempts were timing out. Customers were abandoning their carts, and Andrey was losing real money by the minute. The culprit? A cron job we had set up to run the native OkayCMS CSV import script. It was processing a fresh supplier feed of 18,400 items to update prices and stock levels. On paper, it should have worked. In reality, it was eating 100% of the server's CPU and locking the database tables. That was the day I realized that relying on the built-in import tools for high-frequency automated updates is a trap. I had to rebuild the entire integration from scratch. Here is what I learned from that bottleneck, and how we solve it now. The Illusion of the OkayCMS Demo ...

The $14,200 Price Sync Mistake

The $14,200 Price Sync Mistake I have spent the last seven years gluing databases together. If you do this long enough, you develop a nervous twitch every time a client says, "It is just a simple API integration." There is no such thing. Every custom sync engine is a hostage situation waiting to happen, and I learned this the hard way on a rainy Friday night in November. We were managing a catalog of exactly 42,108 SKUs for a consumer electronics retailer. The supplier updated their wholesale prices three times a day. We had built what we thought was a beautiful, state-of-the-art sync engine. At 3:14 AM, the supplier changed their base currency rate. Our engine started loop-updating. It choked. The rate limits kicked in, the connection dropped mid-write, and the database silently fell out of sync. Half the catalog got set to a price of zero. Before we woke up and pulled the plug, customers had ordered thirty-two high-end graphics cards for the price of shipping. That mist...

Как один скрытый символ в прайсе поставщика ломает импорт в PrestaShop

Как один скрытый символ в прайсе поставщика ломает импорт в PrestaShop Я занимаюсь интеграцией каталогов для интернет-магазинов уже больше семи лет. За это время я научился искренне ненавидеть формат CSV. Казалось бы, обычный текстовый файл, где данные разделены запятыми. Что тут можно испортить? Но когда вам на почту падает очередной «грязный» прайс-лист от поставщика автозапчастей или сантехники на 50 000 позиций, а на выходе нужен чистый импорт товаров prestashop csv, начинается настоящая игра на выживание. Вы сталкиваетесь не просто с таблицей. Вы сталкиваетесь с хаосом, который кто-то выгрузил из старой самописной ERP-системы. Я помню тот четверг. Мы запускали крупный магазин климатической техники. Клиент торопился, сезон горел, контекстная реклама была уже оплачена и ждала старта. Поставщик прислал «свежайшую» выгрузку. Я на автомате прогнал её через стандартный скрипт, запустил встроенный импортер PrestaShop и пошел пить кофе. Вернулся через двадцать минут. Сайт лежал. База ...

Your Supabase RLS is Leaking. You Just Don't Know It Yet.

Your Supabase RLS is Leaking. You Just Don't Know It Yet. I have spent the last six years cleaning up after developers who trusted marketing copy a little too much. Don't get me wrong. I love Supabase. It makes spinning up a backend feel like magic. But that magic has a dark side, and it lives in your database policies. When you build with Supabase, the marketing promises you a frontend-only paradise where you do not need to write a traditional backend, but what they do not tell you is that by skipping the backend, you are moving the entire security perimeter of your company into a set of SQL statements written in a tiny text box in a web dashboard. Most developers click the little green "Enable RLS" toggle on a table, write a policy that looks roughly like auth.uid() = user_id , run a couple of local integration tests, and call it a day. They assume they are safe. They are usually wrong. The 41,200 Manifest Leak Last October, I got a frantic call from a l...

Почему наивный ERC-20 убивает RWA: жесткие уроки токенизации недвижимости на ERC-3643

Почему наивный ERC-20 убивает RWA: жесткие уроки токенизации недвижимости на ERC-3643 В конце 2022 года мы чуть не похоронили пилотный проект на 3,8 млн долларов. Идея казалась простой: коммерческое здание, пул частных инвесторов, привычный смарт-контракт ERC-20 и красивый лендинг. Мы выпустили токены, провели первый раунд, а через две недели один из инвесторов внезапно попал под персональные санкции, перевел свою долю на неизвестный некастодиальный адрес и перестал выходить на связь. Юристы застройщика поседели за сутки. Банк заблокировал расчетный счет проекта, регулятор прислал официальный запрос, а мы сидели над кодом и понимали очевидную вещь: стандартный ERC-20 невозможно остановить. В нем нет функции принудительного изъятия по решению суда, нет встроенного реестра идентичностей и нет механизма отзыва прав у невалидного держателя. «Code is law» в реальном бизнесе не работает. Если ваш токен нельзя подчинить закону той юрисдикции, где стоит здание, ваш проект — не финансовый и...

Stop Treating Your CRM Like a Contact Book: How We Build Real Logic Under the Hood

Stop Treating Your CRM Like a Contact Book: How We Build Real Logic Under the Hood The $18,000 Dropdown Mistake Two years ago, the owner of a mid-sized commercial glazing shop sat across from me, rubbing his temples. He was losing roughly $18,000 every quarter. The culprit? Sales reps kept picking the wrong glass thickness for custom structural window frames during quick phone quotes. The reps weren't lazy or incompetent. Their software was just dumb. They had paid high annual fees for popular crm software , expecting it to act like an intelligent assistant. Instead, it was little more than a fancy digital Rolodex. When a rep picked "3000mm Aluminum Span" from a primary dropdown, the adjacent option list still displayed every glass panel in inventory—including thin single-pane options that would shatter under that span's wind load. Pipeline Trackers vs. Logic Engines Ask most executives about standard crm meaning , and they will talk about deal stages, lead ass...

Why Your $500 AI Cold Calling Freelancer Is Burning Your Leads

Why Your $500 AI Cold Calling Freelancer Is Burning Your Leads Last March, a SaaS founder came to me in a full-blown panic. Three weeks earlier, he had hired an ai cold calling agent freelance developer on Upwork for $800 to wire up a automated outbound stack using Vapi, OpenAI, and Twilio. On paper, it sounded brilliant. The freelancer showed a crisp video demo where the bot answered questions cleanly in a silent room. So the founder handed over a fresh list of 2,000 qualified mid-market prospects and hit go. It was a massacre. When live prospects answered their cell phones on noisy streets or in open offices, the bot choked. It waited an excruciating 2.4 seconds after every sentence before responding. Prospects hung up before the bot even finished its second sentence. Worse, when a lead interrupted with a basic question—"Wait, who is this again?"—the agent’s state engine collapsed. It got stuck in a retry loop, repeated its opening hook three times, and burned throug...

Как мы перестали страдать с мультиязычностью в Payload CMS: грабли, фолбэки и контроль доступа

Как мы перестали страдать с мультиязычностью в Payload CMS: грабли, фолбэки и контроль доступа В 2022 году мы переносили корпоративный портал с четырьмя языковыми версиями со старого монолита на Payload CMS. Заказчик поставил простую задачу: контент на английском, немецком, испанском и французском, при этом локальные редакторы не должны видеть черновики друг друга. Мы пожали плечами, выставили localized: true почти на все поля в конфиге и думали, что уложимся за пару недель. Через месяц база данных начала выдавать странные аномалии, а немецкий переводчик случайно стер неопубликованный релиз для глобального рынка. Пришлось на ходу переписывать архитектуру данных. Этот опыт стоил нам кучи нервов и 40 часов чистого рефакторинга в выходные. Поле против документа: фундаментальная развилка Когда вы проектируете мультиязычный контент в CMS, вам нужно выбрать один из двух путей: хранить языковые копии как отдельные документы или локализовать конкретные поля внутри одной записи. Больши...

Marketplace Feed Pipelines Are 10% Parsing and 90% Cleaning Up Chaos

Marketplace Feed Pipelines Are 10% Parsing and 90% Cleaning Up Chaos Three years ago, I took on what I thought was a quick weekend project. A client wanted to export about 14,000 SKUs from their custom store catalog directly to Rozetka. The spec looked innocent enough on paper: generate an XML file once a day, stick it on a public URL, and let the marketplace scraper pick it up. I quoted $600, wrote a 200-line PHP script, verified that the output passed a generic validator, and went to bed feeling clever. At 3:15 AM on Tuesday, my phone blew up. Rozetka had rejected the entire feed update because 12 product images returned 404 errors—a site manager had silently reorganized an old media folder overnight. Worse, because the platform's ingest pipeline dropped the entire file upon hitting those errors, items that had gone out of stock on the backend remained marked as available on the live marketplace listings. The store sold seven high-ticket laptops they didn't actually have ...

The Real Reason Your Business RAG System Is Failing (And It Isn't the Model)

The Real Reason Your Business RAG System Is Failing (And It Isn't the Model) Late 2023. We shipped a custom Retrieval-Augmented Generation system for a mid-sized logistics company. The contract value was $24,000. They gave us 4,300 PDF files—everything from safety protocols written in 2017 to yesterday's memo on fuel surcharges—and asked for an AI assistant that could answer any employee query in under two seconds. We built a textbook pipeline. Hybrid search, reranking, smart chunking, pristine system prompts. We ran test queries, got slick answers, popped the champagne, and handed over the keys. Three weeks later, the CEO stormed into my inbox like a raging bull at 3:15 AM. A field supervisor had asked the bot for the standard emergency shutdown protocol on a specific hydraulic rig. The system pulled context from two overlapping documents—one from 2018 and one from 2023—mashed them together, and generated a step-by-step procedure that completely skipped a critical pres...

Главный риск разрозненных админок — вовсе не утечка паролей

Главный риск разрозненных админок — вовсе не утечка паролей Обычно консультанты по безопасности пугают владельцев бизнеса классической страшилкой: у вас уволится менеджер, унесет пароль на стикере и продаст базу конкурентам. Или еще банальнее — сотрудники тратят по 15 минут в день просто на то, чтобы вспомнить, в какой из шести панелей какой логин подходит. Это раздражает, но бизнес от этого не рушится. Настоящий катастрофический риск разрозненных внутренних сервисов гораздо тише. Это фантомные доступы и полная невозможность понять, кто именно совершил критическое действие, когда всё полетит к чертям. История про 11 400 клиентов и логин admin_2 В ноябре 2021 года я разбирал инцидент в логистической компании средней руки. Ребята росли быстро. За четыре года разработки у них сформировался типичный зоопарк: основная CRM, изолированная панель управления складом на Django, самописный скрипт для сверки платежей и Metabase для аналитики. У каждого сервиса — своя база пользователей и с...

Почему ваши API-интеграции падают в три часа ночи (и сколько это стоит на самом деле)

Почему ваши API-интеграции падают в три часа ночи (и сколько это стоит на самом деле) Ноябрь 2022 года. Три часа ночи. Звонок от нервного владельца интернет-магазина. Суть проблемы простая и больно знакомая: на сайте прошла распродажа, заказы падают каждые три секунды, клиенты платят, а в базе пусто. Менеджеры утром открывают CRM — там ноль новых лидов. Выяснилось, что скрипт, который фрилансер сдал за 15 тысяч рублей полгода назад, тихо захлебнулся. Он упал на 404-й ошибке, когда сервис объявлений без предупреждения обновил формат ответа API. Итог — 412 «потерянных» заказов, три дня ручной сборки данных из логов эквайринга и упущенная выручка почти на 500 000 рублей. Я занимаюсь связкой бизнес-систем уже больше семи лет. За это время я видел сотни упавших коннекторов, развалившихся баз и дублей в CRM. Если вы думаете, что связать два сервиса — это просто скопировать токен и вставить его в настройки плагина, у меня для вас плохие новости. Что такое API-интеграция простыми словами...

Why 80% of Freelance Scraping Projects Self-Destruct (And How We Fixed Ours)

Why 80% of Freelance Scraping Projects Self-Destruct (And How We Fixed Ours) Back in November 2021, I took a job scraping a regional footwear site. 14,200 SKUs, daily price updates, clean pagination. I spent two days writing a pristine Playwright runner, zipped up the repository, collected $2,200, and moved on. I thought I was a genius. Four days later, my phone blew up. The target site updated their Cloudflare stance and tweaked two CSS class names in their product grid. The script didn't throw an error—it silently returned empty arrays for 14,200 rows. My client had delivered three thousand blank entries to their pricing team before anyone noticed. I spent my weekend fixing code for free, burning through residential proxies, and losing money by the hour. That was the week I stopped selling scripts. It was also the week I realized why most web scraping freelance work turns into a disaster for both the buyer and the builder. The Fatal Flaw: Selling Code Instead of Data Flo...