$ show kanriapp/kanri
Kanri is an offline-first Kanban board desktop application built with Tauri (Rust backend) and Nuxt (Vue 3 frontend). It manages boards, columns, and cards with rich features including drag-and-drop, tags, due dates, subtasks, rich text descriptions, custom backgrounds, and multiple themes (dark, light, Catppuccin, custom). Data is persisted locally via Tauri's plugin-store as a single JSON file, with no cloud dependency. The application supports importing from Trello, KanbanElectron, GitHub Projects, and Kanri's own format, as well as full/partial export. It includes a sidebar for pinned boards, keyboard shortcuts, zoom adjustments, and a comprehensive settings page. The architecture is a monolith: the frontend runs in a WebView, communicating with the Rust backend via Tauri commands for file system access, dialogs, window state, and autostart. State management uses Pinia stores with debounced auto-save. The project is in maintenance mode, accepting only small fixes and no AI-generated contributions.
The LLM identified 6 files worth highlighting for reuse:
A generic modal component with backdrop blur, keyboard (Escape/Enter) handling, click-outside-to-close, and optional animation toggling. It is self-contained, uses slots for content and actions, and can be extracted into any Vue 3 project with minimal changes.
A set of color manipulation functions (hex validation, lightening, darkening, contrast calculation) with Zod schema validation for hex strings. Pure functions with no framework dependencies, easily reusable in any TypeScript project needing color operations.
Immutable sorting functions for board objects (alphabetical, by lastEdited, by createdAt) using generics. No external dependencies, pure functional style, and can be reused for any array of objects with those properties.
A robust array manipulation utility for drag-and-drop operations, providing functions to move, remove, and insert items in an array. It handles edge cases (empty source, same index) and returns a new array, making it framework-agnostic and reusable for any drag-and-drop reordering need.
A Vue 3 input component for hex color values that automatically prefixes '#' and validates the input while typing. It is self-contained, uses v-model, and can be easily extracted into any Vue project needing color input.
A thin wrapper around Radix Vue's Tooltip that adds an optional animation toggle based on a prop. It is a self-contained component that can be reused across any Vue 3 project using Radix Vue, demonstrating clean separation of animation logic.