01Огляд проєкту
Astrina — це all-in-one платформа для всіх, хто відповідає за сайти: власників, веб-студій, агентств, розробників і SEO-спеціалістів. Її суть уміщується в один слоган — «кожен сайт, за яким ви стежите, — в одному кабінеті». Веб-аналітика, щоденний SEO-моніторинг, відгуки й репутація, публічні каталоги та рейтинги, плюс набір сервісних API — усе це живе під одним логіном і живиться від одного скрипта на сайті. Почати можна безкоштовно: тариф Free розрахований на три сайти й не вимагає банківської картки.
Продукт виріс зі спостереження, знайомого кожному, хто супроводжує більш як один сайт. Трафік живе в одному інструменті, SEO — у другому, відгуки — у третьому, і в кожного сайта — свій логін. Окремо кожен сервіс хороший, але зводити їх докупи — це та сама робота, яку ніхто не оцінював, ніхто не виставляє в рахунок, і яку хтось усе одно робить руками. Astrina замінює ці чотири інструменти й чотири логіни одним: один скрипт, один кабінет і лист уранці, коли щось просіло.
Ми спроєктували й зібрали продукт цілком — від архітектури first-party лічильника й нічного краулера до тарифної моделі, публічних каталогів, документації та трьох мовних версій (EN/RU/UK). Нижче розбираємо, яке завдання вирішує Astrina, як вона влаштована всередині та які інженерні рішення роблять її цифри чесними — зокрема те, чому лічильник переживає блокувальники реклами, а відгук не може видалити навіть власник сайта.
Окремо про контекст. Astrina — продукт екосистеми студії, а не замовлення «на сторону»: ми будували інструмент, яким користуємося самі. Сайт ostohlo.com підключено до платформи як сайт №6, і статистику він збирає через власний піддомен stats.ostohlo.com — тобто рівно за тією first-party моделлю, що продається клієнтам. Таке «поїдання власного корму» дисциплінує краще за будь-який тест-план: кожну незручність кабінету ми відчуваємо першими.
02Контекст і завдання
Стежити за сайтом «технічно» нескладно — складно робити це постійно та по всіх сайтах одразу. Коли ми розкладали завдання, назбирався цілий список болів, з якими живе кожен, хто відповідає за кілька проєктів:
- Аналітика, якій бракує третини. Блокувальники реклами вирізають сторонні лічильники — приблизно третина аудиторії просто зникає зі звітів. Рішення ухвалюються за неповними цифрами.
- Зоопарк інструментів і логінів. Трафік, SEO та відгуки — у трьох різних сервісах, у кожного сайта свої доступи. Зведена картина існує лише в голові або в таблиці, яку забувають оновлювати.
- Тихі SEO-регресії. Оновлення теми мовчки ламає canonical — і ніхто про це не повідомляє. Дізнаєшся через тижні, коли трафік уже пішов і про це питає хтось інший.
- Відгуки, яким не вірять. Рейтинг, який власник сам може підправити, нічого не вартий. А зовнішні майданчики з чесними відгуками живуть окремо від сайта та його метрик.
- Рутина без власника. Регулярні перевірки «чи все гаразд» — робота, яку ніхто не оцінював у годинах. Вона або не робиться, або робиться на шкоду основній.
Завдання формулювалося так: зібрати платформу, де всі сайти — свої та клієнтські — видно в одній таблиці з живим трафіком і SEO-балом, а рутинне спостереження автоматизовано до стану «лист приходить сам». При цьому цифрам має бути можна вірити: і власнику, і клієнту агентства, якому ці цифри показують.
Окремий пласт завдання — чесність як продуктова властивість. Аналітика, яку ріжуть блокувальники, бреше на третину; рейтинг, який можна відредагувати, не означає нічого. Ми від самого початку вирішили, що довіру до цифр забезпечуватиме архітектура, а не обіцянки: лічильник вантажиться з домену самого клієнта, а відгуки фізично не можна ні змінити, ні видалити.
Нарешті, був і мультитенантний пласт. Платформа обслуговує сотні чужих сайтів із різними тарифами, квотами й мовами — отже, ліміти мають перевірятися кодом, дані тенантів — бути ізольованими, а кожна цифра на тарифній сторінці — відповідати числу в конфігурації, а не маркетинговому округленню.
03Цілі проєкту
Із завдання виросли конкретні продуктові й інженерні цілі, які ми тримали в голові на всіх етапах:
- Один скрипт, один логін. Підключення сайта — це один рядок перед закривальним тегом body. Не SDK, не тег-менеджер, не збірка — тег легший за 2 КБ, який починає звітувати з першого ж хіта.
- First-party за побудовою. Лічильник завантажується з власного домену клієнта, тому блокувальники, що вичищають сторонню аналітику, його не чіпають. Без cross-site cookies, дані ніколи не продаються.
- Лист замість чергування. Сайт під моніторингом переперевіряється щоночі; якщо SEO-бал упав — уранці в скриньці вже лежить лист. Власник дізнається першим, а не від клієнта.
- Чесність як механіка. Відгуки 1–5 зірок власник не може ні відредагувати, ні видалити — лише публічно відповісти. Саме тому оцінці можна вірити.
- API-first. Усе, що видно в кабінеті, можна забрати назовні: JSON API, CSV-експорт, MCP для AI-асистентів.
- Низький поріг входу. Free-тариф на 3 сайти без картки й 3 безкоштовні SEO-перевірки на день на будь-якому тарифі — спробувати можна до того, як платити.
- Три мови. Продукт повністю тримовний (EN/RU/UK) — від інтерфейсу до листів і публічних каталогів.
Як і в інших наших продуктах, ці цілі сформульовано як обмеження, а не «хотілки»: кожна відсікала невідповідні варіанти ще на етапі проєктування. Вимога first-party одразу визначила схему роздачі лічильника через домени клієнтів; вимога чесності заборонила будь-які «адмінські» правки відгуків на рівні моделі даних; а вимога «листа замість чергування» перетворила планувальник нічного перекраулу з фічі на несучу конструкцію продукту.
04Що ми зробили
Astrina збирає спостереження за сайтами в чотири модулі, які працюють від одного скрипта й одного кабінету:
Веб-аналітика
First-party лічильник легший за 2 КБ: живі візити, джерела трафіку й цілі — за цифрами, які не ріжуть блокувальники.
SEO-моніторинг
Повна технічна перевірка менш ніж за хвилину, нічний перекраул сайтів під моніторингом, історія бала й лист уранці при падінні.
Відгуки й репутація
Чесні відгуки 1–5 зірок, які власник не може ні змінити, ні видалити; публічні відповіді, вбудовуваний віджет і SVG-бейдж.
Developer API та сервіси
JSON API з ключем лише в заголовку та квотою в кожній відповіді, CSV-експорт, соц-логін, hosted-хелпдески й MCP для AI-асистентів.
Поверх модулів — публічні каталоги й рейтинги (рейтинг відвідуваності, каталоги обмінників, хостингів та інші вітрини в дусі App Store), тарифна модель від Free до Business Plus і тримовний кабінет. Усе це розгорнуто як єдиний продукт на власній інфраструктурі.
Важливо, що модулі не розрізнені, а утворюють один контур даних: скрипт на сайті живить аналітику, краулер — SEO-бал, відгуки — репутацію, а публічні каталоги будуються з тих самих вимірювань, що бачить власник у кабінеті. Одна й та сама цифра трафіку показується і в приватному дашборді, і в публічному рейтингу — їй нема куди «роз'їхатися». Саме ця зв'язність відрізняє платформу від набору сервісів під спільним логотипом.
Коротко суть продукту: «Один скрипт, один логін — і всі сайти, за якими ви стежите, в одному кабінеті. Справжній трафік, щоденні SEO-перевірки, чесні відгуки й лист уранці, коли щось просіло».
05Архітектура рішення
В основі Astrina — мультитенантне ядро, навколо якого зібрані модулі. Центральна сутність — сайт: до нього прив'язані події аналітики, SEO-перевірки та їхня історія, відгуки, позиція в каталогах і квоти тарифу. Акаунт користувача — це набір сайтів, і неважливо, свої вони чи клієнтські: агентство бачить сотню проєктів у тій самій таблиці, у якій власник бачить три.
Логічно система складається з п'яти блоків: приймання подій (ендпоїнти лічильника, куди сиплються хіти з усіх підключених сайтів), краулер (перевірки за запитом і нічний перекраул з історією бала), вітрини (публічні каталоги й рейтинги, побудовані з тих самих даних), API-шар (JSON, CSV, MCP) і сповіщення (ранкові листи при падінні бала). Кожен блок відповідає за свій шматок життєвого циклу спостереження й спілкується з рештою через чіткі межі.
Особливий архітектурний наслідок випливає з first-party моделі: лічильник має завантажуватися з домену самого клієнта, а не з astrina.io. Отже, інфраструктура зобов'язана вміти обслуговувати чужі домени — приймати трафік на клієнтські піддомени, віддавати з них скрипт і приймати події. Роздача тега й приймання хітів проєктувалися під це від самого початку, а не «прикручувалися» потім: це найнавантаженіша й найпублічніша частина системи, і вона відділена від кабінету та краулера.
Під капотом — серверний стек на PHP 8.3 із MySQL, за Cloudflare (DNS, TLS, захист периметра). Квоти тарифів — кількість сайтів, глибина історії, денні ліміти перевірок та API-викликів — перевіряються кодом на кожній дії: кожна цифра на тарифній сторінці відповідає числу, яке система реально забезпечує. Це не лише чесність перед користувачем, а й захист самої платформи від перевантаження одним тенантом.
06First-party лічильник
Головне інженерне рішення Astrina відповідає на неприємний факт індустрії: блокувальники реклами вичищають сторонні лічильники, і приблизно третина аудиторії просто не доїжджає до звітів класичної аналітики. Власник дивиться на графік і думає, що бачить свій трафік, — а бачить дві третини його.
Рішення — завантаження лічильника з власного домену клієнта. Блокувальники ріжуть запити до відомих аналітичних доменів; запит до піддомену самого сайта для них невідрізнимий від завантаження звичайного ресурсу. Тому тег Astrina підключається не з astrina.io, а з домену власника, і статистика збирається по всій аудиторії, а не по тій її частині, що не поставила блокувальник.
Сам тег гранично легкий і нудний — і це комплімент: менше 2 КБ, один рядок перед закривальним тегом body. Жодного SDK, тег-менеджера чи кроку збірки; лічильник починає звітувати з першого ж хіта. Для відвідувачів із вимкненим JavaScript передбачено noscript-піксель, тож навіть цей хвіст аудиторії не губиться. При цьому first-party не означає «стеження»: лічильник не використовує cross-site cookies, не будує міжсайтових профілів, а дані власника ніколи не продаються.
Модель перевірена в бою на власному сайті студії: ostohlo.com підключено до Astrina як сайт №6, і лічильник він вантажить із піддомену stats.ostohlo.com — легкий тег a.js плюс r.js для запису сесій. Це продакшн-доказ схеми: той самий CNAME-підхід, та сама роздача з клієнтського домену, ті самі цифри в тому самому кабінеті, що й у будь-якого користувача платформи.
Ключова думка: повнота даних тут — не «фіча зверху», а форма самої архітектури. Лічильник, який вантажиться з домену власника, нічим заблокувати списком сторонніх доменів — це сильніше за будь-які хитрощі на боці скрипта.
07Ключові можливості
Розберемо те, що робить Astrina не «ще одним лічильником», а платформою, яка закриває спостереження за сайтом цілком.
Жива аналітика
Живий перегляд відвідувачів, джерела трафіку й цілі — базовий набір, але зібраний за first-party цифрами. У кабінеті видно, що відбувається на сайті просто зараз, звідки приходять люди й чи доходять вони до цільових дій. На старших тарифах додаються стрічка живих візитів і запис сесій — можна переглянути реальний візит, а не гадати за цифрами.
SEO-перевірка за хвилину
Повний технічний аудит сайта займає менше хвилини — до 25 сторінок за прохід. Три перевірки на день безкоштовні на будь-якому тарифі, включно з Free: продукт дає помацати ядро без грошей. Кожна знайдена проблема супроводжується готовим промптом для AI-асистента — опис бага можна скопіювати і вставити в улюблений інструмент, який запропонує фікс.
Відгуки, віджет і SVG-бейдж
Модуль репутації збирає відгуки 1–5 зірок, на які власник може публічно відповідати, але не може їх редагувати чи видаляти. Рейтинг вбудовується на сайт віджетом, а SVG-бейдж — у README, футер чи підпис. Докладніше про те, чому незмінюваність — це фіча, нижче в окремому розділі.
Каталоги й рейтинги
Astrina веде публічні вітрини, побудовані з власних вимірювань: рейтинг відвідуваності сайтів на лічильнику, каталоги обмінників і хостингів із курсами й відгуками, каталог у дусі App Store. Вітрини відкриті без акаунта — будь-хто може перевірити, як платформа рахує, і це частина моделі довіри.
Сервісні API
Окрім основних модулів, платформа віддає прикладні інструменти: phone intelligence API для перевірки телефонних номерів і перевірку паролів за базами витоків. Це ті самі дані, що живлять каталоги, — доступні програмно.
Вхід через Astrina та хелпдески
«Login with Astrina» — готовий соц-логін, який налаштовується один раз і знімає з власника сайта зберігання паролів. А hosted-хелпдески дають кожному проєкту готову сторінку підтримки на кшталт astrina.io/support/<домен> — без розгортання власної тікет-системи.
MCP для AI-асистентів
Дані платформи доступні AI-асистентам через MCP: асистент може сам запросити статистику чи результати перевірки й працювати з ними в діалозі. API, задуманий для людей і скриптів, виявився готовим і до агентів.
08Всередині SEO-моніторингу
Разова перевірка сайта — річ корисна, але справжня цінність моніторингу в регулярності. Зламаний canonical не оголошує про себе; він просто тихо живе в коді, доки позиції не поїдуть. Тому серце модуля — не сам аудит, а нічний планувальник.
Працює це так. Разова перевірка доступна всім: повний технічний чек до 25 сторінок менш ніж за хвилину, три безкоштовні проходи на день на будь-якому тарифі. Але сайт, поставлений під моніторинг, платформа переперевіряє щоночі сама — без запиту, без кнопки, без нагадувань. Результат кожної ночі лягає в історію: SEO-бал перетворюється з моментального знімка на криву, за якою видно, коли саме щось зламалося і що було до цього.
Третій елемент — ранковий лист. Якщо нічний прохід зафіксував падіння бала, лист приходить уранці того самого дня. Сенс цього рішення глибший, ніж здається: поштова скринька стає інтерфейсом моніторингу. Власнику не потрібно заходити в кабінет «про всяк випадок» — кабінет сам приходить до нього, причому рівно тоді, коли є що сказати. Тиша в скриньці — теж інформація: отже, все гаразд.
Кількість сайтів на нічному перекраулі — одна з осей тарифної сітки: 3 сайти на Pro, 25 на Business, 100 на Business Plus. Це чесне відображення собівартості: нічний краулінг — найресурсомісткіша частина платформи, і його квоти, як і всі інші, перевіряються кодом.
Перевірка за хвилину
Повний технічний аудит до 25 сторінок — швидше, ніж завариться кава.
Нічний перекраул
Сайти під моніторингом переперевіряються щоночі; історія бала накопичується сама.
Лист уранці
Бал упав уночі — лист у скриньці вранці. Власник дізнається першим, а не від клієнта.
09Невидалювані відгуки
Модуль репутації побудований навколо одного жорсткого правила: власник сайта не може ні відредагувати, ні видалити відгук. Ні за гроші, ні через підтримку, ні «як виняток». Єдиний доступний йому інструмент — публічна відповідь поряд із відгуком.
Це рішення продуктово контрінтуїтивне — здавалося б, платному клієнту варто дати контроль. Але рейтинг, який власник може причесати, не означає нічого: це оцінка, яку він сам собі виставив. Незмінюваність — єдина причина, з якої цифрі біля зірочок узагалі можна вірити. Ми свідомо заклали це на рівні моделі даних, а не політики: у системі просто немає операції «змінити чужий відгук», і жодна роль її не отримує.
При цьому чесність працює в обидва боки. Публічна відповідь дає власнику змогу розібрати спірну ситуацію на очах у всіх — а вдумлива відповідь на критичний відгук часто переконує сильніше за п'ятірку. Шкала 1–5 зірок проста і звична, а зібраний рейтинг можна винести на власний сайт вбудовуваним віджетом або легким SVG-бейджем — оцінка перестає жити лише на сторінці каталогу й починає працювати там, де ухвалюються рішення.
Чому це важливо: «рейтинг, який ви не написали собі самі» — рідкість в інтернеті, де відгуками торгують. Незмінюваність перетворює оцінку з декорації на валюту довіри — й водночас дисциплінує власника працювати з претензіями публічно.

