# Згенерувала 495 сторінок досягнень трьома мовами з експорту SQLite лише для читання, де адресу сторінки авторовано як дані, тож виправлення речення більше не пересувало сторінку й не ламало посилання.

серпень 2026

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

**Завдання.** Вебсайт мав генерувати свій вміст із бази даних як вхідні дані збирання, з адресами сторінок, що переживають переписування речень на них.

**Дія.** Експортер читає базу даних лише для читання й пише по одній сторінці на досягнення на мову — 495 сторінок — плюс дані таксономії та послуг, потрібні шаблонам. Він використовує лише стандартну бібліотеку, тож збирання сайту не залежить від середовища генератора, а закомічений вивід означає, що сайт збирається самостійно. Найбільш наслідкове рішення в ньому стосується адрес. Раніше сайт виводив URL сторінки з перших слів її англійського твердження, тож виправлення речення мовчки переносило сторінку й ламало кожне посилання на неї — сайт, чиїм аргументом на власну користь є те, що він виправляє речі, штрафував себе мертвим посиланням щоразу, коли це робив. Адресу тепер створюють як дані: по одному рядку на адресу на досягнення, перша є поточною, а кожна наступна є відставленою адресою, яку сайт видає як перенаправлення. З тієї самої роботи записано ще дві пастки. Порівняння періоду з текстовим стовпчиком мовчки збіглося з усіма тридцятьма двома рядками через те, як база даних призначає спорідненість типів у порівнянні. І перелік мов тепер є єдиною віссю, з якої виводять і цикл запису, і файли даних, і запити, тож додати четверту мову — це один запис у відображенні, а не пошук.

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

---

- Роль: Інженер з тестування та якості
- Категорії: [Frontend‑розробка](https://engineer.company/uk/categories/frontend/), [Веброзробка](https://engineer.company/uk/categories/web-development/), [Бази даних](https://engineer.company/uk/categories/databases/), [SQL](https://engineer.company/uk/categories/sql/), [Пайплайни даних (ETL/ELT)](https://engineer.company/uk/categories/data-pipelines/), [Python](https://engineer.company/uk/categories/python/), [Інтернаціоналізація](https://engineer.company/uk/categories/i18n/)
- Послуги: [Розробка вебсайтів та CMS](https://engineer.company/uk/services/web-development/), [Інтернаціоналізація та локалізація](https://engineer.company/uk/services/i18n-localization/), [Розробка пайплайнів даних (ETL/ELT)](https://engineer.company/uk/services/data-pipeline-development/), [Бренд, маркетинг та SEO](https://engineer.company/uk/services/brand-marketing/)

<https://engineer.company/uk/portfolio/generated-321-achievement-pages-from-a-sqlite-export-132/>
