Skip to content

Repository files navigation

Taskiii

Taskiii

Десктопный таск-менеджер для Windows: kanban-доски, подзадачи как полноценные задачи, календарь, focus-таймер и rich-описания с картинками и таблицами.

Без облака, без аккаунтов, без подписки — данные лежат в SQLite у тебя на диске.

Version CI Electron React TypeScript SQLite Tests License

Kanban-доска Taskiii с колонками Backlog, В работе и Готово

⚡ Что внутри

Полноценный десктоп-таск-менеджер уровня Linear / Todoist / Things — но локальный. Ни одного сетевого запроса: ни телеметрии, ни синхронизации, ни аккаунта.

  • 🗂️ Проекты с настраиваемыми kanban-досками — drag-and-drop карточек и самих колонок, дефолтный шаблон Backlog · В работе · Готово
  • 🌳 Подзадачи — это полноценные задачи со своим описанием, приоритетом, дедлайном, тегами, вложениями и активити-логом. Прогресс виден на родительской карточке, при 100% — карточка зеленеет
  • 📝 Rich-описания — картинки прямо в тексте (Ctrl+V скриншота), GFM-таблицы, чеклисты, код-блоки. Хранится markdown, поэтому поиск и экспорт работают по описанию
  • 🖼️ Просмотр вложений внутри приложения — зум и панорама для картинок, встроенный PDF-вьюер, плееры для видео и аудио, предпросмотр текста
  • 📅 Календарь месяц/неделя с drag-and-drop переноса дедлайнов и панелью задач без срока
  • Quick Add (Ctrl+N) с разбором строки: купить молоко завтра 18:00 #дом !срочно
  • 📥 Smart Lists — Сегодня (вместе с просрочкой) и Предстоящее, поверх всех проектов
  • 🔁 Повторяющиеся задачи — ежедневно / будни / неделя / месяц
  • 🍅 Focus-таймер (Pomodoro) с привязкой к задаче и прогрессом в заголовке окна
  • 🎨 Кастомная тема — светлая и тёмная, 8 пресетов акцента + free-form HSL picker
  • 🔍 Полнотекстовый поиск (SQLite FTS5) через Ctrl+K — по заголовкам и описаниям
  • 📤 JSON-экспорт проекта и 💾 ежедневный бэкап БД (хранится 7 дней)

🖼️ Скриншоты

Rich-описание: картинка в тексте, таблица, чеклист, подзадачи

Детальное представление задачи: тулбар редактора, вставленная картинка, GFM-таблица

Календарь и «Сегодня»

Календарь с переносом дедлайнов Сегодня, включая просрочку
Календарь на месяц с задачами и панелью «Без срока» Smart-лист «Сегодня» с блоком просроченных задач

Quick Add и поиск

Разбор строки в Quick Add Полнотекстовый поиск через Ctrl+K
Quick Add разбирает дату, время, тег и приоритет из одной строки Командная палитра с подсветкой найденных фрагментов
Светлая тема Та же доска в светлой теме

📥 Установка (Windows)

Скачать готовый билд из Releases:

Файл Размер Описание
Taskiii-1.3.0-x64.exe 104 MB NSIS-инсталлятор (рекомендуется)
Taskiii-1.3.0-portable.exe 104 MB Portable single-exe, без установки
Taskiii-1.3.0-x64.zip 140 MB Распаковать и запустить

Про предупреждение Windows. Билды не подписаны сертификатом, поэтому при первом запуске SmartScreen скажет «Неизвестный издатель». Нажмите «Подробнее» → «Выполнить в любом случае». Подпись стоит денег и для локального приложения без сети ничего не проверяет по сути — исходники здесь целиком, можно собрать самому (pnpm build:win).

Данные хранятся в %APPDATA%\taskflow\ независимо от способа установки, так что переустановка и переход с portable на инсталлятор ничего не теряют.

Что изменилось в версии — в CHANGELOG.md.


🧑‍💻 Разработка

Требуется Node.js ≥ 22.13 и pnpm 11 (этого требует сам pnpm — версия зафиксирована в packageManager). На Windows нужны Visual Studio Build Tools для native-модулей (better-sqlite3, sharp).

# Клонировать
git clone https://github.com/Uronakiii/taskiii.git
cd taskiii

# Установить зависимости (postinstall пересобирает native-модули под Electron)
pnpm install

# Запустить dev-режим (HMR через electron-vite)
pnpm dev

# Прогнать тесты
pnpm test

# Собрать production-бандл в out/
pnpm build

# Собрать инсталляторы Windows в release/
pnpm build:win

