Кейс · клієнтський проєкт

Скільки насправді коштує кожна надрукована книжка

клієнтський проєкт · Next.js + TypeScript + Vercel Blob · 2026 · у проді

Стартап персоналізованих дитячих книжок друкує кожну книжку на замовлення. У книжки три витрати, які приходять у різний час: генерація ілюстрацій ШІ, друк і доставка. Я зробила закритий дашборд, де одна книжка – це один рядок, а підсумки, структура витрат і графіки оновлюються одразу після збереження. Цілий тираж додається однією формою, у таблиці є пошук, фільтри й експорт у CSV. Від задачі до живого дашборда минув один день.

1 день
від задачі до запуску в продакшн
3
статті витрат на кожну книжку: генерація ШІ, друк, доставка
50
книжок можна додати одним збереженням форми
0
сторонніх бібліотек для графіків
01

Задача

Кожна книжка в цьому стартапі унікальна: ілюстрації генерує ШІ, друк замовляють поштучно або невеликим тиражем, потім книжку везуть клієнту. Гроші за одну книжку йдуть у три різні місця і в різний час, тому справжню собівартість доводилося складати вручну після кожного замовлення друку.

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

  • Клієнт: стартап персоналізованих дитячих книжок із друком на замовлення. Назву не розкриваю, скріни зроблено на знеособлених даних
  • Формат: закритий вебзастосунок для команди, вхід за паролем
  • Строк: перша робоча версія в продакшні в день постановки задачі, далі доопрацювання за відгуками
  • Роль: усе сама – модель даних, дизайн, фронтенд і API, зберігання, вхід, графіки, мобільна версія, розгортання
02

Усі витрати на одному екрані

Нагорі – підсумки, нижче – графік і структура витрат. Усе перераховується одразу після збереження рядка.

Огляд дашборда: плитки підсумків, графік витрат за днями місяця і структура витрат за категоріями
Огляд. Плитки підсумків, графік за днями з розбивкою в підказці і структура витрат. Дані знеособлені.
Плитки підсумків
Усього витрачено, генерація ШІ, друк, доставка і середня вартість однієї книжки. Під загальною сумою – скільки книжок і скільки з них зразків.
Графік
За місяцями або за днями вибраного місяця. У підказці над стовпчиком – сума, розбивка на генерацію, друк і доставку та кількість книжок.
Структура витрат
Три смуги з часткою кожної статті від загальної суми. Одразу видно, що найбільше з'їдає друк.
03

Цілий тираж однією формою

Один рядок – одна надрукована книжка: дата і номер замовлення друку, назва, позначка «зразок», генерація, друк і доставка в доларах, формат, розмір і папір. Сума за книжку рахується ще до збереження.

Для тиражу є поле «кількість»: вказуєте, скільки однакових книжок, і форма додає стільки окремих рядків, кожен можна потім виправити. Дата, номер, ціни й параметри підставляються з попереднього запису, тож між книжками зазвичай змінюється тільки назва.

Форма додавання книжки: дата, номер замовлення, назва, генерація, друк, доставка, формат, розмір, папір і кількість
Нова книжка. Форма з полем «кількість»: одне збереження додає три окремі рядки.
04

Будь-яке замовлення за секунди

Таблиця замовлень має пошук за назвою або номером, фільтри за місяцем і точною датою та перемикач «усі / зразки / клієнтські». Над таблицею видно, скільки рядків знайдено і на яку суму. Усе вивантажується в CSV.

Кнопки видалення в рядках нема, щоб ніхто не стер запис випадково. Видалити можна тільки з режиму редагування і після підтвердження, а кожне збереження робить знімок даних, з якого можна відкотитися.

Таблиця замовлень із пошуком, фільтрами за місяцем і датою та перемикачем усі, зразки, клієнтські
Усі замовлення. Фільтр за датою: 12 рядків із 63 і сума за ними.
05

Зручно і з телефона

Замовлення друку часто вносять не за комп'ютером. На телефоні плитки стають у дві колонки, форма – в одну, а рядки таблиці перетворюються на картки, де кожна витрата підписана.

Мобільна версія дашборда: огляд, форма додавання і картки замовлень
Мобільна версія. Огляд, форма і таблиця, де рядки стали картками.
06

Цифри і стек

Назву стартапу і назви книжок не розкриваю. Усі цифри нижче – про дашборд, а не про бізнес клієнта.
МетрикаЗначенняЩо це означає
Від задачі до запуску1 деньДашборд запрацював у продакшні в день постановки задачі
Статей витрат3Генерація ШІ, друк і доставка, кожна з часткою від загальної суми
Книжок за одне збереженнядо 50Тираж додається одразу, кожна книжка окремим рядком
Фільтри таблиці4Пошук, місяць, точна дата і «усі / зразки / клієнтські»
Знімок данихна кожне збереженняБудь-яку зміну можна відкотити вручну
Бібліотек для графіків0Стовпчики й смуги зроблено на чистому CSS, сторінка легка

Джерела: код дашборда, історія розробки

Стек: Next.js 16 (App Router), React, TypeScript, Vercel Blob для даних, вхід за паролем із сесією в cookie з HMAC-підписом, експорт CSV через API-маршрут, графіки на CSS, розгортання на Vercel.

07

Що отримав клієнт

  • Собівартість кожної книжки без ручних підрахунків. Генерація, друк і доставка зведені в один рядок і одну суму
  • Видно, куди йдуть гроші. Підсумки за весь час, графік за місяцями чи днями і частка кожної статті витрат
  • Тираж вноситься одним збереженням. Кількість у формі і підстановка з попереднього запису
  • Зразки окремо від клієнтських книжок. Один перемикач у таблиці і позначка в кожному рядку
  • Дані не загубляться. Видалення тільки з підтвердженням, знімок на кожне збереження, експорт у CSV
  • Доопрацювання після запуску. Фільтри, поле кількості, графік за днями й мобільні картки додано за відгуками команди
08

Що з цього взяти собі

  • Один рядок – одна фізична одиниця. Тоді будь-який підсумок, фільтр і середня вартість рахуються без хитрих формул
  • Вносити дані має бути найпростішою частиною. Якщо вносити довго, таблицю перестають заповнювати, і жоден графік уже не допоможе
  • Видалення ховається глибше. У внутрішньому інструменті випадково стертий рядок коштує дорожче за зайвий клік
  • Перша версія в той самий день. Справжні відгуки команди з'являються тільки тоді, коли вона почала вносити свої замовлення

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

Часті питання

Чи підійде це не для книжок?

Так. Модель тут проста: одна одиниця товару – один рядок із кількома статтями витрат. Так само можна рахувати мерч, друк поліграфії чи будь-яке виробництво малими партіями.

Чому не гугл таблиця?

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

Хто має доступ до даних?

Тільки ті, кому дали пароль. Дані лежать у приватному сховищі на Vercel, а кожне збереження робить знімок, тож будь-яку зміну можна відкотити.

Потрібен внутрішній дашборд – напишіть три речення

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

Наступний кейс EMBODY — магазин під ключ