Роботи / Агенти і ботиробота на відкритий бриф

Stackline: дошка задач для команди, якою керують із Claude і ChatGPT

Що було

Dodil шукав заміну Trello на своїй хмарі: дошку для малої команди, якою можна керувати з Claude і ChatGPT через MCP, із ролями, журналом змін і такою структурою, щоб будь-хто скопіював її до себе однією командою. Судять за робочим кодом у публічному репозиторії, у таблиці балів 30 за ядро і ролі, 25 за MCP, 20 за код, 15 за екстри, 10 за поліровку.

Що зробили

Зібрали Stackline на FastAPI поверх хмари Dodil: дошки, списки, картки з номерами, перетягування, ролі власник, учасник, спостерігач, журнал «було і стало». Один MCP-ендпоінт із 28 інструментами і трьома командами, OAuth із PKCE. Інструмент set_up_board робить дошку з однієї фрази. Дві версії за два дні, 47 тестів, деплой через CI Dodil на кожен пуш.

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

Живий сайт із трьома демо-входами без реєстрації, відкритий код під MIT, жива перевірка 11 з 11 на справжній базі і моделях Dodil. Перша версія отримала від власника 3 зірки, і за даними обходу це максимум, який він ставив. Хмара коштувала 0 $: тариф Free із жорсткою стелею.

ЗамовникDodil, відкритий бриф на Freelancer
Моя рольРозбір брифу, архітектура, код, тести, дизайн, тексти заявки. Реєстрація в Dodil, вхід у CLI і всі «так» на публікацію за Дмитром
СтатусПодано дві роботи, перша отримала 3 зірки від власника, підсумки після 19.11.2026
Результат47 тестів у другій версії, жива перевірка 11 з 11 на справжній базі DataK3 · Відкрити
Відхилено: перша версія у стилі газети. Красиво, але суддя впирався в реєстрацію, демо-входів не було, Claude підключався лише після ручного схвалення. 3 зірки
Відхилено: перша версія у стилі газети. Красиво, але суддя впирався в реєстрацію, демо-входів не було, Claude підключався лише після ручного схвалення. 3 зірки
Прийнято: головна другої версії. «Tell Claude the goal. Get the board.», три демо-входи і підказка, як підключити Claude. Потрогати можна за хвилину
Прийнято: головна другої версії. «Tell Claude the goal. Get the board.», три демо-входи і підказка, як підключити Claude. Потрогати можна за хвилину

Завдання

Dodil, хмара для застосунків із власною базою, входом, моделями і CI, відкрив бриф на заміну Trello: дошка для команди з трьох-п’яти людей, якою керують із Claude і ChatGPT через MCP. Умови: ролі, журнал змін, жодних зовнішніх ключів OpenAI чи Anthropic, і структура, яку будь-хто копіює до себе однією командою «ремікс». Здається одне посилання на публічний репозиторій, судять за робочим кодом.

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

Навіщо і яка ідея

Перша версія йшла по таблиці балів із брифу. Стартовий репозиторій закривав приблизно третину ядра, головний ризик сидів у «воротах» ремікса. Тож спершу ядро, потім MCP, потім екстри: чекліст із картки від ШІ, пошук схожих карток за смислом, денна сводка, «що блокує запуск» по ланцюжку, автопозначка прострочки.

Другу версію визначив незалежний огляд. Він зійшовся на тому, що три зірки поставлені не за код: суддя не міг нічого потрогати за дві хвилини. Живе посилання впиралось у реєстрацію, демо-входів не було, Claude підключався лише після ручного схвалення клієнта в нашому пулі. Газета з готичним заголовком читалась як арт-проєкт, а не шаблон платформи. І ми виявились одним із шести схожих рішень з тими самими таблицями і 24-26 інструментами, тож «26 інструментів» перестали бути аргументом.

Звідси план: спершу доступ, потім один наскрізний сценарій «дошка з фрази», потім обличчя. Свідомо відмовились від коментарів, міграцій схеми і гонитви за числом тестів.

Хід роботи

Коли Що відбувалося
День 1, ранок Розбір брифу і правил, план. Ядро локально на заглушках: дошки, списки, картки, ролі, журнал, 26 MCP-дій, веб із перетягуванням, екстри. 24 тести. Автоперевірка безпеки знайшла 2 дірки, закрили, тестів 26
День 1, день Дмитро зареєструвався в Dodil і ввійшов у CLI. Стартер ремікснутий, таблиці замінені на наші, CI задеплоїв. Жива перевірка на справжній базі і моделях 9 із 9
День 1, день MCP перевірений так, як підключається Claude: OAuth через пул, вхід Дмитра, 4 фрази з брифу, чужа дошка не видна. Дизайн «Картотека» відхилений, зроблена газета з нічним випуском
День 1, вечір Репозиторій публічний, перша робота подана. Того ж дня власник поставив 3 зірки без коментаря
День 2, ранок Огляд від п’яти незалежних радників у ролі власника і суддів Dodil: кожен читав бриф, наш код і 10 публічних робіт конкурентів
День 2, день Друга версія: set_up_board, дошка-приклад, публічне демо на три ролі зі скиданням, MCP-команди і позначки інструментів. Три варіанти дизайну, Дмитро обрав A. 47 тестів, жива перевірка 11 з 11
День 2, вечір Код запушений, CI зелений, демо-користувачі створені Дмитром. Друга робота подана. Ліміт робіт на одну заявку вичерпаний

