Save and apply complex Content Manager queries with one click. Professional bookmark management with role-based sharing, advanced filtering, and drag-and-drop organization for Strapi v5.
Professional interface for managing query bookmarks with statistics and easy access.
Create bookmarks with emoji, name, description, and sharing options directly from Content Manager.
Build complex queries with the advanced filter modal for precise content filtering.
Seamless integration - MagicMark button right in the Content Manager toolbar for instant bookmark access.
- Features
- Quick Start
- How It Works
- Screenshots in Action
- API Routes
- Configuration
- Use Cases
- Testing
- Troubleshooting
- Development
β
Query Bookmarks - Save complex Content Manager filters, sorts, and pagination
β
One-Click Apply - Instantly restore entire query states
β
Emoji Identification - Visual icons for quick bookmark recognition
β
Pin to Top - Keep frequently used bookmarks always accessible
β
Drag & Drop - Reorder bookmarks effortlessly
β
Mobile Optimized - Fully responsive design
β
Role-Based Sharing - Share with specific admin roles
β
User Sharing - Share with individual admin users
β
Public Bookmarks - Make bookmarks visible to all users
β
Permission Control - Fine-grained access management
β
Quick Access - Bookmark button in Content Manager toolbar
β
Filter Preview - See exactly what's saved in each bookmark
β
Descriptions - Add notes to remember bookmark purpose
β
Context Aware - Automatically detects current content type
β
Instant Save - Capture current query state in one click
β
Professional UI - Beautiful gradient design with smooth animations
β
5 Languages - English, Deutsch, FranΓ§ais, EspaΓ±ol, PortuguΓͺs
β
Auto-Detection - Follows your Strapi admin language
β
Complete i18n - All UI elements translated
npm install strapi-plugin-magic-mark
# or
yarn add strapi-plugin-magic-markAdd to src/config/plugins.ts (or plugins.js):
export default () => ({
'magic-mark': {
enabled: true,
},
});# Rebuild admin panel
npm run build
# Start Strapi
npm run develop- Go to Admin β MagicMark
- Click "Activate License"
- Choose: Auto-create, Manual entry, or Existing key
- Done! Plugin is ready
- Navigate to any Content Manager collection
- Apply filters, sorting, or search
- Click the MagicMark button in the toolbar (see screenshot above)
- Click "Save Bookmark"
- Add:
- Name (e.g., "Published Articles")
- Emoji (e.g., π°)
- Description (optional)
- Sharing settings (optional)
- Click Save
- Click MagicMark β Select bookmark β Done!
- All filters are instantly applied
- Share with team members
User in Content Manager
β
Applies: Filters, Sort, Search, Pagination
β
[Click MagicMark Button] (See "Quick Access" screenshot)
β
"Save Bookmark" Modal opens (See "Save as MagicMark" screenshot)
β
User enters: Name, Emoji, Description, Sharing
β
[Save]
β
Query parameters captured:
- Path: /content-manager/collection-types/api::article.article
- Query: filters[$and][0][publishedAt][$notNull]=true&sort[0]=createdAt:desc
- Pagination: page=1&pageSize=25
β
Bookmark stored in database
β
Success! Bookmark appears in Dashboard (See "Dashboard" screenshot)
User clicks MagicMark button
β
List of available bookmarks appears
(filtered by user permissions)
β
[User selects bookmark]
β
Navigation to content type happens
β
Query parameters applied:
- Filters restored (See "Advanced Filters" screenshot)
- Sort order set
- Pagination reset
- Search cleared
β
Content Manager displays filtered results
The main MagicMark Dashboard (see first screenshot above) shows:
- All your bookmarks with emoji icons
- Pinned bookmarks at the top
- Quick actions: Edit, Delete, Share
- Search and filter capabilities
- Beautiful gradient design
The Quick Access button (see screenshot above) is integrated directly into:
- Content Manager toolbar
- Appears on all collection pages
- One-click access to bookmarks
- Context-aware (shows relevant bookmarks)
The Save Bookmark Modal (see screenshot above) includes:
- Name field with emoji picker
- Description for notes
- Sharing options (Roles, Users, Public)
- Preview of current query
- Visual feedback
The Advanced Filter Builder (see screenshot above) lets you:
- Build complex filter conditions
- Combine AND/OR logic
- Save multi-level queries
- Preview filter results
- Edit existing filters
All routes require valid JWT authentication (except public bookmarks).
GET /api/magic-mark/bookmarks
Response:
{
"data": [
{
"id": 1,
"attributes": {
"name": "Published Articles",
"emoji": "π°",
"description": "Recent published content",
"path": "/content-manager/collection-types/api::article.article",
"query": "filters[$and][0][publishedAt][$notNull]=true",
"isPinned": true,
"isPublic": false,
"createdAt": "2024-01-15T10:30:00Z"
}
}
],
"meta": { "count": 5 }
}POST /api/magic-mark/bookmarks
Authorization: Bearer JWT_TOKEN
Request:
{
"data": {
"name": "Draft Posts",
"emoji": "π",
"description": "Unpublished drafts",
"path": "/content-manager/collection-types/api::article.article",
"query": "filters[0][publishedAt][$null]=true",
"isPublic": false,
"sharedWithRoles": [1, 2],
"sharedWithUsers": [3]
}
}PUT /api/magic-mark/bookmarks/:id
Authorization: Bearer JWT_TOKENDELETE /api/magic-mark/bookmarks/:id
Authorization: Bearer JWT_TOKENPOST /api/magic-mark/bookmarks/reorder
Authorization: Bearer JWT_TOKEN
Request:
{
"bookmarkIds": [3, 1, 5, 2, 4]
}The plugin works out of the box with zero configuration!
// src/config/plugins.ts
export default () => ({
'magic-mark': {
enabled: true,
},
});export default () => ({
'magic-mark': {
enabled: true,
config: {
// Maximum bookmarks per user
maxBookmarksPerUser: 50,
// Enable query history
enableHistory: true,
// Auto-cleanup old queries (days)
autoCleanupDays: 90,
},
},
});Published Articles π°
Filter: publishedAt is not empty
Sort: createdAt DESC
Result: Quick access to all published content
Draft Posts π
Filter: publishedAt is empty AND status = "draft"
Sort: updatedAt DESC
Result: Focus on work in progress
Recent Updates π
Filter: updatedAt >= 7 days ago
Sort: updatedAt DESC
Result: See what changed recently
My Content π€
Filter: createdBy = current user
Sort: createdAt DESC
Result: See all your creations
Shared Queries π₯
- Team members access same filtered views
- No need to re-apply complex filters
- Everyone sees consistent data
Role-Based Access π
- Editors see different bookmarks than Authors
- Managers see different views than Contributors
- Automatic based on admin roles
Public Bookmarks π
- Common queries for entire team
- New members immediately see them
- Save time explaining filters
Complex Filters π―
Save multi-condition queries:
- Status = "approved"
- Category IN ["tech", "news"]
- Priority >= "high"
- CreatedAt >= "2024-01-01"
Sorted Views π
Different sort orders for different needs:
- By date (newest first)
- By title (A-Z)
- By popularity (most viewed)
# Install in your Strapi project
npm install strapi-plugin-magic-mark
# Add to config/plugins.ts
# Rebuild admin
npm run build- Go to Content Manager β Any collection
- Apply some filters
- Click MagicMark button (see screenshot)
- Save with name "Test Bookmark" and emoji π§ͺ
- Verify it appears in dashboard
- Clear all filters
- Click MagicMark β Select "Test Bookmark"
- Verify filters are restored correctly
- Create bookmark
- Share with specific role
- Login as user with that role
- Verify bookmark is visible
- Use Advanced Filter Builder (see screenshot)
- Create complex multi-condition filter
- Save as bookmark
- Apply and verify all conditions work
Problem: No MagicMark button in Content Manager toolbar (see screenshot for where it should be).
Solutions:
- Rebuild admin:
npm run build - Clear browser cache (Cmd+Shift+R / Ctrl+Shift+R)
- Check plugin is enabled in config
- Check browser console for errors (F12)
Problem: Click "Save Bookmark" but bookmark doesn't appear in dashboard.
Solutions:
- Check Strapi logs for errors
- Verify license is activated
- Check database is writable
- Try creating simpler bookmark first
Problem: Select bookmark but filters don't apply.
Solutions:
- Refresh page and try again
- Check Content Manager path matches bookmark
- Try creating new bookmark
- Clear browser localStorage
Problem: Complex filters from advanced builder don't apply correctly.
Solutions:
- Check filter syntax in bookmark
- Try simpler filter first
- Verify content type supports the filters
- Check browser console for errors
# Watch mode - rebuilds on file changes
npm run watch
# Link to local Strapi
npm run watch:link
# Type checking
npm run test:ts:front # Frontend TypeScript
npm run test:ts:back # Backend TypeScript
# Verify plugin
npm run verifymagic-mark/
βββ admin/ # React admin UI
β βββ src/
β βββ components/
β β βββ BookmarkList.tsx
β β βββ SaveBookmarkModal.tsx
β β βββ BookmarkCard.tsx
β β βββ AdvancedFilterBuilder.tsx
β βββ pages/
β β βββ App.tsx
β β βββ HomePage.tsx (Dashboard - see screenshot)
β β βββ LicensePage.tsx
β βββ hooks/
β βββ translations/ # i18n (5 languages)
β βββ index.ts
βββ server/ # Backend (TypeScript)
β βββ src/
β βββ bootstrap.ts
β βββ controllers/
β βββ services/
β βββ routes/
β βββ content-types/
βββ pics/ # Screenshots
β βββ dashboard.png
β βββ saveAsMagicMark.png
β βββ advancedFilters.png
β βββ quickaccesinContentmanager.png
βββ .github/workflows/ # CI/CD
βββ package.json
βββ .releaserc.json
βββ README.md
# Build plugin
npm run build
# Verify integrity
npm run verify
# Release (automatic via GitHub Actions)
# Just use semantic commits:
git commit -m "feat: add new feature" # β MINOR version
git commit -m "fix: fix bug" # β PATCH version
git commit -m "feat!: breaking change" # β MAJOR versionThis plugin uses semantic-release for automated versioning.
# PATCH version (bug fix)
git commit -m "fix: correct bookmark save"
# MINOR version (new feature)
git commit -m "feat: add bookmark export"
# MAJOR version (breaking change)
git commit -m "feat!: change API format"GitHub Actions automatically:
- Analyzes commits
- Bumps version
- Updates CHANGELOG
- Publishes to NPM
- Creates GitHub release
Contributions are welcome!
- Fork: https://github.com/Schero94/Magicmark
- Create branch:
git checkout -b feature/amazing - Commit:
git commit -m "feat: add amazing feature" - Push:
git push origin feature/amazing - Open Pull Request
- NPM Package: https://www.npmjs.com/package/strapi-plugin-magic-mark
- GitHub: https://github.com/Schero94/Magicmark
- Issues: https://github.com/Schero94/Magicmark/issues
- Changelog: CHANGELOG.md
MIT License - Free for personal & commercial use
Copyright (c) 2025 Schero D.
See LICENSE for full terms
- π¬π§ English - Global standard
- π©πͺ Deutsch - German (DACH region)
- π«π· FranΓ§ais - French
- πͺπΈ EspaΓ±ol - Spanish (Spain & Latin America)
- π΅πΉ PortuguΓͺs - Portuguese (Brazil & Portugal)
Language automatically follows your Strapi admin interface setting.
Built with β€οΈ for the Strapi community.
Special thanks to:
- Strapi team for the amazing CMS
- Community contributors
- All users providing feedback
Made with π by Schero D.



