Завдання
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 днів. Допишемо, коли буде.
Помилки і що винесли





