Усі проєкти Власний продукт

FreightIQ

Калькулятор, який показує перевізнику, чи заробить він на рейсі Європою — після палива, толів і годин, які водієві дозволено бути за кермом.

Моя роль
Ідея, дизайн, код
Термін
Кілька тижнів
Стек
HTML, CSS, vanilla JS
Статус
Живий, у розробці
Інтерфейс калькулятора FreightIQ

Звідки взялася задача

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

Кожна з цих трьох відповідей десь існує. Але жодної немає в одному місці, і жодну не отримати швидко. Саме цей розрив і закриває FreightIQ.

Що він рахує

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

Маршрути можна зберігати й порівнювати до трьох поруч, а будь-який результат експортується в PDF, щоб надіслати клієнту.

Найважче: толи

Саме тут пішла більшість часу, і варто пояснити чому — бо складність тут не технічна.

Єдиного способу брати плату з вантажівок у Європі не існує. Німеччина бере за кілометр, і ставка залежить від кількості осей та екокласу. Нідерланди за кілометр не беруть узагалі — там погодинна віньєтка Eurovignette. Швейцарія рахує за тонно-кілометри. Змоделювати це все чесно означало б набір даних більший за сам калькулятор, який ще треба тримати актуальним по 28 юрисдикціях.

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

Але важливіше інше: калькулятор нікому не навʼязує мої числа. Толи можна ввести трьома способами: сумою за рейс, власною ставкою €/км або лишити довідкову як запасний варіант. Диспетчер, який знає, скільки насправді коштує Польща, вводить своє число й отримує правильну відповідь незалежно від моєї таблиці.

Висновок, який я звідси виніс: коли предметна область опирається точному моделюванню, чесний хід — не імітувати точність. Треба зробити припущення видимим і дати користувачеві спосіб його обійти.

Як влаштований код

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

Кілька рішень, які я повторив би й на клієнтському проєкті: увесь динамічний контент будується через createElement і textContent, а не innerHTML, а введені користувачем посилання проходять білий список протоколів — тож набраний текст ніколи не стане розміткою. Ввід прощає помилки: кома працює як десятковий роздільник, а транзитні країни приймаються і кодами, і українськими назвами. Весь інтерфейс поважає prefers-reduced-motion, а результат озвучується через aria-live, щоб зчитувач екрана промовив перерахований показник.

Перевірка на практиці

Показав людині, яка тримає фірму міжнародних перевезень. Вердикт: корисно — але ставки толів для Польщі неточні.

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

Що далі

Проєкт у розробці, і я радше перелічу, чого бракує, ніж вдаватиму, що він завершений: