--- tags: - сайт - страница - проекты - p1 url: /projects approach: Кастомная страница + новая сущность Projects в БД effort: ~12ч (бэкенд + фронтенд) created: 2026-02-17 --- # 🏗️ Галерея проектів > [!tip] Роль страницы > Самый мощный trust-сигнал для high-ticket покупателя. Человек видит реальный дом с фасадом — сразу понимает масштаб, цвет, текстуру. «Такое же, как у меня». > [!warning] Реализация > **Кастомная страница** — нужны новые сущность `Project` в БД и API-эндпоинты. > Фронтенд: masonry grid + lightbox + страница отдельного проекта. --- ## Мета-данные | Поле | Значение | |---|---| | **H1** | `Проєкти з фасадною плиткою GoodBrick` | | **Title** | `Фото проєктів — Фасади з плиткою та цеглою GoodBrick` | | **Description** | `Реальні проєкти з фасадною плиткою GoodBrick: котеджі, будинки, комерційні об'єкти. Фото до та після, використані матеріали, місто.` | | **Schema** | `CollectionPage` + `ImageObject` per project | | **isIndexable** | true | --- ## Макет сторінки (wireframe) ``` ┌──────────────────────────────────────────────────────────────────┐ │ GoodBrick Каталог Про нас Ціни Ще КОНТАКТИ │ ├──────────────────────────────────────────────────────────────────┤ │ │ │ Проєкти з фасадною плиткою GoodBrick │ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ │ │ │ │ │ │ │ │ [фото] │ │ [фото] │ │ [фото] │ │ │ │ │ │ (вищий) │ │ │ │ │ │ Одеса · 850м²│ │ │ │ Київ · 200м² │ │ │ └──────────────┘ │Хмельн.·450м²│ └──────────────┘ │ │ └──────────────┘ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ [фото] │ │ │ │ [фото] │ │ │ │ (вищий) │ │ [фото] │ │ │ │ │ │ │ │ │ │ │ │ │ │ Одеса · 120м²│ │ … │ │ … │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │ │ │ ┌─────────────────── STICKY BANNER ─────────────────────────┐ │ │ │ Хочете такий фасад? [Замовити безкоштовний зразок →] │ │ │ └───────────────────────────────────────────────────────────┘ │ │ │ │ ── СТОРІНКА ПРОЕКТУ /projects/{slug} ────────────────────────── │ │ │ │ Breadcrumb: Головна › Проєкти › Котеджне містечко, Одеса │ │ │ │ # Котеджне містечко, Одеса │ │ Приватний будинок · 850 м² · 2024 │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ [фото 1] │ │ [фото 2] │ │ [фото 3] │ │ [фото 4] │ … │ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │ │ │ Комбінація травертину та фасадної плитки. Для стриманішого │ │ вигляду було прибрано помаранчеві акценти… │ │ │ │ Використані матеріали: │ │ ┌────────────────────────┐ ┌────────────────────────┐ │ │ │ Колір Граніт · Khvylia │ │ Колір Охра · Standart │ │ │ │ → /product/hranit │ │ → /product/okhra │ │ │ └────────────────────────┘ └────────────────────────┘ │ │ │ │ ╔══════════════════════════════════════════╗ │ │ ║ Замовити матеріали для схожого проекту ║ │ │ ╚══════════════════════════════════════════╝ │ │ │ │ ── FOOTER ──────────────────────────────────────────────────── │ │ GoodBrick │ Каталог │ Інфо │ Контакти │ Соцмережі │ └──────────────────────────────────────────────────────────────────┘ ``` --- ## Бэкенд — новая сущность ### Entity `Project` ```csharp // GBSite.Data/Entities/Project.cs public class Project { public int Id { get; set; } public string Title { get; set; } // «Котеджне містечко Одеса» public string Slug { get; set; } // «kotedzhne-mistechko-odesa» public string Description { get; set; } // 100–300 слов о проекте public string City { get; set; } // «Одеса» public string ObjectType { get; set; } // «Приватний будинок» / «Комерційний об'єкт» public int? AreaSqm { get; set; } // 850 (кв.м. фасада) public string ImageUrls { get; set; } // JSON array ["url1", "url2"] public string ProductColorSlugs { get; set; } // JSON array ["shokolad", "okhra"] public bool IsPublished { get; set; } public DateTime CreatedAt { get; set; } } ``` ### API эндпоинты ``` GET /api/projects → list (только IsPublished=true, desc по дате) GET /api/projects/{slug} → detail (public) POST /api/projects → create (admin) PUT /api/projects/{id} → update (admin) DELETE /api/projects/{id} → delete (admin) ``` --- ## Фронтенд — листинг /projects ### Компонент `ProjectsGallery` ``` app/(site)/projects/page.tsx components/projects/projects-gallery.tsx ``` **Верстка:** - Masonry grid (3 колонки desktop / 2 tablet / 1 mobile) - Каждая карточка: главное фото + overlay с «{Місто}, {кв.м.}» - При наведении — подпись + кнопка «Детальніше» - Lightbox при клике на фото (библиотека `yet-another-react-lightbox`) **Без фильтров при запуске** — добавить позже когда проектов >10. --- ## Фронтенд — страница проекта /projects/{slug} ``` app/(site)/projects/[slug]/page.tsx ``` **Структура страницы:** 1. **Шапка:** H1 (название) + мета (город, тип объекта, площадь, год) 2. **Галерея:** masonry / slideshow из фото проекта + lightbox 3. **Описание:** текст о проекте, задачах, решениях 4. **Использованные материалы:** карточки-ссылки на product-страницы - «Колір Шоколад, поверхня Khvylia» → `/product/shokolad` 5. **CTA:** «Замовити такі самі матеріали» → Telegram / каталог **SEO:** динамические metadata + Schema.org `Article` / `ImageObject` --- ## Контент на запуск (3–5 проектов-заготовок) Заполнить реальными проектами (если есть фото) или создать «демо»-проекты из имеющихся live-фото: | # | Название | Город | Тип | Площадь | Материал | |---|---|---|---|---|---| | 1 | {Назва від клієнта} | Одеса | Приватний будинок | {кв.м.} | {колір/поверхня} | | 2 | {Назва від клієнта} | Хмельницький | Приватний будинок | {кв.м.} | {колір/поверхня} | | 3 | {Назва від клієнта} | Київ | Комерційний об'єкт | {кв.м.} | {колір/поверхня} | > [!important] Данные для проектов > Лучше 3 реальных проекта с реальными фото, чем 10 невнятных. Если нет согласия клиента — «Приватний будинок, Одеса» без имени. --- ## Конверсия На странице листинга: - **Sticky баннер снизу**: «Хочете такий фасад? Замовте безкоштовний зразок» На странице проекта: - **CTA после галереи**: «Замовити матеріали для схожого проекту» → Telegram - **Ссылки на продукты** — внутренняя перелинковка на карточки товаров --- ## Зависимости - Библиотека `yet-another-react-lightbox` — установить через npm - Опционально: `react-masonry-css` для masonry grid (или CSS columns) --- ## Scope cuts | Убрано | Причина | |---|---| | Фильтры по городу / типу объекта | Добавить когда проектов >10 | | 360° просмотр | Сложно технически, добавить Q2 | | «До/После» слайдер | Нет фото «до», добавить с новыми проектами | | Карта с пинами проектов | Добавить Q2 | --- ## Связанные страницы - [[00 — Обзор и приоритеты]] - [[01 — Главная]] - [[05 — Блог]]