Release notes платформы ipd.by —Smarty→Laravel миграция, контент-миграция, инфраструктурные изменения
Floating кнопка переработана: SVG-иконка чата вместо эмодзи, тёмно-синий (#003366) вместо яркого синего. Добавлен popup-виджет: форма вопроса для авторизованных и неавторизованных пользователей. Исправлен CSS changelog — h2/h3/summary теперь стилизованы корректно
Полноценная система авторизации: login/register/logout, личный кабинет с профилем, панель администратора. Floating кнопка входа, ссылка в футере. 35 PHPUnit-тестов (50 assertions)
25 PHPUnit-тестов (30 assertions) покрывают 15 маршрутов + SEO. 108 изображений получили alt-тексты. Экспортирована схема БД. Убран мёртвый код в BlogController
Добавлены getLinkFoto()/getLinkFotoTop() в BlogController, все 6 шаблонов блога исправлены — фото берутся из поля foto_top (legacy ID или external URL)
getLinkFoto() и getLinkFotoTop() (логика: если foto_top == id → локальный путь, иначе → URL как есть)getLinkFotoTop() вместо пустого $post->fotogetLinkFoto() вместо пустого $item->fotoNewsController::getLinkFoto()/images/page/news/{id}.jpg64 маршрута проверены (0 ошибок). Исправлены дубли H1 (4 стр.), добавлены meta description (30 стр.), исправлен UserController env()→config(). Подсветка активных ссылок переписана
Исправлена ошибка парсинга Blade в newspaper, восстановлены 13 подстраниц «Библиотека». Блог: убраны категории, мета вниз, lightbox, исправлены все 6 шаблонов
Computer'\\''s ломал Blade-парсер в @section('title'), страница отдавала сырой контент без layoutsmall-business (полный чек-лист для малого бизнеса с 7 разделами)photo-to-pdf (Python-инструмент для конвертации изображений в PDF)prompts-form и prompts-js (конструктор промтов) через @include$knowledgeSubPages (business/8 + checklists/1 + software/1)checklists/experts («Авторы проектов и экспертов»)Восстановление футера по бэкапу старого сайта: все названия, символ ©, раздел «Кухня и рецепты», корректные separator'ы, подсветка aLinkActive
c 2026 → © 2026и → · (middle dot)active → aLinkActive (CSS: .aLinkActive { color: #007AFF !important; })Аудит и исправление SEO по всему сайту: OG-теги перенесены в <head>, пустые description заполнены, title/description восстановлены из БД старого сайта
@section('og_tags')@section('og_tags'). Дублирование исключено через @hasSection$category->description, $subcategory->description)Замена сырых дат из БД (2026-07-10 14:30:00) на форматированные («сегодня в 14:30», «вчера в 09:15», «10 июля 2026») на главной странице и во всех разделах блога. JSON-LD даты в ISO 8601
@{{ $item->date_add }} → correctingDate($item->date_add). 9 форматированных дат вместо сырыхdatePublished/dateModified теперь в ISO 8601: 2026-07-10T14:30:00+03:00Публичная страница changelog, запуск админ-панели adm2026.ipd.local v2.0.0 (Laravel 13.19, CRUD для новостей/блогов/тегов/пользователей/сайтов), связка двух платформ
Создание骨架 админ-панели (Laravel 13.19), исправление стилей тегов на всех страницах, fallback для старых slug-only ссылок
.tags-block, .tags-list, .tags-title, .active-tag, .btn-toggle-tags добавлены в styles.css. Теги теперь горизонтальные (flexbox) на всех страницах index/category/tag/news/slug.html → 301 → /news/slug-ID.html. Controller извлекает ID через regex -(\d+)$, fallback на slug lookupПерезапись controller и 4 Blade-шаблонов новостей по бэкапу Smarty: категорийные цвета, JSON-LD, OG-meta, теги, похожие новости, формат ссылок {slug}-{id}.html
.bg-news, category colors, formatted dates, tag cloud, similar/popular sections, JSON-LD, OG metastyles_post_index.css, styles_post.css из бэкапа/news/{slug}.html → /news/{slug}-{id}.html, regex -(\d+)$ для извлечения ID, 301 redirect при несовпадении slug@context → @@@context в JSON-LD, @if в HTML-атрибутах → @php блокиПолный HTTP-аудит всех GET-маршрутов, исправление News/Blog controller для работы с БД, создание artisan-команды ipd:check-routes
where('url', $slug), 138 страниц теперь HTTP 200socials.blade.php — 6 рядов кнопок + JS-логикаooo-studija-ipd.blade.phpplatform.blade.php — заменён выдуманный AI Laravel-таймлайн на реальную историю (PHP+Smarty, 2009–2026)strategy.blade.php, automation.blade.phpИсправлены стили кнопок фильтрации кейсов и устранено вылезание контента за границу экрана на страницах отдельных кейсов
.filter-btn и .filter-btn.active добавлены в cases/index.blade.php (были только в backup, отсутствовали в Laravel)<div class="grid-container"> обёрнут в <div class="container"> для корректного отображения: show-aleksey, show-autoset, show-baze-70000, show-brest-1000, show-brest-obitel, show-bug-baikal, show-cd-mogilev-by, show-coworking, show-kvartira-brest, show-o-me, show-run-minsk-brest, show-sewing-firms, show-soft-hso.container, .grid-span-3, .line-offset, .green-line по образцу бэкапаПодключены недостающие стили таблицы сравнения форматов, добавлены ссылки на карточках услуг и в заголовках H2
Полная перезапись index.blade.php по бэкапу pageIndex.tpl — все тексты, структура, JSON-LD, контактная форма
Комплексное исправление портфолио: все 144 страницы возвращают HTTP 200, добавлены недостающие подкатегории в БД, исправлены шаблоны
Масштабное исправление раздела портфолио: добавлены отсутствующие категории, исправлены подкатегории, убраны битые ссылки
/portfolio/foto — 4 подкатегории с изображениями (было: пустая страница)/portfolio/foto/corporate — 6 подподкатегорий с изображениями (было: случайные сайты)/portfolio/foto/portrait — «Раздел в разработке» (было: случайные сайты)/portfolio/ai — 7 подкатегорий (было: 404)/portfolio/education — 1 подкатегория (было: 404)services-tripwire: 10 ссылок с удвоенным префиксом /services/services/* → /services/* (route('services.category') вместо route('services.subcategory'))services-main: 3 ссылки — /services/services/services-vip, /services/methodology/start, /services/methodology/systemservices-vip: 3 ссылки — /services/services/services-main, /services/methodology/growth, /services/methodology/partnershipservices/start, services/system: 3 ссылки /services/methodology/*services/photo: 6 несуществующих подстраниц (/services/photo/team, portrait, catalog, process, locations, details) — card-link удаленыabout/work: 11 несуществующих подстраниц (/about/work/launch, system, growth, partnership, start, paths, process, result, support, operation-cycle, products) — card-link и h2-ссылки удалены/about/work/* ссылок — card-link удаленыabout/it: 2 ссылки (/about/it/ai, /about/it/big-data) — card-link удаленыabout/education: 3 ссылки (/about/education/bgut, bru, bsuir) — теги <a> заменены на текстabout/courses: ссылка /about/courses/like — тег <a> заменён на текстabout/tourism: ссылка /about/tourism/cuisine — тег <a> заменён на текст/about/tourism/cuisine → /about/tourismknowledge/business: 8 несуществующих подстраниц — card-link удаленыknowledge/checklists: /knowledge/checklists/small-business — card-link удалёнknowledge/software: /knowledge/software/photo-to-pdf — card-link удалён/news_category/ (пустой slug) — добавлена проверка @if(!empty($item->UrlCategory))route('services.video') → route('services.category', 'video')route('services.automation.telegram') → route('services.subcategory', ['automation', 'telegram'])@verbatim/@endverbatim вокруг JSON-LD в 27 шаблонах (Blade-парсер конфликтовал с JS-объектами)nth-child(7) для анимации fadeInItem в десктопном меню — пункт «Контакты» (7-й) оставался скрытым (opacity: 0)about/line (конфликт с about/{category})/knowledge: H1, описание, 7 карточек категорий, навигационные ссылкиbook, business, checklists, newspaper, personal, prompts, softwarecorporate, experts, nonprofitnumerology, svprecover-files, seo-data, webm-converter (с исходным кодом Python)KnowledgeController::index() — возврат статического Blade-шаблона без запроса к БД$knowledgeStaticPages (7 записей) + $knowledgeSubPages (21 запись) в web.phpipdby@185.66.69.200:/home/ipdby/public_html/views/default/content/page/pageArticlesCategoryKnowledge//about: breadcrumbs, H1 «Алексей Гапеев — создаю цифровые системы...», Hero, «Кто я», «Что я предлагаю», 8 карточек направлений, 9 карточек доверия, 6 проектов, миссия, CTA, contact-form/about/line: статическая страница «Линия опыта» с 8 карточками услугpageArticlesCategoryAbout/ (23 .tpl файла)$aboutStaticPages (21 запись) + foreach-генерация перед динамическим {category}/researches: статическая страница с 18 направлениями (картинки + ссылки)ResearchesController::show(): проверяет $staticPages перед запросом к articles/solutions: индекс с 7 карточками + 7 детальных страниц, SolutionsController с $staticPages/reviews: 6 карточек отзывов с фильтрацией, 28 кнопок фильтра, 6 секций single-feedback, галерея 38 изображений с lightbox (lightbox-plus-jquery.js)/cases: 28 карточек с чистыми slug (old format: show-case-aleksey → aleksey)cases-contact-form.blade.phpCasesController: $staticPages массив slug + fallback на БДpublic/pdf/2025-cases-alexey-gapeev.pdf/services + 10 категорий: ai, branding, design, engineering, marketing, photo, programming, seo, site, context/services/video + подкатегории video-postproduction, video-productionServicesController: $staticPages — 46 записейpublic/files/ipd-portfolio.pdf (119 МБ)feedback-modal, send-message, services-faq-video, send-message-video, send-message-solutions, cases-contact-formnth-child(7) в анимацию fadeInItem (десктопное меню)ipdby_ipdhost=127.0.1.30, charset=utf8mb4, collation=utf8mb4_unicode_ci