Клієнт захотів об'єднати статті, довідник компаній і карту на одному порталі. Розробка інформаційного порталу почалася з прототипу на WordPress, але при 50 000 записів база стала гальмувати — геозапити виконувались по 5 секунд. Ми переписали проект на headless CMS та PostGIS, прискоривши геозапити в 100 разів. Правильна архітектура порталу — запорука швидкого пошуку, високої індексації та лояльності аудиторії. Після міграції час генерації сторінки впав з 3 секунд до 200 мс, а органічний трафік зріс на 40% за перший місяць. У цій статті розповімо, як спроектувати портал, який витримає необмежене зростання даних і забезпечить високий ранг у пошуковій видачі. Поділимось перевіреними практиками з вибору CMS, налаштування геопошуку та модерації користувацького контенту.
Як проходить розробка інформаційного порталу під ключ
Процес включає аналіз вимог, проектування архітектури, дизайн, розробку, інтеграцію з CMS, налаштування SEO та деплой. Ми використовуємо сучасний стек: React/Next.js на фронтенді, Laravel/Node.js на бекенді, PostgreSQL з PostGIS для геоданих, Redis для кешування. Кожен етап завершується рев'ю та тестуванням.
Типові проблеми інформаційних порталів
- Неоптимальні запити до геоданих — без PostGIS складно шукати об'єкти в радіусі. Використання BBox та фільтрація на стороні додатку призводять до помилок і гальм у 3 рази повільніше.
- Дублювання контенту при наслідуванні типів — STI або поліморфні зв'язки вимагають акуратного проектування, інакше N+1 запитів.
- Відсутність RSS/Atom — агрегатори втрачають контент, трафік падає.
- Немає модерації UGC — спам і низька якість відгуків вбивають довіру.
Структура інформаційного порталу
| Розділ |
Тип контенту |
| Статті та аналітика |
Long-form, SEO-орієнтовані |
| Довідник |
Структуровані картки об'єктів |
| Рейтинги та добірки |
Тематичні списки з описами |
| Новини рубрики |
Короткі новинні замітки |
| База даних |
Searchable каталог (компанії, продукти, місця) |
Як вибрати архітектуру для мультитипового контенту?
Різні типи контенту мають різну структуру полів. Ми використовуємо три підходи залежно від завдання:
- Single-table inheritance (STI): одна таблиця
content_items з полем type та JSON-колонкою для специфічних полів. Просто, але складно індексувати.
- Polymorphic tables: окремі таблиці для кожного типу контенту зі зв'язком через
contentable_type / contentable_id. Гнучко, але складніші запити.
- Headless CMS (Strapi, Contentful): content types з custom fields через UI. Підходить, якщо редакторів багато і розробник не повинен брати участь у додаванні нових типів.
Порівняння підходів
| Критерій |
STI |
Polymorphic |
Headless CMS |
| Простота |
Висока |
Середня |
Середня |
| Продуктивність |
Середня |
Висока |
Висока |
| Гнучкість |
Низька |
Висока |
Висока |
| Індексація |
Складно |
Легко |
Авто |
Чому PostGIS для геопошуку?
Для порталу з каталогом місць (ресторани, організації, туристичні об'єкти) потрібна геолокаційна функціональність:
- PostgreSQL розширення PostGIS для зберігання координат і геозапитів
- Пошук «поруч зі мною» в радіусі N км
- Карта з кластеризацією маркерів (Leaflet.js або Mapbox GL)
-- Пошук ресторанів у радіусі 2 км
SELECT name, ST_Distance(
location::geography,
ST_MakePoint(37.6176, 55.7558)::geography
) AS distance_m
FROM restaurants
WHERE ST_DWithin(
location::geography,
ST_MakePoint(37.6176, 55.7558)::geography,
2000
)
ORDER BY distance_m;
PostGIS використовує GIST-індекси, що прискорюють геозапити в сотні разів. У порівнянні з MongoDB GeoJSON, PostGIS точніший на сфері та швидший у радіусі до 100 км. Документація PostGIS
Як PostGIS порівнюється з альтернативами?
| Рішення |
Точність |
Швидкість на 1 млн записів |
Підтримка складних операцій |
| PostGIS |
Висока (geography) |
~50 мс |
Так |
| MongoDB 2dsphere |
Середня |
~120 мс |
Обмежена |
| Elasticsearch geo |
Середня |
~80 мс |
Обмежена |
PostGIS — вибір для порталів з високими вимогами до геоданих. Навантажувальне тестування показало, що при 1 млн записів запити в радіусі 2 км виконуються за 50 мс.
SEO як основа трафіку
Інформаційний портал живе на органічному трафіку. Вимоги:
- SSR або SSG (не CSR) — кожна сторінка рендериться як HTML
- Breadcrumbs з BreadcrumbList JSON-LD
- HowTo та FAQ schema для інформаційних статей
- Перелінковка за темою: в кінці статті — 3–5 посилань на пов'язані матеріали
- Sitemap з оновленням у реальному часі
Headless CMS у парі з Next.js або Nuxt дає ISR — інкрементальну регенерацію сторінок при зміні контенту. Це прискорює індексацію в 2 рази.
Додаткові рекомендації з мікророзмітки
Використовуйте Schema.org типи Article, FAQPage, HowTo. Перевіряйте валідність через Google Rich Results Test. Для геолокації — LocalBusiness або Place.
Користувацький контент
Для порталів з UGC (рейтинги, відгуки, доповнення):
- Модерація (pre-moderation або post-moderation)
- Спам-фільтри (Akismet API або self-hosted модель)
- Система репутації авторів
Гарантована система модерації скорочує кількість спаму на 90%.
Що входить у розробку порталу під ключ
- Аналіз вимог та конкурентів
- Проектування архітектури (БД, API, фронтенд)
- Дизайн-концепція (UI/UX)
- Верстка та інтеграція з CMS (headless або класична)
- Налаштування SEO (мікророзмітка, sitemap, robots)
- Розробка модулів: довідник, пошук, геолокація, UGC
- Деплой на хостинг (Docker, Vercel, Bare metal)
- Навчання редакторів роботі з CMS
- Гарантійна підтримка 30 днів після запуску
Етапи розробки (покрокова інструкція)
- Аналітика та бриф — збір вимог і дослідження конкурентів.
- Проектування — архітектура бази даних, API, компонентів.
- Прототипування — створення макетів і затвердження дизайну.
- Розробка — написання коду, інтеграція з CMS, налаштування пошуку.
- Тестування — навантажувальне тестування, перевірка SEO, юзабіліті.
- Деплой — запуск на продакшен, налаштування моніторингу.
- Підтримка — навчання команди клієнта, гарантійний період.
Терміни та досвід
MVP (статті, рубрики, пошук, SEO, RSS): від 6 до 8 тижнів. Портал з довідником, геопошуком, користувацькими відгуками та аналітикою: від 3 до 5 місяців. Терміни уточнюються після брифування.
Наша команда має 10 років досвіду в розробці порталів. Понад 50 успішних проєктів, 5+ розробників у штаті. Економія бюджету на хостингу може досягати 50% за рахунок оптимізації архітектури.
Отримайте консультацію інженера та попередню оцінку вашого проєкту. Замовте розробку порталу, який буде приносити стабільний трафік і довіру аудиторії.
Розробка корпоративних порталів та внутрішніх систем
Ми займаємося розробкою корпоративних порталів — CRM, ERP, LMS та Intranet. Кожен такий проект починається не з верстки лендінгу, а з того, як бізнес-правила ляжуть в архітектуру: хто бачить які дані, як синхронізуються 1С та облікова система, як 500 контактів перетворюються на 500 000 без падіння продуктивності. За 7 років ми реалізували понад 40 порталів для компаній з чисельністю від 50 до 5000 співробітників. Оцінимо ваш проект за два робочі дні — просто зв'яжіться з нами.
Як ми забезпечуємо якість архітектури?
Публічний сайт можна запустити без детального проектування — ітеративно виправляти за фідбеком. З корпоративним порталом так не працює: вартість виправлення архітектурних рішень після запуску на 200 користувачів неспівставно вища. Тому ми приділяємо 70% часу аналітиці та прототипуванню, а код пишемо тільки після узгодження рольової матриці та інтеграційної схеми.
Три зони, де найчастіше приймаються погані рішення, — модель прав доступу, продуктивність на великих даних та real-time оновлення.
Як побудувати рольову модель для 30 відділів?
Модель прав доступу. «Менеджер бачить тільки своїх клієнтів, керівник відділу — весь відділ, директор — всю компанію, але фінансові дані — тільки фінансовий директор і вище». Це не три ролі — це матриця з ролей, дозволів, організаційних одиниць та володіння записами. Якщо це реалізувати через if ($user->role === 'manager') в контролерах — через півроку код стане непідтримуваним.
Правильний підхід: Spatie Laravel Permission для базової рольової моделі + Policy класи для object-level permission (can('view', $deal) перевіряє не тільки роль, але й володіння). Для складних ієрархічних структур — ABAC (Attribute-Based Access Control) замість RBAC.
Продуктивність на великих даних. CRM з 500 000 контактів, фільтрація по 10 полях, сортування за активністю — це задача, де наївна реалізація видає 15-секундні запити. Composite indexes, денормалізація агрегатів (last_activity_at на самому записі замість MAX по зв'язаній таблиці), Elasticsearch для full-text пошуку по контактах.
Real-time оновлення. Декілька співробітників працюють з одним документом або задачею. Без WebSocket — постійні setInterval з polling кожні 5 секунд, зайве навантаження на сервер, затримка оновлень. Laravel Broadcasting + Pusher/Soketi або власний WebSocket сервер на Node.js — для сповіщень та змін у реальному часі.
CRM-системи
Типовий набір: контакти, компанії, угоди, активності, воронка продажів, звіти. Технічно це нескладно. Складність — в деталях.
Pipeline з кастомними стадіями. Кожна компанія хоче свою воронку. Стадії повинні бути налаштовуваними без деплою. Таблиця pipeline_stages з position, color, is_final, probability — і drag-and-drop для зміни порядку на UI (React DnD або dnd-kit).
Історія змін. Хто і коли змінив статус угоди, поміняв відповідального, додав нотатку. Audit log через Observer або spatie/laravel-activitylog. На UI — timeline з фільтрацією за типом активності.
Інтеграція з поштою. IMAP/SMTP для підключення корпоративної скриньки, автоматична прив'язка вхідних листів до контактів за email-адресою. Це надійно працює тільки при правильній обробці bounce, spam, авто-відповідей — потрібна фільтрація.
Чому ERP — не про код, а про дані?
ERP — це коли CRM, склад, виробництво, бухгалтерія та HR об'єднані в єдину систему. Повний ERP з нуля — рідкісна задача (зазвичай інтегруються з існуючими системами), але модульні системи під конкретний бізнес — регулярна.
Ключовий принцип: фінансові операції повинні бути незмінними. Не UPDATE orders SET status = 'cancelled' — а створення нового запису order_cancellations з посиланням на вихідне замовлення. Це принцип immutable ledger, який спрощує аудит та reconciliation.
Інтеграція з 1С — майже завжди частина ERP-проекту. Двостороння синхронізація: з 1С в портал (довідники, залишки, ціни) та з порталу в 1С (замовлення, документи). RabbitMQ як шина подій між системами надійніше прямого HTTP-взаємодії — у випадку недоступності 1С повідомлення чекають в черзі.
Як влаштовані LMS: платформи навчання
Learning Management System — це курси, модулі, уроки, тести, сертифікати, прогрес користувачів.
Відео-контент — найбільш навантажена частина LMS. Зберігати відео на власному сервері та віддавати через Nginx — погана ідея: дорого, повільно, немає адаптивного бітрейту. Правильно: завантаження в S3/Cloudflare R2, транскодування через AWS Elemental MediaConvert або Mux, HLS-плейлист для адаптивного стрімінгу через Video.js або Plyr.
Прогрес перегляду — через періодичне відправлення watch_position з фронтенду (кожні 10–30 секунд), зберігання в Redis з періодичною синхронізацією в PostgreSQL. Не зберігати кожну секунду в БД — це вб'є продуктивність.
SCORM-сумісність — якщо потрібна інтеграція з корпоративними тренінговими матеріалами. Окремий модуль, є готові бібліотеки (scorm-again).
Intranet та HR-портали
Корпоративний інтранет: новини, документи, оргструктура, HR-процеси (відпустки, заявки, KPI).
Оргструктура в базі даних — це ієрархічна структура. Adjacency list (parent_id на кожному записі) простий в реалізації, але повільний при рекурсивних запитах. Nested Sets або Closure Table швидше для читання ієрархії, складніше при змінах. В PostgreSQL — рекурсивні CTE (WITH RECURSIVE) з adjacency list — баланс між простотою та продуктивністю.
Погодження документів та заявок — workflow engine. Прості лінійні погодження (співробітник → менеджер → HR → бухгалтер) можна зробити без спеціального движка. Нелінійні (паралельні гілки, умовні переходи, делегування) — варто розглянути готові рішення: Temporal.io для workflow orchestration або власний скінченний автомат на базі патерну state-machine.
Що входить в роботу
При замовленні розробки корпоративного порталу ви отримуєте:
- Архітектурну документацію (ER-діаграми, схема інтеграцій, матриця ролей)
- Повний код в Git-репозиторії з CI/CD
- Доступи до інфраструктури (хостинг, бази даних, сховища)
- Навчання адміністраторів та ключових користувачів (2–3 сесії)
- Гарантійну підтримку на 3 місяці після запуску
Наші принципи проєктування спираються на офіційну документацію Laravel з авторизації (Policies) та рекомендації щодо роботи з чергами.
Технічний стек для порталів
| Слой |
Інструменти |
| Backend |
Laravel + PostgreSQL |
| Frontend |
React + TypeScript (Inertia.js або окремий SPA) |
| Real-time |
Laravel Echo + Soketi / Pusher |
| Пошук |
Meilisearch (швидкий старт) або Elasticsearch (об'єм) |
| Черги |
Laravel Queue + Redis |
| Файли |
S3-compatible (MinIO self-hosted або AWS S3) |
| Моніторинг |
Sentry + Telescope (dev) |
Орієнтири за термінами
| Тип порталу |
Термін |
| CRM (базовий) |
10–16 тижнів |
| LMS (курси + відео + тести) |
14–22 тижні |
| HR-портал (відпустки, KPI, оргструктура) |
12–20 тижнів |
| Корпоративний ERP (модульний) |
24–52 тижні |
Вартість розраховується індивідуально після детальної аналітики вимог та рольової моделі. Щоб отримати попередню оцінку, напишіть нам — ми проаналізуємо вашу задачу та запропонуємо оптимальне рішення під ключ.