Чим робили

Python і FastAPI, легкий DDD: шар domain із правилами ролей, application зі спільними сценаріями, infrastructure із DataK3, входом і моделями, і дві «двері», web і mcp, які кличуть ті самі сценарії. Близько 1 900 рядків у app/ і 800 рядків тестів.

Дані в DataK3, хмарній базі Dodil поверх DuckDB: 7 таблиць із schema.sql, журнал змін із полями «було» і «стало». Вхід через пул користувачів appid за шлюзом: підроблений заголовок в обхід шлюзу отримує 401. Claude підключається по OAuth із DCR і PKCE, для Claude і ChatGPT зареєстровані свої клієнти без кроку ручного схвалення. ШІ лише з Dodil Models: чат kimi-k2.7-code і ембедінги jina-embeddings-v4 з кешем по картці, зовнішніх ключів у проєкті немає.

MCP: один ендпоінт /mcp, 28 інструментів-дій і три команди через слеш: /standup, /plan_my_week, /unblock. Кожен інструмент позначений «тільки читання» або «змінює чи видаляє», тому Claude перепитує перед видаленням. set_up_board збирає дошку з фрази: строки відраховані назад від дати запуску, зв’язки «blocked by» розставлені.

Запуск на Ignite, деплой через Dodil Git CI на кожен пуш: тест, збірка, деплой, перевірка ремікса. Порожній ремікс не порожній: нова копія відкриває дошку-приклад із прострочкою, ланцюжком блокерів і історією, а на демо є кнопка скидання, щоб наступний суддя не побачив розгром від попереднього.

Результат

Живий сайт: головна «Tell Claude the goal. Get the board.», три демо-входи, власник, учасник і спостерігач, і підказка, як підключити Claude. Дошка з перетягуванням, номерами карток, прострочкою червоним краєм і «waits on #4», пошук, «My plate», «Overdue», денна сводка і журнал дій. Чужу дошку не видно ні за номером, ні за назвою, ні через пошук, однаково на сайті і в Claude.

Цифри: 24 тести в першій збірці, 27 у першій поданій роботі, 47 у другій. Жива перевірка на справжньому бакеті DataK3 і моделях Dodil 9 із 9, потім 11 з 11. CI: test, build, deploy, remix пройдені. Перша робота отримала 3 зірки, і за даними обходу власник не ставив більше нікому: по 3 зірки у 7 робіт із 43.

Слабкі місця, чесно. Повний ремікс у чужу організацію не прогнаний: на Free одна організація має лише один пул користувачів, тестова копія впала на цьому ліміті. Підключення саме у веб-версії Claude не перевірене, перевірений той самий протокол своїм клієнтом і Claude Code. ChatGPT зареєстрований як клієнт, але вживу в ChatGPT не ганяли.

Чого ми поки не знаємо: підсумки. Власник обирає після закриття брифу, судить до 30 днів. Допишемо, коли буде.

Помилки і що винесли

Суддя оцінює те, що встиг потрогати за дві хвилини.Три зірки першій версії поставлені не за код. Демо-входи, дошка-приклад і перший рядок заявки «що виправлено по ваших 3 зірках» важливіші за ще десяток функцій.
Номер видаленої картки діставався новій разом з історією.А застаріле збереження дошки повертало видаленого учасника. Знайшла автоперевірка безпеки до публікації. Номери більше не перевикористовуються, учасники, списки і дошки пишуться окремо.
Модель kimi-k2.6 відповідала 28-40 секунд на коротку сводку при ліміті запиту 60 секунд в Ignite. Перейшли на kimi-k2.7-code, зазвичай 2-7 секунд, але Free після кількох викликів підряд віддає 429. Тому план дошки в Claude складає сам Claude, а Dodil Models кличе лише веб-сторінка.
Ремікс стартера приносить таблиці стартера, а `schema.sql` виконується лише при створенні бакета. Порожні таблиці довелось видалити і створити свої руками.
DataK3 працює на DuckDB: DATE повертається як timestamp, а `at` виявилось зарезервованим словом. У документації Dodil цього немає.
`dodil data connect` друкує токен сесії прямо в рядку підключення.Легко випадково вставити в лог або чат. Працювали так, щоб токен нікуди не пішов, а історію комітів перед публікацією перевірили на секрети.

Інструменти

PythonFastAPIDodil DataK3Dodil appidDodil IgniteDodil ModelsMCP (OAuth, DCR, PKCE)pytestClaude Code