A Vue 3 application for managing scrum notes with drag-and-drop functionality and IndexedDB storage.
- Title Management: Create, edit, and delete scrum titles
- TODO Items: Add, reorder, and complete TODO items under each title
- Drag-and-Drop: Reorder titles and TODO items using vue-draggable-next
- IndexedDB Storage: All data persists locally using IndexedDB
- Filter/Search: Filter titles by text search
- Delete Mode: Select and delete multiple titles and items
- Responsive Design: Clean, unstyled HTML components
- Framework: Vue 3 with Composition API
- Language: TypeScript
- Build Tool: Vite
- State Management: Pinia
- Database: IndexedDB via
idblibrary - Drag & Drop: vue-draggable-next
- Routing: Vue Router
- Testing: Vitest + Vue Test Utils
- Node.js 18+
- npm or yarn
# Install dependencies
npm install
# Start development server
npm run dev
# Build for production
npm run build
# Preview production build
npm run preview
# Run tests
npm run test
# Run tests with UI
npm run test:ui
# Lint code
npm run lintsrc/
├── components/
│ ├── common/
│ │ ├── TodoItem.vue # Reusable TODO item component
│ │ ├── DraggableIcon.vue # Drag handle icon
│ │ ├── CompletedIcon.vue # Completion status toggle
│ │ └── DeleteButton.vue # Delete button
│ ├── home/
│ │ ├── TitleCard.vue # Individual title display card
│ │ └── TitleList.vue # Filtered list of titles
│ └── edit/
│ ├── ChildrenList.vue # Draggable TODO items list
│ └── EmptyTodo.vue # New TODO input placeholder
├── views/
│ ├── HomeView.vue # Main page with search and list
│ ├── EditView.vue # Edit page for titles and items
│ └── DeleteView.vue # Delete page for multi-select deletion
├── stores/
│ ├── notes.ts # Pinia store for state management
│ └── notes.test.ts # Store unit tests
├── services/
│ ├── database.ts # IndexedDB operations
│ └── database.test.ts # Database service tests
├── types/
│ └── index.ts # TypeScript type definitions
├── router/
│ └── index.ts # Vue Router configuration
├── App.vue
└── main.ts
interface TodoItem {
id: number; // Unique identifier
parentId: number; // 0 for titles, parent ID for children
index: number; // Display order
completed: boolean; // Completion status
text: string; // Item text
createdAt: Date; // Creation timestamp
completedAt?: Date | null; // Completion timestamp (optional)
}- Add Title: Enter text in the input box and click "Add"
- Filter: Enter text to filter displayed titles
- Edit Title: Click the ✏️ icon to edit a title
- View Items: Click the title or expand (▼/▲) to see TODO items
- Reorder Titles: Drag using the ⠿ handle to reorder titles
- Delete Mode: Click 🗑️ to go to delete page
- Select Items: Check boxes for titles and children
- Title Checkbox: Enabled only when all children are completed (✅)
- Child Checkboxes: Toggle individual children
- Delete Button: Click 🗑️ to delete selected items
- Navigate Home: Click 🏠 to return to home page
- Edit Title: Modify the title text directly
- Complete Items: Click ◻️ to complete, ✅ for completed
- Reorder Items: Drag items using the ⠿ handle
- Delete Items: Click 🗑️ or clear text to remove
- Add Items: Type in the empty TODO field and press Enter
- Delete Title: Click 🗑️ to delete title and all children
- Navigate Home: Click 🏠 to return to home page
- Select Items: Check boxes for titles and their completed children
- Title Checkbox: Only enabled when all children are completed (✅)
- Child Checkboxes: Toggle individual completed children
- Delete Button: Click 🗑️ to delete selected items (shows count)
- Navigate Home: Click 🏠 to return to home page
- Database Name:
scrum-notes-db - Store:
todos - Indexes:
parent-id,created-at
- Create component in appropriate directory under
src/components/ - Import and use in views
- Add styles as needed
# Run all tests
npm run test
# Run with coverage
npm run test -- --coverage
# Run specific test file
npm run test -- notes.test.ts
# Run tests with UI
npm run test:ui# Run lint check
npm run lint
# Lint with auto-fix
npm run lint -- --fix# Production build
npm run build
# Preview build
npm run previewMIT