О проекті — агрегатор авіаквитків для португальського ринку. Потрібна оптимізація продуктивності ключових сторінок сайту.
⚠️ Важно: По даній задачі вже велась робота. Необхідно проаналізувати проект, вивчити що вже зроблено і що залишилося доробити, перш ніж приступати до виконання.
Технічна інформація
- Framework: Next.js 14 (App Router)
- Хостинг: Vercel
- Архітектура: Монорепозиторій для всіх доменів (80 доменів, в середньому 2 мови на домен)
- Docker & Redis: Потрібно розгорнути на нашому окремому сервері (сервер є, налаштування просте)
- CDN: Cloudflare
- Масштаб: Тисячі сторінок для SSG генерації
- Геолокація API: Вже інтегровано
- Документація: Є в проекті
Що потрібно зробити
1. Убрати всі помилки
0 runtime/console помилок і варнінгів на сторінках:
- Home
- Flights
- Cheap Flights Anywhere
- Destinations (всі рівні: континенти, країни, міста)
2. Мінімізувати початкову вагу сторінки
Всі опціональні компоненти (календар, модали, мобільне/десктоп-меню тощо) повинні догружатися тільки за дією користувача.
Мета: зменшити розмір початкового бандла і прискорити завантаження сторінки.
3. Оптимізувати файли міст і країн
Є 2 великих JSON файли з даними міст і країн (великого розміру, потребують оптимізації):
/data/cities/data/countries
Потрібно:
- Налаштувати завантаження цих файлів через Docker і Redis
- Забезпечити швидку доставку даних на сторінки
- Не включати ці JSON в загальний клієнтський бандл
4. Реалізувати SSG для сторінок Destinations
⚠️ Важно: Потрібно попередньо обговорити архітектуру, оскільки в майбутньому там же будемо зберігати всі countries і cities для всіх доменів на всіх мовах.
Що потрібно реалізувати:
Реалізувати SSG (Static Site Generation) для сторінок Destinations
- Генерувати статичні сторінки для всіх маршрутів
- Налаштувати SSG для континентів/країн/міст
API запити в SSG для динамічного контенту
- Сторінки динамічні і потребують підгрузки контенту
- При SSG: спочатку брати місто з домену (наприклад, Лісабон для tickets.pt)
- При відвідуванні сторінки користувачем: брати його поточну локацію (функціонал визначення локації вже реалізовано)
Критерії приймання
Цільові метрики продуктивності (Google PageSpeed Insights):
- Сторінки міст і країн: Зелена зона (обов'язково)
- Головна сторінка: Зелена зона (мета), допустима жовта зона
Поточний стан: Website Performance Index в червоній зоні
Підтвердження, що:
✅ Всі помилки усунені — 0 console помилок і варнінгів на вказаних сторінках
✅ Опціональні компоненти переведені на догрузку — календарі, модали, меню завантажуються тільки за дією користувача
✅ JSON міст і країн оптимізовані — дані завантажуються через Docker і Redis, не потрапляють в клієнтський і серверний бандл
✅ SSG налаштований для Destinations — статичні сторінки генеруються з урахуванням локації з домену, з можливістю динамічної підгрузки по геолокації користувача
✅ Performance метрики досягнуті — зелена зона на сторінках міст/країн, мінімум жовта на головній
Що очікуємо від виконавця
- Аналіз поточного стану — оцінка обсягу робіт, вивчення вже виконаного
- Пропозиція архітектури для SSG сторінок Destinations (пункт 4)
- Поетапна реалізація з звітністю по задачам
- Тестування на всіх вказаних сторінках
- Документація по внесеним змінам
Умови роботи
Оплата: 12 USD на годину
Формат роботи:
- Звітність по задачам
- Код-рев'ю обов'язково (проводить CTO)
- Комунікація в процесі роботи
Вимоги:
- Досвід з Next.js 14 App Router
- Досвід роботи з Docker, Redis, Cloudflare CDN
- Знання SSG і оптимізації продуктивності
- Досвід роботи з монорепозиторіями
- Розуміння метрик Google PageSpeed Insights
- Підписання NDA обов'язково
Терміни і наступні кроки
Просимо вказати:
- Коли готові приступити
- Оцінку часу на виконання (в годинах)
- Досвід роботи з подібними задачами
Готові обговорити деталі, надати доступ до репозиторію і відповісти на питання!