Реалізація changelog-сторінки (історія оновлень) на сайті

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Реалізація changelog-сторінки (історія оновлень) на сайті
Проста
~2-3 робочих дні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Розроблення сторінки журналу змін з історією оновлень

Журнал змін — це хронологічний список змін продукту: нові функції, улучення, виправлення помилок. Правильно оформлений журнал змін утримує користувачів і зменшує відток — люди бачать, що продукт розвивається.

Структура записи

Кожна запис містить: дату, версію (якщо ПЗ), тип змін, заголовок, опис, іноді скриншот або GIF.

Типи змін: Нове (нова функція), Поліпшено (поліпшення), Виправлено (виправлення помилки), Застаріле (застаріле).

Markdown-файли як джерело даних

Простий підхід — зберігати журнал змін у файлах Markdown у репозиторії:

content/changelog/
├── 2025-03-15.md
├── 2025-02-28.md
└── 2025-01-10.md
---
date: 2025-03-15
version: "2.4.0"
---

## Нове: Інтеграція з Telegram

Тепер ви можете отримувати сповіщення про нові замовлення прямо в Telegram. ...

## Поліпшено: Швидкість завантаження каталогу

Оптимізували запити до бази даних — сторінка каталогу завантажується на 40% швидше.

## Виправлено: Помилка при оплаті через Apple Pay в Safari
// lib/changelog.ts
import fs from 'fs';
import path from 'path';
import matter from 'gray-matter';

export function getChangelogEntries() {
  const dir = path.join(process.cwd(), 'content/changelog');
  return fs.readdirSync(dir)
    .filter(f => f.endsWith('.md'))
    .sort().reverse()
    .map(filename => {
      const raw = fs.readFileSync(path.join(dir, filename), 'utf-8');
      const { data, content } = matter(raw);
      return { ...data, content, slug: filename.replace('.md', '') };
    });
}

Сторінка журналу змін

// app/changelog/page.tsx (Next.js App Router)
export default async function ChangelogPage() {
  const entries = getChangelogEntries();

  return (
    <div className="max-w-2xl mx-auto py-12">
      <h1 className="text-3xl font-bold mb-10">Що нового</h1>
      <div className="space-y-12">
        {entries.map(entry => (
          <article key={entry.slug}>
            <div className="flex items-center gap-3 mb-4">
              <time className="text-sm text-gray-500">
                {new Date(entry.date).toLocaleDateString('uk-UA', { day: 'numeric', month: 'long', year: 'numeric' })}
              </time>
              {entry.version && (
                <span className="text-xs bg-gray-100 px-2 py-0.5 rounded font-mono">v{entry.version}</span>
              )}
            </div>
            <div className="prose prose-sm" dangerouslySetInnerHTML={{ __html: renderMarkdown(entry.content) }} />
          </article>
        ))}
      </div>
    </div>
  );
}

RSS-лента для журналу змін

// ChangelogFeedController
public function rss(): Response
{
    $entries = ChangelogEntry::latest('published_at')->take(20)->get();

    $xml = view('feeds.changelog-rss', compact('entries'))->render();
    return response($xml)->header('Content-Type', 'application/rss+xml');
}

Розсилка по електронній пошті при публікації

// Коли запис публікується — відправка підписникам
public function handle(ChangelogEntryPublished $event): void
{
    $subscribers = ChangelogSubscriber::all();
    foreach ($subscribers->chunk(100) as $chunk) {
        Mail::to($chunk->pluck('email'))->queue(new ChangelogDigestMail($event->entry));
    }
}

Часовий графік

Сторінка журналу змін з Markdown-джерелом, RSS-лентою та підпискою по email: 2 робочих дні.