10Приватність і безпека
Аналітична платформа за визначенням працює з чутливими даними — чужим трафіком. Тому приватність в Astrina — не розділ користувацької угоди, а набір архітектурних рішень. Лічильник не ставить cross-site cookies і не будує міжсайтових профілів: first-party модель означає, що дані кожного сайта живуть у контексті цього сайта. І принципова обіцянка платформи — дані власників ніколи не продаються: бізнес-модель Astrina — підписка, а не торгівля аудиторіями.
Другий пласт — безпека API. Ключ приймається лише в HTTP-заголовку й ніколи в URL. Це усвідомлене рішення: параметри URL осідають у логах серверів, проксі та браузерній історії, і ключ, одного разу переданий рядком запиту, варто вважати скомпрометованим. Заголовки в логи не потрапляють — так один рядок специфікації закриває цілий клас витоків. Для користувачів та сама дисципліна обертається сервісом: перевірка паролів за базами витоків вбудована в платформу.
Третій пласт — ізоляція тенантів. Сайти, ключі, відгуки та квоти кожного акаунта відділені одне від одного; агентство із сотнею клієнтських проєктів не може ні побачити чужі дані, ні вичерпати чужі ліміти. Квоти, що перевіряються кодом на кожній дії, захищають не лише тарифну чесність, а й стабільність платформи: один знавіснілий скрипт не покладе краулер для всіх.
11Мультисайтовий кабінет
Головний екран Astrina — таблиця всіх сайтів акаунта: відвідувачі за 30 днів, тренд, SEO-бал, живий статус. Це свідомий вибір точки входу: продукт для тих, хто стежить за багатьма сайтами, має починатися з відповіді на питання «чи все в мене гаразд — по всіх одразу». Один погляд на таблицю замінює ранковий обхід п'яти сервісів.
Тарифна сітка побудована навколо реальних осей вартості — кількості сайтів, глибини історії та обсягу автоматики. Free ($0) — 3 сайти, живий перегляд, джерела й цілі, 3 SEO-перевірки на день, відгуки й віджет рейтингу, 33 дні історії. Pro ($19/30 днів) — 25 сайтів, 180 днів історії, 3 сайти на нічному перекраулі з алертами, CSV-експорт і стрічка живих візитів, 5 000 API-викликів на день. Business ($59) — 100 сайтів, рік історії, 25 сайтів на перекраулі, запис сесій і 25 000 викликів. Business Plus ($99) — сайти без ліміту, 730 днів історії, 100 сайтів на перекраулі, hosted-хелпдеск для власних користувачів і 100 000 викликів на день.
Оплата влаштована по-дорослому й по-екосистемному: тарифи списуються з балансу акаунта, який поповнюється карткою або криптовалютою через Payora — інший продукт нашої екосистеми, про який у нас є окремий кейс. Автопродовження за замовчуванням вимкнене: ніщо не списується сюрпризом, продовження вмикає сам користувач. Для SaaS це рідкісна, майже демонстративна чесність — і вона з того самого ряду, що й невидалювані відгуки.
Кожна цифра з цього розділу — не маркетинговий текст, а значення з конфігурації, яке перевіряє код: створення 26-го сайта на Pro не «не рекомендується», а не виконується. Ми тримаємося правила «сторінка тарифів — це документація до лімітів», і воно сильно спрощує життя і підтримці, і користувачам.
12Developer API та інтеграції
Усе, що платформа показує в кабінеті, вона вміє віддавати назовні. Developer API — це JSON із передбачуваними відповідями, і в його дизайні є два рішення, які ми вважаємо взірцевими для будь-якого API.
Перше — ключ лише в заголовку. API не приймає ключ у рядку запиту взагалі: URL із ключем потрапляє в логи веб-серверів, проксі, історію браузера й реферери, і звідти витікає. Заголовок — ні. Правильна поведінка тут не «рекомендується документацією», а єдино можлива. Друге — залишок квоти в кожній відповіді. Клієнту не потрібно ні окремого ендпоїнта, ні підрахунку на своєму боці: кожна відповідь повідомляє, скільки викликів залишилося. Скрипт може сам пригальмувати перед лімітом, а не з'ясовувати його досягнення за помилкою 429.
Окрім JSON, дані вивантажуються в CSV — для звітів, таблиць і всього, що живе поза кодом. Через MCP із тими самими даними працюють AI-асистенти: агент запитує статистику чи результати перевірки просто в діалозі. «Login with Astrina» закриває соц-логін для сайтів на платформі, а hosted-хелпдески (astrina.io/support/<домен>) — підтримку користувачів без власної тікет-системи. Платформа дружить і з зовнішнім світом: Google Search Console, Google Analytics 4, Bing Webmaster та IndexNow — у списку підтримуваних інтеграцій.
Нарешті, публічні каталоги — теж свого роду інтеграція, тільки з відкритим інтернетом. Рейтинг відвідуваності будується з тих самих 30-денних вимірювань лічильника, що бачить власник у кабінеті; каталоги обмінників і хостингів — з тих самих даних і відгуків. Платформа рахує в усіх на очах, і будь-хто може звірити її роботу без акаунта.
13Технологічний стек та інфраструктура
Під Astrina ми зібрали окреме, ізольоване середовище зі своїми доменами, політиками й планувальником. Для платформи, що обслуговує чужі сайти, охайність середовища — частина продукту.
- Бекенд — PHP 8.3: приймання подій лічильника, мультитенантне ядро, кабінет, API-шар і логіка квот.
- Дані — MySQL: події аналітики, історія SEO-балів, відгуки, каталоги й тарифні ліміти в одній узгодженій моделі.
- Краулер — модуль перевірок: аудит за запитом до 25 сторінок і нічний перекраул сайтів під моніторингом із накопиченням історії.
- Доставка лічильника — first-party роздача тега з доменів клієнтів (CNAME-модель), noscript-піксель як fallback.
- Сповіщення — email-алерти: лист уранці в день падіння бала.
- Інфраструктура — Cloudflare (DNS, TLS, захист периметра) та ізольоване оточення з валідними сертифікатами.
Вибір PHP 8.3 і MySQL прагматичний: зрілий, швидкий і передбачуваний стек, на якому в одному оточенні живуть і високочастотне приймання хітів, і краулер, і кабінет, і API. First-party роздача додає стеку незвичну вимогу — обслуговувати чужі домени як свої, — і саме вона визначила конфігурацію периметра. Cloudflare закриває DNS і TLS, а все середовище спроєктовано так, щоб найнавантаженіша частина (приймання подій) не конкурувала за ресурси з найважчою (нічний краулінг): у них різні профілі навантаження й різний час піків.
14Дизайн і UX
Інструмент для щоденної рутини продає спокій, тому інтерфейси Astrina ми робили щільними й тихими. Головний екран — таблиця сайтів із трендом і SEO-балом — відповідає на головне питання користувача за секунду. Жодних вітальних банерів і «інсайтів тижня»: людина, у якої сотня клієнтських сайтів, приходить не роздивлятися, а перевіряти.
Окрема турбота — перші п'ять хвилин. Шлях від реєстрації до першого відвідувача на екрані свідомо короткий: вставив рядок тега — побачив живий хіт. Миттєвий зворотний зв'язок тут працює як онбординг: не тури інтерфейсом, а власний трафік, що з'явився на очах. Той самий принцип у SEO-модулі: перша перевірка безкоштовна, займає менше хвилини й закінчується конкретним списком проблем — із готовим AI-промптом біля кожної.
Публічний бік платформи — каталоги й рейтинги — спроєктовано як самостійну вітрину: відкриту, індексовану, робочу без акаунта. Це і маркетингова поверхня, і демонстрація методики: платформа не боїться показувати, як вона рахує. Нарешті, весь продукт тримовний — EN, RU та UK рівноправні від інтерфейсу й листів до публічних сторінок, з коректними hreflang і локалізованими URL. Для продукту, що живе в кількох мовних середовищах одразу, це питання не перекладу, а архітектури контенту — і воно закладалося з першого дня, а не «локалізовувалося» потім.
15Як ми працювали
Проєкт вели послідовними етапами з демонстрацією результату на кожному кроці:
- Дослідження. Розібрали сценарії власників, студій та агентств, порахували болі «чотирьох інструментів» і зафіксували модель «один скрипт → один кабінет → лист уранці».
- Архітектура. Спроєктували мультитенантне ядро, first-party схему роздачі лічильника, модель квот і контракт API — ключ у заголовку й квота у відповіді були у специфікації до першого рядка коду.
- Розробка модулів. Зібрали приймання подій та аналітику, краулер із нічним планувальником та історією, модуль відгуків із незмінюваністю на рівні моделі, каталоги й кабінет.
- Обкатка на собі. Підключили власні проєкти — ostohlo.com живе на платформі як сайт №6 із лічильником на stats.ostohlo.com — і місяцями користувалися продуктом до того, як кликати інших.
- Запуск. Тарифи з оплатою через Payora, три мови, публічні каталоги, документація та MCP.
Порядок не випадковий: спершу ми фіксували контракти — схему квот, формат API, правило незмінюваності відгуків, — і лише потім будували навколо них реалізацію. Це дало змогу вести модулі майже паралельно: в аналітики, краулера й відгуків спільне ядро, але незалежні життєві цикли. А правило «спершу користуємося самі» відпрацювало як безперервне приймальне тестування: незручність, яку помічаєш щоранку у власному кабінеті, лагодиться швидше за будь-який тікет.
16Результат
Вийшов не «ще один лічильник», а платформа, яка замінює собою набір щоденних інструментів вебмайстра — і якою ми користуємося самі.
- Сайт підключається за п'ять хвилин: один рядок тега — і перший відвідувач уже на екрані.
- Аналітика бачить усю аудиторію, а не дві третини: first-party лічильник не ріжеться блокувальниками.
- SEO-регресії перестали бути тихими: нічний перекраул, історія бала й лист уранці в день падіння.
- Рейтингу можна вірити: відгуки фізично не можна ні відредагувати, ні видалити — лише публічно відповісти.
- Дані не замкнені: JSON API з ключем у заголовку та квотою в кожній відповіді, CSV, MCP для AI-асистентів.
- Продукт працює трьома мовами й перевірений у продакшні на сайтах власної екосистеми.
Але головний результат — не в окремих цифрах, а в зміні моделі. Раніше спостереження за сайтами було набором вкладок, логінів і «треба не забути перевірити»; тепер це одна таблиця й поштова скринька, у яку платформа пише сама — рівно тоді, коли є що сказати. Рутина, яку ніхто не оцінював у годинах, перестала існувати як ручна робота.
17Висновки
Astrina — приклад того, як довіра до продукту проєктується, а не декларується. Найцінніше тут не список модулів, а три рішення, на яких усе тримається: лічильник, який вантажиться з домену клієнта й тому бачить усю аудиторію; відгуки, які не можна видалити й тому вони щось означають; API, у якому ключ фізично не може опинитися в лозі. Кожне з них ухвалено один раз, на рівні архітектури, — і далі чесність продукту не залежить від чиєїсь дисципліни.
Для нас це був проєкт на стику аналітики, краулінгу й мультитенантного SaaS — той тип завдань, де продуктове мислення та інженерна дисципліна потрібні одночасно. Якщо вам потрібна платформа з кабінетом, тарифами й API, аналітичний сервіс або продукт, що обслуговує багатьох клієнтів на одній інфраструктурі, — ми вміємо доводити таке до запуску.
І ще один висновок, радше методологічний. Найкращий тест продукту — власна залежність від нього: ми підключили до Astrina свої сайти раніше за чужі, і щоранку дивимося на ті самі листи й ті самі таблиці, що й наші користувачі. Продукт, яким команда живе сама, неможливо тихо закинути — і це, мабуть, найчесніша гарантія якості з усіх можливих.