Как ведётся репозиторий

  • main — стабильно: pnpm typecheck и pnpm test зелёные
  • CI на GitHub Actions прогоняет typecheck и тесты на каждый push и PR в main
  • feat/* — фичи, chore/* — обслуживание, вливаются через PR
  • Дизайн-документы больших фич лежат в docs/superpowers/specs/ — там зафиксированы развилки и критерии приёмки до начала кода
  • Скриншоты в README пересобираются одной командой:
pnpm build && pnpm screenshots

scripts/screenshots.mjs поднимает собранное приложение с подменённым appData, засеивает демо-проекты через тот же IPC, что и UI, снимает кадры по CDP и удаляет временную базу. Реальная база не открывается — её контрольная сумма сверяется до и после прогона, расхождение валит скрипт.


🏗️ Архитектура

┌──────────────────────────────────────────────────────────────┐
│ Main process (Node.js + TypeScript)                          │
│ ─────────────────────────────────────                        │
│ • IPC handlers с zod-валидацией                              │
│ • Services (Project / Task / Tag / Attachment / …)           │
│ • Repository слой (better-sqlite3)                           │
│ • taskiii:// — привилегированная схема для вложений          │
│ • Файловое хранилище (FS для >5MB)                           │
│ • Ежедневный snapshot БД                                     │
└────────────────────┬─────────────────────────────────────────┘
                     │ contextBridge (preload.ts, sandbox: true)
                     │ window.api.invoke<Channel>(input)
                     ▼
┌──────────────────────────────────────────────────────────────┐
│ Renderer process (Chromium + React)                          │
│ ─────────────────────────────────────                        │
│ • React 18 + Vite + Tailwind                                 │
│ • Zustand (UI state) + TanStack Query (cache)                │
│ • @dnd-kit (kanban + calendar drag)                          │
│ • Tiptap + marked/turndown (markdown ↔ HTML)                 │
│ • cmdk (палитра Ctrl+K)                                      │
│ • Framer Motion (drawer)                                     │
└──────────────────────────────────────────────────────────────┘

Описание задачи хранится как markdown в tasks.description_md: так его напрямую индексирует FTS5 и забирает экспорт. Редактор — Tiptap, поэтому на каждом открытии и сохранении описание проходит через renderer/src/lib/markdown.ts (marked в одну сторону, turndown + GFM в другую).

Байты вложений не ходят через IPC как base64: renderer получает taskiii://attachment/<id>, а main отдаёт их из BLOB или с диска. Один и тот же URL работает и для <img> в описании, и для встроенного PDF-вьюера, и для fetch текстового предпросмотра.

Стек

Слой Технология
Оболочка Electron 33 + electron-vite
UI React 18, TypeScript 5, Tailwind, shadcn-style
State Zustand + TanStack Query
DnD @dnd-kit
Редактор Tiptap + ProseMirror (Image, Link, Table)
Markdown marked + turndown + turndown-plugin-gfm
БД SQLite (better-sqlite3) + миграции из кода
Картинки sharp (генерация thumbnail)
Контракты zod (одна правда для main и renderer)
Тесты Vitest
Сборка electron-builder (NSIS / portable / zip)

⌨️ Горячие клавиши

Действие Шорткат
Quick Add Ctrl + N
Командная палитра / поиск Ctrl + K
Помощь / справка ?
Переключить тему Ctrl + Shift + T
Закрыть drawer / диалог Esc
Новая задача в первой колонке N
Отправить комментарий Ctrl + Enter
Вставить скриншот в описание Ctrl + V
Листать вложения во вьюере /

📦 Структура

src/
├── main/                 # Electron main process
│   ├── ipc/              # IPC хендлеры (тонкие — валидация + диспетч)
│   ├── services/         # Бизнес-логика (Project, Task, Attachment, ...)
│   ├── db/               # Schema, миграции, seed
│   ├── lib/              # paths, errors, id, recurrence
│   ├── protocol.ts       # taskiii:// — отдача байтов вложений
│   └── index.ts          # Window + жизненный цикл
├── preload/              # contextBridge bridge
├── renderer/             # React app
│   └── src/
│       ├── components/
│       │   ├── board/         # Kanban доска
│       │   ├── calendar/      # Calendar view
│       │   ├── task-detail/   # Drawer, редактор, тулбар, вьюер вложений
│       │   ├── sidebar/
│       │   ├── smartlist/     # Today / Upcoming
│       │   ├── quick-add/     # Quick Add modal
│       │   ├── pomodoro/
│       │   ├── theme/
│       │   ├── command-palette/
│       │   └── ui/            # Shared UI primitives
│       ├── hooks/        # useShortcuts, ...
│       ├── stores/       # Zustand
│       ├── lib/          # api, queries, markdown, quick-add-parse, nlp-date, export
│       └── App.tsx
└── shared/
    └── ipc-contracts.ts  # zod-схемы + типы IPC

resources/                # Иконка и логотип
docs/
├── screenshots/          # Скриншоты для README
├── superpowers/specs/    # Дизайн-документы фич
├── research/             # Research notes
└── qa/                   # Manual QA checklist
tests/                    # Vitest unit tests
electron.vite.config.ts
electron-builder.yml

🧪 Тесты

pnpm test          # один прогон
pnpm test:watch    # watch-режим
pnpm typecheck     # tsc по main + renderer, проходит без ошибок

88 unit-тестов. Покрыто: markdown round-trip (таблицы, картинки, чеклисты, вложенные списки), разбор строки Quick Add (даты, время, теги, приоритеты), NLP-парсер русских дат, правила повторов, форматирование дат.

QA checklist для ручного smoke-теста — в docs/qa/CHECKLIST.md.


🔒 Приватность и хранение

  • ❌ Облака нет, аналитики нет, телеметрии нет
  • ✅ Всё лежит локально в %APPDATA%\taskflow\
  • ✅ Ежедневный snapshot БД в %APPDATA%\taskflow\backups\ (последние 7)
  • sandbox: true, contextIsolation: true, nodeIntegration: false
  • ✅ CSP запрещает inline-script
  • ✅ В ОС уходят только http/https/mailtoblob:, data: и file: наружу не передаются
  • taskiii:// отдаёт только вложения по id из БД: путь к файлу никогда не берётся из URL

📜 Лицензия

MIT — см. LICENSE.


Taskiii · by Ilya Usachev

Сделано с ☕ и упорством

About

Десктопный таск-менеджер для Windows: kanban-доски, подзадачи как полноценные задачи, календарь, focus-таймер, rich-описания с картинками и таблицами. Локально в SQLite — без облака, аккаунтов и подписки. Electron + React + TypeScript.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages