feat: add web UI, query engine, session management, and 20 E2E tests
- Web UI: login, dashboard, links CRUD, collections, API keys, admin pages - Query engine: AND/OR/XOR with field filters, tag search, preview endpoint - Session management: token expiry detection, 401 interceptor, expiry banner - Links search: tags included, multi-word AND, query mode with set operations - Collections: static/dynamic, query builder with preview, public tree view - Save as Collection: convert search results (static) or query (dynamic) - Dashboard stats: resilient loading with allSettled pattern - Login page: redesigned with public collections tree view - Bug fix: query executor None fields crash (notes/description/url/title) - E2E tests: 20 Playwright tests covering all critical user flows - All 104 tests passing (84 unit/integration + 20 E2E)
This commit is contained in:
@@ -16,6 +16,53 @@ LinkSyncServer replaces the need for workarounds in existing bookmark sync solut
|
||||
|
||||
## Features
|
||||
|
||||
### Web Interface
|
||||
|
||||
The application includes a modern, responsive web interface with:
|
||||
|
||||
#### Authentication & Session Management
|
||||
- **Login page** with credential validation
|
||||
- **Session expiry detection** - automatically redirects to login when tokens expire
|
||||
- **Proactive expiry warnings** - shows countdown when session is about to expire (<2 minutes)
|
||||
- **Graceful logout** - clears local storage and redirects to login
|
||||
|
||||
#### Dashboard
|
||||
- **Quick stats** - displays total links, collections, and API keys (always shows numbers, never `-`)
|
||||
- **Quick actions** - one-click navigation to create links, collections, or API keys
|
||||
- **Admin section** - visible only to admin users for user management
|
||||
|
||||
#### Links Page
|
||||
- **Dual search modes**:
|
||||
- **Simple mode**: Keyword search across title, URL, description, notes, and tags
|
||||
- **Query mode**: Full set operations with AND, OR, XOR, NOT, parentheses, and field filters
|
||||
- **Multi-word search**: Space-separated terms are AND-matched (all terms must be present)
|
||||
- **Tag search**: Tags are included in both simple and query searches
|
||||
- **Save as Collection**: Convert current search results or query into a collection:
|
||||
- **Static**: Saves the current result set as a fixed collection
|
||||
- **Dynamic**: Saves the query expression for live, auto-updating results
|
||||
- **Full CRUD**: Create, edit, and delete links with all Firefox bookmark fields
|
||||
|
||||
#### Collections Page
|
||||
- **Collection cards** - displays name, description, type, and visibility
|
||||
- **Static collections**: Manually managed link sets
|
||||
- **Dynamic collections**: Query-based with live preview:
|
||||
- **Query builder UI** - input field for query expressions
|
||||
- **Preview button** - shows matching links before saving
|
||||
- **Result count** - displays number of matches
|
||||
- **Query expression display** - shows saved query on collection cards
|
||||
- **Public/Private toggle** - controls visibility to other users
|
||||
|
||||
#### API Keys Page
|
||||
- **Create API keys** for browser extension sync
|
||||
- **View active keys** with creation dates
|
||||
- **Delete keys** to revoke access
|
||||
|
||||
#### Admin Page
|
||||
- **User management** - create, edit, delete users
|
||||
- **Role assignment** - admin or regular user roles
|
||||
- **System statistics** - overview of links, collections, users
|
||||
- **Audit log** - track all changes
|
||||
|
||||
### Collections
|
||||
|
||||
Two types of collections:
|
||||
|
||||
Reference in New Issue
Block a user