Kanbeasy is an ultra simple, local-first kanban-style task organizer built with React, TypeScript and Vite. It focuses on a minimal UI, keyboard and touch-friendly drag-and-drop, and a small but useful feature set (resizable columns, dark mode, configurable card density). The app stores data locally by default and aims to be a lightweight alternative for personal task management.
There is a companion VS Code extension available that integrates Kanbeasy into the editor: vscode-kanbeasy
Included below are the notable changes from the project's CHANGELOG.md.
Planned and upcoming features are listed in the project's ROADMAP.md.
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
Currently, two official plugins are available:
- @vitejs/plugin-react uses Babel for Fast Refresh
- @vitejs/plugin-react-swc uses SWC for Fast Refresh
This project uses Vitest.
npm testnpm run test:watchThere is a trivial smoke test insrc/smoke.test.tsto verify the setup.
Playwright is configured to start Vite automatically and run Chromium, Firefox, and WebKit projects.
- Run all e2e tests:
npm run e2e - Open the UI Test Runner:
npm run e2e:ui - View the last HTML report:
npm run e2e:report
To run against a deployed environment, set E2E_BASE_URL to the site URL. For GitHub Pages in this repo:
E2E_BASE_URL=https://darrenjaworski.github.io/kanbeasy npm run e2eArtifacts (HTML reports and videos) are ignored via .gitignore.
If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
export default tseslint.config([
globalIgnores(["dist"]),
{
files: ["**/*.{ts,tsx}"],
extends: [
// Other configs...
// Remove tseslint.configs.recommended and replace with this
...tseslint.configs.recommendedTypeChecked,
// Alternatively, use this for stricter rules
...tseslint.configs.strictTypeChecked,
// Optionally, add this for stylistic rules
...tseslint.configs.stylisticTypeChecked,
// Other configs...
],
languageOptions: {
parserOptions: {
project: ["./tsconfig.node.json", "./tsconfig.app.json"],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
]);You can also install eslint-plugin-react-x and eslint-plugin-react-dom for React-specific lint rules:
// eslint.config.js
import reactX from "eslint-plugin-react-x";
import reactDom from "eslint-plugin-react-dom";
export default tseslint.config([
globalIgnores(["dist"]),
{
files: ["**/*.{ts,tsx}"],
extends: [
// Other configs...
// Enable lint rules for React
reactX.configs["recommended-typescript"],
// Enable lint rules for React DOM
reactDom.configs.recommended,
],
languageOptions: {
parserOptions: {
project: ["./tsconfig.node.json", "./tsconfig.app.json"],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
]);
]);