3.7 KiB
3.7 KiB
Changelog
All notable changes to this project will be documented in this file.
[0.2.0] - 2026-01-04
Added
- Label Management System: Complete redesign of label/tag management with color filtering
- Added
Labelmodel to Prisma schema with centralized database storage- Fields: id, name, color, userId, createdAt, updatedAt
- Color field supports 10 pastel colors (default, red, orange, yellow, green, teal, blue, purple, pink, gray)
- Created
LabelContextfor global state management with React Context API- Provides labels array and loading state
- Exposes functions: addLabel, updateLabel, deleteLabel, getLabelColor, refreshLabels
- Added
useLabelshook for easy access to label functionality - Implemented full CRUD API for labels (GET, POST, PUT, DELETE)
/api/labels- GET all labels, POST create new label/api/labels/[id]- GET specific label, PUT update, DELETE remove
- Updated all components to use the new context instead of localStorage
- New Components:
LabelBadge- Reusable component for displaying label badges- 3 variants: default, filter, clickable
- Automatic color display via context
- Optional remove button (X icon)
LabelSelector- Dropdown for selecting labels in note input- Shows count of selected labels
- Uses LabelBadge for each option
LabelFilter- Filter interface with color and label selection- Color filter: 10 color buttons with label count per color
- Label filter: Checkbox list of all labels
- Clear all button to reset filters
- Color Filtering:
- Filter notes by label color via URL parameter
?color=blue - Shows number of labels per color
- Highlights selected color with ring effect
- Automatically filters label list when color is selected
- Filter notes by label color via URL parameter
- Updated Components:
note-input.tsx- Added LabelSelector for label selection during note creationnote-card.tsx- Uses LabelBadge to display labels on notesnote-editor.tsx- Uses LabelBadge to display labels in editorheader.tsx- Added selectedColor and onColorFilterChange propsheader-wrapper.tsx- Manages color filtering via URL paramspage.tsx- Filters notes by selected label colorlayout.tsx- Wraps app with LabelProvider
- Added
Fixed
- Tests: Fixed Playwright drag-and-drop tests to work with dynamically generated note IDs
- Changed selectors from hardcoded text (
text=Note 1) to flexible attribute selectors ([data-draggable="true"]) - Updated matchers from
toContain('Note')to regex patternstoMatch(/Note \d+/)to handle unique IDs with timestamps - Replaced UI-based cleanup with API-based cleanup using
request.delete()for more reliable test cleanup
- Changed selectors from hardcoded text (
Database
- Cleaned up 38 accumulated test notes from database using MCP memento tool
- Retained only essential notes: "test" and 2x "New AI Framework Released"
- Added migration
20260104203746_add_labels_tablefor new Label model
Technical Details
-
Label Management:
- Labels now stored in database with colors, eliminating localStorage duplication
- All label operations are centralized through LabelContext
- Automatic synchronization across all components
- Better performance with single source of truth
- Support for user-specific labels (userId field for future auth)
-
Tests:
- The drag-and-drop functionality itself was working correctly
- The issue was in Playwright tests which expected exact text matches but notes were created with unique IDs (e.g.,
test-1767557327567-Note 1) - Tests now properly handle the dynamic note generation system
[Previous Versions]
See individual commit history for earlier changes.