You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Merge pull request #71 from Roznoshchik/preact-app-frontend
Tags Management & SQLAlchemy 2.0 Cleanup
This PR adds a complete Tags management UI and modernizes the SQLAlchemy relationship patterns across the
codebase.
Features
Tags Management UI
- New Tags page with list view, filters, search, and pagination
- TagCard component with color indicator and article/highlight counts
- TagEditModal with rename, archive toggle, and delete functionality
- Inline tag creation from Combobox dropdown in all modals
Combobox Enhancements
- onCreate prop for inline tag creation
- "Create [query]" option appears when no exact match exists
- Escape key closes dropdown only (not parent modal)
- Fixed spacebar selecting instead of typing
QuillEditor
- Added markdown paste support
- Added H1-H6 header formatting options
Backend Improvements
SQLAlchemy 2.0 Patterns
- Removed lazy="dynamic" from Article.tags, Article.highlights, Highlight.tags, and Tag relationships
- Added selectinload with archived tag filtering to eliminate N+1 queries
- Standardized to_dict pattern: id = integer PK, uuid = string UUID
Data Model Consolidation
- Merged Topic into Tag with dual-write support
- Added backfill migration to populate Tags from existing Topics
- Standardized API routes to use UUID (articles, highlights, tags)
Tags API
- POST /tags now unarchives existing archived tags instead of failing
- Improved query performance with proper eager loading
Other Changes
- Toggle switch CSS class for checkbox inputs
- Icon component passes through onClick and other props
- Removed legacy Topic-related tests
- Code formatting with Biome
0 commit comments